]> www.infradead.org Git - users/hch/xfstests-dev.git/commitdiff
qa tests for parentptr stuff
authorTim Shimmin <tes@sgi.com>
Tue, 24 May 2005 04:00:32 +0000 (04:00 +0000)
committerTim Shimmin <tes@sgi.com>
Tue, 24 May 2005 04:00:32 +0000 (04:00 +0000)
on irix
Merge of master-melb:xfs-cmds:22663a by kenmcd.

  test if after various vnodeops, dirstress and fsstress that the
  filesystem is still consistent in regards to parentptr EAs

114 [new file with mode: 0755]
114.out [new file with mode: 0644]
115 [new file with mode: 0755]
115.out [new file with mode: 0644]
group

diff --git a/114 b/114
new file mode 100755 (executable)
index 0000000..05e0730
--- /dev/null
+++ b/114
@@ -0,0 +1,459 @@
+#! /bin/sh
+# FS QA Test No. 114
+#
+# Test some parent ptr stuff
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2005 Silicon Graphics, Inc.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Further, this software is distributed without any warranty that it is
+# free of the rightful claim of any third person regarding infringement
+# or the like.  Any license provided herein, whether implied or
+# otherwise, applies only to this software file.  Patent licenses, if
+# any, provided herein do not apply to combinations of this program with
+# other software, or any other product whatsoever.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write the Free Software Foundation, Inc., 59
+# Temple Place - Suite 330, Boston MA 02111-1307, USA.
+#
+# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+# Mountain View, CA  94043, or:
+#
+# http://www.sgi.com
+#
+# For further information regarding this notice, see:
+#
+# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@crackle.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    cd /
+    rm -f $tmp.*
+}
+
+# Example output:
+#
+# ~/attr -Fl a/b/c/d/foo
+# Attribute "0000000000180080 0000000000000001" has a 3 byte value for a/b/c/d/foo
+#
+# ~/attr -Fg "0000000000180080 0000000000000001" a/b/c/d/foo
+# Attribute "0000000000180080 0000000000000001" had a 3 byte value for a/b/c/d/foo:
+# foo
+#
+# ~/attr -Pg "0000000000180080 0000000000000001" a/b/c/d/foo
+# Attribute "0000000000180080 0000000000000001" had a 12 byte value for a/b/c/d/foo:
+# /a/b/c/d/foo
+#
+
+
+_print_names()
+{
+       typeset path
+       path=$1
+
+       echo ""
+       echo "Print out hardlink names for given path, $path"
+       echo ""
+
+       # get out the ea name
+       attr -Fl $path | tee $tmp.attr1
+       cat $tmp.attr1 |\
+       sed -e 's/"//g' |\
+       nawk >$tmp.attr2 '/^Attribute/ { print $2, $3; next }'
+
+       while read ino cnt; do
+               eaname="$ino $cnt"
+
+               # use the ea name to get the filename value
+               attr -Fg "$eaname" $path
+
+               # use the ea name to get the pathname value
+               attr -Pg "$eaname" $path
+       done < $tmp.attr2
+}
+
+_test_create()
+{
+       echo ""
+       echo "Testing create"
+       echo ""
+
+       # Test out some creations
+       cd $SCRATCH_MNT
+       touch file1
+
+       mkdir dir2
+       touch dir2/file2
+
+       mkdir dir2/dir3
+       touch dir2/dir3/file3
+
+       mkdir dir2/dir3/dir4
+
+       p=dir2/dir3/dir4/file4
+       touch $p
+
+       _print_names $p >>$here/$seq.full
+
+       _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/$p
+}
+
+_get_ea_fields()
+{
+       # get out the ea name components for all the hardlinks
+       attr -Fl $1 |\
+       tee -a $here/$seq.full |\
+       sed -e 's/"//g' |\
+       nawk '/^Attribute/ { print $2, $3; next }'
+}
+
+_parent_path()
+{
+       # given: abc/def/ghi/jkl
+       # want:  abc/def/ghi
+       child=$1
+       parent=`echo $child | sed -e 's#/[^/]*$##'`
+
+       # issue of path starting with '/' or not
+        # relatives paths wouldn't and we need to handle this
+       if [ $child = $parent ]; then
+               echo ""
+       else
+               echo $parent
+       fi
+}
+
+#
+# Go thru each component of the hierarchy and compare 
+# inode# from "stat -i" with the ino from the parent EA name
+#
+# So I need to be given a path and go thru compenent by component.
+# e.g. a/b/c/d/e
+# Need to look at: a a/b a/b/c a/b/c/d
+#
+# Also need to do this for all the hardlinks
+#
+_check_parentinos_path()
+{
+        mntpt=$1
+       path=$2
+       parent="$path"
+
+        # representing all the hard links for a particular path
+
+       _get_ea_fields $path |\
+       while read parent_ino cnt; do
+
+               while [ "$parent" != "$mntpt" ]; do
+                       # compare paths
+                       eaname="$parent_ino $cnt"
+                       eavalue=`attr -qPg "$eaname" $parent`
+                       parentrel=`echo $parent | sed -e "s#^$mntpt##"`
+                       if [ "$eavalue" = "$parentrel" ]; then
+                               echo "EA path $eavalue matches on path"
+                       else
+                               $verbose && echo "EA path mismatch on $parentrel: $eavalue"
+                               break # maybe wrong hardlink
+                       fi
+
+                       # compare parent_ino from ea-name with parent-ino from
+                       # actual parent dir using stat
+
+                       parent=`_parent_path $parent`
+                       parent_ino_dec=`printf "%d" 0x$parent_ino` # decimal version (not hex)
+                       stat_ino=`stat -iq $parent`
+
+                       if [ "$parent_ino_dec" = "$stat_ino" ]; then
+                               echo "parent ino $parent_ino_dec matches"
+                       else
+                               echo "parent ino mismatch on $parent: EA=$parent_ino_dec stat=$stat_ino"
+                       fi
+
+
+                       # go onto next subdir up the path
+                       line=`_get_ea_fields $parent`
+                       parent_ino=`echo $line | cut -f1 -d' '`  # 1st field
+                       cnt=`echo $line | cut -f2 -d' '`         # 2nd field
+               done
+       done
+}
+
+_test_symlink()
+{
+       echo ""
+       echo "Testing symlink"
+       echo ""
+
+       d=sym1/sym2/sym3
+       f=$d/sym4_f
+
+       mkdir -p $d
+        ln -s $f symlink1
+       ln symlink1 hlink1
+       ln symlink1 hlink2
+       ln symlink1 hlink3
+       _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/symlink1
+       _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/hlink1
+       _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/hlink2
+       _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/hlink3
+}
+
+#
+# create hardlinks from the same dir
+# and some from different dirs
+#
+# test out removing hardlinks too
+#
+_test_hardlink()
+{
+       echo ""
+       echo "Testing hardlink"
+       echo ""
+
+       d=dir2/dir3/dir4
+       d2=dir2/dir5/dir6
+       mkdir -p $d
+       mkdir -p $d2
+       p=$d/file4
+       touch $p
+
+       # create hardlinks
+       paths="$d/l1 $d/l2 $d/l3 $d2/l4 $d2/l5 $d2/l6"
+       for x in $paths; do
+               ln $p $x
+       done
+
+       _print_names $p >>$here/$seq.full
+
+       echo ""
+       echo "print out names and check after created hardlinks"
+       echo ""
+       for x in $paths; do
+               _print_names $x | tee -a $here/$seq.full
+               _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/$x
+       done
+
+       echo ""
+       echo "now try removing half of the hardlinks"
+       echo ""
+       paths="$d/l1 $d/l2 $d/l3 $d2/l4 $d2/l5 $d2/l6"
+       i=0
+       for x in $paths; do
+               i=`expr $i + 1`
+               j=`expr $i % 2`
+               if [ $j -eq 0 ]; then
+                       echo "rm'ing $x"
+                       rm $x
+               fi
+       done
+
+       echo ""
+       echo "print out names and check after removed hardlinks"
+       echo ""
+       for x in $paths; do
+               if [ -e $x ]; then 
+echo "looking at $x"
+                       _print_names $x | tee -a $here/$seq.full
+                       _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/$x
+               fi
+       done
+
+}
+
+#
+# in dir, file1 to file2 where file2 does not exist
+# in dir, file1 to file2 where file2 does exist 
+# dir/file1 to dir2/file2 where file2 does not exist
+# dir/file1 to dir2/file2 where file2 does exist
+# dir to dir2 where dir2 does not exist
+# dir to dir/dir3 - not allowed
+#
+#
+_test_rename()
+{
+       echo ""
+       echo "Testing rename"
+       echo ""
+
+       echo ""
+       echo "1. in dir, file1 to file2 where file2 does not exist" 
+       echo ""
+       d1=$SCRATCH_MNT/ren1/ren2/ren3/ren4
+       mkdir -p $d1
+       p1=$d1/f1
+       p2=$d1/f2
+       touch $p1
+       mv $p1 $p2
+       _check_parentinos_path $SCRATCH_MNT $p2
+
+       echo ""
+       echo "2. in dir, file1 to file2 where file2 does exist" 
+       echo ""
+       touch $p1
+       mv $p1 $p2
+       _check_parentinos_path $SCRATCH_MNT $p2
+
+       echo ""
+       echo "3. dir/file1 to dir2/file2 where file2 does not exist"
+       echo ""
+       d2=$SCRATCH_MNT/ren1/ren2/ren3/ren5
+       mkdir -p $d2
+       p3=$d2/f3
+       touch $p1
+       mv $p1 $p3
+       _check_parentinos_path $SCRATCH_MNT $p3
+
+       echo ""
+       echo "4. dir/file1 to dir2/file2 where file2 does exist"
+       echo ""
+       d2=$SCRATCH_MNT/ren1/ren2/ren3/ren5
+       p3=$d2/f3
+       touch $p1
+       mv $p1 $p3
+       _check_parentinos_path $SCRATCH_MNT $p3
+
+       echo ""
+       echo "5. dir to dir2 where dir2 does not exist"
+       echo ""
+       d3=$SCRATCH_MNT/ren1/ren2/ren3/ren6
+       mv $d1 $d3
+       _check_parentinos_path $SCRATCH_MNT $d3
+}
+
+_filter_num()
+{
+       tee -a $seq.full |\
+       sed -e 's/[0-9][0-9]* inodes/I inodes/g' \
+           -e 's/[0-9][0-9]* paths/P paths/g' \
+           -e 's/seed = [0-9][0-9]*/seed = S/'
+}
+
+
+_test_fsstress()
+{
+       echo ""
+       echo "Testing fsstress"
+       echo ""
+
+       out=$SCRATCH_MNT/fsstress.$$
+       count=1000
+       args="-z \
+-f rmdir=10 -f link=10 -f creat=10 \
+-f mkdir=10 -f rename=30 -f unlink=10 \
+-f symlink=10 \
+-n $count -d $out -p 3"
+
+       echo "ltp/fsstress $args" | sed -e "s#$out#outdir#"
+       if ! $here/ltp/fsstress $args | _filter_num
+       then
+               echo "    fsstress $args returned $?"
+               cat $tmp.out | tee -a $here/$seq.full
+               status=1
+       fi
+
+       xfs_repair_ipaths -n $SCRATCH_MNT | _filter_num
+       xfs_check_ipaths $SCRATCH_MNT | _filter_num
+}
+
+
+_test_dirstress()
+{
+       echo ""
+       echo "Testing dirstress"
+       echo ""
+
+       out=$SCRATCH_MNT/dirstress.$$
+       count=1000
+
+       if ! mkdir $out
+       then
+           echo "!! couldn't mkdir $out"
+           status=1
+           exit
+       fi
+
+       args="-d $out -f $count -k -p 3 -n 1"
+       echo "src/dirstress $args" | sed -e "s#$out#outdir#"
+       if ! $here/src/dirstress $args >$tmp.out 2>&1 | _filter_num
+       then
+               echo "    dirstress failed"
+               echo "*** dirstress $args" | tee -a $here/$seq.full
+               cat $tmp.out >>$here/$seq.full
+               status=1
+               exit
+       fi
+
+       args="-d $out -f $count -k -p 3 -n 5"
+       echo "src/dirstress $args" | sed -e "s#$out#outdir#"
+       if ! $here/src/dirstress $args >$tmp.out 2>&1 | _filter_num
+       then
+               echo "    dirstress failed"
+               echo "*** dirstress $args" | tee -a $here/$seq.full
+               cat $tmp.out >>$here/$seq.full
+               status=1
+               exit
+       fi
+
+       xfs_repair_ipaths -n $SCRATCH_MNT | _filter_num
+       xfs_check_ipaths $SCRATCH_MNT | _filter_num
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_supported_fs xfs
+_supported_os IRIX
+
+_require_scratch
+
+rm -f $here/$seq.full
+
+echo "mkfs"
+export MKFS_OPTIONS="$MKFS_OPTIONS -i paths=1"
+_scratch_mkfs_xfs >>$here/$seq.full 2>&1 \
+    || _fail "mkfs scratch failed"
+
+echo "mount"
+_scratch_mount >>$here/$seq.full 2>&1 \
+    || _fail "mount failed: $MOUNT_OPTIONS"
+
+# real QA test starts here
+
+verbose=false
+
+# initial testing with scripting and modified attr(1)
+# in order to test parent EAs
+_test_create
+_test_hardlink
+_test_rename
+_test_symlink
+
+# stress testing with verification by parent checking programs
+_test_fsstress
+_test_dirstress
+
+# success, all done
+status=0
+exit
diff --git a/114.out b/114.out
new file mode 100644 (file)
index 0000000..f71596a
--- /dev/null
+++ b/114.out
@@ -0,0 +1,492 @@
+QA output created by 114
+mkfs
+mount
+
+Testing create
+
+EA path /dir2/dir3/dir4/file4 matches on path
+parent ino 1048704 matches
+EA path /dir2/dir3/dir4 matches on path
+parent ino 524416 matches
+EA path /dir2/dir3 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Testing hardlink
+
+
+print out names and check after created hardlinks
+
+
+Print out hardlink names for given path, dir2/dir3/dir4/l1
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000204b80 0000000000000007" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000204b80 0000000000000005" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir3/dir4/l1:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" had a 2 byte value for dir2/dir3/dir4/l1:
+l2
+Attribute "0000000000100080 0000000000000003" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir3/dir4/l1:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir3/dir4/l1:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir3/dir4/l1:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" had a 2 byte value for dir2/dir3/dir4/l1:
+l6
+Attribute "0000000000204b80 0000000000000007" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" had a 2 byte value for dir2/dir3/dir4/l1:
+l4
+Attribute "0000000000204b80 0000000000000005" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir5/dir6/l4
+EA path /dir2/dir3/dir4/l1 matches on path
+parent ino 1048704 matches
+EA path /dir2/dir3/dir4 matches on path
+parent ino 524416 matches
+EA path /dir2/dir3 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Print out hardlink names for given path, dir2/dir3/dir4/l2
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000003" has a 2 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000204b80 0000000000000007" has a 2 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000204b80 0000000000000005" has a 2 byte value for dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir3/dir4/l2:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir3/dir4/l2:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" had a 2 byte value for dir2/dir3/dir4/l2:
+l2
+Attribute "0000000000100080 0000000000000003" had a 18 byte value for dir2/dir3/dir4/l2:
+/dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir3/dir4/l2:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir3/dir4/l2:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir3/dir4/l2:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir3/dir4/l2:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir3/dir4/l2:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir3/dir4/l2:
+/dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" had a 2 byte value for dir2/dir3/dir4/l2:
+l6
+Attribute "0000000000204b80 0000000000000007" had a 18 byte value for dir2/dir3/dir4/l2:
+/dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" had a 2 byte value for dir2/dir3/dir4/l2:
+l4
+Attribute "0000000000204b80 0000000000000005" had a 18 byte value for dir2/dir3/dir4/l2:
+/dir2/dir5/dir6/l4
+EA path /dir2/dir3/dir4/l2 matches on path
+parent ino 1048704 matches
+EA path /dir2/dir3/dir4 matches on path
+parent ino 524416 matches
+EA path /dir2/dir3 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Print out hardlink names for given path, dir2/dir3/dir4/l3
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000003" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000007" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000005" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir3/dir4/l3:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" had a 2 byte value for dir2/dir3/dir4/l3:
+l2
+Attribute "0000000000100080 0000000000000003" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir3/dir4/l3:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir3/dir4/l3:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir3/dir4/l3:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" had a 2 byte value for dir2/dir3/dir4/l3:
+l6
+Attribute "0000000000204b80 0000000000000007" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" had a 2 byte value for dir2/dir3/dir4/l3:
+l4
+Attribute "0000000000204b80 0000000000000005" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir5/dir6/l4
+EA path /dir2/dir3/dir4/l3 matches on path
+parent ino 1048704 matches
+EA path /dir2/dir3/dir4 matches on path
+parent ino 524416 matches
+EA path /dir2/dir3 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Print out hardlink names for given path, dir2/dir5/dir6/l4
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000100080 0000000000000003" has a 2 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000204b80 0000000000000007" has a 2 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000204b80 0000000000000005" has a 2 byte value for dir2/dir5/dir6/l4
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir5/dir6/l4:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir5/dir6/l4:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" had a 2 byte value for dir2/dir5/dir6/l4:
+l2
+Attribute "0000000000100080 0000000000000003" had a 18 byte value for dir2/dir5/dir6/l4:
+/dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir5/dir6/l4:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir5/dir6/l4:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir5/dir6/l4:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir5/dir6/l4:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir5/dir6/l4:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir5/dir6/l4:
+/dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" had a 2 byte value for dir2/dir5/dir6/l4:
+l6
+Attribute "0000000000204b80 0000000000000007" had a 18 byte value for dir2/dir5/dir6/l4:
+/dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" had a 2 byte value for dir2/dir5/dir6/l4:
+l4
+Attribute "0000000000204b80 0000000000000005" had a 18 byte value for dir2/dir5/dir6/l4:
+/dir2/dir5/dir6/l4
+EA path /dir2/dir5/dir6/l4 matches on path
+parent ino 2116480 matches
+EA path /dir2/dir5/dir6 matches on path
+parent ino 1572992 matches
+EA path /dir2/dir5 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Print out hardlink names for given path, dir2/dir5/dir6/l5
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000003" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000005" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir5/dir6/l5:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" had a 2 byte value for dir2/dir5/dir6/l5:
+l2
+Attribute "0000000000100080 0000000000000003" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir5/dir6/l5:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir5/dir6/l5:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir5/dir6/l5:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" had a 2 byte value for dir2/dir5/dir6/l5:
+l6
+Attribute "0000000000204b80 0000000000000007" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" had a 2 byte value for dir2/dir5/dir6/l5:
+l4
+Attribute "0000000000204b80 0000000000000005" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir5/dir6/l4
+EA path /dir2/dir5/dir6/l5 matches on path
+parent ino 2116480 matches
+EA path /dir2/dir5/dir6 matches on path
+parent ino 1572992 matches
+EA path /dir2/dir5 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Print out hardlink names for given path, dir2/dir5/dir6/l6
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000100080 0000000000000003" has a 2 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000007" has a 2 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" has a 2 byte value for dir2/dir5/dir6/l6
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir5/dir6/l6:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir5/dir6/l6:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000003" had a 2 byte value for dir2/dir5/dir6/l6:
+l2
+Attribute "0000000000100080 0000000000000003" had a 18 byte value for dir2/dir5/dir6/l6:
+/dir2/dir3/dir4/l2
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir5/dir6/l6:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir5/dir6/l6:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir5/dir6/l6:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir5/dir6/l6:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir5/dir6/l6:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir5/dir6/l6:
+/dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000007" had a 2 byte value for dir2/dir5/dir6/l6:
+l6
+Attribute "0000000000204b80 0000000000000007" had a 18 byte value for dir2/dir5/dir6/l6:
+/dir2/dir5/dir6/l6
+Attribute "0000000000204b80 0000000000000005" had a 2 byte value for dir2/dir5/dir6/l6:
+l4
+Attribute "0000000000204b80 0000000000000005" had a 18 byte value for dir2/dir5/dir6/l6:
+/dir2/dir5/dir6/l4
+EA path /dir2/dir5/dir6/l6 matches on path
+parent ino 2116480 matches
+EA path /dir2/dir5/dir6 matches on path
+parent ino 1572992 matches
+EA path /dir2/dir5 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+now try removing half of the hardlinks
+
+rm'ing dir2/dir3/dir4/l2
+rm'ing dir2/dir5/dir6/l4
+rm'ing dir2/dir5/dir6/l6
+
+print out names and check after removed hardlinks
+
+looking at dir2/dir3/dir4/l1
+
+Print out hardlink names for given path, dir2/dir3/dir4/l1
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir3/dir4/l1:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir3/dir4/l1:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir3/dir4/l1:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir3/dir4/l1:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir3/dir4/l1:
+/dir2/dir5/dir6/l5
+EA path /dir2/dir3/dir4/l1 matches on path
+parent ino 1048704 matches
+EA path /dir2/dir3/dir4 matches on path
+parent ino 524416 matches
+EA path /dir2/dir3 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+looking at dir2/dir3/dir4/l3
+
+Print out hardlink names for given path, dir2/dir3/dir4/l3
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir3/dir4/l3
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir3/dir4/l3:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir3/dir4/l3:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir3/dir4/l3:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir3/dir4/l3:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir3/dir4/l3:
+/dir2/dir5/dir6/l5
+EA path /dir2/dir3/dir4/l3 matches on path
+parent ino 1048704 matches
+EA path /dir2/dir3/dir4 matches on path
+parent ino 524416 matches
+EA path /dir2/dir3 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+looking at dir2/dir5/dir6/l5
+
+Print out hardlink names for given path, dir2/dir5/dir6/l5
+
+Attribute "0000000000100080 0000000000000002" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000001" has a 5 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000004" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000204b80 0000000000000006" has a 2 byte value for dir2/dir5/dir6/l5
+Attribute "0000000000100080 0000000000000002" had a 2 byte value for dir2/dir5/dir6/l5:
+l1
+Attribute "0000000000100080 0000000000000002" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/l1
+Attribute "0000000000100080 0000000000000001" had a 5 byte value for dir2/dir5/dir6/l5:
+file4
+Attribute "0000000000100080 0000000000000001" had a 21 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/file4
+Attribute "0000000000100080 0000000000000004" had a 2 byte value for dir2/dir5/dir6/l5:
+l3
+Attribute "0000000000100080 0000000000000004" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir3/dir4/l3
+Attribute "0000000000204b80 0000000000000006" had a 2 byte value for dir2/dir5/dir6/l5:
+l5
+Attribute "0000000000204b80 0000000000000006" had a 18 byte value for dir2/dir5/dir6/l5:
+/dir2/dir5/dir6/l5
+EA path /dir2/dir5/dir6/l5 matches on path
+parent ino 2116480 matches
+EA path /dir2/dir5/dir6 matches on path
+parent ino 1572992 matches
+EA path /dir2/dir5 matches on path
+parent ino 132 matches
+EA path /dir2 matches on path
+parent ino 128 matches
+
+Testing rename
+
+
+1. in dir, file1 to file2 where file2 does not exist
+
+EA path /ren1/ren2/ren3/ren4/f2 matches on path
+parent ino 134 matches
+EA path /ren1/ren2/ren3/ren4 matches on path
+parent ino 3670144 matches
+EA path /ren1/ren2/ren3 matches on path
+parent ino 3145856 matches
+EA path /ren1/ren2 matches on path
+parent ino 2621568 matches
+EA path /ren1 matches on path
+parent ino 128 matches
+
+2. in dir, file1 to file2 where file2 does exist
+
+EA path /ren1/ren2/ren3/ren4/f2 matches on path
+parent ino 134 matches
+EA path /ren1/ren2/ren3/ren4 matches on path
+parent ino 3670144 matches
+EA path /ren1/ren2/ren3 matches on path
+parent ino 3145856 matches
+EA path /ren1/ren2 matches on path
+parent ino 2621568 matches
+EA path /ren1 matches on path
+parent ino 128 matches
+
+3. dir/file1 to dir2/file2 where file2 does not exist
+
+EA path /ren1/ren2/ren3/ren5/f3 matches on path
+parent ino 524418 matches
+EA path /ren1/ren2/ren3/ren5 matches on path
+parent ino 3670144 matches
+EA path /ren1/ren2/ren3 matches on path
+parent ino 3145856 matches
+EA path /ren1/ren2 matches on path
+parent ino 2621568 matches
+EA path /ren1 matches on path
+parent ino 128 matches
+
+4. dir/file1 to dir2/file2 where file2 does exist
+
+EA path /ren1/ren2/ren3/ren5/f3 matches on path
+parent ino 524418 matches
+EA path /ren1/ren2/ren3/ren5 matches on path
+parent ino 3670144 matches
+EA path /ren1/ren2/ren3 matches on path
+parent ino 3145856 matches
+EA path /ren1/ren2 matches on path
+parent ino 2621568 matches
+EA path /ren1 matches on path
+parent ino 128 matches
+
+5. dir to dir2 where dir2 does not exist
+
+EA path /ren1/ren2/ren3/ren6 matches on path
+parent ino 3670144 matches
+EA path /ren1/ren2/ren3 matches on path
+parent ino 3145856 matches
+EA path /ren1/ren2 matches on path
+parent ino 2621568 matches
+EA path /ren1 matches on path
+parent ino 128 matches
+
+Testing symlink
+
+EA path /symlink1 matches on path
+parent ino 128 matches
+EA path /hlink1 matches on path
+parent ino 128 matches
+EA path /hlink2 matches on path
+parent ino 128 matches
+EA path /hlink3 matches on path
+parent ino 128 matches
+
+Testing fsstress
+
+ltp/fsstress -z -f rmdir=10 -f link=10 -f creat=10 -f mkdir=10 -f rename=30 -f unlink=10 -f symlink=10 -n 1000 -d outdir -p 3
+seed = S
+succeeded checking P paths
+succeeded checking I inodes
+
+Testing dirstress
+
+src/dirstress -d outdir -f 1000 -k -p 3 -n 1
+src/dirstress -d outdir -f 1000 -k -p 3 -n 5
+succeeded checking P paths
+succeeded checking I inodes
diff --git a/115 b/115
new file mode 100755 (executable)
index 0000000..7802d7a
--- /dev/null
+++ b/115
@@ -0,0 +1,271 @@
+#! /bin/sh
+# FS QA Test No. 114
+#
+# Test out xfs_repair_ipaths
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2005 Silicon Graphics, Inc.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Further, this software is distributed without any warranty that it is
+# free of the rightful claim of any third person regarding infringement
+# or the like.  Any license provided herein, whether implied or
+# otherwise, applies only to this software file.  Patent licenses, if
+# any, provided herein do not apply to combinations of this program with
+# other software, or any other product whatsoever.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write the Free Software Foundation, Inc., 59
+# Temple Place - Suite 330, Boston MA 02111-1307, USA.
+#
+# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+# Mountain View, CA  94043, or:
+#
+# http://www.sgi.com
+#
+# For further information regarding this notice, see:
+#
+# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@crackle.melbourne.sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    cd /
+    rm -f $tmp.*
+}
+
+# Example output:
+#
+# ~/attr -Fl a/b/c/d/foo
+# Attribute "0000000000180080 0000000000000001" has a 3 byte value for a/b/c/d/foo
+#
+# ~/attr -Fg "0000000000180080 0000000000000001" a/b/c/d/foo
+# Attribute "0000000000180080 0000000000000001" had a 3 byte value for a/b/c/d/foo:
+# foo
+#
+# ~/attr -Pg "0000000000180080 0000000000000001" a/b/c/d/foo
+# Attribute "0000000000180080 0000000000000001" had a 12 byte value for a/b/c/d/foo:
+# /a/b/c/d/foo
+#
+
+#
+# filter out inode numbers to ordinal numbers
+# (assumes they come in order)
+#
+_filter_inodes()
+{
+   find $SCRATCH_MNT -exec stat -iq {} \; >$tmp.inodes
+
+   sed -e 's/[()]//g' \
+       -e 's/Attribute "[0-9][0-9]*/Attribute "INODE/' \
+   | nawk -v inodefile=$tmp.inodes '
+       BEGIN {
+               i=0
+               while (getline < inodefile > 0) {
+                       i++
+                       inodemap[$1] = i
+               }
+       }
+       /inode:/ {
+               for (i = 1; i <= NF; i++) {
+                       nextone = i+1
+                       if ($i == "inode:") {
+                               $nextone = inodemap[$nextone]
+                       }
+                       printf "%s ", $i
+               }
+               printf "\n"
+               next
+       }
+       { print }
+   '
+}
+
+_filter()
+{
+     sed -e 's/inode: \([0-9][0-9]*\)/inode: N/g' \
+        -e 's/Attribute "[0-9][0-9]*/Attribute "INODE/'
+}
+
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_supported_fs xfs
+_supported_os IRIX
+
+_require_scratch
+
+rm -f $here/$seq.full
+
+echo "mkfs"
+export MKFS_OPTIONS="$MKFS_OPTIONS -i paths=1"
+_scratch_mkfs_xfs >>$here/$seq.full 2>&1 \
+    || _fail "mkfs scratch failed"
+
+echo "mount"
+_scratch_mount >>$here/$seq.full 2>&1 \
+    || _fail "mount failed: $MOUNT_OPTIONS"
+
+# real QA test starts here
+
+verbose=false
+
+echo ""
+echo "--- create some files and directories to work on ---"
+echo ""
+cd $SCRATCH_MNT
+d=dir2/dir3/dir4
+mkdir -p $d
+touch file1
+touch dir2/file2
+touch dir2/dir3/file3
+touch $d/file4
+touch $d/file5
+touch $d/file6
+touch $d/file7
+touch $d/file8
+touch $d/file9
+
+
+_do_test()
+{
+       echo ""
+       echo "--- check all is ok before we start ---"
+       echo ""
+       xfs_check_ipaths $SCRATCH_MNT
+       xfs_repair_ipaths -n $SCRATCH_MNT
+
+       echo ""
+       echo "--- now break some stuff ---"
+       echo ""
+       cnt=1
+
+       echo ""
+       echo "1. remove the EA"
+       echo ""
+       attr -Fl dir2/file2
+       stat_ino=`stat -iq dir2`
+       attrname=`printf "%.16x %.16x" $stat_ino $cnt`
+       #echo "attrname = $attrname"
+       attr -Fr "$attrname" dir2/file2
+       attr -Fl dir2/file2
+
+       echo ""
+       echo "2. change the EA name"
+       echo ""
+       attr -Fl dir2/dir3/file3
+       stat_ino=100
+       attrname=`printf "%.16x %.16x" $stat_ino $cnt`
+       attrvalue=file3
+       attr -Fs "$attrname" -V $attrvalue dir2/dir3/file3
+       attr -Fl dir2/dir3/file3
+
+       echo ""
+       echo "3. change the EA value"
+       echo ""
+       attr -Fl $d/file4
+       stat_ino=`stat -iq $d`
+       attrname=`printf "%.16x %.16x" $stat_ino $cnt`
+       attrvalue=woopdydoo
+       attr -Fs "$attrname" -V "$attrvalue" $d/file4
+       attr -Fl $d/file4
+       attr -Fg "$attrname" $d/file4
+
+       echo ""
+       echo "4. add an extra EA - diff name, same value"
+       echo ""
+       attr -Fl $d/file5
+       stat_ino=100
+       attrname=`printf "%.16x %.16x" $stat_ino $cnt`
+       attrvalue=file5
+       attr -Fs "$attrname" -V $attrvalue $d/file5
+       attr -Fl $d/file5
+       attr -Fg "$attrname" $d/file5
+
+       echo ""
+       echo "5. add an extra EA - diff name, diff value"
+       echo ""
+       attr -Fl $d/file6
+       stat_ino=100
+       attrname=`printf "%.16x %.16x" $stat_ino $cnt`
+       attrvalue=file600
+       attr -Fs "$attrname" -V $attrvalue $d/file6
+       attr -Fl $d/file6
+       attr -Fg "$attrname" $d/file6
+
+       echo ""
+       echo "6. give bad fmt'ed EA name and get rid of existing name"
+       echo ""
+       attrname=woof
+       attrvalue=file7
+       attr -Fs "$attrname" -V $attrvalue $d/file7
+       # remove old attrname
+       cnt=1
+       stat_ino=`stat -iq $d`
+       attrname=`printf "%.16x %.16x" $stat_ino $cnt`
+       attr -Fr "$attrname" $d/file7
+
+       echo ""
+       echo "--- now check it ---"
+       echo ""
+
+       echo ""
+       echo "xfs_check_ipaths"
+       echo ""
+       xfs_check_ipaths $SCRATCH_MNT
+
+       echo ""
+       echo "xfs_repair_ipaths"
+       echo ""
+       xfs_repair_ipaths -n $SCRATCH_MNT
+
+       echo ""
+       echo "--- now repair it ---"
+       echo ""
+
+       echo ""
+       echo "xfs_repair_ipaths"
+       echo ""
+       xfs_repair_ipaths $SCRATCH_MNT
+
+       echo ""
+       echo "--- now check it again ---"
+       echo ""
+
+       echo ""
+       echo ""
+       echo "xfs_check_ipaths"
+       echo ""
+       xfs_check_ipaths $SCRATCH_MNT
+
+       echo ""
+       echo "xfs_repair_ipaths"
+       echo ""
+       xfs_repair_ipaths -n $SCRATCH_MNT
+}
+
+_do_test 2>&1 | tee $seq.full | _filter_inodes
+
+# success, all done
+status=0
+exit
diff --git a/115.out b/115.out
new file mode 100644 (file)
index 0000000..44d8e55
--- /dev/null
+++ b/115.out
@@ -0,0 +1,118 @@
+QA output created by 115
+mkfs
+mount
+
+--- create some files and directories to work on ---
+
+
+--- check all is ok before we start ---
+
+succeeded checking 13 inodes
+succeeded checking 13 paths
+
+--- now break some stuff ---
+
+
+1. remove the EA
+
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/file2
+
+2. change the EA name
+
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/file3
+Attribute "INODE 0000000000000001" set to a 5 byte value for dir2/dir3/file3:
+file3
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/file3
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/file3
+
+3. change the EA value
+
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/dir4/file4
+Attribute "INODE 0000000000000001" set to a 9 byte value for dir2/dir3/dir4/file4:
+woopdydoo
+Attribute "INODE 0000000000000001" has a 9 byte value for dir2/dir3/dir4/file4
+Attribute "INODE 0000000000000001" had a 9 byte value for dir2/dir3/dir4/file4:
+woopdydoo
+
+4. add an extra EA - diff name, same value
+
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/dir4/file5
+Attribute "INODE 0000000000000001" set to a 5 byte value for dir2/dir3/dir4/file5:
+file5
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/dir4/file5
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/dir4/file5
+Attribute "INODE 0000000000000001" had a 5 byte value for dir2/dir3/dir4/file5:
+file5
+
+5. add an extra EA - diff name, diff value
+
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/dir4/file6
+Attribute "INODE 0000000000000001" set to a 7 byte value for dir2/dir3/dir4/file6:
+file600
+Attribute "INODE 0000000000000001" has a 5 byte value for dir2/dir3/dir4/file6
+Attribute "INODE 0000000000000001" has a 7 byte value for dir2/dir3/dir4/file6
+Attribute "INODE 0000000000000001" had a 7 byte value for dir2/dir3/dir4/file6:
+file600
+
+6. give bad fmt'ed EA name and get rid of existing name
+
+Attribute "woof" set to a 5 byte value for dir2/dir3/dir4/file7:
+file7
+
+--- now check it ---
+
+
+xfs_check_ipaths
+
+inode-path for inode: 12 is missing 
+inode-path for inode: 11 is incorrect - bad parent inode# 
+inode-path for inode: 5 is incorrect - path non-existent 
+inode-path for inode: 6 is incorrect - bad parent inode# 
+inode-path for inode: 7 is incorrect - bad parent inode# 
+inode-path for inode: 8 is corrupted 
+num errors: 6
+
+xfs_repair_ipaths
+
+path "/mnt/scratch/dir2/dir3/dir4/file4" inode: 5 doesn't have an associated inode-path 
+path "/mnt/scratch/dir2/dir3/dir4/file7" inode: 8 has corrupted inode-path 
+path "/mnt/scratch/dir2/dir3/dir4/file7" inode: 8 doesn't have an associated inode-path 
+path "/mnt/scratch/dir2/file2" inode: 12 doesn't have an associated inode-path 
+extra inode-path for inode: 5 
+extra inode-path for inode: 6 
+extra inode-path for inode: 7 
+extra inode-path for inode: 11 
+
+--- now repair it ---
+
+
+xfs_repair_ipaths
+
+path "/mnt/scratch/dir2/dir3/dir4/file4" inode: 5 doesn't have an associated inode-path 
+path "/mnt/scratch/dir2/dir3/dir4/file7" inode: 8 has corrupted inode-path 
+path "/mnt/scratch/dir2/dir3/dir4/file7" inode: 8 doesn't have an associated inode-path 
+path "/mnt/scratch/dir2/file2" inode: 12 doesn't have an associated inode-path 
+extra inode-path for inode: 5 
+extra inode-path for inode: 6 
+extra inode-path for inode: 7 
+extra inode-path for inode: 11 
+repairing inode-path on "/mnt/scratch/dir2/dir3/dir4/file4"
+repairing by removing bad inode-path on "/mnt/scratch/dir2/dir3/dir4/file7"
+repairing inode-path on "/mnt/scratch/dir2/dir3/dir4/file7"
+repairing inode-path on "/mnt/scratch/dir2/file2"
+repairing: removing extra inode-path for inode: 5 
+repairing: removing extra inode-path for inode: 6 
+repairing: removing extra inode-path for inode: 7 
+repairing: removing extra inode-path for inode: 11 
+
+--- now check it again ---
+
+
+
+xfs_check_ipaths
+
+succeeded checking 13 inodes
+
+xfs_repair_ipaths
+
+succeeded checking 13 paths
diff --git a/group b/group
index 4f846bf7b8db210ba9dcfeb7c0c0bdcfa313d2aa..79d7e7e0452d1826b02bd7a4e7dcc338e9e082ba 100644 (file)
--- a/group
+++ b/group
@@ -184,3 +184,5 @@ aio         nathans@sgi.com
 105 acl auto
 112 rw aio auto
 113 rw aio
+114 parent attr auto
+115 parent attr auto