|
|
| File: [Development] / xfs-cmds / xfstests / 114 (download)
Revision 1.7, Thu May 17 15:58:12 2007 UTC (10 years, 5 months ago) by ddiss.longdrop.melbourne.sgi.com
Currently there are a few ways mkfs options are specified in XFSQA: 1) suite wide MKFS_OPTIONS are specified before tests are run e.g. vimes:/home/fsgqa/kali/xfsqa/xfstests # export MKFS_OPTIONS="-l size=100m" 2) test wide MKFS_OPTIONS are specified during a particular test e.g. 119 export MKFS_OPTIONS="-l version=2,size=1200b,su=64k" 3) mkfs options are appended by a test at mkfs time e.g. 083 _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full (4) Another form of appending is just appending to MKFS_OPTIONS directly e.g. 114:export MKFS_OPTIONS="$MKFS_OPTIONS -i parent=1" 115:export MKFS_OPTIONS="$MKFS_OPTIONS -i paths=1" Conflicts between mkfs options specified with method 1 & 3 are common. 960377 XFSQA 041, 042 - mkfs fails with large log size MKFS_OPTIONS. This change means if a mkfs fails where mkfs options have been appended by a test (method 3), The mkfs is retried using only those options defined by the test. occurances of method 4 (in test 114 & 115) are also changed to use method 3. $seq.full logs the fact that a mkfs options conflict has occured. Merge of master-melb:xfs-cmds:28601a by kenmcd. append -i parent mkfs option using _scratch_mkfs_xfs -i parent... rather than export MKFS_OPTIONS="$MKFS_OPTIONS -i parent=1. this avoids mkfs option conflicts |
#! /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 "fsstress $args" | sed -e "s#$out#outdir#"
if ! $FSSTRESS_PROG $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 "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 "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"
_scratch_mkfs_xfs -i parent=1 >>$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