X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=ae3151f284213d4cb92179f6bb540cb520687b9b;hp=76d27ce4fbafdb4340cca1d738d21b194d1cb245;hb=2a38589c6ea247eabf530888912fe555a07252d4;hpb=13b269ab77daca78fdfc374986d4cc34c7e66309 diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 76d27ce..ae3151f 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -9,7 +9,7 @@ set -e ONLY=${ONLY:-"$*"} # bug number for skipped test: 13297 2108 9789 3637 9789 3561 12622 5188 -ALWAYS_EXCEPT=" 27u 42a 42b 42c 42d 45 51d 68b $SANITY_EXCEPT" +ALWAYS_EXCEPT=" 42a 42b 42c 42d 45 51d 68b $SANITY_EXCEPT" # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! # with LOD/OSP landing @@ -17,11 +17,6 @@ ALWAYS_EXCEPT=" 27u 42a 42b 42c 42d 45 51d 68b $SANIT ALWAYS_EXCEPT=" 76 $ALWAYS_EXCEPT" -# Tests that fail on uml -CPU=`awk '/model/ {print $4}' /proc/cpuinfo` -# buffer i/o errs sock spc runas -[ "$CPU" = "UML" ] && EXCEPT="$EXCEPT 27m 27n 27o 27p 27q 27r 31d 54a 64b 99a 99b 99c 99d 99e 99f 101a" - SRCDIR=$(cd $(dirname $0); echo $PWD) export PATH=$PATH:/sbin @@ -48,6 +43,7 @@ UMOUNT=${UMOUNT:-"umount -d"} STRIPES_PER_OBJ=-1 CHECK_GRANT=${CHECK_GRANT:-"yes"} GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""} +export PARALLEL=${PARALLEL:-"no"} export NAME=${NAME:-local} @@ -62,7 +58,11 @@ init_test_env $@ . ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh} init_logging -[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24v 27m 36f 36g 36h 51b 60c 63 64b 68 71 73 77f 78 101a 103 115 120g 124b" +[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 64b 68 71 77f 78 115 124b" + +[ $(facet_fstype $SINGLEMDS) = "zfs" ] && +# bug number for skipped test: LU-1593 LU-2610 LU-2833 LU-1957 LU-2805 + ALWAYS_EXCEPT="$ALWAYS_EXCEPT 34h 40 48a 180 184c" FAIL_ON_ERROR=false @@ -89,6 +89,13 @@ check_kernel_version() { return 1 } +check_swap_layouts_support() +{ + $LCTL get_param -n llite.*.sbi_flags | grep -q layout || + { skip "Does not support layout lock."; return 0; } + return 1 +} + if [ "$ONLY" == "cleanup" ]; then sh llmountcleanup.sh exit 0 @@ -468,9 +475,18 @@ str_repeat() { # Long symlinks and LU-2241 test_17g() { - test_mkdir -p $DIR/$tdir + test_mkdir -p $DIR/$tdir local TESTS="59 60 61 4094 4095" + # Fix for inode size boundary in 2.1.4 + [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.1.4) ] && + TESTS="4094 4095" + + # Patch not applied to 2.2 or 2.3 branches + [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] && + [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.3.55) ] && + TESTS="4094 4095" + for i in $TESTS; do local SYMNAME=$(str_repeat 'x' $i) ln -s $SYMNAME $DIR/$tdir/f$i || error "failed $i-char symlink" @@ -481,6 +497,7 @@ run_test 17g "symlinks: really long symlink name and inode boundaries" test_17h() { #bug 17378 remote_mds_nodsh && skip "remote MDS with nodsh" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local mdt_idx test_mkdir -p $DIR/$tdir if [ $MDSCOUNT -gt 1 ]; then @@ -497,6 +514,7 @@ run_test 17h "create objects: lov_free_memmd() doesn't lbug" test_17i() { #bug 20018 remote_mds_nodsh && skip "remote MDS with nodsh" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir local foo=$DIR/$tdir/$tfile local mdt_idx @@ -516,12 +534,13 @@ run_test 17i "don't panic on short symlink" test_17k() { #bug 22301 rsync --help | grep -q xattr || skip_env "$(rsync --version| head -1) does not support xattrs" - test_mkdir -p $DIR/$tdir + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + test_mkdir -p $DIR/$tdir test_mkdir -p $DIR/$tdir.new - touch $DIR/$tdir/$tfile - ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk - rsync -av -X $DIR/$tdir/ $DIR/$tdir.new || - error "rsync failed with xattrs enabled" + touch $DIR/$tdir/$tfile + ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk + rsync -av -X $DIR/$tdir/ $DIR/$tdir.new || + error "rsync failed with xattrs enabled" } run_test 17k "symlinks: rsync with xattrs enabled =========================" @@ -558,6 +577,8 @@ test_17m() { [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "only for ldiskfs MDT" && return 0 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + mkdir -p $WDIR long_sym=$short_sym # create a long symlink file @@ -635,6 +656,8 @@ test_17n() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + mkdir -p $DIR/$tdir for ((i=0; i<10; i++)); do $LFS mkdir -i 1 $DIR/$tdir/remote_dir_${i} || @@ -655,8 +678,8 @@ test_17n() { run_test 17n "run e2fsck against master/slave MDT which contains remote dir" test_18() { - touch $DIR/f - ls $DIR || error + touch $DIR/f || error "Failed to touch $DIR/f: $?" + ls $DIR || error "Failed to ls $DIR: $?" } run_test 18 "touch .../f ; ls ... ==============================" @@ -903,19 +926,26 @@ test_24p() { } run_test 24p "mkdir .../R12{a,b}; rename .../R12a .../R12b" +cleanup_multiop_pause() { + trap 0 + kill -USR1 $MULTIPID +} + test_24q() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir $DIR/R13a test_mkdir $DIR/R13b - DIRINO=`ls -lid $DIR/R13a | awk '{ print $1 }'` - multiop_bg_pause $DIR/R13b D_c || return 1 + local DIRINO=$(ls -lid $DIR/R13a | awk '{ print $1 }') + multiop_bg_pause $DIR/R13b D_c || error "multiop failed to start" MULTIPID=$! + trap cleanup_multiop_pause EXIT mrename $DIR/R13a $DIR/R13b - $CHECKSTAT -a $DIR/R13a || error - $CHECKSTAT -t dir $DIR/R13b || error - DIRINO2=`ls -lid $DIR/R13b | awk '{ print $1 }'` + $CHECKSTAT -a $DIR/R13a || error "R13a still exists" + $CHECKSTAT -t dir $DIR/R13b || error "R13b does not exist" + local DIRINO2=$(ls -lid $DIR/R13b | awk '{ print $1 }') [ "$DIRINO" = "$DIRINO2" ] || error "R13a $DIRINO != R13b $DIRINO2" - kill -USR1 $MULTIPID + cleanup_multiop_pause wait $MULTIPID || error "multiop close failed" } run_test 24q "mkdir .../R13{a,b}; open R13b rename R13a R13b ===" @@ -976,6 +1006,7 @@ test_24v() { skip "not enough free inodes $FREE_INODES required $NRFILES" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return trap simple_cleanup_common EXIT mkdir -p $DIR/$tdir @@ -1017,6 +1048,7 @@ run_test 24w "Reading a file larger than 4Gb" test_24x() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local MDTIDX=1 local remote_dir=$DIR/$tdir/remote_dir @@ -1044,6 +1076,7 @@ run_test 24x "cross rename/link should be failed" test_24y() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local MDTIDX=1 local remote_dir=$DIR/$tdir/remote_dir @@ -1071,6 +1104,7 @@ run_test 24y "rename/link on the same dir should succeed" test_24z() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local MDTIDX=1 local remote_src=$DIR/$tdir/remote_dir local remote_tgt=$DIR/$tdir/remote_tgt @@ -1345,6 +1379,7 @@ exhaust_all_precreations() { test_27n() { [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -1360,6 +1395,7 @@ run_test 27n "create file with some full OSTs ==================" test_27o() { [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -1376,6 +1412,7 @@ run_test 27o "create file with all full OSTs (should error) ====" test_27p() { [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -1398,6 +1435,7 @@ run_test 27p "append to a truncated file with some full OSTs ===" test_27q() { [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -1420,6 +1458,7 @@ run_test 27q "append to truncated file with all OSTs full (should error) ===" test_27r() { [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -1461,6 +1500,7 @@ test_27u() { # bug 4900 #define OBD_FAIL_MDS_OSC_PRECREATE 0x139 do_facet $SINGLEMDS lctl set_param fail_loc=0x139 test_mkdir -p $DIR/$tdir + rm -rf $DIR/$tdir/* createmany -o $DIR/$tdir/t- 1000 do_facet $SINGLEMDS lctl set_param fail_loc=0 @@ -1475,6 +1515,7 @@ run_test 27u "skip object creation on OSC w/o objects ==========" test_27v() { # bug 4900 [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -1534,6 +1575,7 @@ run_test 27wa "check $SETSTRIPE -c -i options" test_27x() { remote_ost_nodsh && skip "remote OST with nodsh" && return [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2 OSTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return OFFSET=$(($OSTCOUNT - 1)) OSTIDX=0 local OST=$(ostname_from_index $OSTIDX) @@ -1555,6 +1597,7 @@ test_27y() { [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2 OSTs -- skipping" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS $FSNAME-OST0000) local last_id=$(do_facet $SINGLEMDS lctl get_param -n \ @@ -1612,6 +1655,19 @@ test_27y() { do_facet $SINGLEMDS lctl --device %$OSC activate fi done + + # all osp devices get activated, hence -1 stripe count restored + local stripecnt=0 + + # sleep 2*lod_qos_maxage seconds waiting for lod qos to notice osp + # devices get activated. + sleep_maxage + $SETSTRIPE -c -1 $DIR/$tfile + stripecnt=$($GETSTRIPE -c $DIR/$tfile) + rm -f $DIR/$tfile + [ $stripecnt -ne $OSTCOUNT ] && + error "Of $OSTCOUNT OSTs, only $stripecnt is available" + return 0 } run_test 27y "create files while OST0 is degraded and the rest inactive" @@ -1662,8 +1718,13 @@ check_seq_oid() # { error "mounting $dev as $FSTYPE failed"; return 3; } #local obj_file=$(do_facet ost$ost find $dir/O/$seq -name $oid) #local ff=$(do_facet ost$ost $LL_DECODE_FILTER_FID $obj_file) - - local obj_file="O/$seq/d$((oid %32))/$oid" + seq=$(echo $seq | sed -e "s/^0x//g") + if [ $seq == 0 ]; then + oid_hex=$(echo $oid) + else + oid_hex=$(echo $hex | sed -e "s/^0x//g") + fi + local obj_file="O/$seq/d$((oid %32))/$oid_hex" local ff=$(do_facet ost$ost "$DEBUGFS -c -R 'stat $obj_file' \ $dev 2>/dev/null" | grep "parent=") @@ -1696,6 +1757,7 @@ check_seq_oid() test_27z() { remote_ost_nodsh && skip "remote OST with nodsh" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir $SETSTRIPE -c 1 -i 0 -S 64k $DIR/$tdir/$tfile-1 || @@ -1719,6 +1781,7 @@ test_27z() { run_test 27z "check SEQ/OID on the MDT and OST filesystems" test_27A() { # b=19102 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local restore_size=$($GETSTRIPE -S $MOUNT) local restore_count=$($GETSTRIPE -c $MOUNT) local restore_offset=$($GETSTRIPE -i $MOUNT) @@ -1735,6 +1798,55 @@ test_27A() { # b=19102 } run_test 27A "check filesystem-wide default LOV EA values" +test_27B() { # LU-2523 + test_mkdir -p $DIR/$tdir + rm -f $DIR/$tdir/f0 $DIR/$tdir/f1 + touch $DIR/$tdir/f0 + # open f1 with O_LOV_DELAY_CREATE + # rename f0 onto f1 + # call setstripe ioctl on open file descriptor for f1 + # close + multiop $DIR/$tdir/f1 oO_RDWR:O_CREAT:O_LOV_DELAY_CREATE:nB1c \ + $DIR/$tdir/f0 + + rm -f $DIR/$tdir/f1 + # open f1 with O_LOV_DELAY_CREATE + # unlink f1 + # call setstripe ioctl on open file descriptor for f1 + # close + multiop $DIR/$tdir/f1 oO_RDWR:O_CREAT:O_LOV_DELAY_CREATE:uB1c + + # Allow multiop to fail in imitation of NFS's busted semantics. + true +} +run_test 27B "call setstripe on open unlinked file/rename victim" + +test_27C() { #LU-2871 + [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return + + declare -a ost_idx + local index + local i + local j + + test_mkdir -p $DIR/$tdir + cd $DIR/$tdir + for i in $(seq 0 $((OSTCOUNT - 1))); do + # set stripe across all OSTs starting from OST$i + $SETSTRIPE -i $i -c -1 $tfile$i + # get striping information + ost_idx=($($GETSTRIPE $tfile$i | + tail -n $((OSTCOUNT + 1)) | awk '{print $1}')) + echo ${ost_idx[@]} + # check the layout + for j in $(seq 0 $((OSTCOUNT - 1))); do + index=$(((i + j) % OSTCOUNT)) + [ ${ost_idx[$j]} -eq $index ] || error + done + done +} +run_test 27C "check full striping across all OSTs" + # createtest also checks that device nodes are created and # then visible correctly (#2091) test_28() { # bug 2091 @@ -1744,6 +1856,7 @@ test_28() { # bug 2091 run_test 28 "create/mknod/mkdir with bad file types ============" test_29() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return cancel_lru_locks mdc test_mkdir $DIR/d29 touch $DIR/d29/foo @@ -1807,6 +1920,7 @@ test_30b() { run_test 30b "execute binary from Lustre as non-root ===========" test_30c() { # b=22376 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return cp `which ls` $DIR || cp /bin/ls $DIR chmod a-rw $DIR/ls cancel_lru_locks mdc @@ -1854,6 +1968,7 @@ test_31e() { # bug 2904 run_test 31e "remove of open non-empty directory ===============" test_31f() { # bug 4554 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return set -vx test_mkdir $DIR/d31f $SETSTRIPE -S 1048576 -c 1 $DIR/d31f @@ -1965,12 +2080,29 @@ test_31m() { } run_test 31m "link to file: the same, non-existing, dir===============" +test_31n() { + [ -e /proc/self/fd/173 ] && echo "skipping, fd 173 is in use" && return + touch $DIR/$tfile || error "cannot create '$DIR/$tfile'" + nlink=$(stat --format=%h $DIR/$tfile) + [ ${nlink:--1} -eq 1 ] || error "nlink is $nlink, expected 1" + exec 173<$DIR/$tfile + trap "exec 173<&-" EXIT + nlink=$(stat --dereference --format=%h /proc/self/fd/173) + [ ${nlink:--1} -eq 1 ] || error "nlink is $nlink, expected 1" + rm $DIR/$tfile || error "cannot remove '$DIR/$tfile'" + nlink=$(stat --dereference --format=%h /proc/self/fd/173) + [ ${nlink:--1} -eq 0 ] || error "nlink is $nlink, expected 0" + exec 173<&- +} +run_test 31n "check link count of unlinked file" + cleanup_test32_mount() { trap 0 $UMOUNT $DIR/$tdir/ext2-mountpoint } test_32a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return echo "== more mountpoints and symlinks =================" [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT @@ -1982,6 +2114,7 @@ test_32a() { run_test 32a "stat d32a/ext2-mountpoint/.. =====================" test_32b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -1992,6 +2125,7 @@ test_32b() { run_test 32b "open d32b/ext2-mountpoint/.. =====================" test_32c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -2003,6 +2137,7 @@ test_32c() { run_test 32c "stat d32c/ext2-mountpoint/../d2/test_dir =========" test_32d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -2061,6 +2196,7 @@ test_32h() { run_test 32h "open d32h/symlink->tmp/symlink->lustre-subdir/${tdir}2" test_32i() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -2072,6 +2208,7 @@ test_32i() { run_test 32i "stat d32i/ext2-mountpoint/../test_file ===========" test_32j() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -2083,6 +2220,7 @@ test_32j() { run_test 32j "open d32j/ext2-mountpoint/../test_file ===========" test_32k() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -2095,6 +2233,7 @@ test_32k() { run_test 32k "stat d32k/ext2-mountpoint/../d2/test_file ========" test_32l() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return rm -fr $DIR/$tdir trap cleanup_test32_mount EXIT test_mkdir -p $DIR/$tdir/ext2-mountpoint @@ -2171,6 +2310,7 @@ cleanup_testdir_mount() { } test_32q() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_testdir_mount EXIT test_mkdir -p $DIR/$tdir @@ -2182,6 +2322,7 @@ test_32q() { run_test 32q "stat follows mountpoints in Lustre (should return error)" test_32r() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir trap cleanup_testdir_mount EXIT test_mkdir -p $DIR/$tdir @@ -2222,6 +2363,7 @@ test_33b() { run_test 33b "test open file with malformed flags (No panic and return error)" test_33c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local ostnum local ostname local write_bytes @@ -2288,6 +2430,7 @@ run_test 33c "test llobdstat and write_bytes" test_33d() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local MDTIDX=1 local remote_dir=$DIR/$tdir/remote_dir @@ -2359,6 +2502,7 @@ test_34e() { run_test 34e "create objects, some with size and some without ==" test_34f() { # bug 6242, 6243 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return SIZE34F=48000 rm -f $DIR/f34f $MCREATE $DIR/f34f || error @@ -2373,6 +2517,7 @@ test_34f() { # bug 6242, 6243 run_test 34f "read from a file with no objects until EOF =======" test_34g() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return dd if=/dev/zero of=$DIR/$tfile bs=1 count=100 seek=$TEST_34_SIZE || error $TRUNCATE $DIR/$tfile $((TEST_34_SIZE / 2))|| error $CHECKSTAT -s $((TEST_34_SIZE / 2)) $DIR/$tfile || error "truncate failed" @@ -2390,10 +2535,13 @@ test_34g() { run_test 34g "truncate long file ===============================" test_34h() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local gid=10 local sz=1000 dd if=/dev/zero of=$DIR/$tfile bs=1M count=10 || error + sync # Flush the cache so that multiop below does not block on cache + # flush when getting the group lock $MULTIOP $DIR/$tfile OG${gid}T${sz}g${gid}c & MULTIPID=$! sleep 2 @@ -2481,6 +2629,7 @@ subr_36fh() { } test_36f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_OST_BRW_PAUSE_BULK 0x214 subr_36fh "0x80000214" } @@ -2488,6 +2637,7 @@ run_test 36f "utime on file racing with OST BRW write ==========" test_36g() { remote_ost_nodsh && skip "remote OST with nodsh" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local fmd_max_age local fmd_before local fmd_after @@ -2513,6 +2663,7 @@ test_36g() { run_test 36g "filter mod data cache expiry =====================" test_36h() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_OST_BRW_PAUSE_BULK2 0x227 subr_36fh "0x80000227" } @@ -2628,6 +2779,7 @@ run_test 39c "mtime change on rename ===========================" # bug 21114 test_39d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile touch -m -d @$TEST_39_MTIME $DIR1/$tfile @@ -2645,6 +2797,7 @@ run_test 39d "create, utime, stat ==============================" # bug 21114 test_39e() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile local mtime1=`stat -c %Y $DIR1/$tfile` @@ -2663,6 +2816,7 @@ run_test 39e "create, stat, utime, stat ========================" # bug 21114 test_39f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile mtime1=`stat -c %Y $DIR1/$tfile` @@ -2682,6 +2836,7 @@ run_test 39f "create, stat, sleep, utime, stat =================" # bug 11063 test_39g() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return echo hello >> $DIR1/$tfile local mtime1=`stat -c %Y $DIR1/$tfile` @@ -2701,6 +2856,7 @@ run_test 39g "write, chmod, stat ===============================" # bug 11063 test_39h() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile sleep 1 @@ -2726,6 +2882,7 @@ test_39h() { run_test 39h "write, utime within one second, stat =============" test_39i() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile sleep 1 @@ -2747,6 +2904,7 @@ test_39i() { run_test 39i "write, rename, stat ==============================" test_39j() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return start_full_debug_logging touch $DIR1/$tfile sleep 1 @@ -2778,6 +2936,7 @@ test_39j() { run_test 39j "write, rename, close, stat =======================" test_39k() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile sleep 1 @@ -2806,6 +2965,7 @@ run_test 39k "write, utime, close, stat ========================" TEST_39_ATIME=`date -d "1 year" +%s` test_39l() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return local atime_diff=$(do_facet $SINGLEMDS \ lctl get_param -n mdd.*MDT0000*.atime_diff) @@ -2856,6 +3016,7 @@ test_39l() { run_test 39l "directory atime update ===========================" test_39m() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR1/$tfile sleep 2 local far_past_mtime=$(date -d "May 29 1953" +%s) @@ -2946,6 +3107,7 @@ setup_test42() { # Tests 42* verify that our behaviour is correct WRT caching, file closure, # file truncation, and file removal. test_42a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return setup_test42 cancel_lru_locks osc stop_writeback @@ -2961,6 +3123,7 @@ test_42a() { run_test 42a "ensure that we don't flush on close ==============" test_42b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return setup_test42 cancel_lru_locks osc stop_writeback @@ -3017,6 +3180,7 @@ trunc_test() { } test_42c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return trunc_test 42c 1024 [ $BEFOREWRITES -eq $AFTERWRITES ] && \ error "beforewrites $BEFOREWRITES == afterwrites $AFTERWRITES on truncate" @@ -3025,6 +3189,7 @@ test_42c() { run_test 42c "test partial truncate of file with cached dirty data" test_42d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return trunc_test 42d 0 [ $BEFOREWRITES -eq $AFTERWRITES ] || \ error "beforewrites $BEFOREWRITES != afterwrites $AFTERWRITES on truncate" @@ -3033,6 +3198,7 @@ test_42d() { run_test 42d "test complete truncate of file with cached dirty data" test_42e() { # bug22074 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local TDIR=$DIR/${tdir}e local pagesz=$(page_size) local pages=16 # hardcoded 16 pages, don't change it. @@ -3121,6 +3287,7 @@ test_43() { run_test 43 "execution of file opened for write should return -ETXTBSY" test_43a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir cp -p `which $MULTIOP` $DIR/$tdir/multiop || cp -p multiop $DIR/$tdir/multiop @@ -3135,6 +3302,7 @@ test_43a() { run_test 43a "open(RDWR) of file being executed should return -ETXTBSY" test_43b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir cp -p `which $MULTIOP` $DIR/$tdir/multiop || cp -p multiop $DIR/$tdir/multiop @@ -3215,6 +3383,7 @@ do_dirty_record() { echo before $before, after $after } test_45() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return f="$DIR/f45" # Obtain grants from OST if it supports it echo blah > ${f}_grant @@ -3241,6 +3410,7 @@ run_test 45 "osc io page accounting ============================" # objects offset and an assert hit when an rpc was built with 1023's mapped # offset 511 and 511's raw 511 offset. it also found general redirtying bugs. test_46() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return f="$DIR/f46" stop_writeback sync @@ -3376,6 +3546,7 @@ test_48e() { # bug 4134 run_test 48e "Access to recreated parent subdir (should return errors)" test_49() { # LU-1030 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # get ost1 size - lustre-OST0000 ost1_size=$(do_facet ost1 lfs df |grep ${ost1_svc} |awk '{print $4}') # write 800M at maximum @@ -3409,7 +3580,7 @@ run_test 50 "special situations: /proc symlinks ===============" test_51a() { # was test_51 # bug 1516 - create an empty entry right after ".." then split dir - test_mkdir $DIR/$tdir + test_mkdir -p $DIR/$tdir touch $DIR/$tdir/foo $MCREATE $DIR/$tdir/bar rm $DIR/$tdir/foo @@ -3427,8 +3598,12 @@ run_test 51a "special situations: split htree with empty entry ==" export NUMTEST=70000 test_51b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local BASE=$DIR/$tdir + # cleanup the directory + rm -fr $BASE + test_mkdir -p $BASE local mdtidx=$(printf "%04x" $($LFS getstripe -M $BASE)) @@ -3496,6 +3671,7 @@ test_51ba() { # LU-993 run_test 51ba "verify nlink for many subdirectory cleanup" test_51d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$OSTCOUNT" -lt "3" ] && skip_env "skipping test with few OSTs" && return test_mkdir -p $DIR/$tdir createmany -o $DIR/$tdir/t- 1000 @@ -3566,6 +3742,7 @@ test_52b() { run_test 52b "immutable flag test (should return errors) =======" test_53() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -3574,6 +3751,7 @@ test_53() { local mds_last local ost_last local ostnum + local node # only test MDT0000 local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS) @@ -3581,8 +3759,10 @@ test_53() { param=`echo ${value[0]} | cut -d "=" -f1` ostname=`echo $param | cut -d "." -f2 | cut -d - -f 1-2` mds_last=$(do_facet $SINGLEMDS lctl get_param -n $param) - ostnum=$(echo $ostname | sed "s/${FSNAME}-OST//g" | awk '{print ($1+1)}' ) - ost_last=$(do_facet ost$ostnum lctl get_param -n obdfilter.$ostname.last_id | head -n 1) + ostnum=$(index_from_ostuuid ${ostname}_UUID) + node=$(facet_active_host ost$((ostnum+1))) + param="obdfilter.$ostname.last_id" + ost_last=$(do_node $node lctl get_param -n $param | head -n 1) echo "$ostname.last_id=$ost_last ; MDS.last_id=$mds_last" if [ $ost_last != $mds_last ]; then error "$ostname.last_id=$ost_last ; MDS.last_id=$mds_last" @@ -3622,6 +3802,7 @@ find_loop_dev() { } test_54c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return tfile="$DIR/f54c" tdir="$DIR/d54c" loopdev="$DIR/loop54c" @@ -4153,7 +4334,8 @@ check_stripe_count() { } test_56w() { - TDIR=$DIR/${tdir}w + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + TDIR=$DIR/${tdir}w rm -rf $TDIR || error "remove $TDIR failed" setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT" @@ -4228,7 +4410,31 @@ test_56w() { } run_test 56w "check lfs_migrate -c stripe_count works" +test_56x() { + check_swap_layouts_support && return 0 + [ "$OSTCOUNT" -lt "2" ] && + skip_env "need 2 OST, skipping test" && return + + local dir0=$DIR/$tdir/$testnum + mkdir -p $dir0 || error "creating dir $dir0" + + local ref1=/etc/passwd + local file1=$dir0/file1 + + $SETSTRIPE -c 2 $file1 + cp $ref1 $file1 + $LFS migrate -c 1 $file1 || error "migrate failed rc = $?" + stripe=$($GETSTRIPE -c $file1) + [[ $stripe == 1 ]] || error "stripe of $file1 is $stripe != 1" + cmp $file1 $ref1 || error "content mismatch $file1 differs from $ref1" + + # clean up + rm -f $file1 +} +run_test 56x "lfs migration support" + test_57a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # note test will not do anything if MDS is not local if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then skip "Only applicable to ldiskfs-based MDTs" @@ -4250,6 +4456,7 @@ test_57a() { run_test 57a "verify MDS filesystem created with large inodes ==" test_57b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then skip "Only applicable to ldiskfs-based MDTs" return @@ -4309,12 +4516,15 @@ test_57b() { run_test 57b "default LOV EAs are stored inside large inodes ===" test_58() { - [ -z "$(which wiretest 2>/dev/null)" ] && skip_env "could not find wiretest" && return - wiretest + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [ -z "$(which wiretest 2>/dev/null)" ] && + skip_env "could not find wiretest" && return + wiretest } run_test 58 "verify cross-platform wire constants ==============" test_59() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return echo "touch 130 files" createmany -o $DIR/f59- 130 echo "rm 130 files" @@ -4327,6 +4537,7 @@ run_test 59 "verify cancellation of llog records async =========" TEST60_HEAD="test_60 run $RANDOM" test_60a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mgs_nodsh && skip "remote MGS with nodsh" && return [ ! -f run-llog.sh ] && skip_env "missing subtest run-llog.sh" && return log "$TEST60_HEAD - from kernel mode" @@ -4335,6 +4546,7 @@ test_60a() { run_test 60a "llog sanity tests run from kernel module ==========" test_60b() { # bug 6411 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return dmesg > $DIR/$tfile LLOG_COUNT=`dmesg | awk "/$TEST60_HEAD/{marker = 1; from_marker = 0;} /llog.test/ { @@ -4353,6 +4565,7 @@ test_60b() { # bug 6411 run_test 60b "limit repeated messages from CERROR/CWARN ========" test_60c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return echo "create 5000 files" createmany -o $DIR/f60c- 5000 #define OBD_FAIL_MDS_LLOG_CREATE_FAILED 0x137 @@ -4363,6 +4576,7 @@ test_60c() { run_test 60c "unlink file when mds full" test_60d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return SAVEPRINTK=$(lctl get_param -n printk) # verify "lctl mark" is even working" @@ -4382,6 +4596,7 @@ test_60d() { run_test 60d "test printk console message masking" test_61() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return f="$DIR/f61" dd if=/dev/zero of=$f bs=`page_size` count=1 cancel_lru_locks osc @@ -4392,6 +4607,7 @@ run_test 61 "mmap() writes don't make sync hang ================" # bug 2330 - insufficient obd_match error checking causes LBUG test_62() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return f="$DIR/f62" echo foo > $f cancel_lru_locks osc @@ -4405,6 +4621,7 @@ test_62() { # bug 2319 - oig_wait() interrupted causes crash because of invalid waitq. test_63a() { # was test_63 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return MAX_DIRTY_MB=`lctl get_param -n osc.*.max_dirty_mb | head -n 1` lctl set_param -n osc.*.max_dirty_mb 0 for i in `seq 10` ; do @@ -4422,6 +4639,7 @@ run_test 63a "Verify oig_wait interruption does not crash =======" # bug 2248 - async write errors didn't return to application on sync # bug 3677 - async write errors left page locked test_63b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return debugsave lctl set_param debug=-1 @@ -4441,12 +4659,14 @@ test_63b() { run_test 63b "async write errors should be returned to fsync ===" test_64a () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return df $DIR lctl get_param -n osc.*[oO][sS][cC][_-]*.cur* | grep "[0-9]" } run_test 64a "verify filter grant calculations (in kernel) =====" test_64b () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ ! -f oos.sh ] && skip_env "missing subtest oos.sh" && return sh oos.sh $MOUNT } @@ -4459,6 +4679,7 @@ run_test 64c "verify grant shrink ========================------" # bug 1414 - set/get directories' stripe info test_65a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir touch $DIR/$tdir/f1 $LVERIFY $DIR/$tdir $DIR/$tdir/f1 || error "lverify failed" @@ -4466,6 +4687,7 @@ test_65a() { run_test 65a "directory with no stripe info ====================" test_65b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir || error "setstripe" @@ -4475,6 +4697,7 @@ test_65b() { run_test 65b "directory setstripe -S $((STRIPESIZE * 2)) -i 0 -c 1" test_65c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return if [ $OSTCOUNT -gt 1 ]; then test_mkdir -p $DIR/$tdir $SETSTRIPE -S $(($STRIPESIZE * 4)) -i 1 \ @@ -4486,6 +4709,7 @@ test_65c() { run_test 65c "directory setstripe -S $((STRIPESIZE*4)) -i 1 -c $((OSTCOUNT-1))" test_65d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir if [ $STRIPECOUNT -le 0 ]; then sc=1 @@ -4503,6 +4727,7 @@ test_65d() { run_test 65d "directory setstripe -S $STRIPESIZE -c stripe_count" test_65e() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir $SETSTRIPE $DIR/$tdir || error "setstripe" @@ -4514,12 +4739,14 @@ test_65e() { run_test 65e "directory setstripe defaults =======================" test_65f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/${tdir}f $RUNAS $SETSTRIPE $DIR/${tdir}f && error "setstripe succeeded" || true } run_test 65f "dir setstripe permission (should return error) ===" test_65g() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir || error "setstripe" @@ -4530,6 +4757,7 @@ test_65g() { run_test 65g "directory setstripe -d ===========================" test_65h() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir || error "setstripe" @@ -4540,26 +4768,31 @@ test_65h() { run_test 65h "directory stripe info inherit ====================" test_65i() { # bug6367 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $SETSTRIPE -S 65536 -c -1 $MOUNT } run_test 65i "set non-default striping on root directory (bug 6367)=" test_65ia() { # bug12836 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GETSTRIPE $MOUNT || error "getstripe $MOUNT failed" } run_test 65ia "getstripe on -1 default directory striping" test_65ib() { # bug12836 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GETSTRIPE -v $MOUNT || error "getstripe -v $MOUNT failed" } run_test 65ib "getstripe -v on -1 default directory striping" test_65ic() { # bug12836 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $LFS find -mtime -1 $MOUNT > /dev/null || error "find $MOUNT failed" } run_test 65ic "new find on -1 default directory striping" test_65j() { # bug6367 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return sync; sleep 1 # if we aren't already remounting for each test, do so for this test if [ "$CLEANUP" = ":" -a "$I_MOUNTED" = "yes" ]; then @@ -4571,8 +4804,9 @@ test_65j() { # bug6367 run_test 65j "set default striping on root directory (bug 6367)=" test_65k() { # bug11679 - [ "$OSTCOUNT" -lt 2 ] && skip_env "too few OSTs" && return - remote_mds_nodsh && skip "remote MDS with nodsh" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [ "$OSTCOUNT" -lt 2 ] && skip_env "too few OSTs" && return + remote_mds_nodsh && skip "remote MDS with nodsh" && return echo "Check OST status: " local MDS_OSCS=`do_facet $SINGLEMDS lctl dl | @@ -4606,6 +4840,7 @@ test_65k() { # bug11679 run_test 65k "validate manual striping works properly with deactivated OSCs" test_65l() { # bug 12836 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir/test_dir $SETSTRIPE -c -1 $DIR/$tdir/test_dir $LFS find -mtime -1 $DIR/$tdir >/dev/null @@ -4614,6 +4849,7 @@ run_test 65l "lfs find on -1 stripe dir ========================" # bug 2543 - update blocks count on client test_66() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return COUNT=${COUNT:-8} dd if=/dev/zero of=$DIR/f66 bs=1k count=$COUNT sync; sync_all_data; sync; sync_all_data @@ -4626,6 +4862,7 @@ run_test 66 "update inode blocks count on client ===============" LLOOP= LLITELOOPLOAD= cleanup_68() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return trap 0 if [ ! -z "$LLOOP" ]; then if swapon -s | grep -q $LLOOP; then @@ -4653,6 +4890,7 @@ swap_used() { # test case for lloop driver, basic function test_68a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$UID" != 0 ] && skip_env "must run as root" && return llite_lloop_enabled || \ { skip_env "llite_lloop module disabled" && return; } @@ -4682,6 +4920,7 @@ run_test 68a "lloop driver - basic test ========================" # excercise swapping to lustre by adding a high priority swapfile entry # and then consuming memory until it is used. test_68b() { # was test_68 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$UID" != 0 ] && skip_env "must run as root" && return lctl get_param -n devices | grep -q obdfilter && \ skip "local OST" && return @@ -4720,6 +4959,7 @@ run_test 68b "support swapping to Lustre ========================" # bug5265, obdfilter oa2dentry return -ENOENT # #define OBD_FAIL_OST_ENOENT 0x217 test_69() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return f="$DIR/$tfile" @@ -4752,6 +4992,7 @@ test_71() { run_test 71 "Running dbench on lustre (don't segment fault) ====" test_72a() { # bug 5695 - Test that on 2.6 remove_suid works properly + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return check_kernel_version 43 || return 0 [ "$RUNAS_ID" = "$UID" ] && skip_env "RUNAS_ID = UID = $UID -- skipping" && return @@ -4783,6 +5024,7 @@ test_72b() { # bug 24226 -- keep mode setting when size is not changing [ "$RUNAS_ID" -eq 0 ] && \ skip_env "RUNAS_ID = 0 -- skipping" && return + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # Check that testing environment is properly set up. Skip if not FAIL_ON_ERROR=false check_runas_id_ret $RUNAS_ID $RUNAS_ID $RUNAS || { skip_env "User $RUNAS_ID does not exist - skipping" @@ -4806,6 +5048,7 @@ run_test 72b "Test that we keep mode setting if without file data changed (bug 2 # bug 3462 - multiple simultaneous MDC requests test_73() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir $DIR/d73-1 test_mkdir $DIR/d73-2 multiop_bg_pause $DIR/d73-1/f73-1 O_c || return 1 @@ -4833,6 +5076,7 @@ test_73() { run_test 73 "multiple MDC requests (should not deadlock)" test_74a() { # bug 6149, 6184 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_LDLM_ENQUEUE_OLD_EXPORT 0x30e # # very important to OR with OBD_FAIL_ONCE (0x80000000) -- otherwise it @@ -4848,6 +5092,7 @@ test_74a() { # bug 6149, 6184 run_test 74a "ldlm_enqueue freed-export error path, ls (shouldn't LBUG)" test_74b() { # bug 13310 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_LDLM_ENQUEUE_OLD_EXPORT 0x30e # # very important to OR with OBD_FAIL_ONCE (0x80000000) -- otherwise it @@ -4862,6 +5107,7 @@ test_74b() { # bug 13310 run_test 74b "ldlm_enqueue freed-export error path, touch (shouldn't LBUG)" test_74c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_LDLM_NEW_LOCK lctl set_param fail_loc=0x80000319 touch $DIR/$tfile && error "Touch successful" @@ -4882,6 +5128,7 @@ set_inode_slab_tunables() { } test_76() { # Now for bug 20433, added originally in bug 1443 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local SLAB_SETTINGS=`get_inode_slab_tunables` local CPUS=`getconf _NPROCESSORS_ONLN` # we cannot set limit below 1 which means 1 inode in each @@ -4947,6 +5194,7 @@ setup_f77() { } test_77a() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return [ ! -f $F77_TMP ] && setup_f77 set_checksums 1 @@ -4957,6 +5205,7 @@ test_77a() { # bug 10889 run_test 77a "normal checksum read/write operation =============" test_77b() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return [ ! -f $F77_TMP ] && setup_f77 #define OBD_FAIL_OSC_CHECKSUM_SEND 0x409 @@ -4970,6 +5219,7 @@ test_77b() { # bug 10889 run_test 77b "checksum error on client write ====================" test_77c() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return [ ! -f $DIR/f77b ] && skip "requires 77b - skipping" && return set_checksums 1 @@ -4988,6 +5238,7 @@ test_77c() { # bug 10889 run_test 77c "checksum error on client read ===================" test_77d() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return #define OBD_FAIL_OSC_CHECKSUM_SEND 0x409 lctl set_param fail_loc=0x80000409 @@ -5000,6 +5251,7 @@ test_77d() { # bug 10889 run_test 77d "checksum error on OST direct write ===============" test_77e() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return [ ! -f $DIR/f77 ] && skip "requires 77d - skipping" && return #define OBD_FAIL_OSC_CHECKSUM_RECEIVE 0x408 @@ -5014,6 +5266,7 @@ test_77e() { # bug 10889 run_test 77e "checksum error on OST direct read ================" test_77f() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return set_checksums 1 for algo in $CKSUM_TYPES; do @@ -5031,6 +5284,7 @@ test_77f() { # bug 10889 run_test 77f "repeat checksum error on write (expect error) ====" test_77g() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -5048,6 +5302,7 @@ test_77g() { # bug 10889 run_test 77g "checksum error on OST write ======================" test_77h() { # bug 10889 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return remote_ost_nodsh && skip "remote OST with nodsh" && return @@ -5063,6 +5318,7 @@ test_77h() { # bug 10889 run_test 77h "checksum error on OST read =======================" test_77i() { # bug 13805 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return #define OBD_FAIL_OSC_CONNECT_CKSUM 0x40b lctl set_param fail_loc=0x40b @@ -5078,6 +5334,7 @@ test_77i() { # bug 13805 run_test 77i "client not supporting OSD_CONNECT_CKSUM ==========" test_77j() { # bug 13805 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $GSS && skip "could not run with gss" && return #define OBD_FAIL_OSC_CKSUM_ADLER_ONLY 0x40c lctl set_param fail_loc=0x40c @@ -5098,6 +5355,7 @@ rm -f $F77_TMP unset F77_TMP test_78() { # bug 10901 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost || { skip_env "local OST" && return; } NSEQ=5 @@ -5140,6 +5398,7 @@ test_78() { # bug 10901 run_test 78 "handle large O_DIRECT writes correctly ============" test_79() { # bug 12743 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return wait_delete_completed BKTOTAL=$(calc_osc_kbytes kbytestotal) @@ -5170,6 +5429,7 @@ test_79() { # bug 12743 run_test 79 "df report consistency check =======================" test_80() { # bug 10718 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # relax strong synchronous semantics for slow backends like ZFS local soc="obdfilter.*.sync_on_lock_cancel" local soc_old=$(do_facet ost1 lctl get_param -n $soc | head -n1) @@ -5197,6 +5457,7 @@ test_80() { # bug 10718 run_test 80 "Page eviction is equally fast at high offsets too ====" test_81a() { # LU-456 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return # define OBD_FAIL_OST_MAPBLK_ENOSPC 0x228 # MUST OR with the OBD_FAIL_ONCE (0x80000000) @@ -5213,6 +5474,7 @@ test_81a() { # LU-456 run_test 81a "OST should retry write when get -ENOSPC ===============" test_81b() { # LU-456 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return # define OBD_FAIL_OST_MAPBLK_ENOSPC 0x228 # Don't OR with the OBD_FAIL_ONCE (0x80000000) @@ -5314,6 +5576,7 @@ test_99f() { run_test 99f "cvs commit =======================================" test_100() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$NETTYPE" = tcp ] || \ { skip "TCP secure port test, not useful for NETTYPE=$NETTYPE" && \ return ; } @@ -5356,17 +5619,19 @@ function get_named_value() done } -export CACHE_MAX=`$LCTL get_param -n llite.*.max_cached_mb | head -n 1` +export CACHE_MAX=$($LCTL get_param -n llite.*.max_cached_mb | + awk '/^max_cached_mb/ { print $2 }') + cleanup_101a() { $LCTL set_param -n llite.*.max_cached_mb $CACHE_MAX trap 0 } test_101a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local s local discard local nreads=10000 - [ "$CPU" = "UML" ] && nreads=1000 local cache_limit=32 $LCTL set_param -n osc.*-osc*.rpc_stats 0 @@ -5403,8 +5668,8 @@ setup_test101bc() { STRIPE_OFFSET=0 local list=$(comma_list $(osts_nodes)) - do_nodes $list $LCTL set_param -n obdfilter.*.read_cache_enable=0 - do_nodes $list $LCTL set_param -n obdfilter.*.writethrough_cache_enable=0 + set_osd_param $list '' read_cache_enable 0 + set_osd_param $list '' writethrough_cache_enable 0 trap cleanup_test101bc EXIT # prepare the read-ahead file @@ -5419,8 +5684,8 @@ cleanup_test101bc() { rm -f $DIR/$tfile local list=$(comma_list $(osts_nodes)) - do_nodes $list $LCTL set_param -n obdfilter.*.read_cache_enable=1 - do_nodes $list $LCTL set_param -n obdfilter.*.writethrough_cache_enable=1 + set_osd_param $list '' read_cache_enable 1 + set_osd_param $list '' writethrough_cache_enable 1 } calc_total() { @@ -5447,6 +5712,7 @@ ra_check_101() { } test_101b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$OSTCOUNT" -lt "2" ] && skip_env "skipping stride IO stride-ahead test" && return local STRIPE_SIZE=1048576 local STRIDE_SIZE=$((STRIPE_SIZE*OSTCOUNT)) @@ -5473,10 +5739,11 @@ test_101b() { run_test 101b "check stride-io mode read-ahead =================" test_101c() { - local STRIPE_SIZE=1048576 - local FILE_LENGTH=$((STRIPE_SIZE*100)) - local nreads=10000 - local osc + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + local STRIPE_SIZE=1048576 + local FILE_LENGTH=$((STRIPE_SIZE*100)) + local nreads=10000 + local osc setup_test101bc @@ -5519,9 +5786,10 @@ set_read_ahead() { } test_101d() { - local file=$DIR/$tfile - local size=${FILESIZE_101c:-500} - local ra_MB=${READAHEAD_MB:-40} + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + local file=$DIR/$tfile + local size=${FILESIZE_101c:-500} + local ra_MB=${READAHEAD_MB:-40} local space=$(df -P $DIR | tail -n 1 | awk '{ print $4 }') [ $space -gt $((size * 1024)) ] || @@ -5560,6 +5828,7 @@ test_101d() { run_test 101d "file read with and without read-ahead enabled =================" test_101e() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local file=$DIR/$tfile local size=500 #KB local count=100 @@ -5604,6 +5873,7 @@ cleanup_test101f() { } test_101f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local file=$DIR/$tfile local nreads=1000 @@ -5809,6 +6079,7 @@ find_lustre_tar() { } test_102d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # b10930: tar test for trusted.lov xattr TAR=$(find_lustre_tar) [ -z "$TAR" ] && skip_env "lustre-aware tar is not installed" && return @@ -5822,6 +6093,7 @@ test_102d() { run_test 102d "tar restore stripe info from tarfile,not keep osts ===========" test_102f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # b10930: tar test for trusted.lov xattr TAR=$(find_lustre_tar) [ -z "$TAR" ] && skip_env "lustre-aware tar is not installed" && return @@ -5897,6 +6169,7 @@ test_102i() { # bug 17038 run_test 102i "lgetxattr test on symbolic link ============" test_102j() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return TAR=$(find_lustre_tar) [ -z "$TAR" ] && skip_env "lustre-aware tar is not installed" && return [ "$OSTCOUNT" -lt "2" ] && skip_env "skipping N-stripe test" && return @@ -5993,11 +6266,15 @@ test_103 () { run_acl_subtest inheritance || error "inheritance test failed" rm -f make-tree - echo "LU-974 ignore umask when acl is enabled..." - mkdir $DIR/974 - cd $DIR/974 - run_acl_subtest 974 || error "LU-974 test failed" - rm -rf $DIR/974 + echo "LU-974 ignore umask when acl is enabled..." + run_acl_subtest 974 || error "LU-974 test failed" + if [ $MDSCOUNT -ge 2 ]; then + run_acl_subtest 974_remote || + error "LU-974 test failed under remote dir" + fi + + echo "LU-2561 newly created file is same size as directory..." + run_acl_subtest 2561 || error "LU-2561 test failed" cd $SAVE_PWD umask $SAVE_UMASK @@ -6011,6 +6288,7 @@ test_103 () { run_test 103 "acl test =========================================" test_104a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return touch $DIR/$tfile lfs df || error "lfs df failed" lfs df -ih || error "lfs df -ih failed" @@ -6032,6 +6310,7 @@ test_104a() { run_test 104a "lfs df [-ih] [path] test =========================" test_104b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID -- skipping" && return chmod 666 /dev/obd denied_cnt=$((`$RUNAS $LFS check servers 2>&1 | grep "Permission denied" | wc -l`)) @@ -6044,53 +6323,51 @@ run_test 104b "$RUNAS lfs check servers test ====================" test_105a() { # doesn't work on 2.4 kernels - touch $DIR/$tfile - if [ -n "`mount | grep \"$DIR.*flock\" | grep -v noflock`" ]; - then - flocks_test 1 on -f $DIR/$tfile || error "fail flock on" - else - flocks_test 1 off -f $DIR/$tfile || error "fail flock off" - fi + touch $DIR/$tfile + if [ -n "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ]; then + flocks_test 1 on -f $DIR/$tfile || error "fail flock on" + else + flocks_test 1 off -f $DIR/$tfile || error "fail flock off" + fi rm -f $DIR/$tfile } run_test 105a "flock when mounted without -o flock test ========" test_105b() { - touch $DIR/$tfile - if [ -n "`mount | grep \"$DIR.*flock\" | grep -v noflock`" ]; - then - flocks_test 1 on -c $DIR/$tfile || error "fail flock on" - else - flocks_test 1 off -c $DIR/$tfile || error "fail flock off" - fi + touch $DIR/$tfile + if [ -n "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ]; then + flocks_test 1 on -c $DIR/$tfile || error "fail flock on" + else + flocks_test 1 off -c $DIR/$tfile || error "fail flock off" + fi rm -f $DIR/$tfile } run_test 105b "fcntl when mounted without -o flock test ========" test_105c() { - touch $DIR/$tfile - if [ -n "`mount | grep \"$DIR.*flock\" | grep -v noflock`" ]; - then - flocks_test 1 on -l $DIR/$tfile || error "fail flock on" - else - flocks_test 1 off -l $DIR/$tfile || error "fail flock off" - fi + touch $DIR/$tfile + if [ -n "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ]; then + flocks_test 1 on -l $DIR/$tfile || error "fail flock on" + else + flocks_test 1 off -l $DIR/$tfile || error "fail flock off" + fi rm -f $DIR/$tfile } run_test 105c "lockf when mounted without -o flock test ========" test_105d() { # bug 15924 - test_mkdir -p $DIR/$tdir - [ -z "`mount | grep \"$DIR.*flock\" | grep -v noflock`" ] && \ - skip "mount w/o flock enabled" && return - #define OBD_FAIL_LDLM_CP_CB_WAIT 0x315 - $LCTL set_param fail_loc=0x80000315 - flocks_test 2 $DIR/$tdir + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + test_mkdir -p $DIR/$tdir + [ -z "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ] && \ + skip "mount w/o flock enabled" && return + #define OBD_FAIL_LDLM_CP_CB_WAIT 0x315 + $LCTL set_param fail_loc=0x80000315 + flocks_test 2 $DIR/$tdir } run_test 105d "flock race (should not freeze) ========" test_105e() { # bug 22660 && 22040 - [ -z "`mount | grep \"$DIR.*flock\" | grep -v noflock`" ] && \ + [ -z "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ] && \ skip "mount w/o flock enabled" && return touch $DIR/$tfile flocks_test 3 $DIR/$tfile @@ -6105,6 +6382,7 @@ test_106() { #bug 10921 run_test 106 "attempt exec of dir followed by chown of that dir" test_107() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return CDIR=`pwd` cd $DIR @@ -6154,6 +6432,7 @@ test_110() { run_test 110 "filename length checking" test_115() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return OSTIO_pre=$(ps -e|grep ll_ost_io|awk '{print $4}'|sort -n|tail -1|\ cut -c11-20) [ -z "$OSTIO_pre" ] && skip "no OSS threads" && \ @@ -6201,6 +6480,7 @@ free_min_max () { } test_116a() { # was previously test_116() + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2 OSTs" && return echo -n "Free space priority " @@ -6286,6 +6566,7 @@ test_116a() { # was previously test_116() run_test 116a "stripe QOS: free space balance ===================" test_116b() { # LU-2093 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_MDS_OSC_CREATE_FAIL 0x147 local old_rr old_rr=$(do_facet $SINGLEMDS lctl get_param -n lov.*mdtlov*.qos_threshold_rr) @@ -6301,6 +6582,7 @@ run_test 116b "QoS shouldn't LBUG if not enough OSTs found on the 2nd pass" test_117() # bug 10891 { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 #define OBD_FAIL_OST_SETATTR_CREDITS 0x21e lctl set_param fail_loc=0x21e @@ -6311,6 +6593,7 @@ test_117() # bug 10891 } run_test 117 "verify fsfilt_extend ==========" +NO_SLOW_RESENDCOUNT=4 export OLD_RESENDCOUNT="" set_resend_count () { local PROC_RESENDCOUNT="osc.${FSNAME}-OST*-osc-*.resend_count" @@ -6319,7 +6602,8 @@ set_resend_count () { echo resend_count is set to $(lctl get_param -n $PROC_RESENDCOUNT) } -[ "$SLOW" = "no" ] && set_resend_count 4 # for reduce test_118* time (bug 14842) +# for reduce test_118* time (b=14842) +[ "$SLOW" = "no" ] && set_resend_count $NO_SLOW_RESENDCOUNT # Reset async IO behavior after error case reset_async() { @@ -6334,6 +6618,7 @@ reset_async() { test_118a() #bug 11710 { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return reset_async $MULTIOP $DIR/$tfile oO_CREAT:O_RDWR:O_SYNC:w4096c @@ -6350,6 +6635,7 @@ run_test 118a "verify O_SYNC works ==========" test_118b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return reset_async @@ -6386,6 +6672,11 @@ run_test 118b "Reclaim dirty pages on fatal error ==========" test_118c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + + # for 118c, restore the original resend count, LU-1940 + [ "$SLOW" = "no" ] && [ -n "$OLD_RESENDCOUNT" ] && + set_resend_count $OLD_RESENDCOUNT remote_ost_nodsh && skip "remote OST with nodsh" && return reset_async @@ -6428,8 +6719,12 @@ test_118c() } run_test 118c "Fsync blocks on EROFS until dirty pages are flushed ==========" +# continue to use small resend count to reduce test_118* time (b=14842) +[ "$SLOW" = "no" ] && set_resend_count $NO_SLOW_RESENDCOUNT + test_118d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return reset_async @@ -6468,6 +6763,7 @@ test_118d() run_test 118d "Fsync validation inject a delay of the bulk ==========" test_118f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return reset_async #define OBD_FAIL_OSC_BRW_PREP_REQ2 0x40a @@ -6503,6 +6799,7 @@ test_118f() { run_test 118f "Simulate unrecoverable OSC side error ==========" test_118g() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return reset_async #define OBD_FAIL_OSC_BRW_PREP_REQ 0x406 @@ -6538,6 +6835,7 @@ test_118g() { run_test 118g "Don't stay in wait if we got local -ENOMEM ==========" test_118h() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return reset_async @@ -6575,6 +6873,7 @@ run_test 118h "Verify timeout in handling recoverables errors ==========" [ "$SLOW" = "no" ] && [ -n "$OLD_RESENDCOUNT" ] && set_resend_count $OLD_RESENDCOUNT test_118i() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return reset_async @@ -6615,6 +6914,7 @@ run_test 118i "Fix error before timeout in recoverable error ==========" [ "$SLOW" = "no" ] && set_resend_count 4 test_118j() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return reset_async @@ -6651,6 +6951,7 @@ run_test 118j "Simulate unrecoverable OST side error ==========" test_118k() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OSTs with nodsh" && return #define OBD_FAIL_OST_BRW_WRITE_BULK 0x20e @@ -6673,6 +6974,7 @@ run_test 118k "bio alloc -ENOMEM and IO TERM handling =========" test_118l() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # LU-646 test_mkdir -p $DIR/$tdir $MULTIOP $DIR/$tdir Dy || error "fsync dir failed" @@ -6722,6 +7024,7 @@ run_test 119c "Testing for direct read hitting hole" test_119d() # bug 15950 { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return MAX_RPCS_IN_FLIGHT=`$LCTL get_param -n osc.*OST0000-osc-[^mM]*.max_rpcs_in_flight` $LCTL set_param -n osc.*OST0000-osc-[^mM]*.max_rpcs_in_flight 1 BSIZE=1048576 @@ -6746,6 +7049,7 @@ test_119d() # bug 15950 run_test 119d "The DIO path should try to send a new rpc once one is completed" test_120a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 @@ -6766,6 +7070,7 @@ test_120a() { run_test 120a "Early Lock Cancel: mkdir test" test_120b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 @@ -6786,6 +7091,7 @@ test_120b() { run_test 120b "Early Lock Cancel: create test" test_120c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 @@ -6808,6 +7114,7 @@ test_120c() { run_test 120c "Early Lock Cancel: link test" test_120d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 @@ -6829,6 +7136,7 @@ test_120d() { run_test 120d "Early Lock Cancel: setattr test" test_120e() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 @@ -6856,6 +7164,7 @@ test_120e() { run_test 120e "Early Lock Cancel: unlink test" test_120f() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 test_mkdir -p $DIR/$tdir @@ -6886,6 +7195,7 @@ test_120f() { run_test 120f "Early Lock Cancel: rename test" test_120g() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \ skip "no early lock cancel on server" && return 0 lru_resize_disable mdc @@ -6927,6 +7237,7 @@ test_120g() { run_test 120g "Early Lock Cancel: performance test" test_121() { #bug #10589 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return rm -rf $DIR/$tfile writes=$(LANG=C dd if=/dev/zero of=$DIR/$tfile count=1 2>&1 | awk -F '+' '/out$/ {print $1}') #define OBD_FAIL_LDLM_CANCEL_RACE 0x310 @@ -6939,6 +7250,7 @@ test_121() { #bug #10589 run_test 121 "read cancel race =========" test_123a() { # was test 123, statahead(bug 11401) + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return SLOWOK=0 if [ -z "$(grep "processor.*: 1" /proc/cpuinfo)" ]; then log "testing on UP system. Performance may be not as good as expected." @@ -7020,6 +7332,7 @@ test_123a() { # was test 123, statahead(bug 11401) run_test 123a "verify statahead work" test_123b () { # statahead(bug 15027) + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir createmany -o $DIR/$tdir/$tfile-%d 1000 @@ -7039,6 +7352,7 @@ test_123b () { # statahead(bug 15027) run_test 123b "not panic with network error in statahead enqueue (bug 15027)" test_124a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -z "`lctl get_param -n mdc.*.connect_flags | grep lru_resize`" ] && \ skip "no lru resize on server" && return 0 local NR=2000 @@ -7135,6 +7449,7 @@ get_max_pool_limit() } test_124b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -z "`lctl get_param -n mdc.*.connect_flags | grep lru_resize`" ] && \ skip "no lru resize on server" && return 0 @@ -7226,6 +7541,7 @@ test_126() { # bug 12829/13455 run_test 126 "check that the fsgid provided by the client is taken into account" test_127a() { # bug 15521 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $SETSTRIPE -i 0 -c 1 $DIR/$tfile || error "setstripe failed" $LCTL set_param osc.*.stats=0 FSIZE=$((2048 * 1024)) @@ -7264,6 +7580,7 @@ test_127a() { # bug 15521 run_test 127a "verify the client stats are sane" test_127b() { # bug LU-333 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $LCTL set_param llite.*.stats=0 FSIZE=65536 # sized fixed to match PAGE_SIZE for most clients # perform 2 reads and writes so MAX is different from SUM. @@ -7334,6 +7651,7 @@ set_dir_limits () { } test_129() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then skip "Only applicable to ldiskfs-based MDTs" return @@ -7699,7 +8017,7 @@ get_ost_param() { [ x$gl = x"" ] && gl=0 gl_sum=$((gl_sum + gl)) done - echo $gl + echo $gl_sum } som_mode_switch() { @@ -7725,6 +8043,7 @@ som_mode_switch() { } test_132() { #1028, SOM + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return local num=$(get_mds_dir $DIR) local mymds=mds${num} @@ -7784,6 +8103,7 @@ check_stats() { } test_133a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return @@ -7828,6 +8148,7 @@ test_133a() { run_test 133a "Verifying MDT stats ========================================" test_133b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return local testdir=$DIR/${tdir}/stats_testdir @@ -7856,6 +8177,7 @@ test_133b() { run_test 133b "Verifying extra MDT stats ==================================" test_133c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return local testdir=$DIR/${tdir}/stats_testdir @@ -7940,6 +8262,7 @@ get_rename_size() { } test_133d() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return do_facet $SINGLEMDS $LCTL list_param mdt.*.rename_stats || @@ -8011,7 +8334,84 @@ test_133d() { } run_test 133d "Verifying rename_stats ========================================" +test_133e() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + local testdir=$DIR/${tdir}/stats_testdir + local ctr f0 f1 bs=32768 count=42 sum + + remote_ost_nodsh && skip "remote OST with nodsh" && return + mkdir -p ${testdir} || error "mkdir failed" + + $SETSTRIPE -c 1 -i 0 ${testdir}/${tfile} + + for ctr in {write,read}_bytes; do + sync + cancel_lru_locks osc + + do_facet ost1 $LCTL set_param -n \ + "obdfilter.*.exports.clear=clear" + + if [ $ctr = write_bytes ]; then + f0=/dev/zero + f1=${testdir}/${tfile} + else + f0=${testdir}/${tfile} + f1=/dev/null + fi + + dd if=$f0 of=$f1 conv=notrunc bs=$bs count=$count || \ + error "dd failed" + sync + cancel_lru_locks osc + + sum=$(do_facet ost1 $LCTL get_param \ + "obdfilter.*.exports.*.stats" | \ + awk -v ctr=$ctr '\ + BEGIN { sum = 0 } + $1 == ctr { sum += $7 } + END { print sum }') + + if ((sum != bs * count)); then + error "Bad $ctr sum, expected $((bs * count)), got $sum" + fi + done + + rm -rf $DIR/${tdir} +} +run_test 133e "Verifying OST {read,write}_bytes nid stats =================" + +test_133f() { + local proc_dirs="/proc/fs/lustre/ /proc/sys/lnet/ /proc/sys/lustre/" + local facet + + # First without trusting modes. + find $proc_dirs \ + -exec cat '{}' \; &> /dev/null + + # Second verifying readability. + find $proc_dirs \ + -type f \ + -readable \ + -exec cat '{}' \; > /dev/null || + error "proc file read failed" + + for facet in $SINGLEMDS ost1; do + do_facet $facet find $proc_dirs \ + -not -name req_history \ + -exec cat '{}' \\\; &> /dev/null + + do_facet $facet find $proc_dirs \ + -not -name req_history \ + -type f \ + -readable \ + -exec cat '{}' \\\; > /dev/null || + error "proc file read failed" + done +} +run_test 133f "Check for LBUGs/Oopses/unreadable files in /proc" + test_140() { #bug-17379 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir || error "Creating dir $DIR/$tdir" cd $DIR/$tdir || error "Changing to $DIR/$tdir" cp /usr/bin/stat . || error "Copying stat to $DIR/$tdir" @@ -8050,6 +8450,7 @@ test_140() { #bug-17379 run_test 140 "Check reasonable stack depth (shouldn't LBUG) ====" test_150() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local TF="$TMP/$tfile" dd if=/dev/urandom of=$TF bs=6096 count=1 || error "dd failed" @@ -8082,8 +8483,9 @@ run_test 150 "truncate/append tests" function roc_hit() { local list=$(comma_list $(osts_nodes)) - - echo $(get_obdfilter_param $list '' stats | + #debug temp debug for LU-2902: lets see what values we get back + echo $(get_osd_param $list '' stats) 1>&2 + echo $(get_osd_param $list '' stats | awk '/'cache_hit'/ {sum+=$2} END {print sum}') } @@ -8094,44 +8496,59 @@ function set_cache() { on=0; fi local list=$(comma_list $(osts_nodes)) - set_obdfilter_param $list '' $1_cache_enable $on + set_osd_param $list '' $1_cache_enable $on cancel_lru_locks osc } test_151() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return local CPAGES=3 local list=$(comma_list $(osts_nodes)) # check whether obdfilter is cache capable at all - if ! get_obdfilter_param $list '' read_cache_enable >/dev/null; then + if ! get_osd_param $list '' read_cache_enable >/dev/null; then echo "not cache-capable obdfilter" return 0 fi # check cache is enabled on all obdfilters - if get_obdfilter_param $list '' read_cache_enable | grep 0; then + if get_osd_param $list '' read_cache_enable | grep 0; then echo "oss cache is disabled" return 0 fi - set_obdfilter_param $list '' writethrough_cache_enable 1 + set_osd_param $list '' writethrough_cache_enable 1 - # pages should be in the case right after write - dd if=/dev/urandom of=$DIR/$tfile bs=4k count=$CPAGES || error "dd failed" - local BEFORE=`roc_hit` - cancel_lru_locks osc - cat $DIR/$tfile >/dev/null - local AFTER=`roc_hit` - if ! let "AFTER - BEFORE == CPAGES"; then - error "NOT IN CACHE: before: $BEFORE, after: $AFTER" - fi + # check write cache is enabled on all obdfilters + if get_osd_param $list '' writethrough_cache_enable | grep 0; then + echo "oss write cache is NOT enabled" + return 0 + fi + +#define OBD_FAIL_OBD_NO_LRU 0x609 + do_nodes $list $LCTL set_param fail_loc=0x609 + + # pages should be in the case right after write + dd if=/dev/urandom of=$DIR/$tfile bs=4k count=$CPAGES || + error "dd failed" + + local BEFORE=`roc_hit` + cancel_lru_locks osc + cat $DIR/$tfile >/dev/null + local AFTER=`roc_hit` + + do_nodes $list $LCTL set_param fail_loc=0 + + if ! let "AFTER - BEFORE == CPAGES"; then + error "NOT IN CACHE: before: $BEFORE, after: $AFTER" + fi # the following read invalidates the cache cancel_lru_locks osc - set_obdfilter_param $list '' read_cache_enable 0 + set_osd_param $list '' read_cache_enable 0 cat $DIR/$tfile >/dev/null # now data shouldn't be found in the cache @@ -8143,12 +8560,13 @@ test_151() { error "IN CACHE: before: $BEFORE, after: $AFTER" fi - set_obdfilter_param $list '' read_cache_enable 1 + set_osd_param $list '' read_cache_enable 1 rm -f $DIR/$tfile } run_test 151 "test cache on oss and controls ===============================" test_152() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local TF="$TMP/$tfile" # simulate ENOMEM during write @@ -8176,17 +8594,10 @@ test_153() { } run_test 153 "test if fdatasync does not crash =======================" -test_154() { - [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] || - { skip "Need MDS version at least 2.2.51"; return 0; } - - cp /etc/hosts $DIR/$tfile - - fid=$($LFS path2fid $DIR/$tfile) - rc=$? - [ $rc -ne 0 ] && error "error: could not get fid for $DIR/$tfile." - - ffid=$DIR/.lustre/fid/$fid +dot_lustre_fid_permission_check() { + local fid=$1 + local ffid=$MOUNT/.lustre/fid/$fid + local test_dir=$2 echo "stat fid $fid" stat $ffid > /dev/null || error "stat $ffid failed." @@ -8199,14 +8610,16 @@ test_154() { echo "append write to fid $fid" cat /etc/hosts >> $ffid || error "append write $ffid failed." echo "rename fid $fid" - mv $ffid $DIR/$tfile.1 && error "rename $ffid to $tfile.1 should fail." - touch $DIR/$tfile.1 - mv $DIR/$tfile.1 $ffid && error "rename $tfile.1 to $ffid should fail." - rm -f $DIR/$tfile.1 + mv $ffid $test_dir/$tfile.1 && + error "rename $ffid to $tfile.1 should fail." + touch $test_dir/$tfile.1 + mv $test_dir/$tfile.1 $ffid && + error "rename $tfile.1 to $ffid should fail." + rm -f $test_dir/$tfile.1 echo "truncate fid $fid" $TRUNCATE $ffid 777 || error "truncate $ffid failed." echo "link fid $fid" - ln -f $ffid $DIR/tfile.lnk || error "link $ffid failed." + ln -f $ffid $test_dir/tfile.lnk || error "link $ffid failed." if [ -n $(lctl get_param -n mdc.*-mdc-*.connect_flags | grep acl) ]; then echo "setfacl fid $fid" setfacl -R -m u:bin:rwx $ffid || error "setfacl $ffid failed." @@ -8214,80 +8627,136 @@ test_154() { getfacl $ffid >/dev/null || error "getfacl $ffid failed." fi echo "unlink fid $fid" - unlink $DIR/.lustre/fid/$fid && error "unlink $ffid should fail." + unlink $MOUNT/.lustre/fid/$fid && error "unlink $ffid should fail." echo "mknod fid $fid" mknod $ffid c 1 3 && error "mknod $ffid should fail." fid=[0xf00000400:0x1:0x0] - ffid=$DIR/.lustre/fid/$fid + ffid=$MOUNT/.lustre/fid/$fid echo "stat non-exist fid $fid" stat $ffid > /dev/null && error "stat non-exist $ffid should fail." echo "write to non-exist fid $fid" cat /etc/hosts > $ffid && error "write non-exist $ffid should fail." echo "link new fid $fid" - ln $DIR/$tfile $ffid && error "link $ffid should fail." + ln $test_dir/$tfile $ffid && error "link $ffid should fail." - test_mkdir -p $DIR/$tdir - touch $DIR/$tdir/$tfile - fid=$($LFS path2fid $DIR/$tdir) + mkdir -p $test_dir/$tdir + touch $test_dir/$tdir/$tfile + fid=$($LFS path2fid $test_dir/$tdir) rc=$? - [ $rc -ne 0 ] && error "error: could not get fid for $DIR/$tfile." + [ $rc -ne 0 ] && + error "error: could not get fid for $test_dir/$dir/$tfile." - ffid=$DIR/.lustre/fid/$fid + ffid=$MOUNT/.lustre/fid/$fid echo "ls $fid" ls $ffid > /dev/null || error "ls $ffid failed." echo "touch $fid/$tfile.1" touch $ffid/$tfile.1 || error "touch $ffid/$tfile.1 failed." - echo "touch $DIR/.lustre/fid/$tfile" - touch $DIR/.lustre/fid/$tfile && \ - error "touch $DIR/.lustre/fid/$tfile should fail." + echo "touch $MOUNT/.lustre/fid/$tfile" + touch $MOUNT/.lustre/fid/$tfile && \ + error "touch $MOUNT/.lustre/fid/$tfile should fail." - echo "setxattr to $DIR/.lustre/fid" - setfattr -n trusted.name1 -v value1 $DIR/.lustre/fid && + echo "setxattr to $MOUNT/.lustre/fid" + setfattr -n trusted.name1 -v value1 $MOUNT/.lustre/fid && error "setxattr should fail." - echo "listxattr for $DIR/.lustre/fid" - getfattr -d -m "^trusted" $DIR/.lustre/fid && + echo "listxattr for $MOUNT/.lustre/fid" + getfattr -d -m "^trusted" $MOUNT/.lustre/fid && error "listxattr should fail." - echo "delxattr from $DIR/.lustre/fid" - setfattr -x trusted.name1 $DIR/.lustre/fid && + echo "delxattr from $MOUNT/.lustre/fid" + setfattr -x trusted.name1 $MOUNT/.lustre/fid && error "delxattr should fail." - echo "touch invalid fid: $DIR/.lustre/fid/[0x200000400:0x2:0x3]" - touch $DIR/.lustre/fid/[0x200000400:0x2:0x3] && + echo "touch invalid fid: $MOUNT/.lustre/fid/[0x200000400:0x2:0x3]" + touch $MOUNT/.lustre/fid/[0x200000400:0x2:0x3] && error "touch invalid fid should fail." - echo "touch non-normal fid: $DIR/.lustre/fid/[0x1:0x2:0x0]" - touch $DIR/.lustre/fid/[0x1:0x2:0x0] && + echo "touch non-normal fid: $MOUNT/.lustre/fid/[0x1:0x2:0x0]" + touch $MOUNT/.lustre/fid/[0x1:0x2:0x0] && error "touch non-normal fid should fail." - echo "rename $tdir to $DIR/.lustre/fid" - mrename $DIR/$tdir $DIR/.lustre/fid && - error "rename to $DIR/.lustre/fid should fail." + echo "rename $tdir to $MOUNT/.lustre/fid" + mrename $test_dir/$tdir $MOUNT/.lustre/fid && + error "rename to $MOUNT/.lustre/fid should fail." echo "rename .lustre to itself" - fid=$($LFS path2fid $DIR) - mrename $DIR/.lustre $DIR/.lustre/fid/$fid/.lustre && + fid=$($LFS path2fid $MOUNT) + mrename $MOUNT/.lustre $MOUNT/.lustre/fid/$fid/.lustre && error "rename .lustre to itself should fail." - $OPENFILE -f O_LOV_DELAY_CREATE:O_CREAT $DIR/$tfile-2 - fid=$($LFS path2fid $DIR/$tfile-2) - echo "cp /etc/passwd $DIR/.lustre/fid/$fid" - cp /etc/passwd $DIR/.lustre/fid/$fid && + $OPENFILE -f O_LOV_DELAY_CREATE:O_CREAT $test_dir/$tfile-2 + fid=$($LFS path2fid $test_dir/$tfile-2) + echo "cp /etc/passwd $MOUNT/.lustre/fid/$fid" + cp /etc/passwd $MOUNT/.lustre/fid/$fid && error "create lov data thru .lustre should fail." - echo "cp /etc/passwd $DIR/$tfile-2" - cp /etc/passwd $DIR/$tfile-2 || error "copy to $DIR/$tfile-2 failed." - echo "diff /etc/passwd $DIR/.lustre/fid/$fid" - diff /etc/passwd $DIR/.lustre/fid/$fid || - error "diff /etc/passwd $DIR/.lustre/fid/$fid failed." + echo "cp /etc/passwd $test_dir/$tfile-2" + cp /etc/passwd $test_dir/$tfile-2 || + error "copy to $test_dir/$tfile-2 failed." + echo "diff /etc/passwd $MOUNT/.lustre/fid/$fid" + diff /etc/passwd $MOUNT/.lustre/fid/$fid || + error "diff /etc/passwd $MOUNT/.lustre/fid/$fid failed." - echo "Open-by-FID succeeded" + rm -rf $test_dir/tfile.lnk + rm -rf $test_dir/$tfile-2 } -run_test 154 "Open-by-FID" + +test_154a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] || + { skip "Need MDS version at least 2.2.51"; return 0; } + + cp /etc/hosts $DIR/$tfile + + fid=$($LFS path2fid $DIR/$tfile) + rc=$? + [ $rc -ne 0 ] && error "error: could not get fid for $DIR/$tfile." + + dot_lustre_fid_permission_check "$fid" $DIR || + error "dot lustre permission check $fid failed" + + rm -rf $MOUNT/.lustre && error ".lustre is not allowed to be unlinked" + chmod 777 $MOUNT/.lustre && error ".lustre is not allowed to be chmod" + + touch $MOUNT/.lustre/file && + error "creation is not allowed under .lustre" + + mkdir $MOUNT/.lustre/dir && + error "mkdir is not allowed under .lustre" + + rm -rf $DIR/$tfile +} +run_test 154a "Open-by-FID" + +test_154b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] || + { skip "Need MDS version at least 2.2.51"; return 0; } + + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + local rc=0 + + mkdir -p $DIR/$tdir + $LFS mkdir -i $MDTIDX $remote_dir || + error "create remote directory failed" + + cp /etc/hosts $remote_dir/$tfile + + fid=$($LFS path2fid $remote_dir/$tfile) + rc=$? + [ $rc -ne 0 ] && error "error: could not get fid for $remote_dir/$tfile" + + dot_lustre_fid_permission_check "$fid" $remote_dir || + error "dot lustre permission check $fid failed" + rm -rf $DIR/$tdir +} +run_test 154b "Open-by-FID for remote directory" test_155_small_load() { local temp=$TMP/$tfile @@ -8346,66 +8815,75 @@ test_155_big_load() { } test_155a() { - set_cache read on - set_cache writethrough on - test_155_small_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read on + set_cache writethrough on + test_155_small_load } run_test 155a "Verify small file correctness: read cache:on write_cache:on" test_155b() { - set_cache read on - set_cache writethrough off - test_155_small_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read on + set_cache writethrough off + test_155_small_load } run_test 155b "Verify small file correctness: read cache:on write_cache:off" test_155c() { - set_cache read off - set_cache writethrough on - test_155_small_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read off + set_cache writethrough on + test_155_small_load } run_test 155c "Verify small file correctness: read cache:off write_cache:on" test_155d() { - set_cache read off - set_cache writethrough off - test_155_small_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read off + set_cache writethrough off + test_155_small_load } run_test 155d "Verify small file correctness: read cache:off write_cache:off" test_155e() { - set_cache read on - set_cache writethrough on - test_155_big_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read on + set_cache writethrough on + test_155_big_load } run_test 155e "Verify big file correctness: read cache:on write_cache:on" test_155f() { - set_cache read on - set_cache writethrough off - test_155_big_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read on + set_cache writethrough off + test_155_big_load } run_test 155f "Verify big file correctness: read cache:on write_cache:off" test_155g() { - set_cache read off - set_cache writethrough on - test_155_big_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read off + set_cache writethrough on + test_155_big_load } run_test 155g "Verify big file correctness: read cache:off write_cache:on" test_155h() { - set_cache read off - set_cache writethrough off - test_155_big_load + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + set_cache read off + set_cache writethrough off + test_155_big_load } run_test 155h "Verify big file correctness: read cache:off write_cache:off" test_156() { - local CPAGES=3 - local BEFORE - local AFTER - local file="$DIR/$tfile" + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + local CPAGES=3 + local BEFORE + local AFTER + local file="$DIR/$tfile" [ "$(facet_fstype ost1)" = "zfs" ] && skip "LU-1956/LU-2261: stats unimplemented on OSD ZFS" && @@ -8565,6 +9043,7 @@ changelog_chmask() } test_160() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] || { skip "Need MDS version at least 2.2.0"; return; } @@ -8654,7 +9133,8 @@ test_160() { } run_test 160 "changelog sanity" -test_161() { +test_161a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir cp /etc/hosts $DIR/$tdir/$tfile test_mkdir $DIR/$tdir/foo1 @@ -8663,11 +9143,11 @@ test_161() { ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/zachary ln $DIR/$tdir/$tfile $DIR/$tdir/foo1/luna ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/thor - local FID=$($LFS path2fid $DIR/$tdir/$tfile | tr -d '[') - if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then - $LFS fid2path $DIR $FID - err17935 "bad link ea" - fi + local FID=$($LFS path2fid $DIR/$tdir/$tfile | tr -d '[]') + if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then + $LFS fid2path $DIR $FID + err17935 "bad link ea" + fi # middle rm $DIR/$tdir/foo2/zachary # last @@ -8693,7 +9173,59 @@ test_161() { unlinkmany $DIR/$tdir/foo2/$longname 1000 || \ error "failed to unlink many hardlinks" } -run_test 161 "link ea sanity" +run_test 161a "link ea sanity" + +test_161b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [ $MDSCOUNT -lt 2 ] && + skip "skipping remote directory test" && return + local MDTIDX=1 + local remote_dir=$DIR/$tdir/remote_dir + + mkdir -p $DIR/$tdir + $LFS mkdir -i $MDTIDX $remote_dir || + error "create remote directory failed" + + cp /etc/hosts $remote_dir/$tfile + mkdir -p $remote_dir/foo1 + mkdir -p $remote_dir/foo2 + ln $remote_dir/$tfile $remote_dir/foo1/sofia + ln $remote_dir/$tfile $remote_dir/foo2/zachary + ln $remote_dir/$tfile $remote_dir/foo1/luna + ln $remote_dir/$tfile $remote_dir/foo2/thor + + local FID=$($LFS path2fid $remote_dir/$tfile | tr -d '[' | + tr -d ']') + if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then + $LFS fid2path $DIR $FID + err17935 "bad link ea" + fi + # middle + rm $remote_dir/foo2/zachary + # last + rm $remote_dir/foo2/thor + # first + rm $remote_dir/$tfile + # rename + mv $remote_dir/foo1/sofia $remote_dir/foo2/maggie + local link_path=$($LFS fid2path $FSNAME --link 1 $FID) + if [ "$DIR/$link_path" != "$remote_dir/foo2/maggie" ]; then + $LFS fid2path $DIR $FID + err17935 "bad link rename" + fi + rm $remote_dir/foo2/maggie + + # overflow the EA + local longname=filename_avg_len_is_thirty_two_ + createmany -l$remote_dir/foo1/luna $remote_dir/foo2/$longname 1000 || + error "failed to hardlink many files" + links=$($LFS fid2path $DIR $FID | wc -l) + echo -n "${links}/1000 links in link EA" + [ ${links} -gt 60 ] || err17935 "expected at least 60 links in link EA" + unlinkmany $remote_dir/foo2/$longname 1000 || + error "failed to unlink many hardlinks" +} +run_test 161b "link ea sanity under remote directory" check_path() { local expected=$1 @@ -8715,6 +9247,7 @@ check_path() { test_162() { # Make changes to filesystem + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir/d2 touch $DIR/$tdir/d2/$tfile touch $DIR/$tdir/d2/x1 @@ -8757,6 +9290,7 @@ test_162() { run_test 162 "path lookup sanity" test_163() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mds_nodsh && skip "remote MDS with nodsh" && return copytool --test $FSNAME || { skip "copytool not runnable: $?" && return; } copytool $FSNAME & @@ -8787,6 +9321,7 @@ test_169() { run_test 169 "parallel read and truncate should not deadlock" test_170() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return $LCTL clear # bug 18514 $LCTL debug_daemon start $TMP/${tfile}_log_good touch $DIR/$tfile @@ -8840,6 +9375,7 @@ test_170() { run_test 170 "test lctl df to handle corrupted log =====================" test_171() { # bug20592 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_PTLRPC_DUMP_LOG 0x50e $LCTL set_param fail_loc=0x50e $LCTL set_param fail_val=3000 @@ -8904,6 +9440,7 @@ obdecho_create_test() { } test_180a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return local rc=0 local rmmod_local=0 @@ -8929,6 +9466,7 @@ test_180a() { run_test 180a "test obdecho on osc" test_180b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return local rc=0 local rmmod_remote=0 @@ -8963,6 +9501,7 @@ test_181() { # bug 22177 run_test 181 "Test open-unlinked dir ========================" test_182() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # disable MDC RPC lock wouldn't crash client local fcount=1000 local tcount=4 @@ -8989,6 +9528,7 @@ test_182() { run_test 182 "Disable MDC RPCs semaphore wouldn't crash client ================" test_183() { # LU-2275 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir" echo aaa > $DIR/$tdir/$tfile @@ -9009,6 +9549,142 @@ test_183() { # LU-2275 } run_test 183 "No crash or request leak in case of strange dispositions ========" +# test suite 184 is for LU-2016, LU-2017 +test_184a() { + check_swap_layouts_support && return 0 + + dir0=$DIR/$tdir/$testnum + test_mkdir -p $dir0 || error "creating dir $dir0" + ref1=/etc/passwd + ref2=/etc/group + file1=$dir0/f1 + file2=$dir0/f2 + $SETSTRIPE -c1 $file1 + cp $ref1 $file1 + $SETSTRIPE -c2 $file2 + cp $ref2 $file2 + gen1=$($GETSTRIPE -g $file1) + gen2=$($GETSTRIPE -g $file2) + + $LFS swap_layouts $file1 $file2 || error "swap of file layout failed" + gen=$($GETSTRIPE -g $file1) + [[ $gen1 != $gen ]] || + "Layout generation on $file1 does not change" + gen=$($GETSTRIPE -g $file2) + [[ $gen2 != $gen ]] || + "Layout generation on $file2 does not change" + + cmp $ref1 $file2 || error "content compare failed ($ref1 != $file2)" + cmp $ref2 $file1 || error "content compare failed ($ref2 != $file1)" +} +run_test 184a "Basic layout swap" + +test_184b() { + check_swap_layouts_support && return 0 + + dir0=$DIR/$tdir/$testnum + mkdir -p $dir0 || error "creating dir $dir0" + file1=$dir0/f1 + file2=$dir0/f2 + file3=$dir0/f3 + dir1=$dir0/d1 + dir2=$dir0/d2 + mkdir $dir1 $dir2 + $SETSTRIPE -c1 $file1 + $SETSTRIPE -c2 $file2 + $SETSTRIPE -c1 $file3 + chown $RUNAS_ID $file3 + gen1=$($GETSTRIPE -g $file1) + gen2=$($GETSTRIPE -g $file2) + + $LFS swap_layouts $dir1 $dir2 && + error "swap of directories layouts should fail" + $LFS swap_layouts $dir1 $file1 && + error "swap of directory and file layouts should fail" + $RUNAS $LFS swap_layouts $file1 $file2 && + error "swap of file we cannot write should fail" + $LFS swap_layouts $file1 $file3 && + error "swap of file with different owner should fail" + /bin/true # to clear error code +} +run_test 184b "Forbidden layout swap (will generate errors)" + +test_184c() { + check_swap_layouts_support && return 0 + + local dir0=$DIR/$tdir/$testnum + mkdir -p $dir0 || error "creating dir $dir0" + + local ref1=$dir0/ref1 + local ref2=$dir0/ref2 + local file1=$dir0/file1 + local file2=$dir0/file2 + # create a file large enough for the concurent test + dd if=/dev/urandom of=$ref1 bs=1M count=$((RANDOM % 50 + 20)) + dd if=/dev/urandom of=$ref2 bs=1M count=$((RANDOM % 50 + 20)) + echo "ref file size: ref1(`stat -c %s $ref1`), ref2(`stat -c %s $ref2`)" + + cp $ref2 $file2 + dd if=$ref1 of=$file1 bs=16k & + local DD_PID=$! + + # Make sure dd starts to copy file + while [ ! -f $file1 ]; do sleep 0.1; done + + $LFS swap_layouts $file1 $file2 + local rc=$? + wait $DD_PID + [[ $? == 0 ]] || error "concurrent write on $file1 failed" + [[ $rc == 0 ]] || error "swap of $file1 and $file2 failed" + + # how many bytes copied before swapping layout + local copied=`stat -c %s $file2` + local remaining=`stat -c %s $ref1` + remaining=$((remaining - copied)) + echo "Copied $copied bytes before swapping layout..." + + cmp -n $copied $file1 $ref2 | grep differ && + error "Content mismatch [0, $copied) of ref2 and file1" + cmp -n $copied $file2 $ref1 || + error "Content mismatch [0, $copied) of ref1 and file2" + cmp -i $copied:$copied -n $remaining $file1 $ref1 || + error "Content mismatch [$copied, EOF) of ref1 and file1" + + # clean up + rm -f $ref1 $ref2 $file1 $file2 +} +run_test 184c "Concurrent write and layout swap" + +test_185() { # LU-2441 + mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir" + touch $DIR/$tdir/spoo + local mtime1=$(stat -c "%Y" $DIR/$tdir) + local fid=$($MULTIOP $DIR/$tdir VFw4096c) || + error "cannot create/write a volatile file" + $CHECKSTAT -t file $MOUNT/.lustre/fid/$fid 2>/dev/null && + error "FID is still valid after close" + + multiop_bg_pause $DIR/$tdir vVw4096_c + local multi_pid=$! + + local OLD_IFS=$IFS + IFS=":" + local fidv=($fid) + IFS=$OLD_IFS + # assume that the next FID for this client is sequential, since stdout + # is unfortunately eaten by multiop_bg_pause + local n=$((${fidv[1]} + 1)) + local next_fid="${fidv[0]}:$(printf "0x%x" $n):${fidv[2]}" + $CHECKSTAT -t file $MOUNT/.lustre/fid/$next_fid || + error "FID is missing before close" + kill -USR1 $multi_pid + # 1 second delay, so if mtime change we will see it + sleep 1 + local mtime2=$(stat -c "%Y" $DIR/$tdir) + [[ $mtime1 == $mtime2 ]] || error "mtime has changed" +} +run_test 185 "Volatile file support" + # OST pools tests check_file_in_pool() { @@ -9255,6 +9931,7 @@ pool_remove() { } test_200() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mgs_nodsh && skip "remote MGS with nodsh" && return local POOL=${POOL:-cea1} @@ -9466,16 +10143,23 @@ verify_jobstats() { fi } +jobstats_set() { + trap 0 + NEW_JOBENV=${1:-$OLD_JOBENV} + do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$NEW_JOBENV + wait_update $HOSTNAME "$LCTL get_param -n jobid_var" $NEW_JOBENV +} + test_205() { # Job stats + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ -z "$(lctl get_param -n mdc.*.connect_flags | grep jobstats)" ] && skip "Server doesn't support jobstats" && return 0 local cmd OLD_JOBENV=`$LCTL get_param -n jobid_var` if [ $OLD_JOBENV != $JOBENV ]; then - do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$JOBENV - wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \ - $JOBENV || return 1 + jobstats_set $JOBENV + trap jobstats_set EXIT fi # mkdir @@ -9512,11 +10196,7 @@ test_205() { # Job stats # cleanup rm -f $DIR/jobstats_test_rename - if [ $OLD_JOBENV != $JOBENV ]; then - do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$OLD_JOBENV - wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \ - $OLD_JOBENV || return 1 - fi + [ $OLD_JOBENV != $JOBENV ] && jobstats_set $OLD_JOBENV } run_test 205 "Verify job stats" @@ -9531,6 +10211,41 @@ test_206() { } run_test 206 "fail lov_init_raid0() doesn't lbug" +test_207a() { + dd if=/dev/zero of=$DIR/$tfile bs=4k count=$((RANDOM%10+1)) + local fsz=`stat -c %s $DIR/$tfile` + cancel_lru_locks mdc + + # do not return layout in getattr intent +#define OBD_FAIL_MDS_NO_LL_GETATTR 0x170 + $LCTL set_param fail_loc=0x170 + local sz=`stat -c %s $DIR/$tfile` + + [ $fsz -eq $sz ] || error "file size expected $fsz, actual $sz" + + rm -rf $DIR/$tfile +} +run_test 207a "can refresh layout at glimpse" + +test_207b() { + dd if=/dev/zero of=$DIR/$tfile bs=4k count=$((RANDOM%10+1)) + local cksum=`md5sum $DIR/$tfile` + local fsz=`stat -c %s $DIR/$tfile` + cancel_lru_locks mdc + cancel_lru_locks osc + + # do not return layout in getattr intent +#define OBD_FAIL_MDS_NO_LL_OPEN 0x171 + $LCTL set_param fail_loc=0x171 + + # it will refresh layout after the file is opened but before read issues + echo checksum is "$cksum" + echo "$cksum" |md5sum -c --quiet || error "file differs" + + rm -rf $DIR/$tfile +} +run_test 207b "can refresh layout at open" + test_212() { size=`date +%s` size=$((size % 8192 + 1)) @@ -9610,6 +10325,7 @@ check_lnet_proc_entry() { } test_215() { # for bugs 18102, 21079, 21517 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local N='(0|[1-9][0-9]*)' # non-negative numeric local P='[1-9][0-9]*' # positive numeric local I='(0|-?[1-9][0-9]*|NA)' # any numeric (0 | >0 | <0) or NA if no value @@ -9694,6 +10410,7 @@ test_215() { # for bugs 18102, 21079, 21517 run_test 215 "/proc/sys/lnet exists and has proper content - bugs 18102, 21079, 21517" test_216() { # bug 20317 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return local node local p="$TMP/sanityN-$TESTNAME.parameters" @@ -9731,6 +10448,7 @@ test_216() { # bug 20317 run_test 216 "check lockless direct write works and updates file size and kms correctly" test_217() { # bug 22430 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local node local nid @@ -9764,6 +10482,7 @@ test_218() { run_test 218 "parallel read and truncate should not deadlock =======================" test_219() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # write one partial page dd if=/dev/zero of=$DIR/$tfile bs=1024 count=1 # set no grant so vvp_io_commit_write will do sync write @@ -9779,6 +10498,7 @@ test_219() { run_test 219 "LU-394: Write partial won't cause uncontiguous pages vec at LND" test_220() { #LU-325 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_ost_nodsh && skip "remote OST with nodsh" && return local OSTIDX=0 @@ -9833,6 +10553,7 @@ test_220() { #LU-325 run_test 220 "preallocated MDS objects still used if ENOSPC from OST" test_221() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return dd if=`which date` of=$MOUNT/date oflag=sync chmod +x $MOUNT/date @@ -9845,6 +10566,7 @@ test_221() { run_test 221 "make sure fault and truncate race to not cause OOM" test_222a () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return rm -rf $DIR/$tdir test_mkdir -p $DIR/$tdir $SETSTRIPE -c 1 -i 0 $DIR/$tdir @@ -9860,6 +10582,7 @@ test_222a () { run_test 222a "AGL for ls should not trigger CLIO lock failure ================" test_222b () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return rm -rf $DIR/$tdir test_mkdir -p $DIR/$tdir $SETSTRIPE -c 1 -i 0 $DIR/$tdir @@ -9874,6 +10597,7 @@ test_222b () { run_test 222b "AGL for rmdir should not trigger CLIO lock failure =============" test_223 () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return rm -rf $DIR/$tdir test_mkdir -p $DIR/$tdir $SETSTRIPE -c 1 -i 0 $DIR/$tdir @@ -9889,6 +10613,7 @@ test_223 () { run_test 223 "osc reenqueue if without AGL lock granted =======================" test_224a() { # LU-1039, MRP-303 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB 0x508 $LCTL set_param fail_loc=0x508 dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 conv=fsync @@ -9898,6 +10623,7 @@ test_224a() { # LU-1039, MRP-303 run_test 224a "Don't panic on bulk IO failure" test_224b() { # LU-1039, MRP-303 + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 cancel_lru_locks osc #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB2 0x515 @@ -9910,6 +10636,7 @@ run_test 224b "Don't panic on bulk IO failure" MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)} test_225a () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return if [ -z ${MDSSURVEY} ]; then skip_env "mds-survey not found" && return fi @@ -9934,6 +10661,7 @@ test_225a () { run_test 225a "Metadata survey sanity with zero-stripe" test_225b () { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return if [ -z ${MDSSURVEY} ]; then skip_env "mds-survey not found" && return fi @@ -9975,11 +10703,11 @@ mcreate_path2fid () { $MCREATE --mode=$1 --major=$2 --minor=$3 $path || error "cannot create $desc" - fid=$($LFS path2fid $path) + fid=$($LFS path2fid $path | tr -d '[' | tr -d ']') rc=$? [ $rc -ne 0 ] && error "cannot get fid of a $desc" - fid_path=$($LFS fid2path $DIR "$fid") + fid_path=$($LFS fid2path $MOUNT $fid) rc=$? [ $rc -ne 0 ] && error "cannot get path of $desc by $DIR $path $fid" @@ -9989,7 +10717,7 @@ mcreate_path2fid () { echo "pass with $path and $fid" } -test_226 () { +test_226a () { rm -rf $DIR/$tdir mkdir -p $DIR/$tdir @@ -10002,11 +10730,34 @@ test_226 () { mcreate_path2fid 0120666 0 0 link "symbolic link" mcreate_path2fid 0140666 0 0 sock "socket" } -run_test 226 "call path2fid and fid2path on files of all type" +run_test 226a "call path2fid and fid2path on files of all type" + +test_226b () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + rm -rf $DIR/$tdir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + $LFS setdirstripe -i $MDTIDX $DIR/$tdir/remote_dir || + error "create remote directory failed" + mcreate_path2fid 0010666 0 0 "remote_dir/fifo" "FIFO" + mcreate_path2fid 0020666 1 3 "remote_dir/null" \ + "character special file (null)" + mcreate_path2fid 0020666 1 255 "remote_dir/none" \ + "character special file (no device)" + mcreate_path2fid 0040666 0 0 "remote_dir/dir" "directory" + mcreate_path2fid 0060666 7 0 "remote_dir/loop0" \ + "block special file (loop)" + mcreate_path2fid 0100666 0 0 "remote_dir/file" "regular file" + mcreate_path2fid 0120666 0 0 "remote_dir/link" "symbolic link" + mcreate_path2fid 0140666 0 0 "remote_dir/sock" "socket" +} +run_test 226b "call path2fid and fid2path on files of all type under remote dir" # LU-1299 Executing or running ldd on a truncated executable does not # cause an out-of-memory condition. test_227() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return dd if=`which date` of=$MOUNT/date bs=1k count=1 chmod +x $MOUNT/date @@ -10018,6 +10769,7 @@ run_test 227 "running truncated executable does not cause OOM" # LU-1512 try to reuse idle OI blocks test_228a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "non-ldiskfs backend" && return @@ -10058,6 +10810,7 @@ test_228a() { run_test 228a "try to reuse idle OI blocks" test_228b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "non-ldiskfs backend" && return @@ -10106,6 +10859,7 @@ run_test 228b "idle OI blocks can be reused after MDT restart" #LU-1881 test_228c() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "non-ldiskfs backend" && return @@ -10150,6 +10904,7 @@ test_228c() { run_test 228c "NOT shrink the last entry in OI index node to recycle idle leaf" test_230a() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return local MDTIDX=1 @@ -10173,9 +10928,11 @@ test_230a() { run_test 230a "Create remote directory and files under the remote directory" test_230b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return local MDTIDX=1 local remote_dir=$DIR/$tdir/remote_dir + local rc=0 mkdir -p $DIR/$tdir $LFS mkdir -i $MDTIDX $remote_dir || @@ -10184,15 +10941,100 @@ test_230b() { $LFS mkdir -i 0 $remote_dir/new_dir && error "nested remote directory create succeed!" - rm -r $DIR/$tdir || error "unlink remote directory failed" + do_facet mds$((MDTIDX + 1)) lctl set_param mdt.*.enable_remote_dir=1 + $LFS mkdir -i 0 $remote_dir/new_dir || rc=$? + do_facet mds$((MDTIDX + 1)) lctl set_param mdt.*.enable_remote_dir=0 + + [ $rc -ne 0 ] && + error "create remote directory failed after set enable_remote_dir" + + rm -rf $remote_dir || error "first unlink remote directory failed" + + $RUNAS -G$RUNAS_GID $LFS mkdir -i $MDTIDX $DIR/$tfile && + error "chown worked" + + do_facet mds$MDTIDX lctl set_param \ + mdt.*.enable_remote_dir_gid=$RUNAS_GID + $LFS mkdir -i $MDTIDX $remote_dir || rc=$? + do_facet mds$MDTIDX lctl set_param mdt.*.enable_remote_dir_gid=0 + + [ $rc -ne 0 ] && + error "create remote dir failed after set enable_remote_dir_gid" + + rm -r $DIR/$tdir || error "second unlink remote directory failed" } run_test 230b "nested remote directory should be failed" +test_231a() +{ + # For simplicity this test assumes that max_pages_per_rpc + # is the same across all OSCs + local max_pages=$($LCTL get_param -n osc.*.max_pages_per_rpc | head -1) + local bulk_size=$((max_pages * 4096)) + + mkdir -p $DIR/$tdir + + # clear the OSC stats + $LCTL set_param osc.*.stats=0 &>/dev/null + + # Client writes $bulk_size - there must be 1 rpc for $max_pages. + dd if=/dev/zero of=$DIR/$tdir/$tfile bs=$bulk_size count=1 \ + oflag=direct &>/dev/null || error "dd failed" + + local nrpcs=$($LCTL get_param osc.*.stats |awk '/ost_write/ {print $2}') + if [ x$nrpcs != "x1" ]; then + error "found $nrpc ost_write RPCs, not 1 as expected" + fi + + # Drop the OSC cache, otherwise we will read from it + cancel_lru_locks osc + + # clear the OSC stats + $LCTL set_param osc.*.stats=0 &>/dev/null + + # Client reads $bulk_size. + dd if=$DIR/$tdir/$tfile of=/dev/null bs=$bulk_size count=1 \ + iflag=direct &>/dev/null || error "dd failed" + + nrpcs=$($LCTL get_param osc.*.stats | awk '/ost_read/ { print $2 }') + if [ x$nrpcs != "x1" ]; then + error "found $nrpc ost_read RPCs, not 1 as expected" + fi +} +run_test 231a "checking that reading/writing of BRW RPC size results in one RPC" + +test_231b() { + mkdir -p $DIR/$tdir + local i + for i in {0..1023}; do + dd if=/dev/zero of=$DIR/$tdir/$tfile conv=notrunc \ + seek=$((2 * i)) bs=4096 count=1 &>/dev/null || + error "dd of=$DIR/$tdir/$tfile seek=$((2 * i)) failed" + done + sync +} +run_test 231b "must not assert on fully utilized OST request buffer" + +test_232() { + mkdir -p $DIR/$tdir + #define OBD_FAIL_LDLM_OST_LVB 0x31c + $LCTL set_param fail_loc=0x31c + + # ignore dd failure + dd if=/dev/zero of=$DIR/$tdir/$tfile bs=1M count=1 || true + + $LCTL set_param fail_loc=0 + umount_client $MOUNT || error "umount failed" + mount_client $MOUNT || error "mount failed" +} +run_test 232 "failed lock should not block umount" + # # tests that do cleanup/setup should be run at the end # test_900() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local ls #define OBD_FAIL_MGC_PAUSE_PROCESS_LOG 0x903 $LCTL set_param fail_loc=0x903