mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
tests: remove xfs/114 and xfs/115
These two IRIX and XFS-specific tests tested the "parent pointer" feature which is not implemented by XFS on Linux. Just remove them. Signed-off-by: Eric Biggers <ebiggers@google.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
-340
@@ -1,340 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
# 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 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. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
#
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
|
|
||||||
seq=`basename $0`
|
|
||||||
seqres=$RESULT_DIR/$seq
|
|
||||||
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.*
|
|
||||||
}
|
|
||||||
|
|
||||||
_check_paths()
|
|
||||||
{
|
|
||||||
_path=$1 # might want to only check this path
|
|
||||||
|
|
||||||
sync; sleep 1
|
|
||||||
echo ""
|
|
||||||
echo "Check parent"
|
|
||||||
if ! $XFS_IO_PROG -x -c 'parent -c' $SCRATCH_MNT | _filter_num; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_print_names()
|
|
||||||
{
|
|
||||||
echo ""
|
|
||||||
echo "Print out hardlink names for given path, $1"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
$XFS_IO_PROG -x -c parent $1 | awk '/p_ino.*=/ {$3 = "inodeXXX"; print; next} {print}'
|
|
||||||
}
|
|
||||||
|
|
||||||
_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 >>$seqres.full
|
|
||||||
_print_names $p | tee -a $seqres.full
|
|
||||||
|
|
||||||
_check_paths $SCRATCH_MNT/$p
|
|
||||||
}
|
|
||||||
|
|
||||||
_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_paths $SCRATCH_MNT/symlink1
|
|
||||||
_check_paths $SCRATCH_MNT/hlink1
|
|
||||||
_check_paths $SCRATCH_MNT/hlink2
|
|
||||||
_check_paths $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 >>$seqres.full
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "print out names and check after created hardlinks"
|
|
||||||
echo ""
|
|
||||||
for x in $paths; do
|
|
||||||
_print_names $x | tee -a $seqres.full
|
|
||||||
_check_paths $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
|
|
||||||
let i=$i+1
|
|
||||||
let j=$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
|
|
||||||
_print_names $x | tee -a $seqres.full
|
|
||||||
_check_paths $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_paths $p2
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "2. in dir, file1 to file2 where file2 does exist"
|
|
||||||
echo ""
|
|
||||||
touch $p1
|
|
||||||
mv $p1 $p2
|
|
||||||
_check_paths $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_paths $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_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_paths $d3
|
|
||||||
}
|
|
||||||
|
|
||||||
_filter_num()
|
|
||||||
{
|
|
||||||
tee -a $seqres.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=`_scale_fsstress_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 "fsstress $args" | sed -e "s#$out#outdir#"
|
|
||||||
if ! $FSSTRESS_PROG $args | _filter_num
|
|
||||||
then
|
|
||||||
echo " fsstress $args returned $?"
|
|
||||||
cat $tmp.out | tee -a $seqres.full
|
|
||||||
status=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
_check_paths
|
|
||||||
}
|
|
||||||
|
|
||||||
_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 "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 $seqres.full
|
|
||||||
cat $tmp.out >>$seqres.full
|
|
||||||
status=1
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
args="-d $out -f $count -k -p 3 -n 5"
|
|
||||||
echo "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 $seqres.full
|
|
||||||
cat $tmp.out >>$seqres.full
|
|
||||||
status=1
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
_check_paths
|
|
||||||
}
|
|
||||||
|
|
||||||
# get standard environment, filters and checks
|
|
||||||
. ./common/rc
|
|
||||||
. ./common/filter
|
|
||||||
. ./common/attr
|
|
||||||
|
|
||||||
_supported_fs xfs
|
|
||||||
_supported_os IRIX
|
|
||||||
|
|
||||||
_require_scratch
|
|
||||||
_require_attrs
|
|
||||||
|
|
||||||
rm -f $seqres.full
|
|
||||||
|
|
||||||
echo "mkfs"
|
|
||||||
_scratch_mkfs_xfs >>$seqres.full 2>&1 \
|
|
||||||
|| _fail "mkfs scratch failed"
|
|
||||||
_scratch_mkfs_xfs -i parent=1 >>$seqres.full 2>&1 \
|
|
||||||
|| _notrun "parent inodes not supported"
|
|
||||||
|
|
||||||
echo "mount"
|
|
||||||
_scratch_mount >>$seqres.full 2>&1 \
|
|
||||||
|| _fail "mount failed: $MOUNT_OPTIONS"
|
|
||||||
|
|
||||||
# real QA test starts here
|
|
||||||
|
|
||||||
verbose=false
|
|
||||||
|
|
||||||
_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
|
|
||||||
@@ -1,365 +0,0 @@
|
|||||||
QA output created by 114
|
|
||||||
mkfs
|
|
||||||
mount
|
|
||||||
|
|
||||||
Testing create
|
|
||||||
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir3/dir4/file4
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 2
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Testing hardlink
|
|
||||||
|
|
||||||
|
|
||||||
print out names and check after created hardlinks
|
|
||||||
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir3/dir4/l1
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l6"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l2"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir3/dir4/l2
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l6"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l2"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir3/dir4/l3
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l6"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l2"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir5/dir6/l4
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l6"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l2"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir5/dir6/l5
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l6"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l2"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir5/dir6/l6
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l6"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 4
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l2"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 5
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir3/dir4/l1
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir3/dir4/l3
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Print out hardlink names for given path, dir2/dir5/dir6/l5
|
|
||||||
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l5"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "file4"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l1"
|
|
||||||
p_ino = inodeXXX
|
|
||||||
p_gen = 6
|
|
||||||
p_reclen = 24
|
|
||||||
p_name = "l3"
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Testing rename
|
|
||||||
|
|
||||||
|
|
||||||
1. in dir, file1 to file2 where file2 does not exist
|
|
||||||
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
2. in dir, file1 to file2 where file2 does exist
|
|
||||||
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
3. dir/file1 to dir2/file2 where file2 does not exist
|
|
||||||
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
4. dir/file1 to dir2/file2 where file2 does exist
|
|
||||||
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
5. dir to dir2 where dir2 does not exist
|
|
||||||
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Testing symlink
|
|
||||||
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Testing fsstress
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
|
|
||||||
Testing dirstress
|
|
||||||
|
|
||||||
dirstress -d outdir -f 1000 -k -p 3 -n 1
|
|
||||||
dirstress -d outdir -f 1000 -k -p 3 -n 5
|
|
||||||
|
|
||||||
Check parent
|
|
||||||
succeeded checking I inodes
|
|
||||||
-257
@@ -1,257 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
# FS QA Test No. 115
|
|
||||||
#
|
|
||||||
# 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 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. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
#
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
|
|
||||||
seq=`basename $0`
|
|
||||||
seqres=$RESULT_DIR/$seq
|
|
||||||
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
|
|
||||||
. ./common/attr
|
|
||||||
|
|
||||||
_supported_fs xfs
|
|
||||||
_supported_os IRIX
|
|
||||||
|
|
||||||
_require_scratch
|
|
||||||
_require_attrs
|
|
||||||
|
|
||||||
rm -f $seqres.full
|
|
||||||
|
|
||||||
echo "mkfs"
|
|
||||||
_scratch_mkfs_xfs >>$seqres.full 2>&1 \
|
|
||||||
|| _fail "mkfs scratch failed"
|
|
||||||
_scratch_mkfs_xfs -i paths=1 >>$seqres.full 2>&1 \
|
|
||||||
|| _notrun "i_paths not supported"
|
|
||||||
|
|
||||||
echo "mount"
|
|
||||||
_scratch_mount >>$seqres.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_PROG} -Fl dir2/file2
|
|
||||||
stat_ino=`stat -iq dir2`
|
|
||||||
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
|
|
||||||
#echo "attrname = $attrname"
|
|
||||||
${ATTR_PROG} -Fr "$attrname" dir2/file2
|
|
||||||
${ATTR_PROG} -Fl dir2/file2
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "2. change the EA name"
|
|
||||||
echo ""
|
|
||||||
${ATTR_PROG} -Fl dir2/dir3/file3
|
|
||||||
stat_ino=100
|
|
||||||
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
|
|
||||||
attrvalue=file3
|
|
||||||
${ATTR_PROG} -Fs "$attrname" -V $attrvalue dir2/dir3/file3
|
|
||||||
${ATTR_PROG} -Fl dir2/dir3/file3
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "3. change the EA value"
|
|
||||||
echo ""
|
|
||||||
${ATTR_PROG} -Fl $d/file4
|
|
||||||
stat_ino=`stat -iq $d`
|
|
||||||
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
|
|
||||||
attrvalue=woopdydoo
|
|
||||||
${ATTR_PROG} -Fs "$attrname" -V "$attrvalue" $d/file4
|
|
||||||
${ATTR_PROG} -Fl $d/file4
|
|
||||||
${ATTR_PROG} -Fg "$attrname" $d/file4
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "4. add an extra EA - diff name, same value"
|
|
||||||
echo ""
|
|
||||||
${ATTR_PROG} -Fl $d/file5
|
|
||||||
stat_ino=100
|
|
||||||
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
|
|
||||||
attrvalue=file5
|
|
||||||
${ATTR_PROG} -Fs "$attrname" -V $attrvalue $d/file5
|
|
||||||
${ATTR_PROG} -Fl $d/file5
|
|
||||||
${ATTR_PROG} -Fg "$attrname" $d/file5
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "5. add an extra EA - diff name, diff value"
|
|
||||||
echo ""
|
|
||||||
${ATTR_PROG} -Fl $d/file6
|
|
||||||
stat_ino=100
|
|
||||||
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
|
|
||||||
attrvalue=file600
|
|
||||||
${ATTR_PROG} -Fs "$attrname" -V $attrvalue $d/file6
|
|
||||||
${ATTR_PROG} -Fl $d/file6
|
|
||||||
${ATTR_PROG} -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_PROG} -Fs "$attrname" -V $attrvalue $d/file7
|
|
||||||
# remove old attrname
|
|
||||||
cnt=1
|
|
||||||
stat_ino=`stat -iq $d`
|
|
||||||
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
|
|
||||||
${ATTR_PROG} -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 $seqres.full | _filter_inodes
|
|
||||||
|
|
||||||
# success, all done
|
|
||||||
status=0
|
|
||||||
exit
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -111,8 +111,6 @@
|
|||||||
111 ioctl
|
111 ioctl
|
||||||
112 fuzzers
|
112 fuzzers
|
||||||
113 fuzzers
|
113 fuzzers
|
||||||
114 parent attr stress
|
|
||||||
115 parent attr
|
|
||||||
116 quota auto quick
|
116 quota auto quick
|
||||||
117 fuzzers
|
117 fuzzers
|
||||||
118 auto quick fsr dangerous
|
118 auto quick fsr dangerous
|
||||||
|
|||||||
Reference in New Issue
Block a user