Whamcloud - gitweb
LU-9968 tests: correct stripe index sanity 300g
[fs/lustre-release.git] / lustre / tests / sanity.sh
index a091e22..c80bdab 100755 (executable)
@@ -8,13 +8,15 @@
 set -e
 
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test: 13297 2108 9789 3637 9789 3561 5188
-ALWAYS_EXCEPT="                42a  42b  42c  42d  45   68b   $SANITY_EXCEPT"
+# bug number for skipped test: LU-9693 LU-6493 LU-9693 3561 5188
+ALWAYS_EXCEPT="                42a    42b      42c     45   68b $SANITY_EXCEPT"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
-# with LOD/OSP landing
-# bug number for skipped tests: LU-2036 LU-8411
-ALWAYS_EXCEPT="                 76     407 $ALWAYS_EXCEPT"
+# skipped tests: LU-2036 LU-8411 LU-9096 LU-9054
+ALWAYS_EXCEPT="  76     407     253     312 $ALWAYS_EXCEPT"
+
+# Check Grants after these tests
+GRANT_CHECK_LIST="$GRANT_CHECK_LIST 42a 42b 42c 42d 42e 63a 63b 64a 64b 64c"
 
 is_sles11()                                            # LU-4341
 {
@@ -75,12 +77,12 @@ init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
 init_logging
 
-#                                  5              12          (min)"
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="24D 27m 64b 68 71 115 300o"
+#                                  5          12          (min)"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 64b 68 71 115 300o"
 
 if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
-       # bug number for skipped test: LU-4536 LU-1957
-       ALWAYS_EXCEPT="$ALWAYS_EXCEPT  65ic    180"
+       # bug number for skipped test: LU-1957
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT  180"
        #                                               13    (min)"
        [ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b"
 fi
@@ -160,44 +162,41 @@ test_0c() {
        $LCTL get_param mdc.*.import | grep "target: $FSNAME-MDT" ||
                error "bad target"
 }
-run_test 0c "check import proc ============================="
+run_test 0c "check import proc"
 
 test_1() {
-       test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
-       test_mkdir -p $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed"
-       test_mkdir $DIR/$tdir/d2 && error "we expect EEXIST, but not returned"
+       test_mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir/d2
+       mkdir $DIR/$tdir/d2 && error "we expect EEXIST, but not returned"
        $CHECKSTAT -t dir $DIR/$tdir/d2 || error "$tdir/d2 is not a dir"
        rmdir $DIR/$tdir/d2
        rmdir $DIR/$tdir
        $CHECKSTAT -a $DIR/$tdir || error "$tdir was not removed"
 }
-run_test 1 "mkdir; remkdir; rmdir =============================="
+run_test 1 "mkdir; remkdir; rmdir"
 
 test_2() {
-       test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/$tfile || error "touch $tdir/$tfile failed"
        $CHECKSTAT -t file $DIR/$tdir/$tfile || error "$tdir/$tfile not a file"
        rm -r $DIR/$tdir
        $CHECKSTAT -a $DIR/$tdir/$tfile || error "$tdir/$file is not removed"
 }
-run_test 2 "mkdir; touch; rmdir; check file ===================="
+run_test 2 "mkdir; touch; rmdir; check file"
 
 test_3() {
-       test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+       test_mkdir $DIR/$tdir
        $CHECKSTAT -t dir $DIR/$tdir || error "$tdir is not a directory"
        touch $DIR/$tdir/$tfile
        $CHECKSTAT -t file $DIR/$tdir/$tfile || error "$tdir/$tfile not a file"
        rm -r $DIR/$tdir
        $CHECKSTAT -a $DIR/$tdir || error "$tdir is not removed"
 }
-run_test 3 "mkdir; touch; rmdir; check dir ====================="
+run_test 3 "mkdir; touch; rmdir; check dir"
 
 # LU-4471 - failed rmdir on remote directories still removes directory on MDT0
 test_4() {
-       local MDTIDX=1
-
-       test_mkdir $DIR/$tdir ||
-               error "Create remote directory failed"
+       test_mkdir -i 1 $DIR/$tdir
 
        touch $DIR/$tdir/$tfile ||
                error "Create file under remote directory failed"
@@ -212,13 +211,13 @@ test_4() {
 run_test 4 "mkdir; touch dir/file; rmdir; checkdir (expect error)"
 
 test_5() {
-       test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
-       test_mkdir $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed"
+       test_mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir/d2
        chmod 0707 $DIR/$tdir/d2 || error "chmod 0707 $tdir/d2 failed"
        $CHECKSTAT -t dir -p 0707 $DIR/$tdir/d2 || error "$tdir/d2 not mode 707"
        $CHECKSTAT -t dir $DIR/$tdir/d2 || error "$tdir/d2 is not a directory"
 }
-run_test 5 "mkdir .../d5 .../d5/d2; chmod .../d5/d2 ============"
+run_test 5 "mkdir .../d5 .../d5/d2; chmod .../d5/d2"
 
 test_6a() {
        touch $DIR/$tfile || error "touch $DIR/$tfile failed"
@@ -253,15 +252,15 @@ test_6e() {
        $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/$tfile ||
                error "$tfile should be owned by UID $UID and GID $RUNAS_ID"
 }
-run_test 6e "touch f6e; chgrp f6e; $RUNAS chgrp f6e (should return error) =="
+run_test 6e "touch+chgrp $tfile; $RUNAS chgrp $tfile (should return error)"
 
 test_6g() {
        [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID" && return
-       test_mkdir $DIR/$tdir || error "mkdir $tfile failed"
+       test_mkdir $DIR/$tdir
        chmod 777 $DIR/$tdir || error "chmod 0777 $tdir failed"
        $RUNAS mkdir $DIR/$tdir/d || error "mkdir $tdir/d failed"
        chmod g+s $DIR/$tdir/d || error "chmod g+s $tdir/d failed"
-       test_mkdir $DIR/$tdir/d/subdir || error "mkdir $tdir/d/subdir failed"
+       test_mkdir $DIR/$tdir/d/subdir
        $CHECKSTAT -g \#$RUNAS_GID $DIR/$tdir/d/subdir ||
                error "$tdir/d/subdir should be GID $RUNAS_GID"
        if [[ $MDSCOUNT -gt 1 ]]; then
@@ -280,7 +279,7 @@ test_6g() {
                        error "$tdir.remote should be mode 02755"
        fi
 }
-run_test 6g "Is new dir in sgid dir inheriting group?"
+run_test 6g "verify new dir in sgid dir inherits group"
 
 test_6h() { # bug 7331
        [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID" && return
@@ -291,7 +290,7 @@ test_6h() { # bug 7331
        $CHECKSTAT -t file -u \#$RUNAS_ID -g \#$RUNAS_GID $DIR/$tfile ||
                error "$tdir/$tfile should be UID $RUNAS_UID GID $RUNAS_GID"
 }
-run_test 6h "$RUNAS chown RUNAS_ID.0 .../f6h (should return error)"
+run_test 6h "$RUNAS chown RUNAS_ID.0 .../$tfile (should return error)"
 
 test_7a() {
        test_mkdir $DIR/$tdir
@@ -392,10 +391,10 @@ test_16() {
        rm -rf $DIR/$tdir/$tfile
        $CHECKSTAT -a $DIR/$tdir/$tfile || error "$tdir/$tfile not removed"
 }
-run_test 16 "touch .../d16/f; rm -rf .../d16/f ================="
+run_test 16 "touch .../d16/f; rm -rf .../d16/f"
 
 test_17a() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/$tfile
        ln -s $DIR/$tdir/$tfile $DIR/$tdir/l-exist
        ls -l $DIR/$tdir
@@ -406,10 +405,10 @@ test_17a() {
        rm -f $DIR/$tdir/l-exist
        $CHECKSTAT -a $DIR/$tdir/l-exist || error "$tdir/l-exist not removed"
 }
-run_test 17a "symlinks: create, remove (real) =================="
+run_test 17a "symlinks: create, remove (real)"
 
 test_17b() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        ln -s no-such-file $DIR/$tdir/l-dangle
        ls -l $DIR/$tdir
        $CHECKSTAT -l no-such-file $DIR/$tdir/l-dangle ||
@@ -419,33 +418,33 @@ test_17b() {
        rm -f $DIR/$tdir/l-dangle
        $CHECKSTAT -a $DIR/$tdir/l-dangle || error "$tdir/l-dangle not removed"
 }
-run_test 17b "symlinks: create, remove (dangling) =============="
+run_test 17b "symlinks: create, remove (dangling)"
 
 test_17c() { # bug 3440 - don't save failed open RPC for replay
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        ln -s foo $DIR/$tdir/$tfile
        cat $DIR/$tdir/$tfile && error "opened non-existent symlink" || true
 }
-run_test 17c "symlinks: open dangling (should return error) ===="
+run_test 17c "symlinks: open dangling (should return error)"
 
 test_17d() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        ln -s foo $DIR/$tdir/$tfile
        touch $DIR/$tdir/$tfile || error "creating to new symlink"
 }
-run_test 17d "symlinks: create dangling ========================"
+run_test 17d "symlinks: create dangling"
 
 test_17e() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local foo=$DIR/$tdir/$tfile
        ln -s $foo $foo || error "create symlink failed"
        ls -l $foo || error "ls -l failed"
        ls $foo && error "ls not failed" || true
 }
-run_test 17e "symlinks: create recursive symlink (should return error) ===="
+run_test 17e "symlinks: create recursive symlink (should return error)"
 
 test_17f() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/$tdir/111
        ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890 $DIR/$tdir/222
        ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890 $DIR/$tdir/333
@@ -454,7 +453,7 @@ test_17f() {
        ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/ $DIR/$tdir/666
        ls -l  $DIR/$tdir
 }
-run_test 17f "symlinks: long and very long symlink name ========================"
+run_test 17f "symlinks: long and very long symlink name"
 
 # str_repeat(S, N) generate a string that is string S repeated N times
 str_repeat() {
@@ -469,7 +468,7 @@ str_repeat() {
 
 # Long symlinks and LU-2241
 test_17g() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local TESTS="59 60 61 4094 4095"
 
        # Fix for inode size boundary in 2.1.4
@@ -498,16 +497,16 @@ 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
+       test_mkdir $DIR/$tdir
        if [[ $MDSCOUNT -gt 1 ]]; then
                mdt_idx=$($LFS getdirstripe -i $DIR/$tdir)
        else
                mdt_idx=0
        fi
-        $SETSTRIPE -c -1 $DIR/$tdir
-#define OBD_FAIL_MDS_LOV_PREP_CREATE 0x141
-        do_facet mds$((mdt_idx + 1)) lctl set_param fail_loc=0x80000141
-        touch $DIR/$tdir/$tfile || true
+       $LFS setstripe -c -1 $DIR/$tdir
+       #define OBD_FAIL_MDS_LOV_PREP_CREATE 0x141
+       do_facet mds$((mdt_idx + 1)) lctl set_param fail_loc=0x80000141
+       touch $DIR/$tdir/$tfile || true
 }
 run_test 17h "create objects: lov_free_memmd() doesn't lbug"
 
@@ -536,19 +535,19 @@ test_17k() { #bug 22301
        rsync --help | grep -q xattr ||
                skip_env "$(rsync --version | head -n1) does not support xattrs"
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return 0
-       test_mkdir -p $DIR/$tdir
-       test_mkdir -p $DIR/$tdir.new
+       test_mkdir $DIR/$tdir
+       test_mkdir $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"
 }
-run_test 17k "symlinks: rsync with xattrs enabled ========================="
+run_test 17k "symlinks: rsync with xattrs enabled"
 
 test_17l() { # LU-279
        [[ -z "$(which getfattr 2>/dev/null)" ]] &&
                skip "no getfattr command" && return 0
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/$tfile
        ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk
        for path in "$DIR/$tdir" "$DIR/$tdir/$tfile" "$DIR/$tdir/$tfile.lnk"; do
@@ -561,12 +560,12 @@ test_17l() { # LU-279
                done
        done
 }
-run_test 17l "Ensure lgetxattr's returned xattr size is consistent ========"
+run_test 17l "Ensure lgetxattr's returned xattr size is consistent"
 
 # LU-1540
 test_17m() {
        local short_sym="0123456789"
-       local WDIR=$DIR/${tdir}m
+       local wdir=$DIR/$tdir
        local i
 
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
@@ -575,36 +574,36 @@ test_17m() {
                skip "MDS 2.2.0-2.2.93 do not NUL-terminate symlinks" && return
 
        [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip "only for ldiskfs MDT" && return 0
+               skip "ldiskfs only test" && return 0
 
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
 
-       test_mkdir -p $WDIR
+       test_mkdir $wdir
        long_sym=$short_sym
        # create a long symlink file
        for ((i = 0; i < 4; ++i)); do
                long_sym=${long_sym}${long_sym}
        done
 
-       echo "create 512 short and long symlink files under $WDIR"
+       echo "create 512 short and long symlink files under $wdir"
        for ((i = 0; i < 256; ++i)); do
-               ln -sf ${long_sym}"a5a5" $WDIR/long-$i
-               ln -sf ${short_sym}"a5a5" $WDIR/short-$i
+               ln -sf ${long_sym}"a5a5" $wdir/long-$i
+               ln -sf ${short_sym}"a5a5" $wdir/short-$i
        done
 
        echo "erase them"
-       rm -f $WDIR/*
+       rm -f $wdir/*
        sync
        wait_delete_completed
 
        echo "recreate the 512 symlink files with a shorter string"
        for ((i = 0; i < 512; ++i)); do
                # rewrite the symlink file with a shorter string
-               ln -sf ${long_sym} $WDIR/long-$i || error "long_sym failed"
-               ln -sf ${short_sym} $WDIR/short-$i || error "short_sym failed"
+               ln -sf ${long_sym} $wdir/long-$i || error "long_sym failed"
+               ln -sf ${short_sym} $wdir/short-$i || error "short_sym failed"
        done
 
-       local mds_index=$(($($LFS getstripe -M $WDIR) + 1))
+       local mds_index=$(($($LFS getstripe -M $wdir) + 1))
        local devname=$(mdsdevname $mds_index)
 
        echo "stop and checking mds${mds_index}:"
@@ -613,7 +612,8 @@ test_17m() {
        run_e2fsck $(facet_active_host mds${mds_index}) $devname -n
        rc=$?
 
-       start mds${mds_index} $devname $MDS_MOUNT_OPTS || error "start failed"
+       start mds${mds_index} $devname $MDS_MOUNT_OPTS ||
+               error "start mds${mds_index} failed"
        df $MOUNT > /dev/null 2>&1
        [ $rc -eq 0 ] ||
                error "e2fsck detected error for short/long symlink: rc=$rc"
@@ -649,7 +649,7 @@ test_17n() {
                skip "MDS 2.2.0-2.2.93 do not NUL-terminate symlinks" && return
 
        [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip "only for ldiskfs MDT" && return 0
+               skip "ldiskfs only test" && return 0
 
        [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
 
@@ -700,26 +700,25 @@ test_17o() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.64) ] &&
                skip "Need MDS version at least 2.3.64" && return
 
-       local WDIR=$DIR/${tdir}o
+       local wdir=$DIR/${tdir}o
        local mdt_index
        local rc=0
 
-       test_mkdir -p $WDIR
-       mdt_index=$($LFS getstripe -M $WDIR)
-       mdt_index=$((mdt_index+1))
-
-       touch $WDIR/$tfile
+       test_mkdir $wdir
+       touch $wdir/$tfile
+       mdt_index=$($LFS getstripe -M $wdir/$tfile)
+       mdt_index=$((mdt_index + 1))
 
+       cancel_lru_locks mdc
        #fail mds will wait the failover finish then set
        #following fail_loc to avoid interfer the recovery process.
        fail mds${mdt_index}
 
        #define OBD_FAIL_OSD_LMA_INCOMPAT 0x194
        do_facet mds${mdt_index} lctl set_param fail_loc=0x194
-       ls -l $WDIR/$tfile && rc=1
+       ls -l $wdir/$tfile && rc=1
        do_facet mds${mdt_index} lctl set_param fail_loc=0
-       [[ $rc -ne 0 ]] && error "stat file should fail"
-       true
+       [[ $rc -eq 0 ]] || error "stat file should fail"
 }
 run_test 17o "stat file with incompat LMA feature"
 
@@ -757,19 +756,16 @@ run_test 19d "cat .../f19 (should return error) =============="
 test_20() {
        touch $DIR/$tfile
        rm $DIR/$tfile
-       log "1 done"
        touch $DIR/$tfile
        rm $DIR/$tfile
-       log "2 done"
        touch $DIR/$tfile
        rm $DIR/$tfile
-       log "3 done"
        $CHECKSTAT -a $DIR/$tfile || error "$tfile was not removed"
 }
-run_test 20 "touch .../f ; ls -l ... ==========================="
+run_test 20 "touch .../f ; ls -l ..."
 
 test_21() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        [ -f $DIR/$tdir/dangle ] && rm -f $DIR/$tdir/dangle
        ln -s dangle $DIR/$tdir/link
        echo foo >> $DIR/$tdir/link
@@ -778,43 +774,44 @@ test_21() {
        $CHECKSTAT -f -t file $DIR/$tdir/link ||
                error "$tdir/link not linked to a file"
 }
-run_test 21 "write to dangling link ============================"
+run_test 21 "write to dangling link"
 
 test_22() {
-       WDIR=$DIR/$tdir
-       test_mkdir -p $DIR/$tdir
-       chown $RUNAS_ID:$RUNAS_GID $WDIR
-       (cd $WDIR || error "cd $WDIR failed";
-       $RUNAS tar cf - /etc/hosts /etc/sysconfig/network | \
-       $RUNAS tar xf -)
-       ls -lR $WDIR/etc || error "ls -lR $WDIR/etc failed"
-       $CHECKSTAT -t dir $WDIR/etc || error "checkstat -t dir failed"
-       $CHECKSTAT -u \#$RUNAS_ID -g \#$RUNAS_GID $WDIR/etc || error "checkstat -u failed"
-}
-run_test 22 "unpack tar archive as non-root user ==============="
+       local wdir=$DIR/$tdir
+       test_mkdir $wdir
+       chown $RUNAS_ID:$RUNAS_GID $wdir
+       (cd $wdir || error "cd $wdir failed";
+               $RUNAS tar cf - /etc/hosts /etc/sysconfig/network |
+               $RUNAS tar xf -)
+       ls -lR $wdir/etc || error "ls -lR $wdir/etc failed"
+       $CHECKSTAT -t dir $wdir/etc || error "checkstat -t dir failed"
+       $CHECKSTAT -u \#$RUNAS_ID -g \#$RUNAS_GID $wdir/etc ||
+               error "checkstat -u failed"
+}
+run_test 22 "unpack tar archive as non-root user"
 
 # was test_23
 test_23a() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local file=$DIR/$tdir/$tfile
 
        openfile -f O_CREAT:O_EXCL $file || error "$file create failed"
        openfile -f O_CREAT:O_EXCL $file &&
                error "$file recreate succeeded" || true
 }
-run_test 23a "O_CREAT|O_EXCL in subdir =========================="
+run_test 23a "O_CREAT|O_EXCL in subdir"
 
 test_23b() { # bug 18988
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local file=$DIR/$tdir/$tfile
 
-        rm -f $file
-        echo foo > $file || error "write filed"
-        echo bar >> $file || error "append filed"
-        $CHECKSTAT -s 8 $file || error "wrong size"
-        rm $file
+       rm -f $file
+       echo foo > $file || error "write filed"
+       echo bar >> $file || error "append filed"
+       $CHECKSTAT -s 8 $file || error "wrong size"
+       rm $file
 }
-run_test 23b "O_APPEND check =========================="
+run_test 23b "O_APPEND check"
 
 # rename sanity
 test_24a() {
@@ -956,10 +953,10 @@ test_24n() {
 run_test 24n "Statting the old file after renaming (Posix rename 2)"
 
 test_24o() {
-       test_mkdir -p $DIR/d24o
-       rename_many -s random -v -n 10 $DIR/d24o
+       test_mkdir $DIR/$tdir
+       rename_many -s random -v -n 10 $DIR/$tdir
 }
-run_test 24o "rename of files during htree split ==============="
+run_test 24o "rename of files during htree split"
 
 test_24p() {
        test_mkdir $DIR/R12a
@@ -1038,53 +1035,73 @@ page_size() {
 }
 
 simple_cleanup_common() {
+       local rc=0
        trap 0
+       [ -z "$DIR" -o -z "$tdir" ] && return 0
+
+       local start=$SECONDS
        rm -rf $DIR/$tdir
+       rc=$?
        wait_delete_completed
+       echo "cleanup time $((SECONDS - start))"
+       return $rc
 }
 
 max_pages_per_rpc() {
-       $LCTL get_param -n mdc.*.max_pages_per_rpc | head -n1
+       local mdtname="$(printf "MDT%04x" ${1:-0})"
+       $LCTL get_param -n mdc.*$mdtname*.max_pages_per_rpc
 }
 
 test_24v() {
-       local NRFILES=100000
-       local FREE_INODES=$(mdt_free_inodes 0)
-       [[ $FREE_INODES -lt $NRFILES ]] &&
-               skip "not enough free inodes $FREE_INODES required $NRFILES" &&
-               return
-
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       trap simple_cleanup_common EXIT
-
+       local nrfiles=${COUNT:-100000}
        # Performance issue on ZFS see LU-4072 (c.f. LU-2887)
-       [ $(facet_fstype $SINGLEMDS) = "zfs" ] && NRFILES=10000
+       [ $(facet_fstype $SINGLEMDS) = "zfs" ] && nrfiles=${COUNT:-10000}
 
-       test_mkdir -p $DIR/$tdir
-       createmany -m $DIR/$tdir/$tfile $NRFILES
+       local fname="$DIR/$tdir/$tfile"
+       test_mkdir "$(dirname $fname)"
+       # assume MDT0000 has the fewest inodes
+       local stripes=$($LFS getdirstripe -c $(dirname $fname))
+       local free_inodes=$(($(mdt_free_inodes 0) * stripes))
+       [[ $free_inodes -lt $nrfiles ]] && nrfiles=$free_inodes
+
+       trap simple_cleanup_common EXIT
+
+       createmany -m "$fname" $nrfiles
 
        cancel_lru_locks mdc
        lctl set_param mdc.*.stats clear
 
-       ls $DIR/$tdir >/dev/null || error "error in listing large dir"
-
+       # was previously test_24D: LU-6101
+       # readdir() returns correct number of entries after cursor reload
+       local num_ls=$(ls $DIR/$tdir | wc -l)
+       local num_uniq=$(ls $DIR/$tdir | sort -u | wc -l)
+       local num_all=$(ls -a $DIR/$tdir | wc -l)
+       if [ $num_ls -ne $nrfiles -o $num_uniq -ne $nrfiles -o \
+            $num_all -ne $((nrfiles + 2)) ]; then
+               error "Expected $nrfiles files, got $num_ls " \
+                       "($num_uniq unique $num_all .&..)"
+       fi
        # LU-5 large readdir
-       # DIRENT_SIZE = 32 bytes for sizeof(struct lu_dirent) +
-       #               8 bytes for name(filename is mostly 5 in this test) +
-       #               8 bytes for luda_type
+       # dirent_size = 32 bytes for sizeof(struct lu_dirent) +
+       #               N bytes for name (len($nrfiles) rounded to 8 bytes) +
+       #               8 bytes for luda_type (4 bytes rounded to 8 bytes)
        # take into account of overhead in lu_dirpage header and end mark in
-       # each page, plus one in RPC_NUM calculation.
-       DIRENT_SIZE=48
-       RPC_SIZE=$(($(max_pages_per_rpc) * $(page_size)))
-       RPC_NUM=$(((NRFILES * DIRENT_SIZE + RPC_SIZE - 1) / RPC_SIZE + 1))
-       mds_readpage=$(lctl get_param mdc.*MDT0000*.stats |
-                               awk '/^mds_readpage/ {print $2}')
-       [[ $mds_readpage -gt $RPC_NUM ]] &&
-               error "large readdir doesn't take effect"
+       # each page, plus one in rpc_num calculation.
+       local dirent_size=$((32 + (${#tfile} | 7) + 1 + 8))
+       local page_entries=$((($(page_size) - 24) / dirent_size))
+       local mdt_idx=$($LFS getdirstripe -i $(dirname $fname))
+       local rpc_pages=$(max_pages_per_rpc $mdt_idx)
+       local rpc_max=$((nrfiles / (page_entries * rpc_pages) + stripes))
+       local mds_readpage=$(calc_stats mdc.*.stats mds_readpage)
+       echo "readpages: $mds_readpage rpc_max: $rpc_max"
+       (( $mds_readpage < $rpc_max - 2 || $mds_readpage > $rpc_max + 1)) &&
+               error "large readdir doesn't take effect: " \
+                     "$mds_readpage should be about $rpc_max"
 
        simple_cleanup_common
 }
-run_test 24v "list directory with large files (handle hash collision, bug: 17560)"
+run_test 24v "list large directory (test hash collision, b=17560)"
 
 test_24w() { # bug21506
         SZ1=234852
@@ -1107,13 +1124,13 @@ test_24x() {
        local MDTIDX=1
        local remote_dir=$DIR/$tdir/remote_dir
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS mkdir -i $MDTIDX $remote_dir ||
                error "create remote directory failed"
 
-       test_mkdir -p $DIR/$tdir/src_dir
+       test_mkdir $DIR/$tdir/src_dir
        touch $DIR/$tdir/src_file
-       test_mkdir -p $remote_dir/tgt_dir
+       test_mkdir $remote_dir/tgt_dir
        touch $remote_dir/tgt_file
 
        mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir ||
@@ -1133,16 +1150,16 @@ run_test 24x "cross MDT rename/link"
 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
+       local mdtidx=1
 
-       test_mkdir -p $DIR/$tdir
-       $LFS mkdir -i $MDTIDX $remote_dir ||
+       test_mkdir $DIR/$tdir
+       $LFS mkdir -i $mdtidx $remote_dir ||
                   error "create remote directory failed"
 
-       test_mkdir -p $remote_dir/src_dir
+       test_mkdir $remote_dir/src_dir
        touch $remote_dir/src_file
-       test_mkdir -p $remote_dir/tgt_dir
+       test_mkdir $remote_dir/tgt_dir
        touch $remote_dir/tgt_file
 
        mrename $remote_dir/src_dir $remote_dir/tgt_dir ||
@@ -1162,7 +1179,8 @@ test_24A() { # LU-3182
        local NFILES=5000
 
        rm -rf $DIR/$tdir
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
+       trap simple_cleanup_common EXIT
        createmany -m $DIR/$tdir/$tfile $NFILES
        local t=$(ls $DIR/$tdir | wc -l)
        local u=$(ls $DIR/$tdir | sort -u | wc -l)
@@ -1171,7 +1189,7 @@ test_24A() { # LU-3182
                error "Expected $NFILES files, got $t ($u unique $v .&..)"
        fi
 
-       rm -rf $DIR/$tdir || error "Can not delete directories"
+       simple_cleanup_common || error "Can not delete directories"
 }
 run_test 24A "readdir() returns correct number of entries."
 
@@ -1229,23 +1247,6 @@ test_24C() {
 }
 run_test 24C "check .. in striped dir"
 
-test_24D() { # LU-6101
-       local NFILES=50000
-
-       rm -rf $DIR/$tdir
-       mkdir -p $DIR/$tdir
-       createmany -m $DIR/$tdir/$tfile $NFILES
-       local t=$(ls $DIR/$tdir | wc -l)
-       local u=$(ls $DIR/$tdir | sort -u | wc -l)
-       local v=$(ls -ai $DIR/$tdir | sort -u | wc -l)
-       if [ $t -ne $NFILES -o $u -ne $NFILES -o $v -ne $((NFILES + 2)) ] ; then
-               error "Expected $NFILES files, got $t ($u unique $v .&..)"
-       fi
-
-       rm -rf $DIR/$tdir || error "Can not delete directories"
-}
-run_test 24D "readdir() returns correct number of entries after cursor reload"
-
 test_24E() {
        [[ $MDSCOUNT -lt 4 ]] && skip "needs >= 4 MDTs" && return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
@@ -1302,8 +1303,8 @@ test_26a() {
 run_test 26a "multiple component symlink ======================="
 
 test_26b() {
-       test_mkdir -p $DIR/d26b/d26-2
-       ln -s d26b/d26-2/foo $DIR/s26-2
+       test_mkdir -p $DIR/$tdir/d26-2
+       ln -s $tdir/d26-2/foo $DIR/s26-2
        touch $DIR/s26-2 || error
 }
 run_test 26b "multiple component symlink at end of lookup ======"
@@ -1316,27 +1317,27 @@ test_26c() {
        ln -s s26.2-2 $DIR/s26.2-3
        chmod 0666 $DIR/s26.2-3/foo
 }
-run_test 26c "chain of symlinks ================================"
+run_test 26c "chain of symlinks"
 
 # recursive symlinks (bug 439)
 test_26d() {
        ln -s d26-3/foo $DIR/d26-3
 }
-run_test 26d "create multiple component recursive symlink ======"
+run_test 26d "create multiple component recursive symlink"
 
 test_26e() {
        [ ! -h $DIR/d26-3 ] && test_26d
        rm $DIR/d26-3
 }
-run_test 26e "unlink multiple component recursive symlink ======"
+run_test 26e "unlink multiple component recursive symlink"
 
 # recursive symlinks (bug 7022)
 test_26f() {
-       test_mkdir -p $DIR/$tdir
-       test_mkdir $DIR/$tdir/$tfile   || error "mkdir $DIR/$tdir/$tfile failed"
+       test_mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir/$tfile
        cd $DIR/$tdir/$tfile           || error "cd $DIR/$tdir/$tfile failed"
-       test_mkdir -p lndir/bar1      || error "mkdir lndir/bar1 failed"
-       test_mkdir $DIR/$tdir/$tfile/$tfile   || error "mkdir $tfile failed"
+       test_mkdir -p lndir/bar1
+       test_mkdir $DIR/$tdir/$tfile/$tfile
        cd $tfile                || error "cd $tfile failed"
        ln -s .. dotdot          || error "ln dotdot failed"
        ln -s dotdot/lndir lndir || error "ln lndir failed"
@@ -1346,108 +1347,105 @@ test_26f() {
        rm -r $tfile             || error "rm $tfile failed"
        $CHECKSTAT -a $DIR/$tfile || error "$tfile not gone"
 }
-run_test 26f "rm -r of a directory which has recursive symlink ="
+run_test 26f "rm -r of a directory which has recursive symlink"
 
 test_27a() {
-       echo '== stripe sanity =============================================='
-       test_mkdir -p $DIR/d27 || error "mkdir failed"
-       $GETSTRIPE $DIR/d27
-       $SETSTRIPE -c 1 $DIR/d27/f0 || error "setstripe failed"
-       $CHECKSTAT -t file $DIR/d27/f0 || error "checkstat failed"
-       log "== test_27a: write to one stripe file ========================="
-       cp /etc/hosts $DIR/d27/f0 || error
+       test_mkdir $DIR/$tdir
+       $LFS getstripe $DIR/$tdir
+       $LFS setstripe -c 1 $DIR/$tdir/$tfile || error "setstripe failed"
+       $CHECKSTAT -t file $DIR/$tdir/$tfile || error "checkstat failed"
+       cp /etc/hosts $DIR/$tdir/$tfile || error
 }
-run_test 27a "one stripe file =================================="
+run_test 27a "one stripe file"
 
 test_27b() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping 2-stripe test" && return
-       test_mkdir -p $DIR/d27
-       $SETSTRIPE -c 2 $DIR/d27/f01 || error "setstripe failed"
-       $GETSTRIPE -c $DIR/d27/f01
-       [ $($GETSTRIPE -c $DIR/d27/f01) -eq 2 ] ||
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 2 $DIR/$tdir/$tfile || error "setstripe failed"
+       $LFS getstripe -c $DIR/$tdir/$tfile
+       [ $($LFS getstripe -c $DIR/$tdir/$tfile) -eq 2 ] ||
                error "two-stripe file doesn't have two stripes"
 
-       dd if=/dev/zero of=$DIR/d27/f01 bs=4k count=4 || error "dd failed"
+       dd if=/dev/zero of=$DIR/$tdir/$tfile bs=4k count=4 || error "dd failed"
 }
 run_test 27b "create and write to two stripe file"
 
 test_27d() {
-       test_mkdir -p $DIR/d27
-       $SETSTRIPE -c 0 -i -1 -S 0 $DIR/d27/fdef || error "setstripe failed"
-       $CHECKSTAT -t file $DIR/d27/fdef || error "checkstat failed"
-       dd if=/dev/zero of=$DIR/d27/fdef bs=4k count=4 || error
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 0 -i -1 -S 0 $DIR/$tdir/$tfile ||
+               error "setstripe failed"
+       $CHECKSTAT -t file $DIR/$tdir/$tfile || error "checkstat failed"
+       dd if=/dev/zero of=$DIR/$tdir/$tfile bs=4k count=4 || error "dd failed"
 }
-run_test 27d "create file with default settings ================"
+run_test 27d "create file with default settings"
 
 test_27e() {
        # LU-5839 adds check for existed layout before setting it
        [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.56) ]] &&
                skip "Need MDS version at least 2.7.56" && return
-       test_mkdir -p $DIR/d27
-       $SETSTRIPE -c 2 $DIR/d27/f12 || error "setstripe failed"
-       $SETSTRIPE -c 2 $DIR/d27/f12 && error "setstripe succeeded twice"
-       $CHECKSTAT -t file $DIR/d27/f12 || error "checkstat failed"
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 2 $DIR/$tdir/$tfile || error "setstripe failed"
+       $LFS setstripe -c 2 $DIR/$tdir/$tfile && error "setstripe worked twice"
+       $CHECKSTAT -t file $DIR/$tdir/$tfile || error "checkstat failed"
 }
-run_test 27e "setstripe existing file (should return error) ======"
+run_test 27e "setstripe existing file (should return error)"
 
 test_27f() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE -S 100 -i 0 -c 1 $DIR/$tdir/$tfile &&
+       $LFS setstripe -S 100 -i 0 -c 1 $DIR/$tdir/$tfile &&
                error "$SETSTRIPE $DIR/$tdir/$tfile failed"
        $CHECKSTAT -t file $DIR/$tdir/$tfile &&
                error "$CHECKSTAT -t file $DIR/$tdir/$tfile should fail"
        dd if=/dev/zero of=$DIR/$tdir/$tfile bs=4k count=4 || error "dd failed"
-       $GETSTRIPE $DIR/$tdir/$tfile || error "$GETSTRIPE failed"
+       $LFS getstripe $DIR/$tdir/$tfile || error "$LFS getstripe failed"
 }
 run_test 27f "setstripe with bad stripe size (should return error)"
 
 test_27g() {
-       test_mkdir -p $DIR/d27
-       $MCREATE $DIR/d27/fnone || error "mcreate failed"
-       $GETSTRIPE $DIR/d27/fnone 2>&1 | grep "no stripe info" ||
-               error "$DIR/d27/fnone has object"
+       test_mkdir $DIR/$tdir
+       $MCREATE $DIR/$tdir/$tfile || error "mcreate failed"
+       $LFS getstripe $DIR/$tdir/$tfile 2>&1 | grep "no stripe info" ||
+               error "$DIR/$tdir/$tfile has object"
 }
-run_test 27g "$GETSTRIPE with no objects"
+run_test 27g "$LFS getstripe with no objects"
 
 test_27i() {
        test_mkdir $DIR/$tdir
        touch $DIR/$tdir/$tfile || error "touch failed"
-       [[ $($GETSTRIPE -c $DIR/$tdir/$tfile) -gt 0 ]] ||
+       [[ $($LFS getstripe -c $DIR/$tdir/$tfile) -gt 0 ]] ||
                error "missing objects"
 }
-run_test 27i "$GETSTRIPE with some objects"
+run_test 27i "$LFS getstripe with some objects"
 
 test_27j() {
-       test_mkdir -p $DIR/d27
-       $SETSTRIPE -i $OSTCOUNT $DIR/d27/f27j && error "setstripe failed"||true
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -i $OSTCOUNT $DIR/$tdir/$tfile &&
+               error "setstripe failed" || true
 }
 run_test 27j "setstripe with bad stripe offset (should return error)"
 
 test_27k() { # bug 2844
-       test_mkdir -p $DIR/d27
-       FILE=$DIR/d27/f27k
-       LL_MAX_BLKSIZE=$((4 * 1024 * 1024))
-       [ ! -d $DIR/d27 ] && test_mkdir -p $DIR d27
-       $SETSTRIPE -S 67108864 $FILE || error "setstripe failed"
-       BLKSIZE=`stat $FILE | awk '/IO Block:/ { print $7 }'`
-       [ $BLKSIZE -le $LL_MAX_BLKSIZE ] || error "1:$BLKSIZE > $LL_MAX_BLKSIZE"
-       dd if=/dev/zero of=$FILE bs=4k count=1
-       BLKSIZE=`stat $FILE | awk '/IO Block:/ { print $7 }'`
-       [ $BLKSIZE -le $LL_MAX_BLKSIZE ] || error "2:$BLKSIZE > $LL_MAX_BLKSIZE"
-}
-run_test 27k "limit i_blksize for broken user apps ============="
+       test_mkdir $DIR/$tdir
+       local file=$DIR/$tdir/$tfile
+       local ll_max_blksize=$((4 * 1024 * 1024))
+       $LFS setstripe -S 67108864 $file || error "setstripe failed"
+       local blksize=$(stat $file | awk '/IO Block:/ { print $7 }')
+       [ $blksize -le $ll_max_blksize ] || error "1:$blksize > $ll_max_blksize"
+       dd if=/dev/zero of=$file bs=4k count=1
+       blksize=$(stat $file | awk '/IO Block:/ { print $7 }')
+       [ $blksize -le $ll_max_blksize ] || error "2:$blksize > $ll_max_blksize"
+}
+run_test 27k "limit i_blksize for broken user apps"
 
 test_27l() {
-       test_mkdir -p $DIR/d27
-       mcreate $DIR/f27l || error "creating file"
-       $RUNAS $SETSTRIPE -c 1 $DIR/f27l && \
+       mcreate $DIR/$tfile || error "creating file"
+       $RUNAS $LFS setstripe -c 1 $DIR/$tfile &&
                error "setstripe should have failed" || true
 }
 run_test 27l "check setstripe permissions (should return error)"
 
 test_27m() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "$OSTCOUNT < 2 OSTs -- skipping" &&
-               return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
        ORIGFREE=$($LCTL get_param -n lov.$FSNAME-clilov-*.kbytesavail |
                   head -n1)
@@ -1456,30 +1454,33 @@ test_27m() {
                return
        fi
        trap simple_cleanup_common EXIT
-       test_mkdir -p $DIR/$tdir
-       $SETSTRIPE -i 0 -c 1 $DIR/$tdir/f27m_1
-       dd if=/dev/zero of=$DIR/$tdir/f27m_1 bs=1024 count=$MAXFREE &&
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -i 0 -c 1 $DIR/$tdir/$tfile.1
+       dd if=/dev/zero of=$DIR/$tdir/$tfile.1 bs=1024 count=$MAXFREE &&
                error "dd should fill OST0"
        i=2
-       while $SETSTRIPE -i 0 -c 1 $DIR/$tdir/f27m_$i; do
+       while $LFS setstripe -i 0 -c 1 $DIR/$tdir/$tfile.$i; do
                i=$((i + 1))
                [ $i -gt 256 ] && break
        done
        i=$((i + 1))
-       touch $DIR/$tdir/f27m_$i
-       [ `$GETSTRIPE $DIR/$tdir/f27m_$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "0"` ] &&
+       touch $DIR/$tdir/$tfile.$i
+       [ $($LFS getstripe $DIR/$tdir/$tfile.$i | grep -A 10 obdidx |
+           awk '{print $1}'| grep -w "0") ] &&
                error "OST0 was full but new created file still use it"
        i=$((i + 1))
-       touch $DIR/$tdir/f27m_$i
-       [ `$GETSTRIPE $DIR/$tdir/f27m_$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "0"` ] &&
+       touch $DIR/$tdir/$tfile.$i
+       [ $($LFS getstripe $DIR/$tdir/$tfile.$i | grep -A 10 obdidx |
+           awk '{print $1}'| grep -w "0") ] &&
                error "OST0 was full but new created file still use it"
        simple_cleanup_common
 }
-run_test 27m "create file while OST0 was full =================="
+run_test 27m "create file while OST0 was full"
 
 sleep_maxage() {
-        local DELAY=$(do_facet $SINGLEMDS lctl get_param -n lov.*.qos_maxage | head -n 1 | awk '{print $1 * 2}')
-        sleep $DELAY
+       local delay=$(do_facet $SINGLEMDS lctl get_param -n lov.*.qos_maxage |
+                     head -n 1 | awk '{ print $1 * 2 }')
+       sleep $delay
 }
 
 # OSCs keep a NOSPC flag that will be reset after ~5s (qos_maxage)
@@ -1537,7 +1538,7 @@ exhaust_all_precreations() {
 }
 
 test_27n() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 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
@@ -1545,15 +1546,15 @@ test_27n() {
        reset_enospc
        rm -f $DIR/$tdir/$tfile
        exhaust_precreations 0 0x80000215
-       $SETSTRIPE -c -1 $DIR/$tdir
+       $LFS setstripe -c -1 $DIR/$tdir
        touch $DIR/$tdir/$tfile || error
-       $GETSTRIPE $DIR/$tdir/$tfile
+       $LFS getstripe $DIR/$tdir/$tfile
        reset_enospc
 }
-run_test 27n "create file with some full OSTs =================="
+run_test 27n "create file with some full OSTs"
 
 test_27o() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 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
@@ -1567,17 +1568,17 @@ test_27o() {
        reset_enospc
        rm -rf $DIR/$tdir/*
 }
-run_test 27o "create file with all full OSTs (should error) ===="
+run_test 27o "create file with all full OSTs (should error)"
 
 test_27p() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 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
 
        reset_enospc
        rm -f $DIR/$tdir/$tfile
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
 
        $MCREATE $DIR/$tdir/$tfile || error "mcreate failed"
        $TRUNCATE $DIR/$tdir/$tfile 80000000 || error "truncate failed"
@@ -1586,14 +1587,14 @@ test_27p() {
        exhaust_precreations 0 0x80000215
        echo foo >> $DIR/$tdir/$tfile || error "append failed"
        $CHECKSTAT -s 80000004 $DIR/$tdir/$tfile || error "checkstat failed"
-       $GETSTRIPE $DIR/$tdir/$tfile
+       $LFS getstripe $DIR/$tdir/$tfile
 
        reset_enospc
 }
-run_test 27p "append to a truncated file with some full OSTs ==="
+run_test 27p "append to a truncated file with some full OSTs"
 
 test_27q() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 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
@@ -1601,9 +1602,10 @@ test_27q() {
        reset_enospc
        rm -f $DIR/$tdir/$tfile
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $MCREATE $DIR/$tdir/$tfile || error "mcreate $DIR/$tdir/$tfile failed"
-       $TRUNCATE $DIR/$tdir/$tfile 80000000 ||error "truncate $DIR/$tdir/$tfile failed"
+       $TRUNCATE $DIR/$tdir/$tfile 80000000 ||
+               error "truncate $DIR/$tdir/$tfile failed"
        $CHECKSTAT -s 80000000 $DIR/$tdir/$tfile || error "checkstat failed"
 
        exhaust_all_precreations 0x215
@@ -1613,10 +1615,10 @@ test_27q() {
 
        reset_enospc
 }
-run_test 27q "append to truncated file with all OSTs full (should error) ==="
+run_test 27q "append to truncated file with all OSTs full (should error)"
 
 test_27r() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 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
@@ -1625,18 +1627,18 @@ test_27r() {
        rm -f $DIR/$tdir/$tfile
        exhaust_precreations 0 0x80000215
 
-       $SETSTRIPE -i 0 -c 2 $DIR/$tdir/$tfile # && error
+       $LFS setstripe -i 0 -c 2 $DIR/$tdir/$tfile # && error
 
        reset_enospc
 }
 run_test 27r "stripe file with some full OSTs (shouldn't LBUG) ="
 
 test_27s() { # bug 10725
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local stripe_size=$((4096 * 1024 * 1024))       # 2^32
        local stripe_count=0
        [ $OSTCOUNT -eq 1 ] || stripe_count=2
-       $SETSTRIPE -S $stripe_size -c $stripe_count $DIR/$tdir &&
+       $LFS setstripe -S $stripe_size -c $stripe_count $DIR/$tdir &&
                error "stripe width >= 2^32 succeeded" || true
 
 }
@@ -1653,7 +1655,7 @@ test_27t() { # bug 10864
 run_test 27t "check that utils parse path correctly"
 
 test_27u() { # bug 4900
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local index
        local list=$(comma_list $(mdts_nodes))
@@ -1661,30 +1663,30 @@ test_27u() { # bug 4900
 #define OBD_FAIL_MDS_OSC_PRECREATE      0x139
        do_nodes $list $LCTL set_param fail_loc=0x139
        test_mkdir -p $DIR/$tdir
-       rm -rf $DIR/$tdir/*
+       trap simple_cleanup_common EXIT
        createmany -o $DIR/$tdir/t- 1000
        do_nodes $list $LCTL set_param fail_loc=0
 
        TLOG=$TMP/$tfile.getstripe
-       $GETSTRIPE $DIR/$tdir > $TLOG
+       $LFS getstripe $DIR/$tdir > $TLOG
        OBJS=$(awk -vobj=0 '($1 == 0) { obj += 1 } END { print obj; }' $TLOG)
        unlinkmany $DIR/$tdir/t- 1000
+       trap 0
        [[ $OBJS -gt 0 ]] &&
                error "$OBJS objects created on OST-0. See $TLOG" || pass
 }
-run_test 27u "skip object creation on OSC w/o objects =========="
+run_test 27u "skip object creation on OSC w/o objects"
 
 test_27v() { # bug 4900
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 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
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
 
-        exhaust_all_precreations 0x215
-        reset_enospc
+       exhaust_all_precreations 0x215
+       reset_enospc
 
-        test_mkdir -p $DIR/$tdir
-        $SETSTRIPE -c 1 $DIR/$tdir         # 1 stripe / file
+       $LFS setstripe -c 1 $DIR/$tdir         # 1 stripe / file
 
         touch $DIR/$tdir/$tfile
         #define OBD_FAIL_TGT_DELAY_PRECREATE     0x705
@@ -1703,51 +1705,52 @@ test_27v() { # bug 4900
         sleep $((TIMEOUT / 2 - PROCESS))
         reset_enospc
 }
-run_test 27v "skip object creation on slow OST ================="
+run_test 27v "skip object creation on slow OST"
 
 test_27w() { # bug 10997
-        test_mkdir -p $DIR/$tdir || error "mkdir failed"
-        $SETSTRIPE -S 65536 $DIR/$tdir/f0 || error "setstripe failed"
-        [ $($GETSTRIPE -S $DIR/$tdir/f0) -ne 65536 ] &&
-                error "stripe size $size != 65536" || true
-        [ $($GETSTRIPE -d $DIR/$tdir | grep -c "stripe_count") -ne 1 ] &&
-                error "$GETSTRIPE -d $DIR/$tdir failed" || true
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -S 65536 $DIR/$tdir/f0 || error "setstripe failed"
+       [ $($LFS getstripe -S $DIR/$tdir/f0) -ne 65536 ] &&
+               error "stripe size $size != 65536" || true
+       [ $($LFS getstripe -d $DIR/$tdir | grep -c "stripe_count") -eq 0 ] &&
+               error "$LFS getstripe -d $DIR/$tdir no 'stripe_count'" || true
 }
-run_test 27w "check $SETSTRIPE -S option"
+run_test 27w "check $LFS setstripe -S and getstrip -d options"
 
 test_27wa() {
        [[ $OSTCOUNT -lt 2 ]] &&
                skip_env "skipping multiple stripe count/offset test" && return
 
-        test_mkdir -p $DIR/$tdir || error "mkdir failed"
-        for i in $(seq 1 $OSTCOUNT); do
-                offset=$((i - 1))
-                $SETSTRIPE -c $i -i $offset $DIR/$tdir/f$i ||
-                        error "setstripe -c $i -i $offset failed"
-                count=$($GETSTRIPE -c $DIR/$tdir/f$i)
-                index=$($GETSTRIPE -i $DIR/$tdir/f$i)
-                [ $count -ne $i ] && error "stripe count $count != $i" || true
-                [ $index -ne $offset ] &&
-                        error "stripe offset $index != $offset" || true
-        done
+       test_mkdir $DIR/$tdir
+       for i in $(seq 1 $OSTCOUNT); do
+               offset=$((i - 1))
+               $LFS setstripe -c $i -i $offset $DIR/$tdir/f$i ||
+                       error "setstripe -c $i -i $offset failed"
+               count=$($LFS getstripe -c $DIR/$tdir/f$i)
+               index=$($LFS getstripe -i $DIR/$tdir/f$i)
+               [ $count -ne $i ] && error "stripe count $count != $i" || true
+               [ $index -ne $offset ] &&
+                       error "stripe offset $index != $offset" || true
+       done
 }
-run_test 27wa "check $SETSTRIPE -c -i options"
+run_test 27wa "check $LFS setstripe -c -i options"
 
 test_27x() {
        remote_ost_nodsh && skip "remote OST with nodsh" && return
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "$OSTCOUNT < 2 OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        OFFSET=$(($OSTCOUNT - 1))
        OSTIDX=0
        local OST=$(ostname_from_index $OSTIDX)
 
-       test_mkdir -p $DIR/$tdir
-       $SETSTRIPE -c 1 $DIR/$tdir      # 1 stripe per file
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 1 $DIR/$tdir  # 1 stripe per file
        do_facet ost$((OSTIDX + 1)) lctl set_param -n obdfilter.$OST.degraded 1
        sleep_maxage
        createmany -o $DIR/$tdir/$tfile $OSTCOUNT
-       for i in `seq 0 $OFFSET`; do
-               [ `$GETSTRIPE $DIR/$tdir/$tfile$i | grep -A 10 obdidx | awk '{print $1}' | grep -w "$OSTIDX"` ] &&
+       for i in $(seq 0 $OFFSET); do
+               [ $($LFS getstripe $DIR/$tdir/$tfile$i | grep -A 10 obdidx |
+                       awk '{print $1}' | grep -w "$OSTIDX") ] &&
                error "OST0 was degraded but new created file still use it"
        done
        do_facet ost$((OSTIDX + 1)) lctl set_param -n obdfilter.$OST.degraded 0
@@ -1755,18 +1758,17 @@ test_27x() {
 run_test 27x "create files while OST0 is degraded"
 
 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
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && 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 \
-            osc.$mdtosc.prealloc_last_id)
-        local next_id=$(do_facet $SINGLEMDS lctl get_param -n \
-            osc.$mdtosc.prealloc_next_id)
-        local fcount=$((last_id - next_id))
+       local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS $FSNAME-OST0000)
+       local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
+               osc.$mdtosc.prealloc_last_id)
+       local next_id=$(do_facet $SINGLEMDS lctl get_param -n \
+               osc.$mdtosc.prealloc_next_id)
+       local fcount=$((last_id - next_id))
        [[ $fcount -eq 0 ]] && skip "not enough space on OST0" && return
        [[ $fcount -gt $OSTCOUNT ]] && fcount=$OSTCOUNT
 
@@ -1790,8 +1792,8 @@ test_27y() {
        done
 
        OSTIDX=$(index_from_ostuuid $OST)
-       test_mkdir -p $DIR/$tdir
-       $SETSTRIPE -c 1 $DIR/$tdir      # 1 stripe / file
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 1 $DIR/$tdir      # 1 stripe / file
 
        for OSC in $MDS_OSCS; do
                OST=$(osc_to_ost $OSC)
@@ -1819,16 +1821,16 @@ test_27y() {
        done
 
        # all osp devices get activated, hence -1 stripe count restored
-       local stripecnt=0
+       local stripe_count=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)
+       $LFS setstripe -c -1 $DIR/$tfile
+       stripe_count=$($LFS getstripe -c $DIR/$tfile)
        rm -f $DIR/$tfile
-       [ $stripecnt -ne $OSTCOUNT ] &&
-               error "Of $OSTCOUNT OSTs, only $stripecnt is available"
+       [ $stripe_count -ne $OSTCOUNT ] &&
+               error "Of $OSTCOUNT OSTs, only $stripe_count is available"
        return 0
 }
 run_test 27y "create files while OST0 is degraded and the rest inactive"
@@ -1877,17 +1879,18 @@ check_seq_oid()
                fi
                local obj_file="O/$seq/d$((oid %32))/$oid_hex"
 
-               local ff
+               local ff=""
                #
                # Don't unmount/remount the OSTs if we don't need to do that.
                # LU-2577 changes filter_fid to be smaller, so debugfs needs
                # update too, until that use mount/ll_decode_filter_fid/mount.
                # Re-enable when debugfs will understand new filter_fid.
                #
-               if false && [ $(facet_fstype ost$ost) == ldiskfs ]; then
+               if [ $(facet_fstype ost$ost) == ldiskfs ]; then
                        ff=$(do_facet ost$ost "$DEBUGFS -c -R 'stat $obj_file' \
                                $dev 2>/dev/null" | grep "parent=")
-               else
+               fi
+               if [ -z "$ff" ]; then
                        stop ost$ost
                        mount_fstype ost$ost
                        ff=$(do_facet ost$ost $LL_DECODE_FILTER_FID \
@@ -1903,57 +1906,65 @@ check_seq_oid()
 
                # /mnt/O/0/d23/23: objid=23 seq=0 parent=[0x200000400:0x1e:0x1]
                # fid: objid=23 seq=0 parent=[0x200000400:0x1e:0x0] stripe=1
-               local ff_parent=$(echo $ff|sed -e 's/.*parent=.//')
-               local ff_pseq=$(echo $ff_parent | cut -d: -f1)
-               local ff_poid=$(echo $ff_parent | cut -d: -f2)
+               #
+               # fid: parent=[0x200000400:0x1e:0x0] stripe=1 stripe_count=2 \
+               #       stripe_size=1048576 component_id=1 component_start=0 \
+               #       component_end=33554432
+               local ff_parent=$(sed -e 's/.*parent=.//' <<<$ff)
+               local ff_pseq=$(cut -d: -f1 <<<$ff_parent)
+               local ff_poid=$(cut -d: -f2 <<<$ff_parent)
                local ff_pstripe
-               if echo $ff_parent | grep -q 'stripe='; then
-                       ff_pstripe=$(echo $ff_parent | sed -e 's/.*stripe=//')
+               if grep -q 'stripe=' <<<$ff; then
+                       ff_pstripe=$(sed -e 's/.*stripe=//' -e 's/ .*//' <<<$ff)
                else
-                       #
                        # $LL_DECODE_FILTER_FID does not print "stripe="; look
-                       # into f_ver in this case.  See the comment on
-                       # ff_parent.
-                       #
-                       ff_pstripe=$(echo $ff_parent | cut -d: -f3 |
-                               sed -e 's/\]//')
+                       # into f_ver in this case.  See comment on ff_parent.
+                       ff_pstripe=$(cut -d: -f3 <<<$ff_parent | sed -e 's/]//')
                fi
 
-                # compare lmm_seq and filter_fid->ff_parent.f_seq
-                [ $ff_pseq = $lmm_seq ] ||
-                        error "FF parent SEQ $ff_pseq != $lmm_seq"
-                # compare lmm_object_id and filter_fid->ff_parent.f_oid
-                [ $ff_poid = $lmm_oid ] ||
-                        error "FF parent OID $ff_poid != $lmm_oid"
+               # compare lmm_seq and filter_fid->ff_parent.f_seq
+               [ $ff_pseq = $lmm_seq ] ||
+                       error "FF parent SEQ $ff_pseq != $lmm_seq"
+               # compare lmm_object_id and filter_fid->ff_parent.f_oid
+               [ $ff_poid = $lmm_oid ] ||
+                       error "FF parent OID $ff_poid != $lmm_oid"
                (($ff_pstripe == $stripe_nr)) ||
-                        error "FF stripe $ff_pstripe != $stripe_nr"
+                       error "FF stripe $ff_pstripe != $stripe_nr"
 
-                stripe_nr=$((stripe_nr + 1))
-        done
+               stripe_nr=$((stripe_nr + 1))
+               [ $(lustre_version_code client) -lt $(version_code 2.9.55) ] &&
+                       continue
+               if grep -q 'stripe_count=' <<<$ff; then
+                       local ff_scnt=$(sed -e 's/.*stripe_count=//' \
+                                           -e 's/ .*//' <<<$ff)
+                       [ $lmm_count = $ff_scnt ] ||
+                               error "FF stripe count $lmm_count != $ff_scnt"
+               fi
+       done
 }
 
 test_27z() {
-        remote_ost_nodsh && skip "remote OST with nodsh" && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
 
-        $SETSTRIPE -c 1 -i 0 -S 64k $DIR/$tdir/$tfile-1 ||
-                { error "setstripe -c -1 failed"; return 1; }
-        # We need to send a write to every object to get parent FID info set.
-        # This _should_ also work for setattr, but does not currently.
-        # touch $DIR/$tdir/$tfile-1 ||
-        dd if=/dev/zero of=$DIR/$tdir/$tfile-1 bs=1M count=1 ||
-                { error "dd $tfile-1 failed"; return 2; }
-        $SETSTRIPE -c -1 -i $((OSTCOUNT - 1)) -S 1M $DIR/$tdir/$tfile-2 ||
-                { error "setstripe -c -1 failed"; return 3; }
-        dd if=/dev/zero of=$DIR/$tdir/$tfile-2 bs=1M count=$OSTCOUNT ||
-                { error "dd $tfile-2 failed"; return 4; }
+       $LFS setstripe -c 1 -i 0 -S 64k $DIR/$tdir/$tfile-1 ||
+               { error "setstripe -c -1 failed"; return 1; }
+       # We need to send a write to every object to get parent FID info set.
+       # This _should_ also work for setattr, but does not currently.
+       # touch $DIR/$tdir/$tfile-1 ||
+       dd if=/dev/zero of=$DIR/$tdir/$tfile-1 bs=1M count=1 ||
+               { error "dd $tfile-1 failed"; return 2; }
+       $LFS setstripe -c -1 -i $((OSTCOUNT - 1)) -S 1M $DIR/$tdir/$tfile-2 ||
+               { error "setstripe -c -1 failed"; return 3; }
+       dd if=/dev/zero of=$DIR/$tdir/$tfile-2 bs=1M count=$OSTCOUNT ||
+               { error "dd $tfile-2 failed"; return 4; }
 
-        # make sure write RPCs have been sent to OSTs
-        sync; sleep 5; sync
+       # make sure write RPCs have been sent to OSTs
+       sync; sleep 5; sync
 
-        check_seq_oid $DIR/$tdir/$tfile-1 || return 5
-        check_seq_oid $DIR/$tdir/$tfile-2 || return 6
+       check_seq_oid $DIR/$tdir/$tfile-1 || return 5
+       check_seq_oid $DIR/$tdir/$tfile-2 || return 6
 }
 run_test 27z "check SEQ/OID on the MDT and OST filesystems"
 
@@ -1976,7 +1987,7 @@ test_27A() { # b=19102
 run_test 27A "check filesystem-wide default LOV EA values"
 
 test_27B() { # LU-2523
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        rm -f $DIR/$tdir/f0 $DIR/$tdir/f1
        touch $DIR/$tdir/f0
        # open f1 with O_LOV_DELAY_CREATE
@@ -2007,7 +2018,7 @@ test_27C() { #LU-2871
        local i
        local j
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        cd $DIR/$tdir
        for i in $(seq 0 $((OSTCOUNT - 1))); do
                # set stripe across all OSTs starting from OST$i
@@ -2047,13 +2058,16 @@ test_27D() {
        local ost_list=$(seq $first_ost $ost_step $last_ost)
        local ost_range="$first_ost $last_ost $ost_step"
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        pool_add $POOL || error "pool_add failed"
        pool_add_targets $POOL $ost_range || error "pool_add_targets failed"
 
        local skip27D
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.64) ] &&
-               skip27D = "-s 29"
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ] &&
+               skip27D += "-s 29"
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.9.55) -o \
+         $(lustre_version_code client) -lt $(version_code 2.9.55) ] &&
+               skip27D += "-s 30,31"
        llapi_layout_test -d$DIR/$tdir -p$POOL -o$OSTCOUNT $skip27D ||
                error "llapi_layout_test failed"
 
@@ -2093,13 +2107,12 @@ test_27E() {
 run_test 27E "check that default extended attribute size properly increases"
 
 test_27F() { # LU-5346/LU-7975
-
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-
        [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.51) ]] &&
                skip "Need MDS version at least 2.8.51" && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        rm -f $DIR/$tdir/f0
        $SETSTRIPE -c 2 $DIR/$tdir
 
@@ -2389,7 +2402,7 @@ link_one() {
 }
 
 test_31o() { # LU-2901
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        for LOOP in $(seq 100); do
                rm -f $DIR/$tdir/$tfile*
                for THREAD in $(seq 8); do
@@ -2478,52 +2491,52 @@ test_32d() {
        ls -al $DIR/$tdir/ext2-mountpoint/../d2/test_dir || error
        cleanup_test32_mount
 }
-run_test 32d "open d32d/ext2-mountpoint/../d2/test_dir ========="
+run_test 32d "open d32d/ext2-mountpoint/../d2/test_dir"
 
 test_32e() {
-       [ -e $DIR/d32e ] && rm -fr $DIR/d32e
-       test_mkdir -p $DIR/d32e/tmp
-       TMP_DIR=$DIR/d32e/tmp
-       ln -s $DIR/d32e $TMP_DIR/symlink11
-       ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
-       $CHECKSTAT -t link $DIR/d32e/tmp/symlink11 || error
-       $CHECKSTAT -t link $DIR/d32e/symlink01 || error
+       rm -fr $DIR/$tdir
+       test_mkdir -p $DIR/$tdir/tmp
+       local tmp_dir=$DIR/$tdir/tmp
+       ln -s $DIR/$tdir $tmp_dir/symlink11
+       ln -s $tmp_dir/symlink11 $tmp_dir/../symlink01
+       $CHECKSTAT -t link $DIR/$tdir/tmp/symlink11 || error "symlink11 bad"
+       $CHECKSTAT -t link $DIR/$tdir/symlink01 || error "symlink01 bad"
 }
-run_test 32e "stat d32e/symlink->tmp/symlink->lustre-subdir ===="
+run_test 32e "stat d32e/symlink->tmp/symlink->lustre-subdir"
 
 test_32f() {
-       [ -e $DIR/d32f ] && rm -fr $DIR/d32f
-       test_mkdir -p $DIR/d32f/tmp
-       TMP_DIR=$DIR/d32f/tmp
-       ln -s $DIR/d32f $TMP_DIR/symlink11
-       ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
-       ls $DIR/d32f/tmp/symlink11  || error
-       ls $DIR/d32f/symlink01 || error
+       rm -fr $DIR/$tdir
+       test_mkdir -p $DIR/$tdir/tmp
+       local tmp_dir=$DIR/$tdir/tmp
+       ln -s $DIR/$tdir $tmp_dir/symlink11
+       ln -s $tmp_dir/symlink11 $tmp_dir/../symlink01
+       ls $DIR/$tdir/tmp/symlink11  || error "symlink11 bad"
+       ls $DIR/$tdir/symlink01 || error "symlink01 bad"
 }
-run_test 32f "open d32f/symlink->tmp/symlink->lustre-subdir ===="
+run_test 32f "open d32f/symlink->tmp/symlink->lustre-subdir"
 
 test_32g() {
-       TMP_DIR=$DIR/$tdir/tmp
-       test_mkdir -p $DIR/$tdir/tmp
+       local tmp_dir=$DIR/$tdir/tmp
+       test_mkdir -p $tmp_dir
        test_mkdir $DIR/${tdir}2
-       ln -s $DIR/${tdir}2 $TMP_DIR/symlink12
-       ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
-       $CHECKSTAT -t link $TMP_DIR/symlink12 || error
-       $CHECKSTAT -t link $DIR/$tdir/symlink02 || error
-       $CHECKSTAT -t dir -f $TMP_DIR/symlink12 || error
-       $CHECKSTAT -t dir -f $DIR/$tdir/symlink02 || error
+       ln -s $DIR/${tdir}2 $tmp_dir/symlink12
+       ln -s $tmp_dir/symlink12 $tmp_dir/../symlink02
+       $CHECKSTAT -t link $tmp_dir/symlink12 || error "symlink12 not a link"
+       $CHECKSTAT -t link $DIR/$tdir/symlink02 || error "symlink02 not a link"
+       $CHECKSTAT -t dir -f $tmp_dir/symlink12 || error "symlink12 not a dir"
+       $CHECKSTAT -t dir -f $DIR/$tdir/symlink02 || error "symlink12 not a dir"
 }
 run_test 32g "stat d32g/symlink->tmp/symlink->lustre-subdir/${tdir}2"
 
 test_32h() {
        rm -fr $DIR/$tdir $DIR/${tdir}2
-       TMP_DIR=$DIR/$tdir/tmp
-       test_mkdir -p $DIR/$tdir/tmp
+       tmp_dir=$DIR/$tdir/tmp
+       test_mkdir -p $tmp_dir
        test_mkdir $DIR/${tdir}2
-       ln -s $DIR/${tdir}2 $TMP_DIR/symlink12
-       ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
-       ls $TMP_DIR/symlink12 || error
-       ls $DIR/$tdir/symlink02  || error
+       ln -s $DIR/${tdir}2 $tmp_dir/symlink12
+       ln -s $tmp_dir/symlink12 $tmp_dir/../symlink02
+       ls $tmp_dir/symlink12 || error "listing symlink12"
+       ls $DIR/$tdir/symlink02  || error "listing symlink02"
 }
 run_test 32h "open d32h/symlink->tmp/symlink->lustre-subdir/${tdir}2"
 
@@ -2668,38 +2681,39 @@ test_33aa() {
        $RUNAS $OPENFILE -f O_RDWR $DIR/$tfile && error || true
        log 33_2
 }
-run_test 33aa "write file with mode 444 (should return error) ===="
+run_test 33aa "write file with mode 444 (should return error)"
 
 test_33a() {
-        rm -fr $DIR/d33
-        test_mkdir -p $DIR/d33
-        chown $RUNAS_ID $DIR/d33
-        $RUNAS $OPENFILE -f O_RDWR:O_CREAT -m 0444 $DIR/d33/f33|| error "create"
-        $RUNAS $OPENFILE -f O_RDWR:O_CREAT -m 0444 $DIR/d33/f33 && \
+       rm -fr $DIR/$tdir
+       test_mkdir $DIR/$tdir
+       chown $RUNAS_ID $DIR/$tdir
+       $RUNAS $OPENFILE -f O_RDWR:O_CREAT -m 0444 $DIR/$tdir/$tfile ||
+               error "$RUNAS create $tdir/$tfile failed"
+       $RUNAS $OPENFILE -f O_RDWR:O_CREAT -m 0444 $DIR/$tdir/$tfile &&
                error "open RDWR" || true
 }
 run_test 33a "test open file(mode=0444) with O_RDWR (should return error)"
 
 test_33b() {
-        rm -fr $DIR/d33
-        test_mkdir -p $DIR/d33
-        chown $RUNAS_ID $DIR/d33
-        $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 || true
+       rm -fr $DIR/$tdir
+       test_mkdir $DIR/$tdir
+       chown $RUNAS_ID $DIR/$tdir
+       $RUNAS $OPENFILE -f 1286739555 $DIR/$tdir/$tfile || true
 }
 run_test 33b "test open file with malformed flags (No panic)"
 
 test_33c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        local ostnum
-        local ostname
-        local write_bytes
-        local all_zeros
+       local ostnum
+       local ostname
+       local write_bytes
+       local all_zeros
 
-        remote_ost_nodsh && skip "remote OST with nodsh" && return
-        all_zeros=:
-        rm -fr $DIR/d33
-        test_mkdir -p $DIR/d33
-        # Read: 0, Write: 4, create/destroy: 2/0, stat: 1, punch: 0
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+       all_zeros=:
+       rm -fr $DIR/$tdir
+       test_mkdir $DIR/$tdir
+       # Read: 0, Write: 4, create/destroy: 2/0, stat: 1, punch: 0
 
         sync
         for ostnum in $(seq $OSTCOUNT); do
@@ -2722,10 +2736,10 @@ test_33c() {
 
         $all_zeros || return 0
 
-        # Write four bytes
-        echo foo > $DIR/d33/bar
-        # Really write them
-        sync
+       # Write four bytes
+       echo foo > $DIR/$tdir/bar
+       # Really write them
+       sync
 
         # Total up write_bytes after writing.  We'd better find non-zeros.
         for ostnum in $(seq $OSTCOUNT); do
@@ -2760,7 +2774,7 @@ test_33d() {
        local MDTIDX=1
        local remote_dir=$DIR/$tdir/remote_dir
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS mkdir -i $MDTIDX $remote_dir ||
                error "create remote directory failed"
 
@@ -2979,19 +2993,19 @@ test_35a() {
        $RUNAS $DIR/f35a && error || true
        rm $DIR/f35a
 }
-run_test 35a "exec file with mode 444 (should return and not leak) ====="
+run_test 35a "exec file with mode 444 (should return and not leak)"
 
 test_36a() {
        rm -f $DIR/f36
        utime $DIR/f36 || error
 }
-run_test 36a "MDS utime check (mknod, utime) ==================="
+run_test 36a "MDS utime check (mknod, utime)"
 
 test_36b() {
        echo "" > $DIR/f36
        utime $DIR/f36 || error
 }
-run_test 36b "OST utime check (open, utime) ===================="
+run_test 36b "OST utime check (open, utime)"
 
 test_36c() {
        rm -f $DIR/d36/f36
@@ -2999,23 +3013,23 @@ test_36c() {
        chown $RUNAS_ID $DIR/d36
        $RUNAS utime $DIR/d36/f36 || error
 }
-run_test 36c "non-root MDS utime check (mknod, utime) =========="
+run_test 36c "non-root MDS utime check (mknod, utime)"
 
 test_36d() {
        [ ! -d $DIR/d36 ] && test_36c
        echo "" > $DIR/d36/f36
        $RUNAS utime $DIR/d36/f36 || error
 }
-run_test 36d "non-root OST utime check (open, utime) ==========="
+run_test 36d "non-root OST utime check (open, utime)"
 
 test_36e() {
        [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID -- skipping" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/$tfile
-       $RUNAS utime $DIR/$tdir/$tfile && \
+       $RUNAS utime $DIR/$tdir/$tfile &&
                error "utime worked, expected failure" || true
 }
-run_test 36e "utime on non-owned file (should return error) ===="
+run_test 36e "utime on non-owned file (should return error)"
 
 subr_36fh() {
        local fl="$1"
@@ -3024,7 +3038,7 @@ subr_36fh() {
        export LANG=C LC_LANG=C # for date language
 
        DATESTR="Dec 20  2000"
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        lctl set_param fail_loc=$fl
        date; date +%s
        cp /etc/hosts $DIR/$tdir/$tfile
@@ -3058,7 +3072,7 @@ test_36g() {
        local fmd_before
        local fmd_after
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        fmd_max_age=$(do_facet ost1 \
                "lctl get_param -n obdfilter.*.client_cache_seconds 2> /dev/null | \
                head -n 1")
@@ -3135,10 +3149,10 @@ test_39a() { # was test_39
                error "O_TRUNC didn't change timestamps"
        fi
 }
-run_test 39a "mtime changed on create ==========================="
+run_test 39a "mtime changed on create"
 
 test_39b() {
-       test_mkdir -p -c1 $DIR/$tdir
+       test_mkdir -c1 $DIR/$tdir
        cp -p /etc/passwd $DIR/$tdir/fopen
        cp -p /etc/passwd $DIR/$tdir/flink
        cp -p /etc/passwd $DIR/$tdir/funlink
@@ -3519,19 +3533,19 @@ test_39o() {
                error "wrong links count $links1 != $links3"
        return 0
 }
-run_test 39o "directory cached attributes updated after create ========"
+run_test 39o "directory cached attributes updated after create"
 
 test_39p() {
        [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
        local MDTIDX=1
-       TESTDIR=$DIR/$tdir/$tfile
+       TESTDIR=$DIR/$tdir/$tdir
        [ -e $TESTDIR ] && rm -rf $TESTDIR
        test_mkdir -p $TESTDIR
        cd $TESTDIR
        links1=2
        ls
-       $LFS mkdir -i $MDTIDX $TESTDIR/remote_dir1
-       $LFS mkdir -i $MDTIDX $TESTDIR/remote_dir2
+       test_mkdir -i $MDTIDX $TESTDIR/remote_dir1
+       test_mkdir -i $MDTIDX $TESTDIR/remote_dir2
        ls
        links2=$(stat -c %h .)
        [ $(($links1 + 2)) != $links2 ] &&
@@ -3731,7 +3745,7 @@ test_42e() { # bug22074
        local max_dirty_mb
        local warmup_files
 
-       test_mkdir -p $DIR/${tdir}e
+       test_mkdir $DIR/${tdir}e
        $SETSTRIPE -c 1 $TDIR
        createmany -o $TDIR/f $files
 
@@ -3798,7 +3812,7 @@ test_42e() { # bug22074
 run_test 42e "verify sub-RPC writes are not done synchronously"
 
 test_43A() { # was test_43
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        cp -p /bin/ls $DIR/$tdir/$tfile
        $MULTIOP $DIR/$tdir/$tfile Ow_c &
        pid=$!
@@ -3847,7 +3861,7 @@ test_43c() {
 run_test 43c "md5sum of copy into lustre"
 
 test_44A() { # was test_44
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping 2-stripe test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        dd if=/dev/zero of=$DIR/f1 bs=4k count=1 seek=1023
        dd if=$DIR/f1 bs=4k count=1 > /dev/null
 }
@@ -3962,15 +3976,15 @@ test_48a() { # bug 2399
        test_mkdir $DIR/$tdir
        cd $DIR/$tdir
        mv $DIR/$tdir $DIR/$tdir.new || error "move directory failed"
-       test_mkdir $DIR/$tdir || error "recreate directory failed"
+       test_mkdir $DIR/$tdir
        touch foo || error "'touch foo' failed after recreating cwd"
-       test_mkdir bar || error "'mkdir foo' failed after recreating cwd"
+       test_mkdir bar
        touch .foo || error "'touch .foo' failed after recreating cwd"
-       test_mkdir .bar || error "'mkdir .foo' failed after recreating cwd"
+       test_mkdir .bar
        ls . > /dev/null || error "'ls .' failed after recreating cwd"
        ls .. > /dev/null || error "'ls ..' failed after removing cwd"
        cd . || error "'cd .' failed after recreating cwd"
-       test_mkdir . && error "'mkdir .' worked after recreating cwd"
+       mkdir . && error "'mkdir .' worked after recreating cwd"
        rmdir . && error "'rmdir .' worked after recreating cwd"
        ln -s . baz || error "'ln -s .' failed after recreating cwd"
        cd .. || error "'cd ..' failed after recreating cwd"
@@ -3983,12 +3997,12 @@ test_48b() { # bug 2399
        cd $DIR/$tdir
        rmdir $DIR/$tdir || error "remove cwd $DIR/$tdir failed"
        touch foo && error "'touch foo' worked after removing cwd"
-       test_mkdir foo && error "'mkdir foo' worked after removing cwd"
+       mkdir foo && error "'mkdir foo' worked after removing cwd"
        touch .foo && error "'touch .foo' worked after removing cwd"
-       test_mkdir .foo && error "'mkdir .foo' worked after removing cwd"
+       mkdir .foo && error "'mkdir .foo' worked after removing cwd"
        ls . > /dev/null && error "'ls .' worked after removing cwd"
        ls .. > /dev/null || error "'ls ..' failed after removing cwd"
-       test_mkdir . && error "'mkdir .' worked after removing cwd"
+       mkdir . && error "'mkdir .' worked after removing cwd"
        rmdir . && error "'rmdir .' worked after removing cwd"
        ln -s . foo && error "'ln -s .' worked after removing cwd"
        cd .. || echo "'cd ..' failed after removing cwd `pwd`"  #bug 3517
@@ -4003,12 +4017,12 @@ test_48c() { # bug 2350
        cd $DIR/$tdir/dir
        $TRACE rmdir $DIR/$tdir/dir || error "remove cwd $DIR/$tdir/dir failed"
        $TRACE touch foo && error "touch foo worked after removing cwd"
-       $TRACE test_mkdir foo && error "'mkdir foo' worked after removing cwd"
+       $TRACE mkdir foo && error "'mkdir foo' worked after removing cwd"
        touch .foo && error "touch .foo worked after removing cwd"
-       test_mkdir .foo && error "mkdir .foo worked after removing cwd"
+       mkdir .foo && error "mkdir .foo worked after removing cwd"
        $TRACE ls . && error "'ls .' worked after removing cwd"
        $TRACE ls .. || error "'ls ..' failed after removing cwd"
-       $TRACE test_mkdir . && error "'mkdir .' worked after removing cwd"
+       $TRACE mkdir . && error "'mkdir .' worked after removing cwd"
        $TRACE rmdir . && error "'rmdir .' worked after removing cwd"
        $TRACE ln -s . foo && error "'ln -s .' worked after removing cwd"
        $TRACE cd .. || echo "'cd ..' failed after removing cwd `pwd`" #bug 3415
@@ -4024,12 +4038,12 @@ test_48d() { # bug 2350
        $TRACE rmdir $DIR/$tdir/dir || error "remove cwd $DIR/$tdir/dir failed"
        $TRACE rmdir $DIR/$tdir || error "remove parent $DIR/$tdir failed"
        $TRACE touch foo && error "'touch foo' worked after removing parent"
-       $TRACE test_mkdir foo && error "mkdir foo worked after removing parent"
+       $TRACE mkdir foo && error "mkdir foo worked after removing parent"
        touch .foo && error "'touch .foo' worked after removing parent"
-       test_mkdir .foo && error "mkdir .foo worked after removing parent"
+       mkdir .foo && error "mkdir .foo worked after removing parent"
        $TRACE ls . && error "'ls .' worked after removing parent"
        $TRACE ls .. && error "'ls ..' worked after removing parent"
-       $TRACE test_mkdir . && error "'mkdir .' worked after removing parent"
+       $TRACE mkdir . && error "'mkdir .' worked after removing parent"
        $TRACE rmdir . && error "'rmdir .' worked after removing parent"
        $TRACE ln -s . foo && error "'ln -s .' worked after removing parent"
        true
@@ -4123,7 +4137,7 @@ test_51b() {
        # cleanup the directory
        rm -fr $dir
 
-       test_mkdir -p -c1 $dir
+       test_mkdir -c1 $dir
 
        $LFS df
        $LFS df -i
@@ -4180,11 +4194,10 @@ run_test 51b "exceed 64k subdirectory nlink limit on create, verify unlink"
 
 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
+       [[ $OSTCOUNT -lt 3 ]] && skip_env "needs >= 3 OSTs" && return
+       test_mkdir $DIR/$tdir
        createmany -o $DIR/$tdir/t- 1000
-       $GETSTRIPE $DIR/$tdir > $TMP/$tfile
+       $LFS getstripe $DIR/$tdir > $TMP/$tfile
        for N in $(seq 0 $((OSTCOUNT - 1))); do
                OBJS[$N]=$(awk -vobjs=0 '($1 == '$N') { objs += 1 } \
                        END { printf("%0.0f", objs) }' $TMP/$tfile)
@@ -4218,12 +4231,12 @@ run_test 51d "check object distribution"
 
 test_51e() {
        if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
-               skip "Only applicable to ldiskfs-based MDTs"
+               skip "ldiskfs only test"
                return
        fi
 
-       test_mkdir -c1 $DIR/$tdir       || error "create $tdir failed"
-       test_mkdir -c1 $DIR/$tdir/d0    || error "create d0 failed"
+       test_mkdir -c1 $DIR/$tdir
+       test_mkdir -c1 $DIR/$tdir/d0
 
        touch $DIR/$tdir/d0/foo
        createmany -l $DIR/$tdir/d0/foo $DIR/$tdir/d0/f- 65001 &&
@@ -4264,7 +4277,7 @@ run_test 51f "check many open files limit"
 
 test_52a() {
        [ -f $DIR/$tdir/foo ] && chattr -a $DIR/$tdir/foo
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/foo
        chattr +a $DIR/$tdir/foo || error "chattr +a failed"
        echo bar >> $DIR/$tdir/foo || error "append bar failed"
@@ -4284,7 +4297,7 @@ run_test 52a "append-only flag test (should return errors)"
 
 test_52b() {
        [ -f $DIR/$tdir/foo ] && chattr -i $DIR/$tdir/foo
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/foo
        chattr +i $DIR/$tdir/foo || error "chattr +i failed"
        cat test > $DIR/$tdir/foo && error "cat test worked"
@@ -4371,6 +4384,8 @@ test_53() {
 run_test 53 "verify that MDS and OSTs agree on pre-creation ===="
 
 test_54a() {
+       perl -MSocket -e ';' || { skip "no Socket perl module installed" && return; }
+
        $SOCKETSERVER $DIR/socket ||
                error "$SOCKETSERVER $DIR/socket failed: $?"
        $SOCKETCLIENT $DIR/socket ||
@@ -4425,7 +4440,7 @@ test_54c() {
        losetup $loopdev $DIR/$tfile ||
                error "can't set up $loopdev for $DIR/$tfile"
        mkfs.ext2 $loopdev || error "mke2fs on $loopdev"
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        mount -t ext2 $loopdev $DIR/$tdir ||
                error "error mounting $loopdev on $DIR/$tdir"
        dd if=/dev/zero of=$DIR/$tdir/tmp bs=$(get_page_size client) count=30 ||
@@ -4646,17 +4661,17 @@ test_56h() {
                               "found $NUMS, expected $EXPECTED"
         done
 }
-run_test 56h "check lfs find ! -name ============================="
+run_test 56h "check lfs find ! -name"
 
 test_56i() {
-       tdir=${tdir}i
-       test_mkdir -p $DIR/$tdir
-       UUID=$(ostuuid_from_index 0 $DIR/$tdir)
-       CMD="$LFIND -ost $UUID $DIR/$tdir"
-       OUT=$($CMD)
-       [ -z "$OUT" ] || error "\"$CMD\" returned directory '$OUT'"
+       tdir=${tdir}i
+       test_mkdir $DIR/$tdir
+       UUID=$(ostuuid_from_index 0 $DIR/$tdir)
+       CMD="$LFIND -ost $UUID $DIR/$tdir"
+       OUT=$($CMD)
+       [ -z "$OUT" ] || error "'$CMD' returned directory '$OUT'"
 }
-run_test 56i "check 'lfs find -ost UUID' skips directories ======="
+run_test 56i "check 'lfs find -ost UUID' skips directories"
 
 test_56j() {
        TDIR=$DIR/${tdir}g
@@ -4832,8 +4847,22 @@ run_test 56r "check lfs find -size works =========================="
 
 test_56s() { # LU-611
        TDIR=$DIR/${tdir}s
-       setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT"
 
+       #LU-9369
+       setup_56 0 $NUMDIRS
+       for i in $(seq 1 $NUMDIRS); do
+               $SETSTRIPE -c $((OSTCOUNT + 1)) $TDIR/dir$i/$tfile
+       done
+       EXPECTED=$NUMDIRS
+       CMD="$LFIND -c $OSTCOUNT $TDIR"
+       NUMS=$($CMD | wc -l)
+       [ $NUMS -eq $EXPECTED ] || {
+               $GETSTRIPE -R $TDIR
+               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       }
+       rm -rf $TDIR
+
+       setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT"
        if [[ $OSTCOUNT -gt 1 ]]; then
                $SETSTRIPE -c 1 $TDIR/$tfile.{0,1,2,3}
                ONESTRIPE=4
@@ -4886,6 +4915,21 @@ run_test 56s "check lfs find -stripe-count works"
 
 test_56t() { # LU-611
        TDIR=$DIR/${tdir}t
+
+       #LU-9369
+       setup_56 0 $NUMDIRS
+       for i in $(seq 1 $NUMDIRS); do
+               $SETSTRIPE -S 4M $TDIR/dir$i/$tfile
+       done
+       EXPECTED=$NUMDIRS
+       CMD="$LFIND -S 4M $TDIR"
+       NUMS=$($CMD | wc -l)
+       [ $NUMS -eq $EXPECTED ] || {
+               $GETSTRIPE -R $TDIR
+               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       }
+       rm -rf $TDIR
+
        setup_56 $NUMFILES $NUMDIRS "--stripe-size 512k"
 
        $SETSTRIPE -S 256k $TDIR/$tfile.{0,1,2,3}
@@ -4995,59 +5039,63 @@ test_56v() {
 run_test 56v "check 'lfs find -mdt match with lfs getstripe -M' ======="
 
 test_56w() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "$OSTCOUNT < 2 OSTs -- skipping" &&
-               return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        TDIR=$DIR/${tdir}w
 
-    rm -rf $TDIR || error "remove $TDIR failed"
-    setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT" "-c1"
-
-    local stripe_size
-    stripe_size=$($GETSTRIPE -S -d $TDIR) ||
-        error "$GETSTRIPE -S -d $TDIR failed"
-    stripe_size=${stripe_size%% *}
-
-    local file_size=$((stripe_size * OSTCOUNT))
-    local file_num=$((NUMDIRS * NUMFILES + NUMFILES))
-    local required_space=$((file_num * file_size))
-
-    local free_space=$($LCTL get_param -n lov.$FSNAME-clilov-*.kbytesavail |
-                       head -n1)
-    [[ $free_space -le $((required_space / 1024)) ]] &&
-        skip_env "need at least $required_space bytes free space," \
-                 "have $free_space kbytes" && return
-
-    local dd_bs=65536
-    local dd_count=$((file_size / dd_bs))
-
-    # write data into the files
-    local i
-    local j
-    local file
-    for i in $(seq 1 $NUMFILES); do
-        file=$TDIR/file$i
-        yes | dd bs=$dd_bs count=$dd_count of=$file >/dev/null 2>&1 ||
-            error "write data into $file failed"
-    done
-    for i in $(seq 1 $NUMDIRS); do
-        for j in $(seq 1 $NUMFILES); do
-            file=$TDIR/dir$i/file$j
-            yes | dd bs=$dd_bs count=$dd_count of=$file \
-                >/dev/null 2>&1 ||
-                error "write data into $file failed"
-        done
-    done
+       rm -rf $TDIR || error "remove $TDIR failed"
+       setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT" "-c1"
 
-    local expected=-1
-    [[ $OSTCOUNT -gt 1 ]] && expected=$((OSTCOUNT - 1))
+       local stripe_size
+       stripe_size=$($GETSTRIPE -S -d $TDIR) ||
+               error "$GETSTRIPE -S -d $TDIR failed"
+       stripe_size=${stripe_size%% *}
 
-    # lfs_migrate file
-    local cmd="$LFS_MIGRATE -y -c $expected $TDIR/file1"
-    echo "$cmd"
-    eval $cmd || error "$cmd failed"
+       local file_size=$((stripe_size * OSTCOUNT))
+       local file_num=$((NUMDIRS * NUMFILES + NUMFILES))
+       local required_space=$((file_num * file_size))
 
-    check_stripe_count $TDIR/file1 $expected
+       local free_space=$($LCTL get_param -n lov.$FSNAME-clilov-*.kbytesavail |
+                          head -n1)
+       [[ $free_space -le $((required_space / 1024)) ]] &&
+               skip_env "need $required_space bytes, have $free_space KB" &&
+               return
+
+       local dd_bs=65536
+       local dd_count=$((file_size / dd_bs))
+
+       # write data into the files
+       local i
+       local j
+       local file
+       for i in $(seq 1 $NUMFILES); do
+               file=$TDIR/file$i
+               yes | dd bs=$dd_bs count=$dd_count of=$file &>/dev/null ||
+                       error "write data into $file failed"
+       done
+       for i in $(seq 1 $NUMDIRS); do
+               for j in $(seq 1 $NUMFILES); do
+                       file=$TDIR/dir$i/file$j
+                       yes|dd bs=$dd_bs count=$dd_count of=$file &>/dev/null ||
+                               error "write data into $file failed"
+               done
+       done
+
+       # $LFS_MIGRATE will fail if hard link migration is unsupported
+       if [[ $(lustre_version_code mds1) -gt $(version_code 2.5.55) ]]; then
+               createmany -l$TDIR/dir1/file1 $TDIR/dir1/link 200 ||
+                       error "creating links to $TDIR/dir1/file1 failed"
+       fi
+
+       local expected=-1
+       [[ $OSTCOUNT -gt 1 ]] && expected=$((OSTCOUNT - 1))
+
+       # lfs_migrate file
+       local cmd="$LFS_MIGRATE -y -c $expected $TDIR/file1"
+       echo "$cmd"
+       eval $cmd || error "$cmd failed"
+
+       check_stripe_count $TDIR/file1 $expected
 
        if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.90) ];
        then
@@ -5100,11 +5148,10 @@ 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
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
        local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $dir0 || error "creating dir $dir0"
+       test_mkdir -p $dir0
 
        local ref1=/etc/passwd
        local file1=$dir0/file1
@@ -5123,11 +5170,10 @@ run_test 56x "lfs migration support"
 
 test_56xa() {
        check_swap_layouts_support && return 0
-       [[ $OSTCOUNT -lt 2 ]] &&
-               skip_env "need 2 OST, skipping test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
        local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $dir0 || error "creating dir $dir0"
+       test_mkdir -p $dir0
 
        local ref1=/etc/passwd
        local file1=$dir0/file1
@@ -5151,7 +5197,7 @@ test_56y() {
 
        local res=""
        local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $dir0 || error "creating dir $dir0"
+       test_mkdir -p $dir0
        local f1=$dir0/file1
        local f2=$dir0/file2
 
@@ -5216,7 +5262,7 @@ 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"
+               skip "ldiskfs only test"
                return
        fi
 
@@ -5237,7 +5283,7 @@ 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"
+               skip "ldiskfs only test"
                return
        fi
 
@@ -5249,7 +5295,7 @@ test_57b() {
        local FILEN=$dir/f$FILECOUNT
 
        rm -rf $dir || error "removing $dir"
-       test_mkdir -p -c1 $dir || error "creating $dir"
+       test_mkdir -c1 $dir
        local mdtidx=$($LFS getstripe -M $dir)
        local mdtname=MDT$(printf %04x $mdtidx)
        local facet=mds$((mdtidx + 1))
@@ -5325,7 +5371,7 @@ test_60a() {
 
        log "$TEST60_HEAD - from kernel mode"
        do_facet mgs "$LCTL set_param debug=warning; $LCTL dk > /dev/null"
-       do_facet mgs sh run-llog.sh
+       do_facet mgs "sh run-llog.sh" || error "run-llog.sh failed"
        do_facet mgs $LCTL dk > $TMP/$tfile
 
        # LU-6388: test llog_reader
@@ -5557,25 +5603,25 @@ test_64b () {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        sh oos.sh $MOUNT || error "oos.sh failed: $?"
 }
-run_test 64b "check out-of-space detection on client ==========="
+run_test 64b "check out-of-space detection on client"
 
 test_64c() {
        $LCTL set_param osc.*OST0000-osc-[^mM]*.cur_grant_bytes=0
 }
-run_test 64c "verify grant shrink ========================------"
+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
+       test_mkdir $DIR/$tdir
        touch $DIR/$tdir/f1
        $LVERIFY $DIR/$tdir $DIR/$tdir/f1 || error "lverify failed"
 }
-run_test 65a "directory with no stripe info ===================="
+run_test 65a "directory with no stripe info"
 
 test_65b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
 
        $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
@@ -5587,21 +5633,20 @@ run_test 65b "directory setstripe -S stripe_size*2 -i 0 -c 1"
 
 test_65c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       if [[ $OSTCOUNT -gt 1 ]]; then
-               test_mkdir -p $DIR/$tdir
-               local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
+       [ $OSTCOUNT -lt 2 ] && skip "need at least 2 OSTs" && return
+       test_mkdir $DIR/$tdir
+       local stripesize=$($GETSTRIPE -S $DIR/$tdir)
 
-               $SETSTRIPE -S $(($STRIPESIZE * 4)) -i 1 \
-                       -c $(($OSTCOUNT - 1)) $DIR/$tdir || error "setstripe"
-               touch $DIR/$tdir/f3
-               $LVERIFY $DIR/$tdir $DIR/$tdir/f3 || error "lverify failed"
-       fi
+       $LFS setstripe -S $((stripesize * 4)) -i 1 \
+               -c $((OSTCOUNT - 1)) $DIR/$tdir || error "setstripe"
+       touch $DIR/$tdir/f3
+       $LVERIFY $DIR/$tdir $DIR/$tdir/f3 || error "lverify failed"
 }
 run_test 65c "directory setstripe -S stripe_size*4 -i 1 -c $((OSTCOUNT-1))"
 
 test_65d() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local STRIPECOUNT=$($GETSTRIPE -c $DIR/$tdir)
        local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
 
@@ -5622,7 +5667,7 @@ run_test 65d "directory setstripe -S stripe_size -c stripe_count"
 
 test_65e() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
 
        $SETSTRIPE $DIR/$tdir || error "setstripe"
         $GETSTRIPE -v $DIR/$tdir | grep "Default" ||
@@ -5630,38 +5675,38 @@ test_65e() {
        touch $DIR/$tdir/f6
        $LVERIFY $DIR/$tdir $DIR/$tdir/f6 || error "lverify failed"
 }
-run_test 65e "directory setstripe defaults ======================="
+run_test 65e "directory setstripe defaults"
 
 test_65f() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/${tdir}f
+       test_mkdir $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
+       test_mkdir $DIR/$tdir
        local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
 
-        $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
-                                                       error "setstripe"
-        $SETSTRIPE -d $DIR/$tdir || error "setstripe"
-        $GETSTRIPE -v $DIR/$tdir | grep "Default" ||
+       $LFS setstripe -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
+               error "setstripe -S failed"
+       $LFS setstripe -d $DIR/$tdir || error "setstripe -d failed"
+       $LFS getstripe -v $DIR/$tdir | grep "Default" ||
                error "delete default stripe failed"
 }
-run_test 65g "directory setstripe -d ==========================="
+run_test 65g "directory setstripe -d"
 
 test_65h() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
 
-        $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
-                                                       error "setstripe"
-        test_mkdir -p $DIR/$tdir/dd1
-        [ $($GETSTRIPE -c $DIR/$tdir) == $($GETSTRIPE -c $DIR/$tdir/dd1) ] ||
-                error "stripe info inherit failed"
+       $LFS setstripe -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
+               error "setstripe -S failed"
+       test_mkdir $DIR/$tdir/dd1
+       [ $($LFS getstripe -c $DIR/$tdir) = $($GETSTRIPE -c $DIR/$tdir/dd1) ] ||
+               error "stripe info inherit failed"
 }
 run_test 65h "directory stripe info inherit ===================="
 
@@ -5703,7 +5748,7 @@ run_test 65j "set default striping on root directory (bug 6367)="
 
 test_65k() { # bug11679
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "too few OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
        local disable_precreate=true
@@ -5788,23 +5833,6 @@ test_66() {
 }
 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
-                       swapoff $LLOOP || error "swapoff failed"
-               fi
-
-               $LCTL blockdev_detach $LLOOP || error "detach failed"
-               rm -f $LLOOP
-               unset LLOOP
-       fi
-       rm -f $DIR/f68*
-}
-
 meminfo() {
        awk '($1 == "'$1':") { print $2 }' /proc/meminfo
 }
@@ -5843,7 +5871,7 @@ test_69() {
 run_test 69 "verify oa2dentry return -ENOENT doesn't LBUG ======"
 
 test_71() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS setdirstripe -D -c$MDSCOUNT $DIR/$tdir
        sh rundbench -C -D $DIR/$tdir 2 || error "dbench failed!"
 }
@@ -6090,6 +6118,96 @@ test_77b() { # bug 10889
 }
 run_test 77b "checksum error on client write, read"
 
+cleanup_77c() {
+       trap 0
+       set_checksums 0
+       $LCTL set_param osc.*osc-[^mM]*.checksum_dump=0
+       $check_ost &&
+               do_facet ost1 $LCTL set_param obdfilter.*-OST*.checksum_dump=0
+       [ -n $osc_file_prefix ] && rm -f ${osc_file_prefix}*
+       $check_ost && [ -n $ost_file_prefix ] &&
+               do_facet ost1 rm -f ${ost_file_prefix}\*
+}
+
+test_77c() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       $GSS && skip "could not run with gss" && return
+
+       local bad1
+       local osc_file_prefix
+       local osc_file
+       local check_ost=false
+       local ost_file_prefix
+       local ost_file
+       local orig_cksum
+       local dump_cksum
+       local fid
+
+       # ensure corruption will occur on first OSS/OST
+       $LFS setstripe -i 0 $DIR/$tfile
+
+       [ ! -f $F77_TMP ] && setup_f77
+       dd if=$F77_TMP of=$DIR/$tfile bs=1M count=$F77SZ conv=sync ||
+               error "dd write error: $?"
+       fid=$($LFS path2fid $DIR/$tfile)
+
+       if [ $(lustre_version_code ost1) -ge $(version_code 2.9.57) ]
+       then
+               check_ost=true
+               ost_file_prefix=$(do_facet ost1 $LCTL get_param -n debug_path)
+               ost_file_prefix=${ost_file_prefix}-checksum_dump-ost-\\${fid}
+       else
+               echo "OSS do not support bulk pages dump upon error"
+       fi
+
+       osc_file_prefix=$($LCTL get_param -n debug_path)
+       osc_file_prefix=${osc_file_prefix}-checksum_dump-osc-\\${fid}
+
+       trap cleanup_77c EXIT
+
+       set_checksums 1
+       # enable bulk pages dump upon error on Client
+       $LCTL set_param osc.*osc-[^mM]*.checksum_dump=1
+       # enable bulk pages dump upon error on OSS
+       $check_ost &&
+               do_facet ost1 $LCTL set_param obdfilter.*-OST*.checksum_dump=1
+
+       # flush Client cache to allow next read to reach OSS
+       cancel_lru_locks osc
+
+       #define OBD_FAIL_OSC_CHECKSUM_RECEIVE       0x408
+       $LCTL set_param fail_loc=0x80000408
+       dd if=$DIR/$tfile of=/dev/null bs=1M || error "dd read error: $?"
+       $LCTL set_param fail_loc=0
+
+       rm -f $DIR/$tfile
+
+       # check cksum dump on Client
+       osc_file=$(ls ${osc_file_prefix}*)
+       [ -n "$osc_file" ] || error "no checksum dump file on Client"
+       # OBD_FAIL_OSC_CHECKSUM_RECEIVE corrupts with "bad1" at start of file
+       bad1=$(dd if=$osc_file bs=1 count=4 2>/dev/null) || error "dd error: $?"
+       [ $bad1 == "bad1" ] || error "unexpected corrupt pattern"
+       orig_cksum=$(dd if=$F77_TMP bs=1 skip=4 count=1048572 2>/dev/null |
+                    cksum)
+       dump_cksum=$(dd if=$osc_file bs=1 skip=4 2>/dev/null | cksum)
+       [[ "$orig_cksum" == "$dump_cksum" ]] ||
+               error "dump content does not match on Client"
+
+       $check_ost || skip "No need to check cksum dump on OSS"
+
+       # check cksum dump on OSS
+       ost_file=$(do_facet ost1 ls ${ost_file_prefix}\*)
+       [ -n "$ost_file" ] || error "no checksum dump file on OSS"
+       orig_cksum=$(dd if=$F77_TMP bs=1048576 count=1 2>/dev/null | cksum)
+       dump_cksum=$(do_facet ost1 dd if=$ost_file 2>/dev/null \| cksum)
+       [[ "$orig_cksum" == "$dump_cksum" ]] ||
+               error "dump content does not match on OSS"
+
+       cleanup_77c
+}
+run_test 77c "checksum error on client read with debug"
+
 test_77d() { # bug 10889
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        $GSS && skip "could not run with gss" && return
@@ -6349,80 +6467,59 @@ test_82() { # LU-1031
        wait $MULTIPID1
        wait $MULTIPID2
 }
-run_test 82 "Basic grouplock test ==============================="
+run_test 82 "Basic grouplock test"
 
-test_99a() {
+test_83() {
+       local sfile="/boot/System.map-$(uname -r)"
+       # define OBD_FAIL_LLITE_PTASK_IO_FAIL 0x140d
+       $LCTL set_param fail_loc=0x140d
+       cp $sfile $DIR/$tfile || error "write failed"
+       diff -c $sfile $DIR/$tfile || error "files are different"
+       $LCTL set_param fail_loc=0
+       rm -f $DIR/$tfile
+}
+run_test 83 "Short write in ptask ==============================="
+
+test_99() {
        [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" &&
                return
-       test_mkdir -p $DIR/d99cvsroot
-       chown $RUNAS_ID $DIR/d99cvsroot
-       local oldPWD=$PWD       # bug 13584, use $TMP as working dir
-       cd $TMP
+       test_mkdir $DIR/$tdir.cvsroot
+       chown $RUNAS_ID $DIR/$tdir.cvsroot
 
-       $RUNAS cvs -d $DIR/d99cvsroot init || error "cvs init failed"
-       cd $oldPWD
-}
-run_test 99a "cvs init ========================================="
+       cd $TMP
+       $RUNAS cvs -d $DIR/$tdir.cvsroot init || error "cvs init failed"
 
-test_99b() {
-       [ -z "$(which cvs 2>/dev/null)" ] &&
-               skip_env "could not find cvs" && return
-       [ ! -d $DIR/d99cvsroot ] && test_99a
        cd /etc/init.d
        # some versions of cvs import exit(1) when asked to import links or
        # files they can't read.  ignore those files.
-       TOIGNORE=$(find . -type l -printf '-I %f\n' -o \
-                       ! -perm /4 -printf '-I %f\n')
-       $RUNAS cvs -d $DIR/d99cvsroot import -m "nomesg" $TOIGNORE \
-               d99reposname vtag rtag
-}
-run_test 99b "cvs import ======================================="
+       local toignore=$(find . -type l -printf '-I %f\n' -o \
+                        ! -perm /4 -printf '-I %f\n')
+       $RUNAS cvs -d $DIR/$tdir.cvsroot import -m "nomesg" $toignore \
+               $tdir.reposname vtag rtag
 
-test_99c() {
-        [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && return
-       [ ! -d $DIR/d99cvsroot ] && test_99b
        cd $DIR
-       test_mkdir -p $DIR/d99reposname
-       chown $RUNAS_ID $DIR/d99reposname
-       $RUNAS cvs -d $DIR/d99cvsroot co d99reposname
-}
-run_test 99c "cvs checkout ====================================="
+       test_mkdir $DIR/$tdir.reposname
+       chown $RUNAS_ID $DIR/$tdir.reposname
+       $RUNAS cvs -d $DIR/$tdir.cvsroot co $tdir.reposname
 
-test_99d() {
-        [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && return
-       [ ! -d $DIR/d99cvsroot ] && test_99c
-       cd $DIR/d99reposname
+       cd $DIR/$tdir.reposname
        $RUNAS touch foo99
        $RUNAS cvs add -m 'addmsg' foo99
-}
-run_test 99d "cvs add =========================================="
-
-test_99e() {
-        [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && return
-       [ ! -d $DIR/d99cvsroot ] && test_99c
-       cd $DIR/d99reposname
        $RUNAS cvs update
-}
-run_test 99e "cvs update ======================================="
-
-test_99f() {
-        [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && return
-       [ ! -d $DIR/d99cvsroot ] && test_99d
-       cd $DIR/d99reposname
        $RUNAS cvs commit -m 'nomsg' foo99
-    rm -fr $DIR/d99cvsroot
+       rm -fr $DIR/$tdir.cvsroot
 }
-run_test 99f "cvs commit ======================================="
+run_test 99 "cvs strange file/directory operations"
 
 test_100() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       [ "$NETTYPE" = tcp ] || \
-               { skip "TCP secure port test, not useful for NETTYPE=$NETTYPE" && \
+       [[ "$NETTYPE" =~ tcp ]] ||
+               { skip "TCP secure port test, not useful for NETTYPE=$NETTYPE" &&
                        return ; }
 
        remote_ost_nodsh && skip "remote OST with nodsh" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-       remote_servers || \
+       remote_servers ||
                { skip "useless for local single node setup" && return; }
 
        netstat -tna | ( rc=1; while read PROT SND RCV LOCAL REMOTE STAT; do
@@ -6468,7 +6565,7 @@ cleanup_101a() {
 
 test_101a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       [ $MDSCOUNT -ge 2 ] && skip "skip now for >= 2 MDTs" && return #LU-4322
+       [ $MDSCOUNT -ge 2 ] && skip "needs < 2 MDTs" && return #LU-4322
        local s
        local discard
        local nreads=10000
@@ -6499,10 +6596,10 @@ test_101a() {
        fi
        rm -f $DIR/$tfile || true
 }
-run_test 101a "check read-ahead for random reads ================"
+run_test 101a "check read-ahead for random reads"
 
 setup_test101bc() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        local STRIPE_SIZE=$1
        local FILE_LENGTH=$2
        STRIPE_OFFSET=0
@@ -6557,8 +6654,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
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        local STRIPE_SIZE=1048576
        local STRIDE_SIZE=$((STRIPE_SIZE*OSTCOUNT))
        if [ $SLOW == "yes" ]; then
@@ -6764,8 +6860,8 @@ test_101g_brw_size_test() {
        # calculate number of full-sized read and write RPCs
        rpcs=($($LCTL get_param -n 'osc.*.rpc_stats' |
                sed -n '/pages per rpc/,/^$/p' |
-               awk '/'$pages':/ { reads += $2; writes += $5 };' \
-               'END { print reads,writes }'))
+               awk '/'$pages':/ { reads += $2; writes += $6 }; \
+               END { print reads,writes }'))
        [ ${rpcs[0]} -ne $count ] && error "${rpcs[0]} != $count read RPCs" &&
                return 5
        [ ${rpcs[1]} -ne $count ] && error "${rpcs[1]} != $count write RPCs" &&
@@ -6784,10 +6880,11 @@ test_101g() {
        $LFS setstripe -i 0 -c 1 $DIR/$tfile
 
        local orig_mb=$(do_facet ost1 $LCTL get_param -n $brw_size | head -n 1)
-       if [ $(lustre_version_code ost1) -ge $(version_code 2.8.52) ]; then
+       if [ $(lustre_version_code ost1) -ge $(version_code 2.8.52) -a \
+            $(lustre_version_code client) -ge $(version_code 2.8.52) ]; then
                [ $(lustre_version_code ost1) -ge $(version_code 2.9.52) ] &&
                        suffix="M"
-               if [[ $orig_mb < 16 ]]; then
+               if [[ $orig_mb -lt 16 ]]; then
                        save_lustre_params $osts "$brw_size" > $p
                        do_nodes $list $LCTL set_param -n $brw_size=16$suffix ||
                                error "set 16MB RPC size failed"
@@ -6803,7 +6900,7 @@ test_101g() {
 
        test_101g_brw_size_test 4 || error "4MB RPC test failed"
 
-       if [[ $orig_mb < 16 ]]; then
+       if [[ $orig_mb -lt 16 ]]; then
                restore_lustre_params < $p
                remount_client $MOUNT || error "remount_client restore failed"
        fi
@@ -6813,7 +6910,7 @@ test_101g() {
 run_test 101g "Big bulk(4/16 MiB) readahead"
 
 setup_test102() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        chown $RUNAS_ID $DIR/$tdir
        STRIPE_SIZE=65536
        STRIPE_OFFSET=1
@@ -6835,7 +6932,7 @@ setup_test102() {
        done
 
        cd $DIR
-       $1 $TAR cf $TMP/f102.tar $tdir --xattrs
+       $1 tar cf $TMP/f102.tar $tdir --xattrs
 }
 
 cleanup_test102() {
@@ -6894,13 +6991,15 @@ test_102a() {
 
        setfattr -x user.author1 $testfile ||
                error "$testfile error deleting user.author1"
-       getfattr -d -m user $testfile 2> /dev/null | grep "user.author1" &&
-               error "$testfile did not delete trusted.name1 xattr"
-
-       # b10667: setting lustre special xattr be silently discarded
        echo "set lustre special xattr ..."
-       setfattr -n "trusted.lov" -v "invalid value" $testfile ||
-               error "$testfile allowed setting trusted.lov"
+       $LFS setstripe -c1 $testfile
+       local lovea=$(getfattr -n "trusted.lov" -e hex $testfile |
+               awk -F "=" '/trusted.lov/ { print $2 }' )
+       setfattr -n "trusted.lov" -v $lovea $testfile ||
+               error "$testfile doesn't ignore setting trusted.lov again"
+       setfattr -n "trusted.lov" -v "invalid_value" $testfile &&
+               error "$testfile allow setting invalid trusted.lov"
+       rm -f $testfile
 }
 run_test 102a "user xattr test =================================="
 
@@ -6910,7 +7009,7 @@ test_102b() {
 
        # b10930: get/set/list trusted.lov xattr
        echo "get/set/list trusted.lov xattr ..."
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping 2-stripe test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
        local testfile=$DIR/$tfile
        $SETSTRIPE -S 65536 -i 1 -c $OSTCOUNT $testfile ||
                error "setstripe failed"
@@ -6941,8 +7040,8 @@ test_102c() {
 
        # b10930: get/set/list lustre.lov xattr
        echo "get/set/list lustre.lov xattr ..."
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping 2-stripe test" && return
-       test_mkdir -p $DIR/$tdir
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
+       test_mkdir $DIR/$tdir
        chown $RUNAS_ID $DIR/$tdir
        local testfile=$DIR/$tdir/$tfile
        $RUNAS $SETSTRIPE -S 65536 -i 1 -c $OSTCOUNT $testfile ||
@@ -6992,39 +7091,35 @@ compare_stripe_info1() {
        return 0
 }
 
-find_lustre_tar() {
-       [ -n "$(which tar 2>/dev/null)" ] &&
-               strings $(which tar) | grep -q "lustre" && echo tar
+have_xattrs_include() {
+       tar --help | grep -q xattrs-include &&
+               echo --xattrs-include="lustre.*"
 }
 
 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
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping N-stripe test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
+       XINC=$(have_xattrs_include)
        setup_test102
-       test_mkdir -p $DIR/d102d
-       $TAR xf $TMP/f102.tar -C $DIR/d102d --xattrs
-       cd $DIR/d102d/$tdir
+       tar xf $TMP/f102.tar -C $DIR/$tdir --xattrs $XINC
+       cd $DIR/$tdir/$tdir
        compare_stripe_info1
 }
-run_test 102d "tar restore stripe info from tarfile,not keep osts ==========="
+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
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping N-stripe test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
+       XINC=$(have_xattrs_include)
        setup_test102
-       test_mkdir -p $DIR/d102f
+       test_mkdir $DIR/$tdir.restore
        cd $DIR
-       $TAR cf - --xattrs $tdir | $TAR xf - --xattrs -C $DIR/d102f
-       cd $DIR/d102f/$tdir
+       tar cf - --xattrs $tdir | tar xf - \
+               -C $DIR/$tdir.restore --xattrs $XINC
+       cd $DIR/$tdir.restore/$tdir
        compare_stripe_info1
 }
-run_test 102f "tar copy files, not keep osts ==========="
+run_test 102f "tar copy files, not keep osts"
 
 grow_xattr() {
        local xsize=${1:-1024}  # in bytes
@@ -7094,14 +7189,12 @@ 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
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
+       XINC=$(have_xattrs_include)
        setup_test102 "$RUNAS"
-       test_mkdir -p $DIR/d102j
-       chown $RUNAS_ID $DIR/d102j
-       $RUNAS $TAR xf $TMP/f102.tar -C $DIR/d102j --xattrs
-       cd $DIR/d102j/$tdir
+       chown $RUNAS_ID $DIR/$tdir
+       $RUNAS tar xf $TMP/f102.tar -C $DIR/$tdir --xattrs $XINC
+       cd $DIR/$tdir/$tdir
        compare_stripe_info1 "$RUNAS"
 }
 run_test 102j "non-root tar restore stripe info from tarfile, not keep osts ==="
@@ -7109,28 +7202,28 @@ run_test 102j "non-root tar restore stripe info from tarfile, not keep osts ==="
 test_102k() {
        [ -z "$(which setfattr 2>/dev/null)" ] &&
                skip "could not find setfattr" && return
-        touch $DIR/$tfile
-        # b22187 just check that does not crash for regular file.
-        setfattr -n trusted.lov $DIR/$tfile
-        # b22187 'setfattr -n trusted.lov' should work as remove LOV EA for directories
-        local test_kdir=$DIR/d102k
-        test_mkdir $test_kdir
-        local default_size=`$GETSTRIPE -S $test_kdir`
-        local default_count=`$GETSTRIPE -c $test_kdir`
-        local default_offset=`$GETSTRIPE -i $test_kdir`
+       touch $DIR/$tfile
+       # b22187 just check that does not crash for regular file.
+       setfattr -n trusted.lov $DIR/$tfile
+       # b22187 'setfattr -n trusted.lov' should remove LOV EA for directories
+       local test_kdir=$DIR/$tdir
+       test_mkdir $test_kdir
+       local default_size=$($LFS getstripe -S $test_kdir)
+       local default_count=$($LFS getstripe -c $test_kdir)
+       local default_offset=$($LFS getstripe -i $test_kdir)
        $SETSTRIPE -S 65536 -i 0 -c $OSTCOUNT $test_kdir ||
-                error 'dir setstripe failed'
-        setfattr -n trusted.lov $test_kdir
-        local stripe_size=`$GETSTRIPE -S $test_kdir`
-        local stripe_count=`$GETSTRIPE -c $test_kdir`
-        local stripe_offset=`$GETSTRIPE -i $test_kdir`
-        [ $stripe_size -eq $default_size ] ||
-                error "stripe size $stripe_size != $default_size"
-        [ $stripe_count -eq $default_count ] ||
-                error "stripe count $stripe_count != $default_count"
-        [ $stripe_offset -eq $default_offset ] ||
-                error "stripe offset $stripe_offset != $default_offset"
-        rm -rf $DIR/$tfile $test_kdir
+               error 'dir setstripe failed'
+       setfattr -n trusted.lov $test_kdir
+       local stripe_size=$($LFS getstripe -S $test_kdir)
+       local stripe_count=$($LFS getstripe -c $test_kdir)
+       local stripe_offset=$($LFS getstripe -i $test_kdir)
+       [ $stripe_size -eq $default_size ] ||
+               error "stripe size $stripe_size != $default_size"
+       [ $stripe_count -eq $default_count ] ||
+               error "stripe count $stripe_count != $default_count"
+       [ $stripe_offset -eq $default_offset ] ||
+               error "stripe offset $stripe_offset != $default_offset"
+       rm -rf $DIR/$tfile $test_kdir
 }
 run_test 102k "setfattr without parameter of value shouldn't cause a crash"
 
@@ -7215,8 +7308,13 @@ test_102n() { # LU-4101 mdt: protect internal xattrs
                # Try to set a garbage xattr.
                value=0sVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIGl0c2VsZi4=
 
-               setfattr --name=trusted.$name --value="$value" $file1 ||
-                       error "setxattr 'trusted.$name' failed"
+               if [[ x$name == "xlov" ]]; then
+                       setfattr --name=trusted.lov --value="$value" $file1 &&
+                       error "setxattr invalid 'trusted.lov' success"
+               else
+                       setfattr --name=trusted.$name --value="$value" $file1 ||
+                               error "setxattr invalid 'trusted.$name' failed"
+               fi
 
                # Try to remove the xattr from $file1. We don't care if this
                # appears to succeed or fail, we just don't want there to be
@@ -7304,7 +7402,7 @@ test_102r() {
        rmdir $DIR/$tdir || error "rmdir"
 
        #striped directory
-       test_mkdir -p $DIR/$tdir || error "make striped dir"
+       test_mkdir $DIR/$tdir
        setfattr -n user.$(basename $tdir) $DIR/$tdir || error "setfattr dir"
        getfattr -n user.$(basename $tdir) $DIR/$tdir || error "getfattr dir"
        setfattr -x user.$(basename $tdir) $DIR/$tdir ||
@@ -7399,43 +7497,6 @@ test_103a() {
 }
 run_test 103a "acl test ========================================="
 
-test_103b() {
-       remote_mds_nodsh && skip "remote MDS with nodsh" && return
-        local noacl=false
-        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
-        local mountopts=$MDS_MOUNT_OPTS
-
-        if [[ "$MDS_MOUNT_OPTS" =~ "noacl" ]]; then
-                noacl=true
-        else
-                # stop the MDT
-                stop $SINGLEMDS || error "failed to stop MDT."
-                # remount the MDT
-                if [ -z "$MDS_MOUNT_OPTS" ]; then
-                        MDS_MOUNT_OPTS="-o noacl"
-                else
-                        MDS_MOUNT_OPTS="${MDS_MOUNT_OPTS},noacl"
-                fi
-                start $SINGLEMDS $MDT_DEV $MDS_MOUNT_OPTS ||
-                        error "failed to start MDT."
-                MDS_MOUNT_OPTS=$mountopts
-        fi
-
-        touch $DIR/$tfile
-        setfacl -m u:bin:rw $DIR/$tfile && error "setfacl should fail"
-
-        if ! $noacl; then
-                # stop the MDT
-                stop $SINGLEMDS || error "failed to stop MDT."
-                # remount the MDT
-                start $SINGLEMDS $MDT_DEV $MDS_MOUNT_OPTS ||
-                        error "failed to start MDT."
-        fi
-
-       true
-}
-run_test 103b "MDS mount option 'noacl'"
-
 test_103c() {
        mkdir -p $DIR/$tdir
        cp -rp $DIR/$tdir $DIR/$tdir.bak
@@ -7515,11 +7576,11 @@ test_105c() {
        fi
        rm -f $DIR/$tfile
 }
-run_test 105c "lockf when mounted without -o flock test ========"
+run_test 105c "lockf when mounted without -o flock test"
 
 test_105d() { # bug 15924
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        flock_is_enabled || { skip "mount w/o flock enabled" && return; }
        #define OBD_FAIL_LDLM_CP_CB_WAIT  0x315
        $LCTL set_param fail_loc=0x80000315
@@ -7532,10 +7593,10 @@ test_105e() { # bug 22660 && 22040
        touch $DIR/$tfile
        flocks_test 3 $DIR/$tfile
 }
-run_test 105e "Two conflicting flocks from same process ======="
+run_test 105e "Two conflicting flocks from same process"
 
 test_106() { #bug 10921
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $DIR/$tdir && error "exec $DIR/$tdir succeeded"
        chmod 777 $DIR/$tdir || error "chmod $DIR/$tdir failed"
 }
@@ -7576,10 +7637,9 @@ test_107() {
 run_test 107 "Coredump on SIG"
 
 test_110() {
-       test_mkdir -p $DIR/$tdir
-       test_mkdir $DIR/$tdir/$(str_repeat 'a' 255) ||
-               error "mkdir with 255 char failed"
-       test_mkdir $DIR/$tdir/$(str_repeat 'b' 256) &&
+       test_mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir/$(str_repeat 'a' 255)
+       $LFS mkdir -c $MDSCOUNT $DIR/$tdir/$(str_repeat 'b' 256) &&
                error "mkdir with 256 char should fail, but did not"
        touch $DIR/$tdir/$(str_repeat 'x' 255) ||
                error "create with 255 char failed"
@@ -7591,31 +7651,110 @@ test_110() {
 }
 run_test 110 "filename length checking"
 
+#
+# Purpose: To verify dynamic thread (OSS) creation.
+#
 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" && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+
+       # Lustre does not stop service threads once they are started.
+       # Reset number of running threads to default.
+       stopall
+       setupall
+
+       local OSTIO_pre
+       local save_params="$TMP/sanity-$TESTNAME.parameters"
+
+       # Get ll_ost_io count before I/O
+       OSTIO_pre=$(do_facet ost1 \
+               "$LCTL get_param ost.OSS.ost_io.threads_started | cut -d= -f2")
+       # Exit if lustre is not running (ll_ost_io not running).
+       [ -z "$OSTIO_pre" ] && error "no OSS threads"
+
        echo "Starting with $OSTIO_pre threads"
+       local thread_max=$((OSTIO_pre * 2))
+       local rpc_in_flight=$((thread_max * 2))
+       # Number of I/O Process proposed to be started.
+       local nfiles
+       local facets=$(get_facets OST)
 
-       NUMTEST=20000
-       NUMFREE=$(df -i -P $DIR | tail -n 1 | awk '{ print $4 }')
-       [[ $NUMFREE -lt $NUMTEST ]] && NUMTEST=$(($NUMFREE - 1000))
-       echo "$NUMTEST creates/unlinks"
-       test_mkdir -p $DIR/$tdir
-       createmany -o $DIR/$tdir/$tfile $NUMTEST
-       unlinkmany $DIR/$tdir/$tfile $NUMTEST
+       save_lustre_params client "osc.*OST*.max_rpcs_in_flight" > $save_params
+       save_lustre_params $facets "ost.OSS.ost_io.threads_max" >> $save_params
+
+       # Set in_flight to $rpc_in_flight
+       $LCTL set_param osc.*OST*.max_rpcs_in_flight=$rpc_in_flight ||
+               error "Failed to set max_rpcs_in_flight to $rpc_in_flight"
+       nfiles=${rpc_in_flight}
+       # Set ost thread_max to $thread_max
+       do_facet ost1 "$LCTL set_param ost.OSS.ost_io.threads_max=$thread_max"
+
+       # 5 Minutes should be sufficient for max number of OSS
+       # threads(thread_max) to be created.
+       local timeout=300
+
+       # Start I/O.
+       local WTL=${WTL:-"$LUSTRE/tests/write_time_limit"}
+       test_mkdir $DIR/$tdir
+       for i in $(seq $nfiles); do
+               local file=$DIR/$tdir/${tfile}-$i
+               $LFS setstripe -c -1 -i 0 $file
+               ($WTL $file $timeout)&
+       done
 
-       OSTIO_post=$(ps -e | grep ll_ost_io | awk '{ print $4 }' | sort -n |
-               tail -1 | cut -c11-20)
+       # I/O Started - Wait for thread_started to reach thread_max or report
+       # error if thread_started is more than thread_max.
+       echo "Waiting for thread_started to reach thread_max"
+       local thread_started=0
+       local end_time=$((SECONDS + timeout))
+
+       while [ $SECONDS -le $end_time ] ; do
+               echo -n "."
+               # Get ost i/o thread_started count.
+               thread_started=$(do_facet ost1 \
+                       "$LCTL get_param \
+                       ost.OSS.ost_io.threads_started | cut -d= -f2")
+               # Break out if thread_started is equal/greater than thread_max
+               if [[ $thread_started -ge $thread_max ]]; then
+                       echo ll_ost_io thread_started $thread_started, \
+                               equal/greater than thread_max $thread_max
+                       break
+               fi
+               sleep 1
+       done
 
-       # don't return an error
-       [ $OSTIO_post == $OSTIO_pre ] && echo \
-           "WARNING: No new ll_ost_io threads were created ($OSTIO_pre)" &&
-           echo "This may be fine, depending on what ran before this test" &&
-           echo "and how fast this system is." && return
+       # Cleanup - We have the numbers, Kill i/o jobs if running.
+       jobcount=($(jobs -p))
+       for i in $(seq 0 $((${#jobcount[@]}-1)))
+       do
+               kill -9 ${jobcount[$i]}
+               if [ $? -ne 0 ] ; then
+                       echo Warning: \
+                       Failed to Kill \'WTL\(I/O\)\' with pid ${jobcount[$i]}
+               fi
+       done
+
+       # Cleanup files left by WTL binary.
+       for i in $(seq $nfiles); do
+               local file=$DIR/$tdir/${tfile}-$i
+               rm -rf $file
+               if [ $? -ne 0 ] ; then
+                       echo "Warning: Failed to delete file $file"
+               fi
+       done
 
-       echo "Started with $OSTIO_pre threads, ended with $OSTIO_post"
+       restore_lustre_params <$save_params
+       rm -f $save_params || echo "Warning: delete file '$save_params' failed"
+
+       # Error out if no new thread has started or Thread started is greater
+       # than thread max.
+       if [[ $thread_started -le $OSTIO_pre ||
+                       $thread_started -gt $thread_max ]]; then
+               error "ll_ost_io: thread_started $thread_started" \
+                     "OSTIO_pre $OSTIO_pre, thread_max $thread_max." \
+                     "No new thread started or thread started greater " \
+                     "than thread_max."
+       fi
 }
 run_test 115 "verify dynamic thread creation===================="
 
@@ -7646,7 +7785,7 @@ test_116a() { # was previously test_116()
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "$OSTCOUNT < 2 OSTs" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
        echo -n "Free space priority "
        do_facet $SINGLEMDS lctl get_param -n lo*.*-mdtlov.qos_prio_free |
@@ -8163,7 +8302,7 @@ test_118k()
 
        #define OBD_FAIL_OST_BRW_WRITE_BULK      0x20e
        set_nodes_failloc "$(osts_nodes)" 0x20e
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
 
        for ((i=0;i<10;i++)); do
                (dd if=/dev/zero of=$DIR/$tdir/$tfile-$i bs=1M count=10 || \
@@ -8183,16 +8322,16 @@ test_118l()
 {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        # LU-646
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $MULTIOP $DIR/$tdir Dy || error "fsync dir failed"
        rm -rf $DIR/$tdir
 }
-run_test 118l "fsync dir ========="
+run_test 118l "fsync dir"
 
 test_118m() # LU-3066
 {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $MULTIOP $DIR/$tdir DY || error "fdatasync dir failed"
        rm -rf $DIR/$tdir
 }
@@ -8218,7 +8357,7 @@ run_test 119a "Short directIO read must return actual read amount"
 
 test_119b() # bug 11737
 {
-        [ "$OSTCOUNT" -lt "2" ] && skip_env "skipping 2-stripe test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
         $SETSTRIPE -c 2 $DIR/$tfile || error "setstripe failed"
         dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1 || error "dd failed"
@@ -8267,9 +8406,9 @@ 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
        remote_mds_nodsh && skip "remote MDS with nodsh" && 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
+       test_mkdir $DIR/$tdir
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
 
        lru_resize_disable mdc
        lru_resize_disable osc
@@ -8299,13 +8438,13 @@ run_test 120a "Early Lock Cancel: mkdir test"
 test_120b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-        test_mkdir $DIR/$tdir
-        [ -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
-        lru_resize_disable osc
-        cancel_lru_locks mdc
-        stat $DIR/$tdir > /dev/null
+       test_mkdir $DIR/$tdir
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
+       lru_resize_disable mdc
+       lru_resize_disable osc
+       cancel_lru_locks mdc
+       stat $DIR/$tdir > /dev/null
        can1=$(do_facet $SINGLEMDS \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
@@ -8328,12 +8467,12 @@ test_120c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        test_mkdir -c1 $DIR/$tdir
-       [ -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
-        lru_resize_disable osc
-       test_mkdir -p -c1 $DIR/$tdir/d1
-       test_mkdir -p -c1 $DIR/$tdir/d2
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
+       lru_resize_disable mdc
+       lru_resize_disable osc
+       test_mkdir -c1 $DIR/$tdir/d1
+       test_mkdir -c1 $DIR/$tdir/d2
        touch $DIR/$tdir/d1/f1
        cancel_lru_locks mdc
        stat $DIR/$tdir/d1 $DIR/$tdir/d2 $DIR/$tdir/d1/f1 > /dev/null
@@ -8358,9 +8497,9 @@ run_test 120c "Early Lock Cancel: link test"
 test_120d() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-       test_mkdir -p -c1 $DIR/$tdir
-       [ -z "$(lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel)" ] && \
-              skip "no early lock cancel on server" && return 0
+       test_mkdir -c1 $DIR/$tdir
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
        lru_resize_disable mdc
        lru_resize_disable osc
        touch $DIR/$tdir
@@ -8386,12 +8525,12 @@ run_test 120d "Early Lock Cancel: setattr test"
 
 test_120e() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       ! $($LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_can) &&
-               skip "no early lock cancel on server" && return 0
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local dlmtrace_set=false
 
-       test_mkdir -p -c1 $DIR/$tdir
+       test_mkdir -c1 $DIR/$tdir
        lru_resize_disable mdc
        lru_resize_disable osc
        ! $LCTL get_param debug | grep -q dlmtrace &&
@@ -8429,14 +8568,14 @@ 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
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-        test_mkdir -p -c1 $DIR/$tdir
-        lru_resize_disable mdc
-        lru_resize_disable osc
-       test_mkdir -p -c1 $DIR/$tdir/d1
-       test_mkdir -p -c1 $DIR/$tdir/d2
+       test_mkdir -c1 $DIR/$tdir
+       lru_resize_disable mdc
+       lru_resize_disable osc
+       test_mkdir -c1 $DIR/$tdir/d1
+       test_mkdir -c1 $DIR/$tdir/d2
        dd if=/dev/zero of=$DIR/$tdir/d1/f1 count=1
        dd if=/dev/zero of=$DIR/$tdir/d2/f2 count=1
        cancel_lru_locks mdc
@@ -8469,17 +8608,17 @@ 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
+       $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
+               { skip "no early lock cancel on server"; return 0; }
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-        lru_resize_disable mdc
-        lru_resize_disable osc
-        count=10000
-        echo create $count files
-        test_mkdir -p $DIR/$tdir
-        cancel_lru_locks mdc
-        cancel_lru_locks osc
-        t0=`date +%s`
+       lru_resize_disable mdc
+       lru_resize_disable osc
+       count=10000
+       echo create $count files
+       test_mkdir $DIR/$tdir
+       cancel_lru_locks mdc
+       cancel_lru_locks osc
+       t0=$(date +%s)
 
        can0=$(do_facet $SINGLEMDS \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
@@ -8529,14 +8668,14 @@ 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."
-                       SLOWOK=1
-        fi
+       SLOWOK=0
+       if ! grep -q "processor.*: 1" /proc/cpuinfo; then
+               log "testing UP system. Performance may be lower than expected."
+               SLOWOK=1
+       fi
 
-        rm -rf $DIR/$tdir
-        test_mkdir -p $DIR/$tdir
+       rm -rf $DIR/$tdir
+       test_mkdir $DIR/$tdir
        NUMFREE=$(df -i -P $DIR | tail -n 1 | awk '{ print $4 }')
        [[ $NUMFREE -gt 100000 ]] && NUMFREE=100000 || NUMFREE=$((NUMFREE-1000))
         MULT=10
@@ -8612,7 +8751,7 @@ run_test 123a "verify statahead work"
 
 test_123b () { # statahead(bug 15027)
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        createmany -o $DIR/$tdir/$tfile-%d 1000
 
         cancel_lru_locks mdc
@@ -8632,20 +8771,20 @@ 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
-        test_mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+       $LCTL get_param -n mdc.*.connect_flags | grep -q lru_resize ||
+               { skip "no lru resize on server"; return 0; }
+       local NR=2000
+       test_mkdir $DIR/$tdir
 
-        log "create $NR files at $DIR/$tdir"
-        createmany -o $DIR/$tdir/f $NR ||
-                error "failed to create $NR files in $DIR/$tdir"
+       log "create $NR files at $DIR/$tdir"
+       createmany -o $DIR/$tdir/f $NR ||
+               error "failed to create $NR files in $DIR/$tdir"
 
-        cancel_lru_locks mdc
-        ls -l $DIR/$tdir > /dev/null
+       cancel_lru_locks mdc
+       ls -l $DIR/$tdir > /dev/null
 
-        local NSDIR=""
-        local LRU_SIZE=0
+       local NSDIR=""
+       local LRU_SIZE=0
        for VALUE in $($LCTL get_param ldlm.namespaces.*mdc-*.lru_size); do
                local PARAM=$(echo ${VALUE[0]} | cut -d "=" -f1)
                LRU_SIZE=$($LCTL get_param -n $PARAM)
@@ -8734,8 +8873,8 @@ 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
+       $LCTL get_param -n mdc.*.connect_flags | grep -q lru_resize ||
+               { skip "no lru resize on server"; return 0; }
 
        LIMIT=$(get_max_pool_limit)
 
@@ -8752,8 +8891,7 @@ test_124b() {
        fi
 
        lru_resize_disable mdc
-       test_mkdir -p $DIR/$tdir/disable_lru_resize ||
-               error "failed to create $DIR/$tdir/disable_lru_resize"
+       test_mkdir -p $DIR/$tdir/disable_lru_resize
 
         createmany -o $DIR/$tdir/disable_lru_resize/f $NR
         log "doing ls -la $DIR/$tdir/disable_lru_resize 3 times"
@@ -8775,9 +8913,8 @@ test_124b() {
         log "lru_size = $(lctl get_param -n ldlm.namespaces.*mdc*.lru_size)"
         unlinkmany $DIR/$tdir/disable_lru_resize/f $NR
 
-        lru_resize_enable mdc
-        test_mkdir -p $DIR/$tdir/enable_lru_resize ||
-               error "failed to create $DIR/$tdir/enable_lru_resize"
+       lru_resize_enable mdc
+       test_mkdir -p $DIR/$tdir/enable_lru_resize
 
         createmany -o $DIR/$tdir/enable_lru_resize/f $NR
         log "doing ls -la $DIR/$tdir/enable_lru_resize 3 times"
@@ -8811,13 +8948,13 @@ run_test 124b "lru resize (performance test) ======================="
 
 test_124c() {
        [ $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
+       $LCTL get_param -n mdc.*.connect_flags | grep -q lru_resize ||
+               { skip "no lru resize on server"; return 0; }
 
        # cache ununsed locks on client
        local nr=100
        cancel_lru_locks mdc
-       test_mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+       test_mkdir $DIR/$tdir
        createmany -o $DIR/$tdir/f $nr ||
                error "failed to create $nr files in $DIR/$tdir"
        ls -l $DIR/$tdir > /dev/null
@@ -8829,7 +8966,7 @@ test_124c() {
        echo "unused=$unused, max_age=$max_age, recalc_p=$recalc_p"
 
        # set lru_max_age to 1 sec
-       $LCTL set_param $nsdir.lru_max_age=1000 # jiffies
+       $LCTL set_param $nsdir.lru_max_age=1000 # milliseconds
        echo "sleep $((recalc_p * 2)) seconds..."
        sleep $((recalc_p * 2))
 
@@ -8842,19 +8979,22 @@ test_124c() {
 run_test 124c "LRUR cancel very aged locks"
 
 test_125() { # 13358
-       [ -z "$(lctl get_param -n llite.*.client_type | grep local)" ] && skip "must run as local client" && return
-       [ -z "$(lctl get_param -n mdc.*-mdc-*.connect_flags | grep acl)" ] && skip "must have acl enabled" && return
+       $LCTL get_param -n llite.*.client_type | grep -q local ||
+               { skip "must run as local client"; return; }
+       $LCTL get_param -n mdc.*-mdc-*.connect_flags | grep -q acl ||
+               { skip "must have acl enabled"; return; }
        [ -z "$(which setfacl)" ] && skip "must have setfacl tool" && return
-       test_mkdir -p $DIR/d125 || error "mkdir failed"
-       $SETSTRIPE -S 65536 -c -1 $DIR/d125 || error "setstripe failed"
-       setfacl -R -m u:bin:rwx $DIR/d125 || error "setfacl $DIR/d125 failed"
-       ls -ld $DIR/d125 || error "cannot access $DIR/d125"
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -S 65536 -c -1 $DIR/$tdir || error "setstripe failed"
+       setfacl -R -m u:bin:rwx $DIR/$tdir || error "setfacl $DIR/$tdir failed"
+       ls -ld $DIR/$tdir || error "cannot access $DIR/$tdir"
 }
 run_test 125 "don't return EPROTO when a dir has a non-default striping and ACLs"
 
 test_126() { # bug 12829/13455
-       [ -z "$(lctl get_param -n llite.*.client_type | grep local)" ] && skip "must run as local client" && return
-       [ "$UID" != 0 ] && skip_env "skipping $TESTNAME (must run as root)" && return
+       $LCTL get_param -n llite.*.client_type | grep -q local ||
+               { skip "must run as local client"; return; }
+       [ "$UID" != 0 ] && skip_env "$TESTNAME (must run as root)" && return
        $GSS && skip "must run as gss disabled" && return
 
        $RUNAS -u 0 -g 1 touch $DIR/$tfile || error "touch failed"
@@ -8965,18 +9105,16 @@ set_dir_limits () {
        local canondev
        local node
 
-       local LDPROC=/proc/fs/ldiskfs
+       local ldproc=/proc/fs/ldiskfs
        local facets=$(get_facets MDS)
 
        for facet in ${facets//,/ }; do
                canondev=$(ldiskfs_canon \
                           *.$(convert_facet2label $facet).mntdev $facet)
-               do_facet $facet "test -e $LDPROC/$canondev/max_dir_size" ||
-                                               LDPROC=/sys/fs/ldiskfs
-               do_facet $facet "echo $1 >$LDPROC/$canondev/max_dir_size"
-               do_facet $facet "test -e $LDPROC/$canondev/warning_dir_size" ||
-                                               LDPROC=/sys/fs/ldiskfs
-               do_facet $facet "echo $2 >$LDPROC/$canondev/warning_dir_size"
+               do_facet $facet "test -e $ldproc/$canondev/max_dir_size" ||
+                       ldproc=/sys/fs/ldiskfs
+               do_facet $facet "echo $1 >$ldproc/$canondev/max_dir_size"
+               do_facet $facet "echo $2 >$ldproc/$canondev/warning_dir_size"
        done
 }
 
@@ -8994,68 +9132,60 @@ test_129() {
 
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
-               skip "Only applicable to ldiskfs-based MDTs"
+               skip "ldiskfs only test"
                return
        fi
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local ENOSPC=28
        local EFBIG=27
-       local has_warning=0
+       local has_warning=false
 
        rm -rf $DIR/$tdir
        mkdir -p $DIR/$tdir
 
        # block size of mds1
-       local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
-       local MDSBLOCKSIZE=$($LCTL get_param -n mdc.*MDT0000*.blocksize)
-       local MAX=$((MDSBLOCKSIZE * 5))
-       set_dir_limits $MAX $MAX
-       local I=$(stat -c%s "$DIR/$tdir")
-       local J=0
-       while [[ $I -le $MAX ]]; do
-               $MULTIOP $DIR/$tdir/$J Oc
+       local maxsize=$(($($LCTL get_param -n mdc.*MDT0000*.blocksize) * 5))
+       set_dir_limits $maxsize $maxsize
+       local dirsize=$(stat -c%s "$DIR/$tdir")
+       local nfiles=0
+       while [[ $dirsize -le $maxsize ]]; do
+               $MULTIOP $DIR/$tdir/file_base_$nfiles Oc
                rc=$?
-               if [ $has_warning -eq 0 ]; then
-                       check_mds_dmesg '"is approaching"' &&
-                               has_warning=1
+               if ! $has_warning; then
+                       check_mds_dmesg '"is approaching"' && has_warning=true
                fi
-               #check two errors ENOSPC for new version of ext4 max_dir_size patch
-               #mainline kernel commit df981d03eeff7971ac7e6ff37000bfa702327ef1
-               #and EFBIG for previous versions
+               # check two errors:
+               # ENOSPC for new ext4 max_dir_size (kernel commit df981d03ee)
+               # EFBIG for previous versions included in ldiskfs series
                if [ $rc -eq $EFBIG -o $rc -eq $ENOSPC ]; then
                        set_dir_limits 0 0
                        echo "return code $rc received as expected"
 
-                       createmany -o $DIR/$tdir/$J_file_ 1000 ||
+                       createmany -o $DIR/$tdir/file_extra_$nfiles. 5 ||
                                error_exit "create failed w/o dir size limit"
 
                        check_mds_dmesg '"has reached"' ||
-                               error_exit "has reached message should be output"
+                               error_exit "reached message should be output"
 
                        [ $has_warning -eq 0 ] &&
                                error_exit "warning message should be output"
 
-                       I=$(stat -c%s "$DIR/$tdir")
+                       dirsize=$(stat -c%s "$DIR/$tdir")
 
-                       if [ $(lustre_version_code $SINGLEMDS) -lt \
-                                       $(version_code 2.4.51) ]
-                       then
-                               [[ $I -eq $MAX ]] && return 0
-                       else
-                               [[ $I -gt $MAX ]] && return 0
-                       fi
-                       error_exit "current dir size $I, previous limit $MAX"
+                       [[ $dirsize -ge $maxsize ]] && return 0
+                       error_exit "current dir size $dirsize, " \
+                                  "previous limit $maxsize"
                elif [ $rc -ne 0 ]; then
                        set_dir_limits 0 0
-                       error_exit "return code $rc received instead of expected " \
-                                  "$EFBIG or $ENOSPC, files in dir $I"
+                       error_exit "return $rc received instead of expected " \
+                                  "$EFBIG or $ENOSPC, files in dir $dirsize"
                fi
-               J=$((J+1))
-               I=$(stat -c%s "$DIR/$tdir")
+               nfiles=$((nfiles + 1))
+               dirsize=$(stat -c%s "$DIR/$tdir")
        done
 
        set_dir_limits 0 0
-       error "exceeded dir size limit $MAX($MDSCOUNT) : $I bytes"
+       error "exceeded dir size limit $maxsize($MDSCOUNT) : $dirsize bytes"
 }
 run_test 129 "test directory size limit ========================"
 
@@ -9116,8 +9246,7 @@ test_130a() {
 run_test 130a "FIEMAP (1-stripe file)"
 
 test_130b() {
-       [ "$OSTCOUNT" -lt "2" ] &&
-               skip_env "skipping FIEMAP on $OSTCOUNT-stripe file" && return
+       [ "$OSTCOUNT" -lt "2" ] && skip_env "needs >= 2 OSTs" && return
 
        local filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
        [ -n "$filefrag_op" ] && skip_env "filefrag does not support FIEMAP" &&
@@ -9177,8 +9306,7 @@ test_130b() {
 run_test 130b "FIEMAP ($OSTCOUNT-stripe file)"
 
 test_130c() {
-       [ "$OSTCOUNT" -lt "2" ] &&
-               skip_env "skipping FIEMAP on 2-stripe file" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
        filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
        [ -n "$filefrag_op" ] && skip "filefrag does not support FIEMAP" &&
@@ -9244,8 +9372,7 @@ test_130c() {
 run_test 130c "FIEMAP (2-stripe file with hole)"
 
 test_130d() {
-       [ "$OSTCOUNT" -lt "3" ] &&
-               skip_env "skipping FIEMAP on N-stripe file test" && return
+       [[ $OSTCOUNT -lt 3 ]] && skip_env "needs >= 3 OSTs" && return
 
        filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
        [ -n "$filefrag_op" ] && skip "filefrag does not support FIEMAP" &&
@@ -9259,8 +9386,8 @@ test_130d() {
        [ "$(facet_fstype ost$(($($GETSTRIPE -i $fm_file) + 1)))" = "zfs" ] &&
                skip "ORI-366/LU-1941: FIEMAP unimplemented on ZFS" && return
 
-       local actual_stripecnt=$($GETSTRIPE -c $fm_file)
-       dd if=/dev/zero of=$fm_file bs=1M count=$actual_stripecnt ||
+       local actual_stripe_count=$($GETSTRIPE -c $fm_file)
+       dd if=/dev/zero of=$fm_file bs=1M count=$actual_stripe_count ||
                error "dd failed on $fm_file"
 
        filefrag -ves $fm_file || error "filefrag $fm_file failed"
@@ -9292,7 +9419,7 @@ test_130d() {
                (( tot_len += ext_len ))
                last_lun=$frag_lun
        done
-       if (( num_luns != actual_stripecnt || tot_len != 1024 )); then
+       if (( num_luns != actual_stripe_count || tot_len != 1024 )); then
                cleanup_130
                error "FIEMAP on $fm_file failed; returned wrong number of " \
                        "luns or wrong len for OST $last_lun"
@@ -9306,8 +9433,7 @@ test_130d() {
 run_test 130d "FIEMAP (N-stripe file)"
 
 test_130e() {
-       [ "$OSTCOUNT" -lt "2" ] &&
-               skip_env "skipping continuation FIEMAP test" && return
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
        filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
        [ -n "$filefrag_op" ] && skip "filefrag does not support FIEMAP" && return
@@ -9371,19 +9497,24 @@ run_test 130e "FIEMAP (test continuation FIEMAP calls)"
 
 # Test for writev/readv
 test_131a() {
-       rwv -f $DIR/$tfile -w -n 3 524288 1048576 1572864 || \
-       error "writev test failed"
-       rwv -f $DIR/$tfile -r -v -n 2 1572864 1048576 || \
-       error "readv failed"
+       rwv -f $DIR/$tfile -w -n 3 524288 1048576 1572864 ||
+               error "writev test failed"
+       rwv -f $DIR/$tfile -r -v -n 2 1572864 1048576 ||
+               error "readv failed"
        rm -f $DIR/$tfile
 }
 run_test 131a "test iov's crossing stripe boundary for writev/readv"
 
 test_131b() {
-       rwv -f $DIR/$tfile -w -a -n 3 524288 1048576 1572864 || \
-       error "append writev test failed"
-       rwv -f $DIR/$tfile -w -a -n 2 1572864 1048576 || \
-       error "append writev test failed"
+       local fsize=$((524288 + 1048576 + 1572864))
+       rwv -f $DIR/$tfile -w -a -n 3 524288 1048576 1572864 &&
+               $CHECKSTAT -t file $DIR/$tfile -s $fsize ||
+                       error "append writev test failed"
+
+       ((fsize += 1572864 + 1048576))
+       rwv -f $DIR/$tfile -w -a -n 2 1572864 1048576 &&
+               $CHECKSTAT -t file $DIR/$tfile -s $fsize ||
+                       error "append writev test failed"
        rm -f $DIR/$tfile
 }
 run_test 131b "test append writev"
@@ -9517,11 +9648,11 @@ 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
-       test_mkdir -p ${testdir} || error "mkdir failed"
+       local testdir=$DIR/$tdir/stats_testdir
+       test_mkdir -p $testdir
 
        # verify obdfilter stats.
-       $SETSTRIPE -c 1 -i 0 ${testdir}/${tfile}
+       $SETSTRIPE -c 1 -i 0 $testdir/$tfile
        sync
        cancel_lru_locks osc
        wait_delete_completed
@@ -9530,22 +9661,23 @@ test_133c() {
        do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
        do_facet ost1 $LCTL set_param obdfilter.*.stats=clear
 
-       dd if=/dev/zero of=${testdir}/${tfile} conv=notrunc bs=512k count=1 || error "dd failed"
+       dd if=/dev/zero of=$testdir/$tfile conv=notrunc bs=512k count=1 ||
+               error "dd failed"
        sync
        cancel_lru_locks osc
        check_stats ost1 "write" 1
 
-       dd if=${testdir}/${tfile} of=/dev/null bs=1k count=1 || error "dd failed"
+       dd if=$testdir/$tfile of=/dev/null bs=1k count=1 || error "dd failed"
        check_stats ost1 "read" 1
 
-       > ${testdir}/${tfile} || error "truncate failed"
+       > $testdir/$tfile || error "truncate failed"
        check_stats ost1 "punch" 1
 
-       rm -f ${testdir}/${tfile} || error "file remove failed"
+       rm -f $testdir/$tfile || error "file remove failed"
        wait_delete_completed
        check_stats ost1 "destroy" 1
 
-       rm -rf $DIR/${tdir}
+       rm -rf $DIR/$tdir
 }
 run_test 133c "Verifying OST stats ========================================"
 
@@ -9792,6 +9924,34 @@ test_133g() {
 }
 run_test 133g "Check for Oopses on bad io area writes/reads in /proc"
 
+test_133h() {
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.9.54) ]] &&
+               skip "Need MDS version at least 2.9.54" && return
+
+       local facet
+       for facet in client mds1 ost1; do
+               local facet_proc_dirs=$(do_facet $facet \
+                                       \\\ls -d $proc_regexp 2> /dev/null)
+               [ -z "$facet_proc_dirs" ] && error "no proc_dirs on $facet"
+               echo "${facet}_proc_dirs='$facet_proc_dirs'"
+               # Get the list of files that are missing the terminating newline
+               local missing=($(do_facet $facet \
+                       find ${facet_proc_dirs} -type f \|              \
+                               while read F\; do                       \
+                                       awk -v FS='\v' -v RS='\v\v'     \
+                                       "'END { if(NR>0 &&              \
+                                       \\\$NF !~ /.*\\\n\$/)           \
+                                               print FILENAME}'"       \
+                                       '\$F'\;                         \
+                               done 2>/dev/null))
+               [ ${#missing[*]} -eq 0 ] ||
+                       error "files do not end with newline: ${missing[*]}"
+       done
+}
+run_test 133h "Proc files should end with newlines"
+
 test_134a() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.54) ]] &&
@@ -9871,32 +10031,32 @@ run_test 134b "Server rejects lock request when reaching lock_limit_mb"
 
 test_140() { #bug-17379
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p $DIR/$tdir || error "Creating dir $DIR/$tdir"
+       test_mkdir $DIR/$tdir
        cd $DIR/$tdir || error "Changing to $DIR/$tdir"
        cp $(which stat) . || error "Copying stat to $DIR/$tdir"
 
        # VFS limits max symlink depth to 5(4KSTACK) or 7(8KSTACK) or 8
        # For kernel > 3.5, bellow only tests consecutive symlink (MAX 40)
        local i=0
-        while i=`expr $i + 1`; do
-                test_mkdir -p $i || error "Creating dir $i"
-                cd $i || error "Changing to $i"
-                ln -s ../stat stat || error "Creating stat symlink"
-                # Read the symlink until ELOOP present,
-                # not LBUGing the system is considered success,
-                # we didn't overrun the stack.
-                $OPENFILE -f O_RDONLY stat >/dev/null 2>&1; ret=$?
-                [ $ret -ne 0 ] && {
-                        if [ $ret -eq 40 ]; then
-                                break  # -ELOOP
-                        else
-                                error "Open stat symlink"
-                                return
-                        fi
-                }
-        done
-        i=`expr $i - 1`
-        echo "The symlink depth = $i"
+       while i=$((i + 1)); do
+               test_mkdir $i
+               cd $i || error "Changing to $i"
+               ln -s ../stat stat || error "Creating stat symlink"
+               # Read the symlink until ELOOP present,
+               # not LBUGing the system is considered success,
+               # we didn't overrun the stack.
+               $OPENFILE -f O_RDONLY stat >/dev/null 2>&1; ret=$?
+               if [ $ret -ne 0 ]; then
+                       if [ $ret -eq 40 ]; then
+                               break  # -ELOOP
+                       else
+                               error "Open stat symlink"
+                                       return
+                       fi
+               fi
+       done
+       i=$((i - 1))
+       echo "The symlink depth = $i"
        [ $i -eq 5 -o $i -eq 7 -o $i -eq 8 -o $i -eq 40 ] ||
                                        error "Invalid symlink depth"
 
@@ -9944,12 +10104,12 @@ run_test 150 "truncate/append tests"
 function roc_hit_init() {
        local list=$(comma_list $(osts_nodes))
        local dir=$DIR/$tdir-check
-       local file=$dir/file
+       local file=$dir/$tfile
        local BEFORE
        local AFTER
        local idx
 
-       test_mkdir -p $dir
+       test_mkdir $dir
        #use setstripe to do a write to every ost
        for i in $(seq 0 $((OSTCOUNT-1))); do
                $SETSTRIPE -c 1 -i $i $dir || error "$SETSTRIPE $file failed"
@@ -10467,7 +10627,8 @@ run_test 154f "get parent fids by reading link ea"
 
 test_154g()
 {
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.92) ]] ||
+       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.92) && \
+          $(lustre_version_code client) -gt $(version_code 2.6.99) ]] ||
                { skip "Need MDS version at least 2.6.92"; return 0; }
        [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return
 
@@ -11026,6 +11187,8 @@ test_160d() {
 run_test 160d "verify that changelog log catch the migrate event"
 
 test_160e() {
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
+
        # Create a user
        CL_USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
                changelog_register -n)
@@ -11057,7 +11220,7 @@ run_test 160e "changelog negative testing"
 
 test_161a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       test_mkdir -p -c1 $DIR/$tdir
+       test_mkdir -c1 $DIR/$tdir
        cp /etc/hosts $DIR/$tdir/$tfile
        test_mkdir -c1 $DIR/$tdir/foo1
        test_mkdir -c1 $DIR/$tdir/foo2
@@ -11259,7 +11422,7 @@ test_161d() {
        # wait for create to be delayed
        sleep 2
 
-       ps -q $pid
+       ps -p $pid
        [[ $? -eq 0 ]] || error "create should be blocked"
 
        local tempfile=$(mktemp)
@@ -11592,12 +11755,11 @@ test_180b() {
        local rc=0
        local rmmod_remote=0
 
-       do_facet ost1 "lsmod | grep -q obdecho || "                      \
-                     "{ insmod ${LUSTRE}/obdecho/obdecho.ko || "        \
-                     "modprobe obdecho; }" && rmmod_remote=1
+       do_rpc_nodes $(facet_active_host ost1) load_module obdecho/obdecho &&
+               rmmod_remote=true || error "failed to load module obdecho"
        target=$(do_facet ost1 $LCTL dl | awk '/obdfilter/ {print $4;exit}')
        [[ -n $target ]] && { obdecho_test $target ost1 || rc=1; }
-       [ $rmmod_remote -eq 1 ] && do_facet ost1 "rmmod obdecho"
+       $rmmod_remote && do_facet ost1 "rmmod obdecho"
        return $rc
 }
 run_test 180b "test obdecho directly on obdfilter"
@@ -11630,7 +11792,7 @@ test_180c() { # LU-2598
 run_test 180c "test huge bulk I/O size on obdfilter, don't LASSERT"
 
 test_181() { # bug 22177
-       test_mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
+       test_mkdir $DIR/$tdir
        # create enough files to index the directory
        createmany -o $DIR/$tdir/foobar 4000
        # print attributes for debug purpose
@@ -11707,7 +11869,7 @@ test_184a() {
        check_swap_layouts_support && return 0
 
        dir0=$DIR/$tdir/$testnum
-       test_mkdir -p -c1 $dir0 || error "creating dir $dir0"
+       test_mkdir -p -c1 $dir0
        ref1=/etc/passwd
        ref2=/etc/group
        file1=$dir0/f1
@@ -11828,14 +11990,16 @@ test_184d() {
                error "create $file2 failed"
        $OPENFILE -f O_CREAT:O_LOV_DELAY_CREATE $file3 ||
                error "create $file3 failed"
-       lovea1=$($LFS getstripe $file1 | sed 1d)
+       lovea1=$(get_layout_param $file1)
 
        $LFS swap_layouts $file2 $file3 ||
                error "swap $file2 $file3 layouts failed"
        $LFS swap_layouts $file1 $file2 ||
                error "swap $file1 $file2 layouts failed"
 
-       lovea2=$($LFS getstripe $file2 | sed 1d)
+       lovea2=$(get_layout_param $file2)
+       echo "$lovea1"
+       echo "$lovea2"
        [ "$lovea1" == "$lovea2" ] || error "lovea $lovea1 != $lovea2"
 
        lovea1=$(getfattr -n trusted.lov $file1 | grep ^trusted)
@@ -12019,109 +12183,93 @@ default_attr() {
 check_default_stripe_attr() {
        ACTUAL=$($GETSTRIPE $* $DIR/$tdir)
        case $1 in
-       --stripe-count|--count)
+       --stripe-count|-c)
                [ -n "$2" ] && EXPECTED=0 || EXPECTED=$(default_attr count);;
-       --stripe-size|--size)
+       --stripe-size|-S)
                [ -n "$2" ] && EXPECTED=0 || EXPECTED=$(default_attr size);;
-       --stripe-index|--index)
+       --stripe-index|-i)
                EXPECTED=-1;;
        *)
                error "unknown getstripe attr '$1'"
        esac
 
-       [ $ACTUAL != $EXPECTED ] &&
+       [ $ACTUAL == $EXPECTED ] ||
                error "$DIR/$tdir has $1 '$ACTUAL', not '$EXPECTED'"
 }
 
 test_204a() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-count 0 --stripe-size 0 --stripe-index -1 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count
        check_default_stripe_attr --stripe-size
        check_default_stripe_attr --stripe-index
-
-       return 0
 }
-run_test 204a "Print default stripe attributes ================="
+run_test 204a "Print default stripe attributes"
 
 test_204b() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-count 1 $DIR/$tdir
 
        check_default_stripe_attr --stripe-size
        check_default_stripe_attr --stripe-index
-
-       return 0
 }
-run_test 204b "Print default stripe size and offset  ==========="
+run_test 204b "Print default stripe size and offset"
 
 test_204c() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-size 65536 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count
        check_default_stripe_attr --stripe-index
-
-       return 0
 }
-run_test 204c "Print default stripe count and offset ==========="
+run_test 204c "Print default stripe count and offset"
 
 test_204d() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-index 0 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count
        check_default_stripe_attr --stripe-size
-
-       return 0
 }
-run_test 204d "Print default stripe count and size ============="
+run_test 204d "Print default stripe count and size"
 
 test_204e() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE -d $DIR/$tdir
 
        check_default_stripe_attr --stripe-count --raw
        check_default_stripe_attr --stripe-size --raw
        check_default_stripe_attr --stripe-index --raw
-
-       return 0
 }
-run_test 204e "Print raw stripe attributes ================="
+run_test 204e "Print raw stripe attributes"
 
 test_204f() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-count 1 $DIR/$tdir
 
        check_default_stripe_attr --stripe-size --raw
        check_default_stripe_attr --stripe-index --raw
-
-       return 0
 }
-run_test 204f "Print raw stripe size and offset  ==========="
+run_test 204f "Print raw stripe size and offset"
 
 test_204g() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-size 65536 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count --raw
        check_default_stripe_attr --stripe-index --raw
-
-       return 0
 }
-run_test 204g "Print raw stripe count and offset ==========="
+run_test 204g "Print raw stripe count and offset"
 
 test_204h() {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $SETSTRIPE --stripe-index 0 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count --raw
        check_default_stripe_attr --stripe-size --raw
-
-       return 0
 }
-run_test 204h "Print raw stripe count and size ============="
+run_test 204h "Print raw stripe count and size"
 
 # Figure out which job scheduler is being used, if any,
 # or use a fake one
@@ -12462,16 +12610,12 @@ run_test 214 "hash-indexed directory test - bug 20133"
 
 # having "abc" as 1st arg, creates $TMP/lnet_abc.out and $TMP/lnet_abc.sys
 create_lnet_proc_files() {
-       lctl get_param -n $1 >$TMP/lnet_$1.out || error "cannot read lnet.$1"
-       sysctl lnet.$1 >$TMP/lnet_$1.sys_tmp || error "cannot read lnet.$1"
-
-       sed "s/^lnet.$1\ =\ //g" "$TMP/lnet_$1.sys_tmp" >$TMP/lnet_$1.sys
-       rm -f "$TMP/lnet_$1.sys_tmp"
+       lctl get_param -n $1 >$TMP/lnet_$1.sys || error "cannot read lnet.$1"
 }
 
 # counterpart of create_lnet_proc_files
 remove_lnet_proc_files() {
-       rm -f $TMP/lnet_$1.out $TMP/lnet_$1.sys
+       rm -f $TMP/lnet_$1.sys
 }
 
 # uses 1st arg as trailing part of filename, 2nd arg as description for reports,
@@ -12581,7 +12725,6 @@ test_215() { # for bugs 18102, 21079, 21517
 
        # can we successfully write to lnet.stats?
        lctl set_param -n stats=0 || error "cannot write to lnet.stats"
-       sysctl -w lnet.stats=0 || error "cannot write to lnet.stats"
 }
 run_test 215 "lnet exists and has proper content - bugs 18102, 21079, 21517"
 
@@ -12600,32 +12743,34 @@ test_216() { # bug 20317
                "ldlm.namespaces.filter-*.contended_locks" >> $p
        save_lustre_params $facets \
                "ldlm.namespaces.filter-*.contention_seconds" >> $p
-       clear_osc_stats
+       clear_stats osc.*.osc_stats
 
-        # agressive lockless i/o settings
-        for node in $(osts_nodes); do
-                do_node $node 'lctl set_param -n ldlm.namespaces.filter-*.max_nolock_bytes 2000000; lctl set_param -n ldlm.namespaces.filter-*.contended_locks 0; lctl set_param -n ldlm.namespaces.filter-*.contention_seconds 60'
-        done
-        lctl set_param -n osc.*.contention_seconds 60
+       # agressive lockless i/o settings
+       do_nodes $(comma_list $(osts_nodes)) \
+               "lctl set_param -n ldlm.namespaces.*.max_nolock_bytes=2000000 \
+                       ldlm.namespaces.filter-*.contended_locks=0 \
+                       ldlm.namespaces.filter-*.contention_seconds=60"
+       lctl set_param -n osc.*.contention_seconds=60
 
-        $DIRECTIO write $DIR/$tfile 0 10 4096
-        $CHECKSTAT -s 40960 $DIR/$tfile
+       $DIRECTIO write $DIR/$tfile 0 10 4096
+       $CHECKSTAT -s 40960 $DIR/$tfile
 
-        # disable lockless i/o
-        for node in $(osts_nodes); do
-                do_node $node 'lctl set_param -n ldlm.namespaces.filter-*.max_nolock_bytes 0; lctl set_param -n ldlm.namespaces.filter-*.contended_locks 32; lctl set_param -n ldlm.namespaces.filter-*.contention_seconds 0'
-        done
-        lctl set_param -n osc.*.contention_seconds 0
-        clear_osc_stats
+       # disable lockless i/o
+       do_nodes $(comma_list $(osts_nodes)) \
+               "lctl set_param -n ldlm.namespaces.filter-*.max_nolock_bytes=0 \
+                       ldlm.namespaces.filter-*.contended_locks=32 \
+                       ldlm.namespaces.filter-*.contention_seconds=0"
+       lctl set_param -n osc.*.contention_seconds=0
+       clear_stats osc.*.osc_stats
 
-        dd if=/dev/zero of=$DIR/$tfile count=0
-        $CHECKSTAT -s 0 $DIR/$tfile
+       dd if=/dev/zero of=$DIR/$tfile count=0
+       $CHECKSTAT -s 0 $DIR/$tfile
 
-        restore_lustre_params <$p
-        rm -f $p
-        rm $DIR/$tfile
+       restore_lustre_params <$p
+       rm -f $p
+       rm $DIR/$tfile
 }
-run_test 216 "check lockless direct write works and updates file size and kms correctly"
+run_test 216 "check lockless direct write updates file size and kms correctly"
 
 test_217() { # bug 22430
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
@@ -12635,8 +12780,8 @@ test_217() { # bug 22430
        for node in $(nodes_list); do
                nid=$(host_nids_address $node $NETTYPE)
                if [[ $nid = *-* ]] ; then
-                       echo "lctl ping $nid@$NETTYPE"
-                       lctl ping $nid@$NETTYPE
+                       echo "lctl ping $(h2nettype $nid)"
+                       lctl ping $(h2nettype $nid)
                else
                        echo "skipping $node (no hyphen detected)"
                fi
@@ -12754,25 +12899,25 @@ 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
-       createmany -o $DIR/$tdir/$tfile 10
-       cancel_lru_locks mdc
-       cancel_lru_locks osc
-       #define OBD_FAIL_LDLM_AGL_DELAY           0x31a
-       $LCTL set_param fail_loc=0x31a
-       ls -l $DIR/$tdir > /dev/null || error "AGL for ls failed"
-       $LCTL set_param fail_loc=0
-       rm -r $DIR/$tdir
+       rm -rf $DIR/$tdir
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 1 -i 0 $DIR/$tdir
+       createmany -o $DIR/$tdir/$tfile 10
+       cancel_lru_locks mdc
+       cancel_lru_locks osc
+       #define OBD_FAIL_LDLM_AGL_DELAY           0x31a
+       $LCTL set_param fail_loc=0x31a
+       ls -l $DIR/$tdir > /dev/null || error "AGL for ls failed"
+       $LCTL set_param fail_loc=0
+       rm -r $DIR/$tdir
 }
-run_test 222a "AGL for ls should not trigger CLIO lock failure ================"
+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
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 1 -i 0 $DIR/$tdir
        createmany -o $DIR/$tdir/$tfile 10
        cancel_lru_locks mdc
        cancel_lru_locks osc
@@ -12781,21 +12926,21 @@ test_222b () {
        rm -r $DIR/$tdir || error "AGL for rmdir failed"
        $LCTL set_param fail_loc=0
 }
-run_test 222b "AGL for rmdir should not trigger CLIO lock failure ============="
+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
-       createmany -o $DIR/$tdir/$tfile 10
-       cancel_lru_locks mdc
-       cancel_lru_locks osc
-       #define OBD_FAIL_LDLM_AGL_NOLOCK          0x31b
-       $LCTL set_param fail_loc=0x31b
-       ls -l $DIR/$tdir > /dev/null || error "reenqueue failed"
-       $LCTL set_param fail_loc=0
-       rm -r $DIR/$tdir
+       rm -rf $DIR/$tdir
+       test_mkdir $DIR/$tdir
+       $LFS setstripe -c 1 -i 0 $DIR/$tdir
+       createmany -o $DIR/$tdir/$tfile 10
+       cancel_lru_locks mdc
+       cancel_lru_locks osc
+       #define OBD_FAIL_LDLM_AGL_NOLOCK          0x31b
+       $LCTL set_param fail_loc=0x31b
+       ls -l $DIR/$tdir > /dev/null || error "reenqueue failed"
+       $LCTL set_param fail_loc=0
+       rm -r $DIR/$tdir
 }
 run_test 223 "osc reenqueue if without AGL lock granted ======================="
 
@@ -13010,7 +13155,7 @@ test_228a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip "non-ldiskfs backend" && return
+               skip "ldiskfs only test" && return
 
        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
        local myDIR=$DIR/$tdir
@@ -13052,7 +13197,7 @@ test_228b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip "non-ldiskfs backend" && return
+               skip "ldiskfs only test" && return
 
        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
        local myDIR=$DIR/$tdir
@@ -13102,7 +13247,7 @@ test_228c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip "non-ldiskfs backend" && return
+               skip "ldiskfs only test" && return
 
        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
        local myDIR=$DIR/$tdir
@@ -13604,8 +13749,12 @@ test_231a()
        # is the same across all OSCs
        local max_pages=$($LCTL get_param -n osc.*.max_pages_per_rpc | head -n1)
        local bulk_size=$((max_pages * 4096))
+       local brw_size=$(do_facet ost1 $LCTL get_param -n obdfilter.*.brw_size |
+                                      head -n 1)
 
        mkdir -p $DIR/$tdir
+       $LFS setstripe -S ${brw_size}M $DIR/$tdir ||
+               error "failed to set stripe with -S ${brw_size}M option"
 
        # clear the OSC stats
        $LCTL set_param osc.*.stats=0 &>/dev/null
@@ -13741,7 +13890,7 @@ run_test 235 "LU-1715: flock deadlock detection does not work properly"
 #LU-2935
 test_236() {
        check_swap_layouts_support && return 0
-       test_mkdir -p -c1 $DIR/$tdir || error "mkdir $tdir failed"
+       test_mkdir -c1 $DIR/$tdir
 
        local ref1=/etc/passwd
        local ref2=/etc/group
@@ -13914,14 +14063,14 @@ run_test 242 "mdt_readpage failure should not cause directory unreadable"
 
 test_243()
 {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        group_lock_test -d $DIR/$tdir || error "A group lock test failed"
 }
 run_test 243 "various group lock tests"
 
 test_244()
 {
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        dd if=/dev/zero of=$DIR/$tdir/$tfile bs=1M count=35
        sendfile_grouplock $DIR/$tdir/$tfile || \
                error "sendfile+grouplock failed"
@@ -14158,7 +14307,7 @@ test_252() {
        remote_ost_nodsh && skip "remote OST with nodsh" && return
        if [ "$(facet_fstype ost1)" != "ldiskfs" -o \
             "$(facet_fstype mds1)" != "ldiskfs" ]; then
-               skip "can only run lr_reader on ldiskfs target"
+               skip "ldiskfs only test"
                return
        fi
 
@@ -14392,70 +14541,93 @@ ladvise_no_ioctl()
        return 1
 }
 
+percent() {
+       bc <<<"scale=2; ($1 - $2) * 100 / $2"
+}
+
+# run a random read IO workload
+# usage: random_read_iops <filename> <filesize> <iosize>
+random_read_iops() {
+       local file=$1
+       local fsize=$2
+       local iosize=${3:-4096}
+
+       $READS -f $file -s $fsize -b $iosize -n $((fsize / iosize)) -t 60 |
+               sed -e '/^$/d' -e 's#.*s, ##' -e 's#MB/s##'
+}
+
+drop_file_oss_cache() {
+       local file="$1"
+       local nodes="$2"
+
+       $LFS ladvise -a dontneed $file 2>/dev/null ||
+               do_nodes $nodes "echo 3 > /proc/sys/vm/drop_caches"
+}
+
 ladvise_willread_performance()
 {
        local repeat=10
+       local average_origin=0
        local average_cache=0
        local average_ladvise=0
 
        for ((i = 1; i <= $repeat; i++)); do
                echo "Iter $i/$repeat: reading without willread hint"
                cancel_lru_locks osc
-               do_nodes $(comma_list $(osts_nodes)) \
-                       "echo 3 > /proc/sys/vm/drop_caches"
-               local speed_origin=$($READS -f $DIR/$tfile -s $size \
-                       -b 4096 -n $((size / 4096)) -t 60 |
-                       sed -e '/^$/d' -e 's#.*s, ##' -e 's#MB/s##')
+               drop_file_oss_cache $DIR/$tfile $(comma_list $(osts_nodes))
+               local speed_origin=$(random_read_iops $DIR/$tfile $size)
+               echo "Iter $i/$repeat: uncached speed: $speed_origin"
+               average_origin=$(bc <<<"$average_origin + $speed_origin")
 
-               echo "Iter $i/$repeat: Reading again without willread hint"
                cancel_lru_locks osc
-               local speed_cache=$($READS -f $DIR/$tfile -s $size \
-                       -b 4096 -n $((size / 4096)) -t 60 |
-                       sed -e '/^$/d' -e 's#.*s, ##' -e 's#MB/s##')
+               local speed_cache=$(random_read_iops $DIR/$tfile $size)
+               echo "Iter $i/$repeat: OSS cache speed: $speed_cache"
+               average_cache=$(bc <<<"$average_cache + $speed_cache")
 
-               echo "Iter $i/$repeat: reading with willread hint"
                cancel_lru_locks osc
-               do_nodes $(comma_list $(osts_nodes)) \
-                       "echo 3 > /proc/sys/vm/drop_caches"
-               lfs ladvise -a willread $DIR/$tfile ||
-                       error "Ladvise failed"
-               local speed_ladvise=$($READS -f $DIR/$tfile -s $size \
-                       -b 4096 -n $((size / 4096)) -t 60 |
-                       sed -e '/^$/d' -e 's#.*s, ##' -e 's#MB/s##')
-
-               local cache_speedup=$(echo "scale=2; \
-                       ($speed_cache-$speed_origin)/$speed_origin*100" | bc)
-               cache_speedup=$(echo ${cache_speedup%.*})
-               echo "Iter $i/$repeat: cache speedup: $cache_speedup%"
-               average_cache=$((average_cache + cache_speedup))
-
-               local ladvise_speedup=$(echo "scale=2; \
-                       ($speed_ladvise-$speed_origin)/$speed_origin*100" | bc)
-               ladvise_speedup=$(echo ${ladvise_speedup%.*})
-               echo "Iter $i/$repeat: ladvise speedup: $ladvise_speedup%"
-               average_ladvise=$((average_ladvise + ladvise_speedup))
-       done
-       average_cache=$((average_cache / repeat))
-       average_ladvise=$((average_ladvise / repeat))
-
-       if [ $average_cache -lt 20 ]; then
-               echo "Speedup with cache is less than 20% ($average_cache%),"\
-                       "skipping check of speedup with willread:"\
-                       "$average_ladvise%"
+               drop_file_oss_cache $DIR/$tfile $(comma_list $(osts_nodes))
+               $LFS ladvise -a willread $DIR/$tfile || error "ladvise failed"
+               local speed_ladvise=$(random_read_iops $DIR/$tfile $size)
+               echo "Iter $i/$repeat: ladvise speed: $speed_ladvise"
+               average_ladvise=$(bc <<<"$average_ladvise + $speed_ladvise")
+       done
+       average_origin=$(bc <<<"scale=2; $average_origin / $repeat")
+       average_cache=$(bc <<<"scale=2; $average_cache / $repeat")
+       average_ladvise=$(bc <<<"scale=2; $average_ladvise / $repeat")
+
+       speedup_cache=$(percent $average_cache $average_origin)
+       speedup_ladvise=$(percent $average_ladvise $average_origin)
+
+       echo "Average uncached read: $average_origin"
+       echo "Average speedup with OSS cached read: " \
+               "$average_cache = +$speedup_cache%"
+       echo "Average speedup with ladvise willread: " \
+               "$average_ladvise = +$speedup_ladvise%"
+
+       local lowest_speedup=20
+       if [ ${average_cache%.*} -lt $lowest_speedup ]; then
+               echo "Speedup with OSS cached read less than $lowest_speedup%, "
+                       "got $average_cache%. Skipping ladvise willread check."
                return 0
        fi
 
-       local lowest_speedup=$((average_cache / 2))
-       [ $average_ladvise -gt $lowest_speedup ] ||
+       # the test won't work on ZFS until it supports 'ladvise dontneed', but
+       # it is still good to run until then to exercise 'ladvise willread'
+       ! $LFS ladvise -a dontneed $DIR/$tfile &&
+               [ "$(facet_fstype ost1)" = "zfs" ] &&
+               echo "osd-zfs does not support dontneed or drop_caches" &&
+               return 0
+
+       lowest_speedup=$(bc <<<"scale=2; $average_cache / 2")
+       [ ${average_ladvise%.*} -gt $lowest_speedup ] ||
                error_not_in_vm "Speedup with willread is less than " \
-                          "$lowest_speedup%, got $average_ladvise%"
-       echo "Speedup with willread ladvise: $average_ladvise%"
-       echo "Speedup with cache: $average_cache%"
+                       "$lowest_speedup%, got $average_ladvise%"
 }
 
 test_255a() {
        [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
                skip "lustre < 2.8.54 does not support ladvise " && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
 
        lfs setstripe -c -1 -i 0 $DIR/$tfile || error "$tfile failed"
 
@@ -14540,6 +14712,10 @@ facet_meminfo() {
 }
 
 test_255b() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+
+       lfs setstripe -c 1 -i 0 $DIR/$tfile
+
        ladvise_no_type dontneed $DIR/$tfile &&
                skip "dontneed ladvise is not supported" && return
 
@@ -14549,10 +14725,9 @@ test_255b() {
        [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
                skip "lustre < 2.8.54 does not support ladvise" && return
 
-       [ "$(facet_fstype ost1)" = "zfs" ] &&
-               skip "zfs-osd does not support dontneed advice" && return
-
-       lfs setstripe -c 1 -i 0 $DIR/$tfile
+       ! $LFS ladvise -a dontneed $DIR/$tfile &&
+               [ "$(facet_fstype ost1)" = "zfs" ] &&
+               skip "zfs-osd does not support 'ladvise dontneed'" && return
 
        local size_mb=100
        local size=$((size_mb * 1048576))
@@ -14597,6 +14772,87 @@ test_255b() {
 }
 run_test 255b "check 'lfs ladvise -a dontneed'"
 
+test_255c() {
+       local count
+       local new_count
+       local difference
+       local i
+       local rc
+       test_mkdir -p $DIR/$tdir
+       $SETSTRIPE -i 0 $DIR/$tdir
+
+       #test 10 returns only success/failure
+       i=10
+       lockahead_test -d $DIR/$tdir -t $i
+       rc=$?
+       if [ $rc -eq 255 ]; then
+               error "Ladvise test${i} failed, ${rc}"
+       fi
+
+       #test 11 counts lock enqueue requests, all others count new locks
+       i=11
+       count=$(do_facet ost1 \
+               $LCTL get_param -n ost.OSS.ost.stats)
+       count=$(echo "$count" | grep ldlm_extent_enqueue | awk '{ print $2 }')
+
+       lockahead_test -d $DIR/$tdir -t $i
+       rc=$?
+       if [ $rc -eq 255 ]; then
+               error "Ladvise test${i} failed, ${rc}"
+       fi
+
+       new_count=$(do_facet ost1 \
+               $LCTL get_param -n ost.OSS.ost.stats)
+       new_count=$(echo "$new_count" | grep ldlm_extent_enqueue | \
+                  awk '{ print $2 }')
+
+       difference="$((new_count - count))"
+       if [ $difference -ne $rc ]; then
+               error "Ladvise test${i}, bad enqueue count, returned " \
+                     "${rc}, actual ${difference}"
+       fi
+
+       for i in $(seq 12 21); do
+               # If we do not do this, we run the risk of having too many
+               # locks and starting lock cancellation while we are checking
+               # lock counts.
+               cancel_lru_locks osc
+
+               count=$($LCTL get_param -n \
+                      ldlm.namespaces.$FSNAME-OST0000*osc-f*.lock_unused_count)
+
+               lockahead_test -d $DIR/$tdir -t $i
+               rc=$?
+               if [ $rc -eq 255 ]; then
+                       error "Ladvise test ${i} failed, ${rc}"
+               fi
+
+               new_count=$($LCTL get_param -n \
+                      ldlm.namespaces.$FSNAME-OST0000*osc-f*.lock_unused_count)
+               difference="$((new_count - count))"
+
+               # Test 15 output is divided by 1000 to map down to valid return
+               if [ $i -eq 15 ]; then
+                       rc="$((rc * 1000))"
+               fi
+
+               if [ $difference -ne $rc ]; then
+                       error "Ladvise test ${i}, bad lock count, returned " \
+                             "${rc}, actual ${difference}"
+               fi
+       done
+
+       #test 22 returns only success/failure
+       i=22
+       lockahead_test -d $DIR/$tdir -t $i
+       rc=$?
+       if [ $rc -eq 255 ]; then
+               error "Ladvise test${i} failed, ${rc}"
+       fi
+
+}
+run_test 255c "suite of ladvise lockahead tests"
+
 test_256() {
        local cl_user
        local cat_sl
@@ -14605,7 +14861,7 @@ test_256() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        [ "$(facet_fstype mds1)" != "ldiskfs" ] &&
-               skip "non-ldiskfs backend" && return
+               skip "ldiskfs only test" && return
 
        mdt_dev=$(mdsdevname 1)
        echo $mdt_dev
@@ -14635,9 +14891,12 @@ test_256() {
 
        #after mount new plainllog is used
        touch $DIR/$tdir/{11..19}
+       do_facet mds1 sync
+       local TEMP256FILE=$(mktemp -u TEMP256XXXXXX)
        cat_sl=$(do_facet mds1 \
-       "$DEBUGFS -R \\\"dump changelog_catalog cat.dmp\\\" $mdt_dev; \
-        llog_reader cat.dmp | grep \\\"type=1064553b\\\" | wc -l")
+       "$DEBUGFS -R \\\"dump changelog_catalog $TEMP256FILE\\\" $mdt_dev; \
+        llog_reader $TEMP256FILE | grep \\\"type=1064553b\\\" | wc -l")
+       do_facet mds1 rm $TEMP256FILE
 
        if (( cat_sl != 2 )); then
                do_facet mds1 $LCTL --device $MDT0 changelog_deregister $cl_user
@@ -14646,9 +14905,12 @@ test_256() {
 
        $LFS changelog_clear $MDT0 $cl_user 0
 
+       do_facet mds1 sync
+       TEMP256FILE=$(mktemp -u TEMP256XXXXXX)
        cat_sl=$(do_facet mds1 \
-       "$DEBUGFS -R \\\"dump changelog_catalog cat.dmp\\\" $mdt_dev; \
-        llog_reader cat.dmp | grep \\\"type=1064553b\\\" | wc -l")
+       "$DEBUGFS -R \\\"dump changelog_catalog $TEMP256FILE\\\" $mdt_dev; \
+        llog_reader $TEMP256FILE | grep \\\"type=1064553b\\\" | wc -l")
+       do_facet mds1 rm $TEMP256FILE
 
        do_facet mds1 $LCTL --device $MDT0 changelog_deregister $cl_user
 
@@ -14666,7 +14928,7 @@ test_257() {
        [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ]] &&
                skip "Need MDS version at least 2.8.55" && return
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
 
        setfattr -n trusted.name1 -v value1 $DIR/$tdir ||
                error "setfattr -n trusted.name1=value1 $DIR/$tdir failed"
@@ -14684,6 +14946,39 @@ test_257() {
 }
 run_test 257 "xattr locks are not lost"
 
+# Verify we take the i_mutex when security requires it
+test_258a() {
+#define OBD_FAIL_IMUTEX_SEC 0x141c
+       $LCTL set_param fail_loc=0x141c
+       touch $DIR/$tfile
+       chmod u+s $DIR/$tfile
+       chmod a+rwx $DIR/$tfile
+       $RUNAS dd if=/dev/zero of=$DIR/$tfile bs=4k count=1 oflag=append
+       RC=$?
+       if [ $RC -ne 0 ]; then
+               error "error, failed to take i_mutex, rc=$?"
+       fi
+       rm -f $DIR/$tfile
+}
+run_test 258a
+
+# Verify we do NOT take the i_mutex in the normal case
+test_258b() {
+#define OBD_FAIL_IMUTEX_NOSEC 0x141d
+       $LCTL set_param fail_loc=0x141d
+       touch $DIR/$tfile
+       chmod a+rwx $DIR
+       chmod a+rw $DIR/$tfile
+       $RUNAS dd if=/dev/zero of=$DIR/$tfile bs=4k count=1 oflag=append
+       RC=$?
+       if [ $RC -ne 0 ]; then
+               error "error, took i_mutex unnecessarily, rc=$?"
+       fi
+       rm -f $DIR/$tfile
+
+}
+run_test 258b "verify i_mutex security behavior"
+
 test_260() {
 #define OBD_FAIL_MDC_CLOSE               0x806
        $LCTL set_param fail_loc=0x80000806
@@ -14717,7 +15012,11 @@ test_striped_dir() {
                error "getdirstripe failed"
        stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir)
        if [ "$stripe_count" != "2" ]; then
-               error "stripe_count is $stripe_count, expect 2"
+               error "1:stripe_count is $stripe_count, expect 2"
+       fi
+       stripe_count=$($LFS getdirstripe -T $DIR/$tdir/striped_dir)
+       if [ "$stripe_count" != "2" ]; then
+               error "2:stripe_count is $stripe_count, expect 2"
        fi
 
        stripe_index=$($LFS getdirstripe -i $DIR/$tdir/striped_dir)
@@ -14781,7 +15080,7 @@ test_300b() {
        local mtime2
        local mtime3
 
-       test_mkdir $DIR/$tdir || error "mkdir fail"
+       test_mkdir $DIR/$tdir
        $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
        for ((i=0; i<10; i++)); do
@@ -14883,13 +15182,13 @@ test_300e() {
        mkdir $DIR/$tdir/striped_dir/dir_c
 
        $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_a ||
-               error "set striped dir under striped dir error"
+               error "set striped adir under striped dir error"
 
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_b ||
-               error "set striped dir under striped dir error"
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir/stp_b ||
+               error "set striped bdir under striped dir error"
 
        $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_c ||
-               error "set striped dir under striped dir error"
+               error "set striped cdir under striped dir error"
 
        mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_b ||
                error "rename dir under striped dir fails"
@@ -15012,17 +15311,17 @@ test_300g() {
        $LFS setdirstripe -D -i1 $DIR/$tdir/striped_dir ||
                error "create striped_dir failed"
 
+       $LFS setdirstripe -i0 $DIR/$tdir/striped_dir/dir0 ||
+               error "create dir0 fails"
+       stripe_index=$($LFS getdirstripe -i $DIR/$tdir/striped_dir/dir0)
+       [ $stripe_index -eq 0 ] ||
+               error "dir0 expect index 0 got $stripe_index"
+
        mkdir $DIR/$tdir/striped_dir/dir1 ||
                error "create dir1 fails"
        stripe_index=$($LFS getdirstripe -i $DIR/$tdir/striped_dir/dir1)
        [ $stripe_index -eq 1 ] ||
-               error "dir1 expect 1 got $stripe_index"
-
-       $LFS setdirstripe -i2 $DIR/$tdir/striped_dir/dir2 ||
-               error "create dir2 fails"
-       stripe_index=$($LFS getdirstripe -i $DIR/$tdir/striped_dir/dir2)
-       [ $stripe_index -eq 2 ] ||
-               error "dir2 expect 2 got $stripe_index"
+               error "dir1 expect index 1 got $stripe_index"
 
        #check default stripe count/stripe index
        test_300_check_default_striped_dir normal_dir $MDSCOUNT 1
@@ -15093,11 +15392,23 @@ test_300i() {
        createmany -o $DIR/$tdir/striped_dir/f- 10 ||
                error "create files under striped dir failed"
 
+       $LFS setdirstripe -i0 -c$MDSCOUNT -H all_char $DIR/$tdir/hashdir ||
+               error "set striped hashdir error"
+
+       $LFS setdirstripe -i0 -c$MDSCOUNT -H all_char $DIR/$tdir/hashdir/d0 ||
+               error "create dir0 under hash dir failed"
+       $LFS setdirstripe -i0 -c$MDSCOUNT -H fnv_1a_64 $DIR/$tdir/hashdir/d1 ||
+               error "create dir1 under hash dir failed"
+
        # unfortunately, we need to umount to clear dir layout cache for now
        # once we fully implement dir layout, we can drop this
        umount_client $MOUNT || error "umount failed"
        mount_client $MOUNT || error "mount failed"
 
+       $LFS find -H fnv_1a_64 $DIR/$tdir/hashdir
+       local dircnt=$($LFS find -H fnv_1a_64 $DIR/$tdir/hashdir | wc -l)
+       [ $dircnt -eq 1 ] || error "lfs find striped dir got:$dircnt,except:1"
+
        #set the stripe to be unknown hash type
        #define OBD_FAIL_UNKNOWN_LMV_STRIPE     0x1901
        $LCTL set_param fail_loc=0x1901
@@ -15240,6 +15551,8 @@ test_300n() {
                skip "Need MDS version at least 2.7.55" && return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
+
        local stripe_index
        local list=$(comma_list $(mdts_nodes))
 
@@ -15432,6 +15745,7 @@ test_311() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.54) ] &&
                skip "lustre < 2.8.54 does not contain LU-4825 fix" && return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
        local old_iused=$($LFS df -i | grep OST0000 | awk '{ print $3 }')
 
@@ -15485,7 +15799,7 @@ zfs_oid_to_objid()
        local objid=$2
 
        local vdevdir=$(dirname $(facet_vdevice $ost))
-       local cmd="$ZDB -e -p $vdevdir -dddd $(facet_device $ost)"
+       local cmd="$ZDB -e -p $vdevdir -ddddd $(facet_device $ost)"
        local zfs_zapid=$(do_facet $ost $cmd |
                          grep -w "/O/0/d$((objid%32))" -C 5 |
                          awk '/Object/{getline; print $1}')
@@ -15514,12 +15828,15 @@ zfs_object_blksz() {
 }
 
 test_312() { # LU-4856
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+
        [ $(facet_fstype ost1) = "zfs" ] ||
                { skip "the test only applies to zfs" && return; }
 
        local max_blksz=$(do_facet ost1 \
                          $ZFS get -p recordsize $(facet_device ost1) |
                          awk '!/VALUE/{print $3}')
+       local min_blksz=$(getconf PAGE_SIZE)
 
        # to make life a little bit easier
        $LFS mkdir -c 1 -i 0 $DIR/$tdir
@@ -15534,7 +15851,7 @@ test_312() { # LU-4856
 
        # block size change by sequential over write
        local blksz
-       for ((bs=4096; bs <= max_blksz; bs <<= 2)); do
+       for ((bs=$min_blksz; bs <= max_blksz; bs <<= 2)); do
                dd if=/dev/zero of=$tf bs=$bs count=1 oflag=sync conv=notrunc
 
                blksz=$(zfs_object_blksz ost1 $zfs_objid)
@@ -15543,18 +15860,18 @@ test_312() { # LU-4856
        rm -f $tf
 
        # block size change by sequential append write
-       dd if=/dev/zero of=$tf bs=4K count=1 oflag=sync conv=notrunc
+       dd if=/dev/zero of=$tf bs=$min_blksz count=1 oflag=sync conv=notrunc
        oid=$($LFS getstripe $tf | awk '/obdidx/{getline; print $2}')
        zfs_objid=$(zfs_oid_to_objid ost1 $oid)
 
-       for ((count = 1; count < $((max_blksz / 4096)); count *= 2)); do
-               dd if=/dev/zero of=$tf bs=4K count=$count seek=$count \
+       for ((count = 1; count < $((max_blksz / min_blksz)); count *= 2)); do
+               dd if=/dev/zero of=$tf bs=$min_blksz count=$count seek=$count \
                        oflag=sync conv=notrunc
 
                blksz=$(zfs_object_blksz ost1 $zfs_objid)
-               blksz=$((blksz / 8192)) # in 2*4K unit
-               [ $blksz -eq $count ] ||
-                       error "blksz error(in 8k): $blksz, expected: $count"
+               [ $blksz -eq $((2 * count * min_blksz)) ] ||
+                       error "blksz error, actual $blksz, "    \
+                               "expected: 2 * $count * $min_blksz"
        done
        rm -f $tf
 
@@ -15563,9 +15880,10 @@ test_312() { # LU-4856
        oid=$($LFS getstripe $tf | awk '/obdidx/{getline; print $2}')
        zfs_objid=$(zfs_oid_to_objid ost1 $oid)
 
-       dd if=/dev/zero of=$tf bs=8K count=1 oflag=sync conv=notrunc
+       dd if=/dev/zero of=$tf bs=1K count=1 oflag=sync conv=notrunc
        blksz=$(zfs_object_blksz ost1 $zfs_objid)
-       [ $blksz -eq 8192 ] || error "blksz error: $blksz, expected: 8k"
+       [ $blksz -eq $min_blksz ] ||
+               error "blksz error: $blksz, expected: $min_blksz"
 
        dd if=/dev/zero of=$tf bs=64K count=1 oflag=sync conv=notrunc seek=128
        blksz=$(zfs_object_blksz ost1 $zfs_objid)
@@ -15578,6 +15896,8 @@ test_312() { # LU-4856
 run_test 312 "make sure ZFS adjusts its block size by write pattern"
 
 test_313() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+
        local file=$DIR/$tfile
        rm -f $file
        $SETSTRIPE -c 1 -i 0 $file || error "setstripe failed"
@@ -15650,14 +15970,17 @@ test_fake_rw() {
        rm -f $DIR/$tfile
 }
 test_399a() { # LU-7655 for OST fake write
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+
        test_fake_rw write
 }
 run_test 399a "fake write should not be slower than normal write"
 
-
 test_399b() { # LU-8726 for OST fake read
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+
        if [ "$(facet_fstype ost1)" != "ldiskfs" ]; then
-               skip "only for ldiskfs" && return 0
+               skip "ldiskfs only test" && return 0
        fi
        test_fake_rw read
 }
@@ -15676,7 +15999,6 @@ test_400a() { # LU-1606, was conf-sanity test_74
 
        if ! [[ -d $prefix ]]; then
                # Assume we're running in tree and fixup the include path.
-               extra_flags+=" -I$LUSTRE/../libcfs/include"
                extra_flags+=" -I$LUSTRE/include"
                extra_flags+=" -L$LUSTRE/utils"
        fi
@@ -15692,7 +16014,7 @@ run_test 400a "Lustre client api program can compile and link"
 test_400b() { # LU-1606, LU-5011
        local header
        local out=$TMP/$tfile
-       local prefix=/usr/include/lustre
+       local prefix=/usr/include/linux/lustre
 
        # We use a hard coded prefix so that this test will not fail
        # when run in tree. There are headers in lustre/include/lustre/
@@ -15711,8 +16033,8 @@ test_400b() { # LU-1606, LU-5011
                        continue
                fi
 
-               if [[ "$(basename $header)" == liblustreapi.h ]]; then
-                       continue # liblustreapi.h is deprecated.
+               if [[ "$(basename $header)" == lustre_ioctl.h ]]; then
+                       continue # lustre_ioctl.h is internal header
                fi
 
                $CC -Wall -Werror -include $header -c -x c /dev/null -o $out ||
@@ -15865,6 +16187,10 @@ test_403() {
 run_test 403 "i_nlink should not drop to zero due to aliasing"
 
 test_404() { # LU-6601
+       local server_version=$(lustre_version_code $SINGLEMDS)
+       [[ $server_version -ge $(version_code 2.8.53) ]] ||
+               { skip "Need server version newer than 2.8.52"; return 0; }
+
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local mosps=$(do_facet $SINGLEMDS $LCTL dl |
                awk '/osp .*-osc-MDT/ { print $4}')
@@ -15892,12 +16218,13 @@ test_404() { # LU-6601
 run_test 404 "validate manual {de}activated works properly for OSPs"
 
 test_405() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.92) ] &&
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.92) -o \
+       [ $(lustre_version_code client) -lt $(version_code 2.6.99) ] &&
                skip "Layout swap lock is not supported" && return
 
        check_swap_layouts_support && return 0
 
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        swap_lock_test -d $DIR/$tdir ||
                error "One layout swap locked test failed"
 }
@@ -15911,7 +16238,7 @@ test_406() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.50) ] &&
                skip "Need MDS version at least 2.8.50" && return
 
-       local def_stripenr=$($GETSTRIPE -c $MOUNT)
+       local def_stripe_count=$($GETSTRIPE -c $MOUNT)
        local def_stripe_size=$($GETSTRIPE -S $MOUNT)
        local def_stripe_offset=$($GETSTRIPE -i $MOUNT)
        local def_pool=$($GETSTRIPE -p $MOUNT)
@@ -15966,12 +16293,12 @@ test_406() {
 
        # restore FS default striping
        if [ -z $def_pool ]; then
-               $SETSTRIPE -c $def_stripenr -S $def_stripe_size \
+               $SETSTRIPE -c $def_stripe_count -S $def_stripe_size \
                        -i $def_stripe_offset $MOUNT ||
                        error "restore default striping failed"
        else
-               $SETSTRIPE -c $def_stripenr -S $def_stripe_size -p $def_pool \
-                       -i $def_stripe_offset $MOUNT ||
+               $SETSTRIPE -c $def_stripe_count -S $def_stripe_size \
+                       -i $def_stripe_offset -p $def_pool $MOUNT ||
                        error "restore default striping with $def_pool failed"
        fi
 
@@ -15983,9 +16310,9 @@ run_test 406 "DNE support fs default striping"
 
 test_407() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
-
        [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ]] &&
                skip "Need MDS version at least 2.8.55" && return
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
        $LFS mkdir -i 0 -c 1 $DIR/$tdir.0 ||
                error "$LFS mkdir -i 0 -c 1 $tdir.0 failed"
@@ -16056,69 +16383,146 @@ test_409()
 }
 run_test 409 "Large amount of cross-MDTs hard links on the same file"
 
+test_410()
+{
+       [[ $(lustre_version_code client) -lt $(version_code 2.9.59) ]] &&
+               skip "Need client version at least 2.9.59" && return
+
+       # Create a file, and stat it from the kernel
+       local testfile=$DIR/$tfile
+       touch $testfile
+
+       local run_id=$RANDOM
+       local my_ino=$(stat --format "%i" $testfile)
+
+       # Try to insert the module. This will always fail as the
+       # module is designed to not be inserted.
+       insmod $LUSTRE/tests/kernel/kinode.ko run_id=$run_id fname=$testfile \
+           &> /dev/null
+
+       # Anything but success is a test failure
+       dmesg | grep -q \
+           "lustre_kinode_$run_id: inode numbers are identical: $my_ino" ||
+           error "no inode match"
+}
+run_test 410 "Test inode number returned from kernel thread"
+
+cleanup_test411_cgroup() {
+       trap 0
+       rmdir "$1"
+}
+
+test_411() {
+       local cg_basedir=/sys/fs/cgroup/memory
+       # LU-9966
+       test -f "$cg_basedir/memory.kmem.limit_in_bytes" ||
+               { skip "no setup for cgroup"; return; }
+
+       dd if=/dev/zero of=$DIR/$tfile bs=1M count=100 conv=fsync ||
+               error "test file creation failed"
+       cancel_lru_locks osc
+
+       # Create a very small memory cgroup to force a slab allocation error
+       local cgdir=$cg_basedir/osc_slab_alloc
+       mkdir $cgdir || error "cgroup mkdir '$cgdir' failed"
+       trap "cleanup_test411_cgroup $cgdir" EXIT
+       echo 2M > $cgdir/memory.kmem.limit_in_bytes
+       echo 1M > $cgdir/memory.limit_in_bytes
+
+       # Should not LBUG, just be killed by oom-killer
+       sh -c "echo \$$ > $cgdir/tasks && dd if=$DIR/$tfile of=/dev/null" &&
+               error "fail to trigger a memory allocation error"
+
+       cleanup_test411_cgroup $cgdir
+
+       return 0
+}
+run_test 411 "Slab allocation error with cgroup does not LBUG"
+
 prep_801() {
+       [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] ||
+       [[ $(lustre_version_code ost1) -lt $(version_code 2.9.55) ]] &&
+               skip "Need server version at least 2.9.55" & exit 0
        start_full_debug_logging
-       # cleanup unused barrier locks before test
-       do_facet mgs $LCTL barrier_rescan $FSNAME ||
-               error "Fail to prep barrier test env"
 }
 
 post_801() {
        stop_full_debug_logging
 }
 
+barrier_stat() {
+       if [ $(lustre_version_code mgs) -le $(version_code 2.10.0) ]; then
+               local st=$(do_facet mgs $LCTL barrier_stat $FSNAME |
+                          awk '/The barrier for/ { print $7 }')
+               echo $st
+       else
+               local st=$(do_facet mgs $LCTL barrier_stat -s $FSNAME)
+               echo \'$st\'
+       fi
+}
+
+barrier_expired() {
+       local expired
+
+       if [ $(lustre_version_code mgs) -le $(version_code 2.10.0) ]; then
+               expired=$(do_facet mgs $LCTL barrier_stat $FSNAME |
+                         awk '/will be expired/ { print $7 }')
+       else
+               expired=$(do_facet mgs $LCTL barrier_stat -t $FSNAME)
+       fi
+
+       echo $expired
+}
+
 test_801a() {
        prep_801
 
+       echo "Start barrier_freeze at: $(date)"
        #define OBD_FAIL_BARRIER_DELAY          0x2202
-       do_facet mgs $LCTL set_param fail_val=3 fail_loc=0x2202
+       do_facet mgs $LCTL set_param fail_val=5 fail_loc=0x2202
        do_facet mgs $LCTL barrier_freeze $FSNAME 10 &
 
-       sleep 1
-       local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                              awk '/The barrier for/ { print $7 }')
+       sleep 2
+       local b_status=$(barrier_stat)
+       echo "Got barrier status at: $(date)"
        [ "$b_status" = "'freezing_p1'" ] ||
                error "(1) unexpected barrier status $b_status"
 
        do_facet mgs $LCTL set_param fail_val=0 fail_loc=0
        wait
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'frozen'" ] ||
                error "(2) unexpected barrier status $b_status"
 
-       local expired=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                       awk '/will be expired/ { print $7 }')
+       local expired=$(barrier_expired)
        echo "sleep $((expired + 3)) seconds, then the barrier will be expired"
        sleep $((expired + 3))
 
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'expired'" ] ||
                error "(3) unexpected barrier status $b_status"
 
        do_facet mgs $LCTL barrier_freeze $FSNAME 10 ||
                error "(4) fail to freeze barrier"
 
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'frozen'" ] ||
                error "(5) unexpected barrier status $b_status"
 
+       echo "Start barrier_thaw at: $(date)"
        #define OBD_FAIL_BARRIER_DELAY          0x2202
-       do_facet mgs $LCTL set_param fail_val=3 fail_loc=0x2202
+       do_facet mgs $LCTL set_param fail_val=5 fail_loc=0x2202
        do_facet mgs $LCTL barrier_thaw $FSNAME &
 
-       sleep 1
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       sleep 2
+       b_status=$(barrier_stat)
+       echo "Got barrier status at: $(date)"
        [ "$b_status" = "'thawing'" ] ||
                error "(6) unexpected barrier status $b_status"
 
        do_facet mgs $LCTL set_param fail_val=0 fail_loc=0
        wait
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'thawed'" ] ||
                error "(7) unexpected barrier status $b_status"
 
@@ -16126,8 +16530,7 @@ test_801a() {
        do_facet $SINGLEMDS $LCTL set_param fail_loc=0x2203
        do_facet mgs $LCTL barrier_freeze $FSNAME
 
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                              awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'failed'" ] ||
                error "(8) unexpected barrier status $b_status"
 
@@ -16152,8 +16555,7 @@ test_801b() {
        # 180 seconds should be long enough
        do_facet mgs $LCTL barrier_freeze $FSNAME 180
 
-       local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                              awk '/The barrier for/ { print $7 }')
+       local b_status=$(barrier_stat)
        [ "$b_status" = "'frozen'" ] ||
                error "(6) unexpected barrier status $b_status"
 
@@ -16175,8 +16577,7 @@ test_801b() {
        stat $DIR/$tdir/d5 || error "(7) stat should succeed"
 
        # To guarantee taht the 'stat' is not blocked
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'frozen'" ] ||
                error "(8) unexpected barrier status $b_status"
 
@@ -16189,14 +16590,12 @@ test_801b() {
        ps -p $mv_pid || error "(12) rename should be blocked"
        ps -p $rm_pid || error "(13) unlink should be blocked"
 
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'frozen'" ] ||
                error "(14) unexpected barrier status $b_status"
 
        do_facet mgs $LCTL barrier_thaw $FSNAME
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'thawed'" ] ||
                error "(15) unexpected barrier status $b_status"
 
@@ -16219,8 +16618,7 @@ test_801c() {
 
        do_facet mgs $LCTL barrier_freeze $FSNAME 30
 
-       local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                              awk '/The barrier for/ { print $7 }')
+       local b_status=$(barrier_stat)
        [ "$b_status" = "'expired'" -o "$b_status" = "'failed'" ] || {
                do_facet mgs $LCTL barrier_thaw $FSNAME
                error "(2) unexpected barrier status $b_status"
@@ -16231,14 +16629,12 @@ test_801c() {
 
        do_facet mgs $LCTL barrier_freeze $FSNAME 10
 
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'frozen'" ] ||
                error "(4) unexpected barrier status $b_status"
 
        do_facet mgs $LCTL barrier_thaw $FSNAME
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       b_status=$(barrier_stat)
        [ "$b_status" = "'thawed'" ] ||
                error "(5) unexpected barrier status $b_status"
 
@@ -16268,6 +16664,11 @@ cleanup_802() {
 }
 
 test_802() {
+
+       [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] ||
+       [[ $(lustre_version_code ost1) -lt $(version_code 2.9.55) ]] &&
+               skip "Need server version at least 2.9.55" & exit 0
+
        mkdir $DIR/$tdir || error "(1) fail to mkdir"
 
        cp $LUSTRE/tests/test-framework.sh $DIR/$tdir/ ||