File: [Development] / xfs-cmds / xfstests / 114 (download)
Revision 1.5, Mon Nov 28 14:02:10 2005 UTC (11 years, 10 months ago) by tes.longdrop.melbourne.sgi.com
Branch: MAIN
Changes since 1.4: +1 -0
lines
sync and sleep for bulkstat
Merge of master-melb:xfs-cmds:24591a by kenmcd.
sync and sleep for bulkstat
|
#! /bin/sh
# FS QA Test No. 114
#
# Test some parent ptr stuff
#
#-----------------------------------------------------------------------
# Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved.
#-----------------------------------------------------------------------
#
# 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.*
}
_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()
{
echo ""
echo "Print out hardlink names for given path, $1"
echo ""
xfs_io -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 >>$here/$seq.full
_print_names $p | tee -a $here/$seq.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 >>$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_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
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
_print_names $x | tee -a $here/$seq.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 $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/'
}
_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
_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 "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
_check_paths
}
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
_supported_fs xfs
_supported_os IRIX
_require_scratch
_need_to_be_root
rm -f $here/$seq.full
echo "mkfs"
_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 \
|| _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