sync and sleep for bulkstat
[xfstests-dev.git] / 114
diff --git a/114 b/114
index 05e0730ecd40c19a3b4af0c0ae6ba3c172a770fc..37a054d02d5caf0d9c1c4001b914079127d55f71 100755 (executable)
--- a/114
+++ b/114
@@ -5,34 +5,6 @@
 #
 #-----------------------------------------------------------------------
 # 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
@@ -52,45 +24,26 @@ _cleanup()
     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
-#
 
+_check_paths()
+{
+       _path=$1 # might want to only check this path
+
+       sync; sleep 1
+       echo ""
+       echo "Check parent"
+       if ! xfs_io -x -c 'parent -c' $SCRATCH_MNT | _filter_num; then
+               exit 1
+       fi
+}
 
 _print_names()
 {
-       typeset path
-       path=$1
-
        echo ""
-       echo "Print out hardlink names for given path, $path"
+       echo "Print out hardlink names for given path, $1"
        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
+       xfs_io -x -c parent $1 | awk '/p_ino.*=/ {$3 = "inodeXXX"; print; next} {print}' 
 }
 
 _test_create()
@@ -114,89 +67,10 @@ _test_create()
        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
-}
+       #_print_names $p >>$here/$seq.full
+       _print_names $p | tee -a $here/$seq.full
 
-#
-# 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
+       _check_paths $SCRATCH_MNT/$p
 }
 
 _test_symlink()
@@ -213,10 +87,10 @@ _test_symlink()
        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
+       _check_paths $SCRATCH_MNT/symlink1
+       _check_paths $SCRATCH_MNT/hlink1
+       _check_paths $SCRATCH_MNT/hlink2
+       _check_paths $SCRATCH_MNT/hlink3
 }
 
 #
@@ -251,9 +125,10 @@ _test_hardlink()
        echo ""
        for x in $paths; do
                _print_names $x | tee -a $here/$seq.full
-               _check_parentinos_path $SCRATCH_MNT $SCRATCH_MNT/$x
+               _check_paths $SCRATCH_MNT/$x
        done
 
+
        echo ""
        echo "now try removing half of the hardlinks"
        echo ""
@@ -273,9 +148,8 @@ _test_hardlink()
        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
+                       _check_paths $SCRATCH_MNT/$x
                fi
        done
 
@@ -305,14 +179,14 @@ _test_rename()
        p2=$d1/f2
        touch $p1
        mv $p1 $p2
-       _check_parentinos_path $SCRATCH_MNT $p2
+       _check_paths $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
+       _check_paths $p2
 
        echo ""
        echo "3. dir/file1 to dir2/file2 where file2 does not exist"
@@ -322,7 +196,7 @@ _test_rename()
        p3=$d2/f3
        touch $p1
        mv $p1 $p3
-       _check_parentinos_path $SCRATCH_MNT $p3
+       _check_paths $p3
 
        echo ""
        echo "4. dir/file1 to dir2/file2 where file2 does exist"
@@ -331,19 +205,19 @@ _test_rename()
        p3=$d2/f3
        touch $p1
        mv $p1 $p3
-       _check_parentinos_path $SCRATCH_MNT $p3
+       _check_paths $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
+       _check_paths $d3
 }
 
 _filter_num()
 {
-       tee -a $seq.full |\
+       tee -a $here/$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/'
@@ -372,8 +246,7 @@ _test_fsstress()
                status=1
        fi
 
-       xfs_repair_ipaths -n $SCRATCH_MNT | _filter_num
-       xfs_check_ipaths $SCRATCH_MNT | _filter_num
+       _check_paths
 }
 
 
@@ -415,8 +288,7 @@ _test_dirstress()
                exit
        fi
 
-       xfs_repair_ipaths -n $SCRATCH_MNT | _filter_num
-       xfs_check_ipaths $SCRATCH_MNT | _filter_num
+       _check_paths
 }
 
 # get standard environment, filters and checks
@@ -427,13 +299,16 @@ _supported_fs xfs
 _supported_os IRIX
 
 _require_scratch
+_need_to_be_root
 
 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"
+export MKFS_OPTIONS="$MKFS_OPTIONS -i parent=1"
+_scratch_mkfs_xfs >>$here/$seq.full 2>&1 \
+    || _notrun "parent inodes not supported"
 
 echo "mount"
 _scratch_mount >>$here/$seq.full 2>&1 \
@@ -443,8 +318,6 @@ _scratch_mount >>$here/$seq.full 2>&1 \
 
 verbose=false
 
-# initial testing with scripting and modified attr(1)
-# in order to test parent EAs
 _test_create
 _test_hardlink
 _test_rename