Whamcloud - gitweb
LU-10405 lov: fill no-extent fiemap on object with no stripe.
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 978d93d..c04480b 100755 (executable)
@@ -8,44 +8,26 @@
 set -e
 
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test: LU-9693 LU-6493 LU-9693 3561 5188
-ALWAYS_EXCEPT="                42a    42b      42c     45   68b $SANITY_EXCEPT"
+# bug number for skipped test: LU-9693 LU-6493 LU-9693
+ALWAYS_EXCEPT="$SANITY_EXCEPT  42a     42b     42c"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
-# bug number for skipped tests: LU-2036 LU-8411 LU-9096
-ALWAYS_EXCEPT="                 76     407     253 $ALWAYS_EXCEPT"
+# skipped tests: LU-8411 LU-9096 LU-9054
+ALWAYS_EXCEPT="  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
-{
-       if [ -r /etc/SuSE-release ]
-       then
-               local vers=$(grep VERSION /etc/SuSE-release | awk '{print $3}')
-               local patchlev=$(grep PATCHLEVEL /etc/SuSE-release |
-                       awk '{ print $3 }')
-               if [ $vers -eq 11 ] && [ $patchlev -ge 3 ]; then
-                       return 0
-               fi
-       fi
-       return 1
-}
-
-if is_sles11; then                                     # LU-4341
-       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 170"
-fi
-
 SRCDIR=$(cd $(dirname $0); echo $PWD)
 export PATH=$PATH:/sbin
 
 TMP=${TMP:-/tmp}
+OSC=${OSC:-"osc"}
 
 CC=${CC:-cc}
 CHECKSTAT=${CHECKSTAT:-"checkstat -v"}
 CREATETEST=${CREATETEST:-createtest}
 LFS=${LFS:-lfs}
-LFIND=${LFIND:-"$LFS find"}
 LVERIFY=${LVERIFY:-ll_dirstripe_verify}
 LCTL=${LCTL:-lctl}
 OPENFILE=${OPENFILE:-openfile}
@@ -81,12 +63,36 @@ init_logging
 [ "$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
 
+# Get the SLES version so we can make decisions on if a test should be run
+#
+# Returns a version string that should only be used in comparing
+# strings returned by version_code()
+
+sles_version_code()
+{
+       local version=$(grep VERSION_ID /etc/os-release | cut -d'"' -f2)
+
+       # All SuSE Linux versions have one decimal. version_code expects two
+       local sles_version=$version.0
+       version_code $sles_version
+}
+
+if [ -r /etc/SuSE-release ]; then
+       sles_version=$(sles_version_code)
+       [ $sles_version -lt $(version_code 11.4.0) ] &&
+               # bug number for skipped test: LU-4341
+               ALWAYS_EXCEPT="$ALWAYS_EXCEPT  170"
+       [ $sles_version -lt $(version_code 12.0.0) ] &&
+               # bug number for skipped test: LU-3703
+               ALWAYS_EXCEPT="$ALWAYS_EXCEPT  234"
+fi
+
 FAIL_ON_ERROR=false
 
 cleanup() {
@@ -162,44 +168,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"
@@ -214,13 +217,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"
@@ -255,15 +258,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
@@ -282,7 +285,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
@@ -293,7 +296,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
@@ -394,10 +397,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
@@ -408,10 +411,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 ||
@@ -421,33 +424,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
@@ -456,7 +459,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() {
@@ -471,7 +474,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
@@ -500,16 +503,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"
 
@@ -538,19 +541,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
@@ -563,12 +566,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
@@ -577,36 +580,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}:"
@@ -615,7 +618,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"
@@ -651,7 +655,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
 
@@ -702,14 +706,14 @@ 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
-       touch $WDIR/$tfile
-       mdt_index=$($LFS getstripe -M $WDIR/$tfile)
-       mdt_index=$((mdt_index+1))
+       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
@@ -718,10 +722,9 @@ test_17o() {
 
        #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"
 
@@ -765,10 +768,10 @@ test_20() {
        rm $DIR/$tfile
        $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
@@ -777,43 +780,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() {
@@ -955,10 +959,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
@@ -1126,13 +1130,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 ||
@@ -1152,16 +1156,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 ||
@@ -1181,7 +1185,7 @@ 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)
@@ -1305,8 +1309,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 ======"
@@ -1319,27 +1323,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"
@@ -1352,31 +1356,32 @@ test_26f() {
 run_test 26f "rm -r of a directory which has recursive symlink"
 
 test_27a() {
-       test_mkdir -p $DIR/d27 || error "mkdir failed"
-       $LFS getstripe $DIR/d27
-       $LFS setstripe -c 1 $DIR/d27/f0 || error "setstripe failed"
-       $CHECKSTAT -t file $DIR/d27/f0 || error "checkstat failed"
-       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"
 
 test_27b() {
-       [[ $OSTCOUNT -lt 2 ]] && skip_env "skipping 2-stripe test" && return
-       test_mkdir -p $DIR/d27
-       $LFS setstripe -c 2 $DIR/d27/f01 || error "setstripe failed"
-       $LFS getstripe -c $DIR/d27/f01
-       [ $($LFS 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
-       $LFS 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"
 
@@ -1384,10 +1389,10 @@ 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
-       $LFS setstripe -c 2 $DIR/d27/f12 || error "setstripe failed"
-       $LFS 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)"
 
@@ -1403,10 +1408,10 @@ test_27f() {
 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"
-       $LFS 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 "$LFS getstripe with no objects"
 
@@ -1419,37 +1424,34 @@ test_27i() {
 run_test 27i "$LFS getstripe with some objects"
 
 test_27j() {
-       test_mkdir -p $DIR/d27
-       $LFS setstripe -i $OSTCOUNT $DIR/d27/f27j &&
+       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
-       $LFS 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"
+       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)
@@ -1458,23 +1460,23 @@ test_27m() {
                return
        fi
        trap simple_cleanup_common EXIT
-       test_mkdir -p $DIR/$tdir
-       $LFS 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 $LFS 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
-       [ $($LFS 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
-       [ $($LFS getstripe $DIR/$tdir/f27m_$i | grep -A 10 obdidx |
+       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
@@ -1482,9 +1484,9 @@ test_27m() {
 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)
@@ -1542,7 +1544,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
@@ -1558,7 +1560,7 @@ test_27n() {
 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
@@ -1575,14 +1577,14 @@ test_27o() {
 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"
@@ -1598,7 +1600,7 @@ test_27p() {
 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
@@ -1606,7 +1608,7 @@ 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"
@@ -1622,7 +1624,7 @@ test_27q() {
 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
@@ -1638,7 +1640,7 @@ test_27r() {
 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
@@ -1659,7 +1661,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))
@@ -1677,12 +1679,13 @@ test_27u() { # bug 4900
        unlinkmany $DIR/$tdir/t- 1000
        trap 0
        [[ $OBJS -gt 0 ]] &&
-               error "$OBJS objects created on OST-0. See $TLOG" || pass
+               error "$OBJS objects created on OST-0. See $TLOG" ||
+               rm -f $TLOG
 }
 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
@@ -1690,7 +1693,6 @@ test_27v() { # bug 4900
        exhaust_all_precreations 0x215
        reset_enospc
 
-       test_mkdir $DIR/$tdir
        $LFS setstripe -c 1 $DIR/$tdir         # 1 stripe / file
 
         touch $DIR/$tdir/$tfile
@@ -1713,20 +1715,20 @@ test_27v() { # bug 4900
 run_test 27v "skip object creation on slow OST"
 
 test_27w() { # bug 10997
-       test_mkdir $DIR/$tdir || error "mkdir failed"
+       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") -ne 1 ] &&
-               error "$LFS getstripe -d $DIR/$tdir failed" || 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 $LFS 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 $DIR/$tdir || error "mkdir failed"
+       test_mkdir $DIR/$tdir
        for i in $(seq 1 $OSTCOUNT); do
                offset=$((i - 1))
                $LFS setstripe -c $i -i $offset $DIR/$tdir/f$i ||
@@ -1742,20 +1744,20 @@ 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
+       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
                [ $($LFS getstripe $DIR/$tdir/$tfile$i | grep -A 10 obdidx |
-                   awk '{print $1}' | grep -w "$OSTIDX") ] &&
+                       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
@@ -1763,8 +1765,7 @@ test_27x() {
 run_test 27x "create files while OST0 is degraded"
 
 test_27y() {
-       [[ $OSTCOUNT -lt 2 ]] &&
-               skip_env "$OSTCOUNT < 2 OSTs -- skipping" && 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
@@ -1798,7 +1799,7 @@ test_27y() {
        done
 
        OSTIDX=$(index_from_ostuuid $OST)
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS setstripe -c 1 $DIR/$tdir      # 1 stripe / file
 
        for OSC in $MDS_OSCS; do
@@ -1827,16 +1828,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
        $LFS setstripe -c -1 $DIR/$tfile
-       stripecnt=$($LFS getstripe -c $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"
@@ -1928,12 +1929,6 @@ check_seq_oid()
                        ff_pstripe=$(cut -d: -f3 <<<$ff_parent | sed -e 's/]//')
                fi
 
-               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
                # compare lmm_seq and filter_fid->ff_parent.f_seq
                [ $ff_pseq = $lmm_seq ] ||
                        error "FF parent SEQ $ff_pseq != $lmm_seq"
@@ -1944,31 +1939,39 @@ check_seq_oid()
                        error "FF stripe $ff_pstripe != $stripe_nr"
 
                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
-
-        $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; }
-
-        # 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
+       test_mkdir $DIR/$tdir
+
+       $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
+
+       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"
 
@@ -1991,7 +1994,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
@@ -2022,7 +2025,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
@@ -2062,19 +2065,28 @@ 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
+       if ! combined_mgs_mds ; then
+               mount_mgs_client
+       fi
+
+       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.8.55) ] &&
                skip27D += "-s 29"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.9.55) ] &&
+       [ $(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"
 
        destroy_test_pools || error "destroy test pools failed"
+
+       if ! combined_mgs_mds ; then
+               umount_mgs_client
+       fi
 }
 run_test 27D "validate llapi_layout API"
 
@@ -2115,7 +2127,7 @@ test_27F() { # LU-5346/LU-7975
                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
 
@@ -2405,7 +2417,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
@@ -2494,52 +2506,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"
 
@@ -2684,38 +2696,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
@@ -2738,10 +2751,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
@@ -2776,7 +2789,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"
 
@@ -2995,19 +3008,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
@@ -3015,23 +3028,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"
@@ -3040,7 +3053,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
@@ -3074,7 +3087,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")
@@ -3151,10 +3164,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
@@ -3535,19 +3548,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 ] &&
@@ -3589,7 +3602,7 @@ test_41() {
 run_test 41 "test small file write + fstat ====================="
 
 count_ost_writes() {
-       lctl get_param -n osc.*.stats |
+       lctl get_param -n ${OSC}.*.stats |
                awk -vwrites=0 '/ost_write/ { writes += $2 } \
                        END { printf("%0.0f", writes) }'
 }
@@ -3649,7 +3662,7 @@ setup_test42() {
 test_42a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        setup_test42
-       cancel_lru_locks osc
+       cancel_lru_locks $OSC
        stop_writeback
        sync; sleep 1; sync # just to be safe
        BEFOREWRITES=`count_ost_writes`
@@ -3665,7 +3678,7 @@ run_test 42a "ensure that we don't flush on close"
 test_42b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        setup_test42
-       cancel_lru_locks osc
+       cancel_lru_locks $OSC
        stop_writeback
        sync
        dd if=/dev/zero of=$DIR/f42b bs=1024 count=100
@@ -3701,21 +3714,21 @@ run_test 42b "test destroy of file with cached dirty data ======"
 # start the file with a full-file pw lock to match against
 # until the truncate.
 trunc_test() {
-        test=$1
-        file=$DIR/$test
-        offset=$2
-       cancel_lru_locks osc
+       test=$1
+       file=$DIR/$test
+       offset=$2
+       cancel_lru_locks $OSC
        stop_writeback
        # prime the file with 0,EOF PW to match
        touch $file
         $TRUNCATE $file 0
         sync; sync
        # now the real test..
-        dd if=/dev/zero of=$file bs=1024 count=100
-        BEFOREWRITES=`count_ost_writes`
-        $TRUNCATE $file $offset
-        cancel_lru_locks osc
-        AFTERWRITES=`count_ost_writes`
+       dd if=/dev/zero of=$file bs=1024 count=100
+       BEFOREWRITES=`count_ost_writes`
+       $TRUNCATE $file $offset
+       cancel_lru_locks $OSC
+       AFTERWRITES=`count_ost_writes`
        start_writeback
 }
 
@@ -3747,7 +3760,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
 
@@ -3814,7 +3827,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=$!
@@ -3832,6 +3845,7 @@ test_43a() {
                cp -p multiop $DIR/$tdir/multiop
        MULTIOP_PROG=$DIR/$tdir/multiop multiop_bg_pause $TMP/$tfile.junk O_c ||
                error "multiop open $TMP/$tfile.junk failed"
+       rm $TMP/$tfile.junk     # delete junk file on close (not part of test)
        MULTIOP_PID=$!
        $MULTIOP $DIR/$tdir/multiop Oc && error "expected error, got success"
        kill -USR1 $MULTIOP_PID || error "kill -USR1 PID $MULTIOP_PID failed"
@@ -3846,6 +3860,7 @@ test_43b() {
                cp -p multiop $DIR/$tdir/multiop
        MULTIOP_PROG=$DIR/$tdir/multiop multiop_bg_pause $TMP/$tfile.junk O_c ||
                error "multiop open $TMP/$tfile.junk failed"
+       rm $TMP/$tfile.junk     # delete junk file on close (not part of test)
        MULTIOP_PID=$!
        $TRUNCATE $DIR/$tdir/multiop 0 && error "expected error, got success"
        kill -USR1 $MULTIOP_PID || error "kill -USR1 PID $MULTIOP_PID failed"
@@ -3863,7 +3878,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
 }
@@ -3914,7 +3929,7 @@ run_test 44a "test sparse pwrite ==============================="
 
 dirty_osc_total() {
        tot=0
-       for d in `lctl get_param -n osc.*.cur_dirty_bytes`; do
+       for d in `lctl get_param -n ${OSC}.*.cur_dirty_bytes`; do
                tot=$(($tot + $d))
        done
        echo $tot
@@ -3978,15 +3993,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"
@@ -3999,12 +4014,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
@@ -4019,12 +4034,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
@@ -4040,12 +4055,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
@@ -4139,7 +4154,7 @@ test_51b() {
        # cleanup the directory
        rm -fr $dir
 
-       test_mkdir -p -c1 $dir
+       test_mkdir -c1 $dir
 
        $LFS df
        $LFS df -i
@@ -4155,11 +4170,13 @@ test_51b() {
        [[ $numfree -lt $nrdirs ]] && skip "not enough blocks ($numfree)" &&
                return
 
-       trap cleanup_print_lfsdf EXIT
+       trap cleanup_print_lfs_df EXIT
 
        # create files
-       createmany -d $dir/d $nrdirs ||
+       createmany -d $dir/d $nrdirs || {
+               unlinkmany $dir/d $nrdirs
                error "failed to create $nrdirs subdirs in MDT$mdtidx:$dir"
+       }
 
        # really created :
        nrdirs=$(ls -U $dir | wc -l)
@@ -4196,11 +4213,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)
@@ -4234,12 +4250,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 &&
@@ -4269,8 +4285,10 @@ test_51f() {
                echo "left ulimit at $ulimit_old"
        fi
 
-       createmany -o -k -t 120 $DIR/$tdir/f $numfree ||
+       createmany -o -k -t 120 $DIR/$tdir/f $numfree || {
+               unlinkmany $DIR/$tdir/f $numfree
                error "create+open $numfree files in $DIR/$tdir failed"
+       }
        ulimit -n $ulimit_old
 
        # if createmany exits at 120s there will be fewer than $numfree files
@@ -4280,7 +4298,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"
@@ -4300,7 +4318,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"
@@ -4443,7 +4461,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 ||
@@ -4471,107 +4489,117 @@ test_54e() {
 }
 run_test 54e "console/tty device works in lustre ======================"
 
-#The test_55 used to be iopen test and it was removed by bz#24037.
-#run_test 55 "check iopen_connect_dentry() ======================"
-
-test_56a() {   # was test_56
-        rm -rf $DIR/$tdir
-        $SETSTRIPE -d $DIR
-        test_mkdir -p $DIR/$tdir/dir
-        NUMFILES=3
-        NUMFILESx2=$(($NUMFILES * 2))
-       for i in $(seq 1 $NUMFILES); do
-                touch $DIR/$tdir/file$i
-                touch $DIR/$tdir/dir/file$i
-        done
+test_56a() {
+       local numfiles=3
+       local dir=$DIR/$tdir
 
-        # test lfs getstripe with --recursive
-       FILENUM=$($GETSTRIPE --recursive $DIR/$tdir | grep -c obdidx)
-       [[ $FILENUM -eq $NUMFILESx2 ]] ||
-               error "$GETSTRIPE --recursive: found $FILENUM, not $NUMFILESx2"
-       FILENUM=$($GETSTRIPE $DIR/$tdir | grep -c obdidx)
-       [[ $FILENUM -eq $NUMFILES ]] ||
-               error "$GETSTRIPE $DIR/$tdir: found $FILENUM, not $NUMFILES"
-       echo "$GETSTRIPE --recursive passed."
+       rm -rf $dir
+       test_mkdir -p $dir/dir
+       for i in $(seq $numfiles); do
+               touch $dir/file$i
+               touch $dir/dir/file$i
+       done
+
+       local numcomp=$($LFS getstripe --component-count $dir)
+
+       [[ $numcomp == 0 ]] && numcomp=1
+
+       # test lfs getstripe with --recursive
+       local filenum=$($LFS getstripe -r $dir | egrep -c "obdidx|l_ost_idx")
+
+       [[ $filenum -eq $((numfiles * 2)) ]] ||
+               error "$LFS getstripe -r: found $filenum != $((numfiles * 2))"
+       filenum=$($LFS getstripe $dir | egrep -c "obdidx|l_ost_idx")
+       [[ $filenum -eq $numfiles ]] ||
+               error "$LFS getstripe $dir: found $filenum, not $numfiles"
+       echo "$LFS getstripe showed obdidx or l_ost_idx"
 
        # test lfs getstripe with file instead of dir
-       FILENUM=$($GETSTRIPE $DIR/$tdir/file1 | grep -c obdidx)
-       [[ $FILENUM -eq 1 ]] ||
-               error "$GETSTRIPE $DIR/$tdir/file1: found $FILENUM, not 1"
-       echo "$GETSTRIPE file1 passed."
+       filenum=$($LFS getstripe $dir/file1 | egrep -c "obdidx|l_ost_idx")
+       [[ $filenum -eq 1 ]] ||
+               error "$LFS getstripe $dir/file1: found $filenum, not 1"
+       echo "$LFS getstripe file1 passed"
 
        #test lfs getstripe with --verbose
-       [[ $($GETSTRIPE --verbose $DIR/$tdir |
-               grep -c lmm_magic) -eq $NUMFILES ]] ||
-               error "$GETSTRIPE --verbose $DIR/$tdir: want $NUMFILES"
-       [[ $($GETSTRIPE $DIR/$tdir | grep -c lmm_magic) -eq 0 ]] ||
-               error "$GETSTRIPE $DIR/$tdir: showed lmm_magic"
+       filenum=$($LFS getstripe --verbose $dir | grep -c lmm_magic)
+       [[ $filenum -eq $((numfiles * numcomp)) ]] ||
+               error "$LFS getstripe --verbose $dir: "\
+                     "got $filenum want $((numfiles * numcomp)) lmm_magic"
+       [[ $($LFS getstripe $dir | grep -c lmm_magic) -eq 0 ]] ||
+               error "$LFS getstripe $dir: showed lmm_magic"
 
        #test lfs getstripe with -v prints lmm_fid
-       [[ $($GETSTRIPE -v $DIR/$tdir | grep -c lmm_fid) -eq $NUMFILES ]] ||
-               error "$GETSTRIPE -v $DIR/$tdir: want $NUMFILES lmm_fid: lines"
-       [[ $($GETSTRIPE $DIR/$tdir | grep -c lmm_fid) -eq 0 ]] ||
-               error "$GETSTRIPE $DIR/$tdir: showed lmm_fid"
-       echo "$GETSTRIPE --verbose passed."
+       filenum=$($LFS getstripe -v $dir | grep -c lmm_fid)
+       [[ $filenum -eq $((numfiles * numcomp)) ]] ||
+               error "$LFS getstripe -v $dir: "\
+                     "got $filenum want $((numfiles * numcomp)) lmm_fid"
+       [[ $($LFS getstripe $dir | grep -c lmm_fid) -eq 0 ]] ||
+               error "$LFS getstripe $dir: showed lmm_fid by default"
+       echo "$LFS getstripe --verbose passed"
 
        #check for FID information
-       local fid1=$($GETSTRIPE --fid $DIR/$tdir/file1)
-       local fid2=$($GETSTRIPE --verbose $DIR/$tdir/file1 |
-                      awk '/lmm_fid: / { print $2 }')
-       local fid3=$($LFS path2fid $DIR/$tdir/file1)
+       local fid1=$($LFS getstripe --fid $dir/file1)
+       local fid2=$($LFS getstripe --verbose $dir/file1 |
+                    awk '/lmm_fid: / { print $2; exit; }')
+       local fid3=$($LFS path2fid $dir/file1)
+
        [ "$fid1" != "$fid2" ] &&
-               error "getstripe --fid $fid1 != getstripe --verbose $fid2"
+               error "getstripe --fid '$fid1' != getstripe --verbose '$fid2'"
        [ "$fid1" != "$fid3" ] &&
-               error "getstripe --fid $fid1 != lfs path2fid $fid3"
-       echo "$GETSTRIPE --fid passed."
+               error "getstripe --fid '$fid1' != lfs path2fid '$fid3'"
+       echo "$LFS getstripe --fid passed"
 
        #test lfs getstripe with --obd
-       $GETSTRIPE --obd wrong_uuid $DIR/$tdir 2>&1 |
-               grep -q "unknown obduuid" ||
-               error "$GETSTRIPE --obd wrong_uuid should return error message"
+       $LFS getstripe --obd wrong_uuid $dir 2>&1 | grep -q "unknown obduuid" ||
+               error "$LFS getstripe --obd wrong_uuid: should return error"
 
        [[ $OSTCOUNT -lt 2 ]] &&
-               skip_env "skipping other $GETSTRIPE --obd test" && return
-
-       OSTIDX=1
-       OBDUUID=$(ostuuid_from_index $OSTIDX)
-       FILENUM=$($GETSTRIPE -ir $DIR/$tdir | grep "^$OSTIDX\$" | wc -l)
-       FOUND=$($GETSTRIPE -r --obd $OBDUUID $DIR/$tdir | grep obdidx | wc -l)
-       [[ $FOUND -eq $FILENUM ]] ||
-               error "$GETSTRIPE --obd wrong: found $FOUND, expected $FILENUM"
-       [[ $($GETSTRIPE -r -v --obd $OBDUUID $DIR/$tdir |
-               sed '/^[         ]*'${OSTIDX}'[  ]/d' |
+               skip_env "skip '$LFS getstripe --obd' tests: $OSTCOUNT < 2" &&
+               return
+
+       local ostidx=1
+       local obduuid=$(ostuuid_from_index $ostidx)
+       local found=$($LFS getstripe -r --obd $obduuid $dir |
+                     egrep -c "obdidx|l_ost_idx")
+
+       filenum=$($LFS getstripe -ir $dir | grep "^$ostidx\$" | wc -l)
+       [[ $found -eq $filenum ]] ||
+               error "$LFS getstripe --obd: found $found expect $filenum"
+       [[ $($LFS getstripe -r -v --obd $obduuid $dir |
+               sed '/^[         ]*'${ostidx}'[  ]/d' |
                sed -n '/^[      ]*[0-9][0-9]*[  ]/p' | wc -l) -eq 0 ]] ||
-               error "$GETSTRIPE --obd: should not show file on other obd"
-       echo "$GETSTRIPE --obd passed"
+               error "$LFS getstripe --obd: should not show file on other obd"
+       echo "$LFS getstripe --obd passed"
 }
-run_test 56a "check $GETSTRIPE"
+run_test 56a "check $LFS getstripe"
 
 test_56b() {
-       test_mkdir $DIR/$tdir
-       NUMDIRS=3
-       for i in $(seq 1 $NUMDIRS); do
-               test_mkdir $DIR/$tdir/dir$i
+       local dir=$DIR/$tdir
+       local numdirs=3
+
+       test_mkdir $dir
+       for i in $(seq $numdirs); do
+               test_mkdir $dir/dir$i
        done
 
        # test lfs getdirstripe default mode is non-recursion, which is
        # different from lfs getstripe
-       dircnt=$($LFS getdirstripe $DIR/$tdir | grep -c lmv_stripe_count)
+       local dircnt=$($LFS getdirstripe $dir | grep -c lmv_stripe_count)
+
        [[ $dircnt -eq 1 ]] ||
                error "$LFS getdirstripe: found $dircnt, not 1"
-       dircnt=$($LFS getdirstripe --recursive $DIR/$tdir |
+       dircnt=$($LFS getdirstripe --recursive $dir |
                grep -c lmv_stripe_count)
-       [[ $dircnt -eq $((NUMDIRS + 1)) ]] ||
-               error "$LFS getdirstripe --recursive: found $dircnt, \
-                       not $((NUMDIRS + 1))"
+       [[ $dircnt -eq $((numdirs + 1)) ]] ||
+               error "$LFS getdirstripe -r: $dircnt, != $((numdirs + 1))"
 }
 run_test 56b "check $LFS getdirstripe"
 
 test_56c() {
        local ost_idx=0
        local ost_name=$(ostname_from_index $ost_idx)
-
        local old_status=$(ost_dev_status $ost_idx)
+
        [[ -z "$old_status" ]] ||
                { skip_env "OST $ost_name is in $old_status status"; return 0; }
 
@@ -4579,6 +4607,7 @@ test_56c() {
        sleep_maxage
 
        local new_status=$(ost_dev_status $ost_idx)
+
        [[ "$new_status" = "D" ]] ||
                error "OST $ost_name is in status of '$new_status', not 'D'"
 
@@ -4594,475 +4623,479 @@ run_test 56c "check 'lfs df' showing device status"
 NUMFILES=3
 NUMDIRS=3
 setup_56() {
-       local LOCAL_NUMFILES="$1"
-       local LOCAL_NUMDIRS="$2"
-       local MKDIR_PARAMS="$3"
-       local DIR_STRIPE_PARAMS="$4"
-
-       if [ ! -d "$TDIR" ] ; then
-               test_mkdir -p $DIR_STRIPE_PARAMS $TDIR
-               [ "$MKDIR_PARAMS" ] && $SETSTRIPE $MKDIR_PARAMS $TDIR
-               for i in `seq 1 $LOCAL_NUMFILES` ; do
-                       touch $TDIR/file$i
+       local local_tdir="$1"
+       local local_numfiles="$2"
+       local local_numdirs="$3"
+       local dir_params="$4"
+       local dir_stripe_params="$5"
+
+       if [ ! -d "$local_tdir" ] ; then
+               test_mkdir -p $dir_stripe_params $local_tdir
+               [ "$dir_params" ] && $LFS setstripe $dir_params $local_tdir
+               for i in $(seq $local_numfiles) ; do
+                       touch $local_tdir/file$i
                done
-               for i in `seq 1 $LOCAL_NUMDIRS` ; do
-                       test_mkdir $DIR_STRIPE_PARAMS $TDIR/dir$i
-                       for j in `seq 1 $LOCAL_NUMFILES` ; do
-                               touch $TDIR/dir$i/file$j
+               for i in $(seq $local_numdirs) ; do
+                       test_mkdir $dir_stripe_params $local_tdir/dir$i
+                       for j in $(seq $local_numfiles) ; do
+                               touch $local_tdir/dir$i/file$j
                        done
                done
        fi
 }
 
 setup_56_special() {
-       LOCAL_NUMFILES=$1
-       LOCAL_NUMDIRS=$2
-       setup_56 $1 $2
-       if [ ! -e "$TDIR/loop1b" ] ; then
-               for i in `seq 1 $LOCAL_NUMFILES` ; do
-                       mknod $TDIR/loop${i}b b 7 $i
-                       mknod $TDIR/null${i}c c 1 3
-                       ln -s $TDIR/file1 $TDIR/link${i}l
+       local local_tdir=$1
+       local local_numfiles=$2
+       local local_numdirs=$3
+
+       setup_56 $local_tdir $local_numfiles $local_numdirs
+
+       if [ ! -e "$local_tdir/loop${local_numfiles}b" ] ; then
+               for i in $(seq $local_numfiles) ; do
+                       mknod $local_tdir/loop${i}b b 7 $i
+                       mknod $local_tdir/null${i}c c 1 3
+                       ln -s $local_tdir/file1 $local_tdir/link${i}
                done
-               for i in `seq 1 $LOCAL_NUMDIRS` ; do
-                       mknod $TDIR/dir$i/loop${i}b b 7 $i
-                       mknod $TDIR/dir$i/null${i}c c 1 3
-                       ln -s $TDIR/dir$i/file1 $TDIR/dir$i/link${i}l
+               for i in $(seq $local_numdirs) ; do
+                       mknod $local_tdir/dir$i/loop${i}b b 7 $i
+                       mknod $local_tdir/dir$i/null${i}c c 1 3
+                       ln -s $local_tdir/dir$i/file1 $local_tdir/dir$i/link${i}
                done
        fi
 }
 
 test_56g() {
-        $SETSTRIPE -d $DIR
-
-        TDIR=$DIR/${tdir}g
-        setup_56 $NUMFILES $NUMDIRS
-
-        EXPECTED=$(($NUMDIRS + 2))
-        # test lfs find with -name
-        for i in $(seq 1 $NUMFILES) ; do
-                NUMS=$($LFIND -name "*$i" $TDIR | wc -l)
-                [ $NUMS -eq $EXPECTED ] ||
-                        error "lfs find -name \"*$i\" $TDIR wrong: "\
-                              "found $NUMS, expected $EXPECTED"
-        done
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+       local expected=$(($NUMDIRS + 2))
+
+       setup_56 $dir $NUMFILES $NUMDIRS
+
+       # test lfs find with -name
+       for i in $(seq $NUMFILES) ; do
+               local nums=$($LFS find -name "*$i" $dir | wc -l)
+
+               [ $nums -eq $expected ] ||
+                       error "lfs find -name '*$i' $dir wrong: "\
+                             "found $nums, expected $expected"
+       done
 }
-run_test 56g "check lfs find -name ============================="
+run_test 56g "check lfs find -name"
 
 test_56h() {
-        $SETSTRIPE -d $DIR
-
-        TDIR=$DIR/${tdir}g
-        setup_56 $NUMFILES $NUMDIRS
-
-        EXPECTED=$(((NUMDIRS + 1) * (NUMFILES - 1) + NUMFILES))
-        # test lfs find with ! -name
-        for i in $(seq 1 $NUMFILES) ; do
-                NUMS=$($LFIND ! -name "*$i" $TDIR | wc -l)
-                [ $NUMS -eq $EXPECTED ] ||
-                        error "lfs find ! -name \"*$i\" $TDIR wrong: "\
-                              "found $NUMS, expected $EXPECTED"
-        done
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+       local expected=$(((NUMDIRS + 1) * (NUMFILES - 1) + NUMFILES))
+
+       setup_56 $dir $NUMFILES $NUMDIRS
+
+       # test lfs find with ! -name
+       for i in $(seq $NUMFILES) ; do
+               local nums=$($LFS find ! -name "*$i" $dir | wc -l)
+
+               [ $nums -eq $expected ] ||
+                       error "lfs find ! -name '*$i' $dir wrong: "\
+                             "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'"
+       local dir=$DIR/$tdir
+
+       test_mkdir $dir
+
+       local cmd="$LFS find -ost $(ostuuid_from_index 0 $dir) $dir"
+       local 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
-       setup_56_special $NUMFILES $NUMDIRS
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+
+       setup_56_special $dir $NUMFILES $NUMDIRS
 
-       EXPECTED=$((NUMDIRS + 1))
-       CMD="$LFIND -type d $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       local expected=$((NUMDIRS + 1))
+       local cmd="$LFS find -type d $dir"
+       local nums=$($cmd | wc -l)
+
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56j "check lfs find -type d ============================="
+run_test 56j "check lfs find -type d"
 
 test_56k() {
-       TDIR=$DIR/${tdir}g
-       setup_56_special $NUMFILES $NUMDIRS
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+
+       setup_56_special $dir $NUMFILES $NUMDIRS
 
-       EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
-       CMD="$LFIND -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       local expected=$(((NUMDIRS + 1) * NUMFILES))
+       local cmd="$LFS find -type f $dir"
+       local nums=$($cmd | wc -l)
+
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56k "check lfs find -type f ============================="
+run_test 56k "check lfs find -type f"
 
 test_56l() {
-       TDIR=$DIR/${tdir}g
-       setup_56_special $NUMFILES $NUMDIRS
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+
+       setup_56_special $dir $NUMFILES $NUMDIRS
 
-       EXPECTED=$((NUMDIRS + NUMFILES))
-       CMD="$LFIND -type b $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       local expected=$((NUMDIRS + NUMFILES))
+       local cmd="$LFS find -type b $dir"
+       local nums=$($cmd | wc -l)
+
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56l "check lfs find -type b ============================="
+run_test 56l "check lfs find -type b"
 
 test_56m() {
-       TDIR=$DIR/${tdir}g
-       setup_56_special $NUMFILES $NUMDIRS
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+
+       setup_56_special $dir $NUMFILES $NUMDIRS
 
-       EXPECTED=$((NUMDIRS + NUMFILES))
-       CMD="$LFIND -type c $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       local expected=$((NUMDIRS + NUMFILES))
+       local cmd="$LFS find -type c $dir"
+       local nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56m "check lfs find -type c ============================="
+run_test 56m "check lfs find -type c"
 
 test_56n() {
-       TDIR=$DIR/${tdir}g
-       setup_56_special $NUMFILES $NUMDIRS
+       local dir=$DIR/d$(basetest $testnum)g.$TESTSUITE
+       setup_56_special $dir $NUMFILES $NUMDIRS
 
-       EXPECTED=$((NUMDIRS + NUMFILES))
-       CMD="$LFIND -type l $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       local expected=$((NUMDIRS + NUMFILES))
+       local cmd="$LFS find -type l $dir"
+       local nums=$($cmd | wc -l)
+
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56n "check lfs find -type l ============================="
+run_test 56n "check lfs find -type l"
 
 test_56o() {
-       TDIR=$DIR/${tdir}o
-       setup_56 $NUMFILES $NUMDIRS
-       utime $TDIR/file1 > /dev/null || error "utime (1)"
-       utime $TDIR/file2 > /dev/null || error "utime (2)"
-       utime $TDIR/dir1 > /dev/null || error "utime (3)"
-       utime $TDIR/dir2 > /dev/null || error "utime (4)"
-       utime $TDIR/dir1/file1 > /dev/null || error "utime (5)"
-       dd if=/dev/zero count=1 >> $TDIR/dir1/file1 && sync
-
-       EXPECTED=4
-       NUMS=`$LFIND -mtime +0 $TDIR | wc -l`
-       [ $NUMS -eq $EXPECTED ] || \
-               error "lfs find -mtime +0 $TDIR wrong: found $NUMS, expected $EXPECTED"
-
-       EXPECTED=12
-       CMD="$LFIND -mtime 0 $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-}
-run_test 56o "check lfs find -mtime for old files =========================="
+       local dir=$DIR/$tdir
+
+       setup_56 $dir $NUMFILES $NUMDIRS
+       utime $dir/file1 > /dev/null || error "utime (1)"
+       utime $dir/file2 > /dev/null || error "utime (2)"
+       utime $dir/dir1 > /dev/null || error "utime (3)"
+       utime $dir/dir2 > /dev/null || error "utime (4)"
+       utime $dir/dir1/file1 > /dev/null || error "utime (5)"
+       dd if=/dev/zero count=1 >> $dir/dir1/file1 && sync
+
+       local expected=4
+       local nums=$($LFS find -mtime +0 $dir | wc -l)
+
+       [ $nums -eq $expected ] ||
+               error "lfs find -mtime +0 $dir: found $nums expect $expected"
+
+       expected=12
+       cmd="$LFS find -mtime 0 $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+}
+run_test 56o "check lfs find -mtime for old files"
 
 test_56p() {
        [ $RUNAS_ID -eq $UID ] &&
                skip_env "RUNAS_ID = UID = $UID -- skipping" && return
 
-       TDIR=$DIR/${tdir}p
-       setup_56 $NUMFILES $NUMDIRS
+       local dir=$DIR/$tdir
+
+       setup_56 $dir $NUMFILES $NUMDIRS
+       chown $RUNAS_ID $dir/file* || error "chown $DIR/${tdir}g/file$i failed"
+
+       local expected=$NUMFILES
+       local cmd="$LFS find -uid $RUNAS_ID $dir"
+       local nums=$($cmd | wc -l)
 
-       chown $RUNAS_ID $TDIR/file* || error "chown $DIR/${tdir}g/file$i failed"
-       EXPECTED=$NUMFILES
-       CMD="$LFIND -uid $RUNAS_ID $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || \
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 
-       EXPECTED=$(((NUMFILES + 1) * NUMDIRS + 1))
-       CMD="$LFIND ! -uid $RUNAS_ID $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || \
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       expected=$(((NUMFILES + 1) * NUMDIRS + 1))
+       cmd="$LFS find ! -uid $RUNAS_ID $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56p "check lfs find -uid and ! -uid ==============================="
+run_test 56p "check lfs find -uid and ! -uid"
 
 test_56q() {
        [ $RUNAS_ID -eq $UID ] &&
                skip_env "RUNAS_ID = UID = $UID -- skipping" && return
 
-       TDIR=$DIR/${tdir}q
-       setup_56 $NUMFILES $NUMDIRS
+       local dir=$DIR/$tdir
+
+       setup_56 $dir $NUMFILES $NUMDIRS
+       chgrp $RUNAS_GID $dir/file* || error "chown $dir/file$i failed"
 
-       chgrp $RUNAS_GID $TDIR/file* || error "chown $TDIR/file$i failed"
+       local expected=$NUMFILES
+       local cmd="$LFS find -gid $RUNAS_GID $dir"
+       local nums=$($cmd | wc -l)
 
-       EXPECTED=$NUMFILES
-       CMD="$LFIND -gid $RUNAS_GID $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 
-       EXPECTED=$(( ($NUMFILES+1) * $NUMDIRS + 1))
-       CMD="$LFIND ! -gid $RUNAS_GID $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       expected=$(( ($NUMFILES+1) * $NUMDIRS + 1))
+       cmd="$LFS find ! -gid $RUNAS_GID $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
-run_test 56q "check lfs find -gid and ! -gid ==============================="
+run_test 56q "check lfs find -gid and ! -gid"
 
 test_56r() {
-       TDIR=$DIR/${tdir}r
-       setup_56 $NUMFILES $NUMDIRS
-
-       EXPECTED=12
-       CMD="$LFIND -size 0 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=0
-       CMD="$LFIND ! -size 0 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-       echo "test" > $TDIR/$tfile
-       echo "test2" > $TDIR/$tfile.2 && sync
-       EXPECTED=1
-       CMD="$LFIND -size 5 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=1
-       CMD="$LFIND -size +5 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=2
-       CMD="$LFIND -size +0 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=2
-       CMD="$LFIND ! -size -5 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=12
-       CMD="$LFIND -size -5 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-}
-run_test 56r "check lfs find -size works =========================="
-
-test_56s() { # LU-611
-       TDIR=$DIR/${tdir}s
-
-       #LU-9369
-       setup_56 0 $NUMDIRS
-       for i in $(seq 1 $NUMDIRS); do
-               $SETSTRIPE -c $((OSTCOUNT + 1)) $TDIR/dir$i/$tfile
+       local dir=$DIR/$tdir
+
+       setup_56 $dir $NUMFILES $NUMDIRS
+
+       local expected=12
+       local cmd="$LFS find -size 0 -type f $dir"
+       local nums=$($cmd | wc -l)
+
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+       expected=0
+       cmd="$LFS find ! -size 0 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+       echo "test" > $dir/$tfile
+       echo "test2" > $dir/$tfile.2 && sync
+       expected=1
+       cmd="$LFS find -size 5 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+       expected=1
+       cmd="$LFS find -size +5 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+       expected=2
+       cmd="$LFS find -size +0 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+       expected=2
+       cmd="$LFS find ! -size -5 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+       expected=12
+       cmd="$LFS find -size -5 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+}
+run_test 56r "check lfs find -size works"
+
+test_56s() { # LU-611 #LU-9369
+       [[ $OSTCOUNT -lt 2 ]] && skip "need at least 2 OSTs" && return 0
+
+       local dir=$DIR/$tdir
+       local onestripe=$(((NUMDIRS + 1) * NUMFILES))
+
+       setup_56 $dir $NUMFILES $NUMDIRS "-c 1"
+       for i in $(seq $NUMDIRS); do
+               $LFS setstripe -c $((OSTCOUNT + 1)) $dir/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
-               EXTRA=4
-       else
-               ONESTRIPE=$(((NUMDIRS + 1) * NUMFILES))
-               EXTRA=0
-       fi
+       local expected=$NUMDIRS
+       local cmd="$LFS find -c $OSTCOUNT $dir"
+       local nums=$($cmd | wc -l)
 
-       EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
-       CMD="$LFIND -stripe-count $OSTCOUNT -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || {
-               $GETSTRIPE -R $TDIR
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       [ $nums -eq $expected ] || {
+               $LFS getstripe -R $dir
+               error "'$cmd' wrong: found $nums, expected $expected"
        }
 
-       EXPECTED=$(((NUMDIRS + 1) * NUMFILES + EXTRA))
-       CMD="$LFIND -stripe-count +0 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || {
-               $GETSTRIPE -R $TDIR
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       expected=$((NUMDIRS + onestripe))
+       cmd="$LFS find -stripe-count +0 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] || {
+               $LFS getstripe -R $dir
+               error "'$cmd' wrong: found $nums, expected $expected"
        }
 
-       EXPECTED=$ONESTRIPE
-       CMD="$LFIND -stripe-count 1 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || {
-               $GETSTRIPE -R $TDIR
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       expected=$onestripe
+       cmd="$LFS find -stripe-count 1 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] || {
+               $LFS getstripe -R $dir
+               error "'$cmd' wrong: found $nums, expected $expected"
        }
 
-       CMD="$LFIND -stripe-count -2 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || {
-               $GETSTRIPE -R $TDIR
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       cmd="$LFS find -stripe-count -2 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] || {
+               $LFS getstripe -R $dir
+               error "'$cmd' wrong: found $nums, expected $expected"
        }
 
-       EXPECTED=0
-       CMD="$LFIND -stripe-count $((OSTCOUNT + 1)) -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] || {
-               $GETSTRIPE -R $TDIR
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       expected=0
+       cmd="$LFS find -stripe-count $((OSTCOUNT + 1)) -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] || {
+               $LFS getstripe -R $dir
+               error "'$cmd' wrong: found $nums, expected $expected"
        }
 }
 run_test 56s "check lfs find -stripe-count works"
 
-test_56t() { # LU-611
-       TDIR=$DIR/${tdir}t
+test_56t() { # LU-611 #LU-9369
+       local dir=$DIR/$tdir
 
-       #LU-9369
-       setup_56 0 $NUMDIRS
-       for i in $(seq 1 $NUMDIRS); do
-               $SETSTRIPE -S 4M $TDIR/dir$i/$tfile
+       setup_56 $dir 0 $NUMDIRS
+       for i in $(seq $NUMDIRS); do
+               $LFS setstripe -S 4M $dir/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"
+
+       local expected=$NUMDIRS
+       local cmd="$LFS find -S 4M $dir"
+       local nums=$($cmd | wc -l)
+
+       [ $nums -eq $expected ] || {
+               $LFS getstripe -R $dir
+               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}
-
-       EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
-       CMD="$LFIND -stripe-size 512k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-
-       CMD="$LFIND -stripe-size +320k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-
-       EXPECTED=$(((NUMDIRS + 1) * NUMFILES + 4))
-       CMD="$LFIND -stripe-size +200k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-
-       CMD="$LFIND -stripe-size -640k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-
-       EXPECTED=4
-       CMD="$LFIND -stripe-size 256k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-
-       CMD="$LFIND -stripe-size -320k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
-
-       EXPECTED=0
-       CMD="$LFIND -stripe-size 1024k -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       rm -rf $dir
+
+       setup_56 $dir $NUMFILES $NUMDIRS "--stripe-size 512k"
+
+       $LFS setstripe -S 256k $dir/$tfile.{0,1,2,3}
+
+       expected=$(((NUMDIRS + 1) * NUMFILES))
+       cmd="$LFS find -stripe-size 512k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       cmd="$LFS find -stripe-size +320k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       expected=$(((NUMDIRS + 1) * NUMFILES + 4))
+       cmd="$LFS find -stripe-size +200k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       cmd="$LFS find -stripe-size -640k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       expected=4
+       cmd="$LFS find -stripe-size 256k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       cmd="$LFS find -stripe-size -320k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       expected=0
+       cmd="$LFS find -stripe-size 1024k -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 }
 run_test 56t "check lfs find -stripe-size works"
 
 test_56u() { # LU-611
-       TDIR=$DIR/${tdir}u
-       setup_56 $NUMFILES $NUMDIRS "-i 0"
+       local dir=$DIR/$tdir
+
+       setup_56 $dir $NUMFILES $NUMDIRS "-i 0 -c 1"
 
        if [[ $OSTCOUNT -gt 1 ]]; then
-               $SETSTRIPE -i 1 $TDIR/$tfile.{0,1,2,3}
-               ONESTRIPE=4
+               $LFS setstripe -i 1 -c 1 $dir/$tfile.{0,1,2,3}
+               onestripe=4
        else
-               ONESTRIPE=0
+               onestripe=0
        fi
 
-       EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
-       CMD="$LFIND -stripe-index 0 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       local expected=$(((NUMDIRS + 1) * NUMFILES))
+       local cmd="$LFS find -stripe-index 0 -type f $dir"
+       local nums=$($cmd | wc -l)
 
-       EXPECTED=$ONESTRIPE
-       CMD="$LFIND -stripe-index 1 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 
-       CMD="$LFIND ! -stripe-index 0 -type f $TDIR"
-       NUMS=$($CMD | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       expected=$onestripe
+       cmd="$LFS find -stripe-index 1 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 
-       EXPECTED=0
+       cmd="$LFS find ! -stripe-index 0 -type f $dir"
+       nums=$($cmd | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
+
+       expected=0
        # This should produce an error and not return any files
-       CMD="$LFIND -stripe-index $OSTCOUNT -type f $TDIR"
-       NUMS=$($CMD 2>/dev/null | wc -l)
-       [ $NUMS -eq $EXPECTED ] ||
-               error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+       cmd="$LFS find -stripe-index $OSTCOUNT -type f $dir"
+       nums=$($cmd 2>/dev/null | wc -l)
+       [ $nums -eq $expected ] ||
+               error "'$cmd' wrong: found $nums, expected $expected"
 
        if [[ $OSTCOUNT -gt 1 ]]; then
-               EXPECTED=$(((NUMDIRS + 1) * NUMFILES + ONESTRIPE))
-               CMD="$LFIND -stripe-index 0,1 -type f $TDIR"
-               NUMS=$($CMD | wc -l)
-               [ $NUMS -eq $EXPECTED ] ||
-                       error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+               expected=$(((NUMDIRS + 1) * NUMFILES + onestripe))
+               cmd="$LFS find -stripe-index 0,1 -type f $dir"
+               nums=$($cmd | wc -l)
+               [ $nums -eq $expected ] ||
+                       error "'$cmd' wrong: found $nums, expected $expected"
        fi
 }
 run_test 56u "check lfs find -stripe-index works"
 
 test_56v() {
-    local MDT_IDX=0
+       local MDT_IDX=0
+       local dir=$DIR/$tdir
 
-    TDIR=$DIR/${tdir}v
-    rm -rf $TDIR
-    setup_56 $NUMFILES $NUMDIRS
+       setup_56 $dir $NUMFILES $NUMDIRS
 
-    UUID=$(mdtuuid_from_index $MDT_IDX $TDIR)
-    [ -z "$UUID" ] && error "mdtuuid_from_index cannot find MDT index $MDT_IDX"
+       UUID=$(mdtuuid_from_index $MDT_IDX $dir)
+       [ -z "$UUID" ] && error "mdtuuid_from_index cannot find MDT $MDT_IDX"
 
-    for file in $($LFIND -mdt $UUID $TDIR); do
-        file_mdt_idx=$($GETSTRIPE -M $file)
-        [ $file_mdt_idx -eq $MDT_IDX ] ||
-            error "'lfind -mdt $UUID' != 'getstripe -M' ($file_mdt_idx)"
-    done
+       for file in $($LFS find -mdt $UUID $dir); do
+               file_mdt_idx=$($LFS getstripe -M $file)
+               [ $file_mdt_idx -eq $MDT_IDX ] ||
+                       error "lfind -mdt $UUID != getstripe -M $file_mdt_idx"
+       done
 }
 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
+       local dir=$DIR/$tdir
 
-       rm -rf $TDIR || error "remove $TDIR failed"
-       setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT" "-c1"
+       setup_56 $dir $NUMFILES $NUMDIRS "-c $OSTCOUNT" "-c1"
 
-       local stripe_size
-       stripe_size=$($GETSTRIPE -S -d $TDIR) ||
-               error "$GETSTRIPE -S -d $TDIR failed"
+       local stripe_size=$($LFS getstripe -S -d $dir) ||
+               error "$LFS getstripe -S -d $dir 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 $required_space bytes, have $free_space KB" &&
+               skip_env "need $required_space, have $free_space kbytes" &&
                return
 
        local dd_bs=65536
@@ -5072,14 +5105,15 @@ test_56w() {
        local i
        local j
        local file
-       for i in $(seq 1 $NUMFILES); do
-               file=$TDIR/file$i
+
+       for i in $(seq $NUMFILES); do
+               file=$dir/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 $NUMDIRS); do
-               for j in $(seq $NUMFILES); do
-                       file=$TDIR/dir$i/file$j
+       for i in $(seq $NUMDIRS); do
+               for j in $(seq $NUMFILES); do
+                       file=$dir/dir$i/file$j
                        yes|dd bs=$dd_bs count=$dd_count of=$file &>/dev/null ||
                                error "write data into $file failed"
                done
@@ -5087,84 +5121,304 @@ test_56w() {
 
        # $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"
+               createmany -l$dir/dir1/file1 $dir/dir1/link 200 ||
+                       error "creating links to $dir/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"
+       local cmd="$LFS_MIGRATE -y -c $expected $dir/file1"
+
        echo "$cmd"
        eval $cmd || error "$cmd failed"
 
-       check_stripe_count $TDIR/file1 $expected
+       check_stripe_count $dir/file1 $expected
 
        if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.90) ];
        then
                # lfs_migrate file onto OST 0 if it is on OST 1, or onto
                # OST 1 if it is on OST 0. This file is small enough to
                # be on only one stripe.
-               file=$TDIR/migr_1_ost
+               file=$dir/migr_1_ost
                dd bs=$dd_bs count=1 if=/dev/urandom of=$file >/dev/null 2>&1 ||
                        error "write data into $file failed"
                local obdidx=$($LFS getstripe -i $file)
                local oldmd5=$(md5sum $file)
                local newobdidx=0
+
                [[ $obdidx -eq 0 ]] && newobdidx=1
                cmd="$LFS migrate -i $newobdidx $file"
                echo $cmd
                eval $cmd || error "$cmd failed"
+
                local realobdix=$($LFS getstripe -i $file)
                local newmd5=$(md5sum $file)
+
                [[ $newobdidx -ne $realobdix ]] &&
-                       error "new OST is different (was=$obdidx, wanted=$newobdidx, got=$realobdix)"
+                       error "new OST is different (was=$obdidx, "\
+                             "wanted=$newobdidx, got=$realobdix)"
                [[ "$oldmd5" != "$newmd5" ]] &&
                        error "md5sum differ: $oldmd5, $newmd5"
        fi
 
-    # lfs_migrate dir
-    cmd="$LFS_MIGRATE -y -c $expected $TDIR/dir1"
-    echo "$cmd"
-    eval $cmd || error "$cmd failed"
+       # lfs_migrate dir
+       cmd="$LFS_MIGRATE -y -c $expected $dir/dir1"
+       echo "$cmd"
+       eval $cmd || error "$cmd failed"
 
-    for j in $(seq 1 $NUMFILES); do
-        check_stripe_count $TDIR/dir1/file$j $expected
-    done
+       for j in $(seq $NUMFILES); do
+               check_stripe_count $dir/dir1/file$j $expected
+       done
 
-    # lfs_migrate works with lfs find
-    cmd="$LFIND -stripe_count $OSTCOUNT -type f $TDIR |
-         $LFS_MIGRATE -y -c $expected"
-    echo "$cmd"
-    eval $cmd || error "$cmd failed"
+       # lfs_migrate works with lfs find
+       cmd="$LFS find -stripe_count $OSTCOUNT -type f $dir |
+            $LFS_MIGRATE -y -c $expected"
+       echo "$cmd"
+       eval $cmd || error "$cmd failed"
 
-    for i in $(seq 2 $NUMFILES); do
-        check_stripe_count $TDIR/file$i $expected
-    done
-    for i in $(seq 2 $NUMDIRS); do
-        for j in $(seq 1 $NUMFILES); do
-            check_stripe_count $TDIR/dir$i/file$j $expected
-        done
-    done
+       for i in $(seq 2 $NUMFILES); do
+               check_stripe_count $dir/file$i $expected
+       done
+       for i in $(seq 2 $NUMDIRS); do
+               for j in $(seq $NUMFILES); do
+               check_stripe_count $dir/dir$i/file$j $expected
+               done
+       done
 }
 run_test 56w "check lfs_migrate -c stripe_count works"
 
+test_56wb() {
+       local file1=$DIR/$tdir/file1
+       local create_pool=false
+       local initial_pool=$($LFS getstripe -p $DIR)
+       local pool_list=()
+       local pool=""
+
+       echo -n "Creating test dir..."
+       test_mkdir $DIR/$tdir &> /dev/null || error "cannot create dir"
+       echo "done."
+
+       echo -n "Creating test file..."
+       touch $file1 || error "cannot create file"
+       echo "done."
+
+       echo -n "Detecting existing pools..."
+       while IFS='' read thispool; do
+               pool_list+=("$thispool")
+       done < <($LFS pool_list $MOUNT | awk -F '.' 'NR>=2 { print $2 }')
+
+       if [ ${#pool_list[@]} -gt 0 ]; then
+               echo "${pool_list[@]}"
+               for thispool in "${pool_list[@]}"; do
+                       if [[ -z "$initial_pool" ||
+                             "$initial_pool" != "$thispool" ]]; then
+                               pool="$thispool"
+                               echo "Using existing pool '$pool'"
+                               break
+                       fi
+               done
+       else
+               echo "none detected."
+       fi
+       if [ -z "$pool" ]; then
+               pool=${POOL:-testpool}
+               [ "$initial_pool" = "$pool" ] && pool="testpool2"
+               echo -n "Creating pool '$pool'..."
+               create_pool=true
+               pool_add $pool &> /dev/null ||
+                       error "pool_add failed"
+               echo "done."
+
+               echo -n "Adding target to pool..."
+               pool_add_targets $pool 0 0 1 &> /dev/null ||
+                       error "pool_add_targets failed"
+               echo "done."
+       fi
+
+       echo -n "Setting pool using -p option..."
+       $LFS_MIGRATE -y -q --no-rsync -p $pool $file1 &> /dev/null ||
+               error "migrate failed rc = $?"
+       echo "done."
+
+       echo -n "Verifying test file is in pool after migrating..."
+       [ "$($LFS getstripe -p $file1)" = $pool ] ||
+               error "file was not migrated to pool $pool"
+       echo "done."
+
+       echo -n "Removing test file from pool '$pool'..."
+       $LFS migrate $file1 &> /dev/null ||
+               error "cannot remove from pool"
+       [ "$($LFS getstripe -p $file1)" ] &&
+               error "pool still set"
+       echo "done."
+
+       echo -n "Setting pool using --pool option..."
+       $LFS_MIGRATE -y -q --no-rsync --pool $pool $file1 &> /dev/null ||
+               error "migrate failed rc = $?"
+       echo "done."
+
+       # Clean up
+       rm -f $file1
+       if $create_pool; then
+               destroy_test_pools 2> /dev/null ||
+                       error "destroy test pools failed"
+       fi
+}
+run_test 56wb "check lfs_migrate pool support"
+
+test_56wc() {
+       local file1="$DIR/$tdir/file 1"
+
+       echo -n "Creating test dir..."
+       test_mkdir $DIR/$tdir &> /dev/null || error "cannot create dir"
+       $LFS setstripe -S 1M -c 1 "$DIR/$tdir" &> /dev/null ||
+               error "cannot set stripe"
+       echo "done"
+
+       echo -n "Setting initial stripe for test file..."
+       $LFS setstripe -S 512K -c 1 "$file1" &> /dev/null ||
+               error "cannot set stripe"
+       [ $($LFS getstripe -S "$file1") -eq 524288 ] ||
+               error "stripe size not set"
+       echo "done."
+
+       # File currently set to -S 512K -c 1
+
+       # Ensure -c and -S options are rejected when -R is set
+       echo -n "Verifying incompatible options are detected..."
+       $LFS_MIGRATE -y -R -c 1 "$file1" &> /dev/null &&
+               error "incompatible -c and -R options not detected"
+       $LFS_MIGRATE -y -R -S 1M "$file1" &> /dev/null &&
+               error "incompatible -S and -R options not detected"
+       echo "done."
+
+       # Ensure unrecognized options are passed through to 'lfs migrate'
+       echo -n "Verifying -S option is passed through to lfs migrate..."
+       $LFS_MIGRATE -y -S 1M "$file1" &> /dev/null ||
+               error "migration failed"
+       [ $($LFS getstripe -S "$file1") -eq 1048576 ] ||
+               error "file was not restriped"
+       echo "done."
+
+       # File currently set to -S 1M -c 1
+
+       # Ensure long options are supported
+       echo -n "Verifying long options supported..."
+       $LFS_MIGRATE -y --non-block "$file1" &> /dev/null ||
+               error "long option without argument not supported"
+       $LFS_MIGRATE -y --stripe-size 512K "$file1" &> /dev/null ||
+               error "long option with argument not supported"
+       [ $($LFS getstripe -S "$file1") -eq 524288 ] ||
+               error "file not restriped with --stripe-size option"
+       echo "done."
+
+       # File currently set to -S 512K -c 1
+
+       if [ "$OSTCOUNT" -gt 1 ]; then
+               echo -n "Verifying explicit stripe count can be set..."
+               $LFS_MIGRATE -y -c 2 "$file1" &> /dev/null ||
+                       error "migrate failed"
+               [ $($LFS getstripe -c "$file1") -eq 2 ] ||
+                       error "file not restriped to explicit count"
+               echo "done."
+       fi
+
+       # File currently set to -S 512K -c 1 or -S 512K -c 2
+
+       # Ensure parent striping is used if -R is set, and no stripe
+       # count or size is specified
+       echo -n "Setting stripe for parent directory..."
+       $LFS setstripe -S 1M -c 1 "$DIR/$tdir" &> /dev/null ||
+               error "cannot set stripe"
+       echo "done."
+
+       echo -n "Verifying restripe option uses parent stripe settings..."
+       $LFS_MIGRATE -y -R "$file1" &> /dev/null ||
+               error "migrate failed"
+       [ $($LFS getstripe -S "$file1") -eq 1048576 ] ||
+               error "file not restriped to parent settings"
+       [ $($LFS getstripe -c "$file1") -eq 1 ] ||
+               error "file not restriped to parent settings"
+       echo "done."
+
+       # File currently set to -S 1M -c 1
+
+       # Ensure striping is preserved if -R is not set, and no stripe
+       # count or size is specified
+       echo -n "Verifying striping size preserved when not specified..."
+       $LFS setstripe -S 2M -c 1 "$DIR/$tdir" &> /dev/null ||
+               error "cannot set stripe on parent directory"
+       $LFS_MIGRATE -y "$file1" &> /dev/null ||
+               error "migrate failed"
+       [ $($LFS getstripe -S "$file1") -eq 1048576 ] ||
+               error "file was restriped"
+       echo "done."
+
+       # Ensure file name properly detected when final option has no argument
+       echo -n "Verifying file name properly detected..."
+       $LFS_MIGRATE -y "$file1" &> /dev/null ||
+               error "file name interpreted as option argument"
+       echo "done."
+
+       # Clean up
+       rm -f "$file1"
+}
+run_test 56wc "check unrecognized options for lfs_migrate are passed through"
+
+test_56wd() {
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
+       local file1=$DIR/$tdir/file1
+
+       echo -n "Creating test dir..."
+       test_mkdir $DIR/$tdir || error "cannot create dir"
+       echo "done."
+
+       echo -n "Creating test file..."
+       touch $file1
+       echo "done."
+
+       # Ensure 'lfs migrate' will fail by using a non-existent option,
+       # and make sure rsync is not called to recover
+       echo -n "Make sure --no-rsync option works..."
+       $LFS_MIGRATE -y --no-rsync --invalid-opt $file1 2>&1 |
+               grep -q 'refusing to fall back to rsync' ||
+               error "rsync was called with --no-rsync set"
+       echo "done."
+
+       # Ensure rsync is called without trying 'lfs migrate' first
+       echo -n "Make sure --rsync option works..."
+       $LFS_MIGRATE -y --rsync --invalid-opt $file1 2>&1 |
+               grep -q 'falling back to rsync' &&
+               error "lfs migrate was called with --rsync set"
+       echo "done."
+
+       echo -n "Make sure --rsync and --no-rsync options are exclusive..."
+       $LFS_MIGRATE -y --rsync --no-rsync $file1 2>&1 |
+               grep -q 'at the same time' ||
+               error "--rsync and --no-rsync accepted concurrently"
+       echo "done."
+
+       # Clean up
+       rm -f $file1
+}
+run_test 56wd "check lfs_migrate --rsync and --no-rsync work"
+
 test_56x() {
        check_swap_layouts_support && return 0
-       [[ $OSTCOUNT -lt 2 ]] &&
-               skip_env "need 2 OST, skipping test" && return
-
-       local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $dir0 || error "creating dir $dir0"
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
+       local dir=$DIR/$tdir
        local ref1=/etc/passwd
-       local file1=$dir0/file1
+       local file1=$dir/file1
 
-       $SETSTRIPE -c 2 $file1
+       test_mkdir $dir || error "creating dir $dir"
+       $LFS setstripe -c 2 $file1
        cp $ref1 $file1
        $LFS migrate -c 1 $file1 || error "migrate failed rc = $?"
-       stripe=$($GETSTRIPE -c $file1)
+       stripe=$($LFS getstripe -c $file1)
        [[ $stripe == 1 ]] || error "stripe of $file1 is $stripe != 1"
        cmp $file1 $ref1 || error "content mismatch $file1 differs from $ref1"
 
@@ -5175,19 +5429,21 @@ 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"
+       local dir=$DIR/$tdir/$testnum
+
+       test_mkdir -p $dir
 
        local ref1=/etc/passwd
-       local file1=$dir0/file1
+       local file1=$dir/file1
 
-       $SETSTRIPE -c 2 $file1
+       $LFS setstripe -c 2 $file1
        cp $ref1 $file1
        $LFS migrate --block -c 1 $file1 || error "migrate failed rc = $?"
-       local stripe=$($GETSTRIPE -c $file1)
+
+       local stripe=$($LFS getstripe -c $file1)
+
        [[ $stripe == 1 ]] || error "stripe of $file1 is $stripe != 1"
        cmp $file1 $ref1 || error "content mismatch $file1 differs from $ref1"
 
@@ -5196,34 +5452,140 @@ test_56xa() {
 }
 run_test 56xa "lfs migration --block support"
 
+check_migrate_links() {
+       local dir="$1"
+       local file1="$dir/file1"
+       local begin="$2"
+       local count="$3"
+       local total_count=$(($begin + $count - 1))
+       local symlink_count=10
+       local uniq_count=10
+
+       if [ ! -f "$file1" ]; then
+               echo -n "creating initial file..."
+               $LFS setstripe -c 1 -S "512k" "$file1" ||
+                       error "cannot setstripe initial file"
+               echo "done"
+
+               echo -n "creating symlinks..."
+               for s in $(seq 1 $symlink_count); do
+                       ln -s "$file1" "$dir/slink$s" ||
+                               error "cannot create symlinks"
+               done
+               echo "done"
+
+               echo -n "creating nonlinked files..."
+               createmany -o "$dir/uniq" 1 10 &> /dev/null ||
+                       error "cannot create nonlinked files"
+               echo "done"
+       fi
+
+       # create hard links
+       if [ ! -f "$dir/file$total_count" ]; then
+               echo -n "creating hard links $begin:$total_count..."
+               createmany -l"$file1" "$dir/file" "$begin" "$count" &>  \
+                       /dev/null || error "cannot create hard links"
+               echo "done"
+       fi
+
+       echo -n "checking number of hard links listed in xattrs..."
+       local fid=$($LFS getstripe -F "$file1")
+       local paths=($($LFS fid2path "$MOUNT" "$fid" 2> /dev/null))
+
+       echo "${#paths[*]}"
+       if [ ${#paths[*]} -lt $total_count -a "$begin" -eq 2  ]; then
+                       echo "hard link list has unexpected size, skipping test"
+                       return 0
+       fi
+       if [ ${#paths[*]} -ge $total_count -a "$begin" -ne 2  ]; then
+                       error "link names should exceed xattrs size"
+       fi
+
+       echo -n "migrating files..."
+       local migrate_out=$($LFS_MIGRATE -y -S '1m' $dir)
+       local rc=$?
+       [ $rc -eq 0 ] || error "migrate failed rc = $rc"
+       echo "done"
+
+       # make sure all links have been properly migrated
+       echo -n "verifying files..."
+       fid=$($LFS getstripe -F "$file1") ||
+               error "cannot get fid for file $file1"
+       for i in $(seq 2 $total_count); do
+               local fid2=$($LFS getstripe -F $dir/file$i)
+
+               [ "$fid2" == "$fid" ] ||
+                       error "migrated hard link has mismatched FID"
+       done
+
+       # make sure hard links were properly detected, and migration was
+       # performed only once for the entire link set; nonlinked files should
+       # also be migrated
+       local actual=$(grep -c 'done migrate' <<< "$migrate_out")
+       local expected=$(($uniq_count + 1))
+
+       [ "$actual" -eq  "$expected" ] ||
+               error "hard links individually migrated ($actual != $expected)"
+
+       # make sure the correct number of hard links are present
+       local hardlinks=$(stat -c '%h' "$file1")
+
+       [ $hardlinks -eq $total_count ] ||
+               error "num hard links $hardlinks != $total_count"
+       echo "done"
+
+       return 0
+}
+
+test_56xb() {
+       local dir="$DIR/$tdir"
+
+       test_mkdir "$dir" || error "cannot create dir $dir"
+
+       echo "testing lfs migrate mode when all links fit within xattrs"
+       LFS_MIGRATE_RSYNC=false check_migrate_links "$dir" 2 99
+
+       echo "testing rsync mode when all links fit within xattrs"
+       LFS_MIGRATE_RSYNC=true check_migrate_links "$dir" 2 99
+
+       echo "testing lfs migrate mode when all links do not fit within xattrs"
+       LFS_MIGRATE_RSYNC=false check_migrate_links "$dir" 101 100
+
+       echo "testing rsync mode when all links do not fit within xattrs"
+       LFS_MIGRATE_RSYNC=true check_migrate_links "$dir" 101 100
+
+       # clean up
+       rm -rf $dir
+}
+run_test 56xb "lfs migration hard link support"
+
 test_56y() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
                skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" &&
                return
 
        local res=""
-       local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $dir0 || error "creating dir $dir0"
-       local f1=$dir0/file1
-       local f2=$dir0/file2
+       local dir=$DIR/$tdir
+       local f1=$dir/file1
+       local f2=$dir/file2
 
+       test_mkdir -p $dir || error "creating dir $dir"
        touch $f1 || error "creating std file $f1"
        $MULTIOP $f2 H2c || error "creating released file $f2"
 
        # a directory can be raid0, so ask only for files
-       res=$($LFIND $dir0 -L raid0 -type f | wc -l)
+       res=$($LFS find $dir -L raid0 -type f | wc -l)
        [[ $res == 2 ]] || error "search raid0: found $res files != 2"
 
-       res=$($LFIND $dir0 \! -L raid0 -type f | wc -l)
+       res=$($LFS find $dir \! -L raid0 -type f | wc -l)
        [[ $res == 0 ]] || error "search !raid0: found $res files != 0"
 
        # only files can be released, so no need to force file search
-       res=$($LFIND $dir0 -L released)
+       res=$($LFS find $dir -L released)
        [[ $res == $f2 ]] || error "search released: found $res != $f2"
 
-       res=$($LFIND $dir0 \! -L released)
+       res=$($LFS find $dir -type f \! -L released)
        [[ $res == $f1 ]] || error "search !released: found $res != $f1"
-
 }
 run_test 56y "lfs find -L raid0|released"
 
@@ -5234,18 +5596,22 @@ test_56z() { # LU-4824
        #   errors out
        # - If errors are encountered during the search, it should not terminate
        #   early
+       local dir=$DIR/$tdir
        local i
-       test_mkdir $DIR/$tdir
+
+       test_mkdir $dir
        for i in d{0..9}; do
-               test_mkdir $DIR/$tdir/$i
+               test_mkdir $dir/$i
        done
-       touch $DIR/$tdir/d{0..9}/$tfile
-       $LFS find $DIR/non_existent_dir $DIR/$tdir &&
+       touch $dir/d{0..9}/$tfile
+       $LFS find $DIR/non_existent_dir $dir &&
                error "$LFS find did not return an error"
        # Make a directory unsearchable. This should NOT be the last entry in
        # directory order.  Arbitrarily pick the 6th entry
-       chmod 700 $($LFS find $DIR/$tdir -type d | sed '6!d')
-       local count=$($RUNAS $LFS find $DIR/non_existent $DIR/$tdir | wc -l)
+       chmod 700 $($LFS find $dir -type d | sed '6!d')
+
+       local count=$($RUNAS $LFS find $DIR/non_existent $dir | wc -l)
+
        # The user should be able to see 10 directories and 9 files
        [ $count == 19 ] || error "$LFS find did not continue after error"
 }
@@ -5254,21 +5620,85 @@ run_test 56z "lfs find should continue after an error"
 test_56aa() { # LU-5937
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
-       mkdir $DIR/$tdir
-       $LFS setdirstripe -c$MDSCOUNT $DIR/$tdir/striped_dir
+       local dir=$DIR/$tdir
+
+       mkdir $dir
+       $LFS setdirstripe -c$MDSCOUNT $dir/striped_dir
 
-       createmany -o $DIR/$tdir/striped_dir/${tfile}- 1024
-       local dirs=$(lfs find --size +8k $DIR/$tdir/)
+       createmany -o $dir/striped_dir/${tfile}- 1024
+       local dirs=$(lfs find --size +8k $dir/)
 
        [ -n "$dirs" ] || error "lfs find --size wrong under striped dir"
 }
 run_test 56aa "lfs find --size under striped dir"
 
+test_56ba() {
+       # Create composite files with one component
+       local dir=$DIR/$tdir
+
+       setup_56 $dir/1Mfiles 5 1 "--component-end 1M"
+       # Create composite files with three components
+       setup_56 $dir/2Mfiles 5 2 "-E 2M -E 4M -E 6M"
+       # Create non-composite files
+       createmany -o $dir/${tfile}- 10
+
+       local nfiles=$($LFS find --component-end 1M --type f $dir | wc -l)
+
+       [[ $nfiles == 10 ]] ||
+               error "lfs find -E 1M found $nfiles != 10 files"
+
+       nfiles=$($LFS find ! -E 1M --type f $dir | wc -l)
+       [[ $nfiles == 25 ]] ||
+               error "lfs find ! -E 1M found $nfiles != 25 files"
+
+       # All files have a component that starts at 0
+       nfiles=$($LFS find --component-start 0 --type f $dir | wc -l)
+       [[ $nfiles == 35 ]] ||
+               error "lfs find --component-start 0 - $nfiles != 35 files"
+
+       nfiles=$($LFS find --component-start 2M --type f $dir | wc -l)
+       [[ $nfiles == 15 ]] ||
+               error "lfs find --component-start 2M - $nfiles != 15 files"
+
+       # All files created here have a componenet that does not starts at 2M
+       nfiles=$($LFS find ! --component-start 2M --type f $dir | wc -l)
+       [[ $nfiles == 35 ]] ||
+               error "lfs find ! --component-start 2M - $nfiles != 35 files"
+
+       # Find files with a specified number of components
+       local nfiles=$($LFS find --component-count 3 --type f $dir | wc -l)
+       [[ $nfiles == 15 ]] ||
+               error "lfs find --component-count 3 - $nfiles != 15 files"
+
+       # Remember non-composite files have a component count of zero
+       local nfiles=$($LFS find --component-count 0 --type f $dir | wc -l)
+       [[ $nfiles == 10 ]] ||
+               error "lfs find --component-count 0 - $nfiles != 10 files"
+
+       nfiles=$($LFS find ! --component-count 3 --type f $dir | wc -l)
+       [[ $nfiles == 20 ]] ||
+               error "lfs find ! --component-count 3 - $nfiles != 20 files"
+
+       # All files have a flag called "init"
+       local nfiles=$($LFS find --component-flags init --type f $dir | wc -l)
+       [[ $nfiles == 35 ]] ||
+               error "lfs find --component-flags init - $nfiles != 35 files"
+
+       # Multi-component files will have a component not initialized
+       local nfiles=$($LFS find ! --component-flags init --type f $dir | wc -l)
+       [[ $nfiles == 15 ]] ||
+               error "lfs find !--component-flags init - $nfiles != 15 files"
+
+       rm -rf $dir
+
+}
+run_test 56ba "test lfs find --component-end, -start, -count, and -flags"
+
 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
 
@@ -5289,7 +5719,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
 
@@ -5301,7 +5731,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))
@@ -5377,7 +5807,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
@@ -5609,25 +6039,111 @@ 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"
+
+# this does exactly what osc_request.c:osc_announce_cached() does in
+# order to calculate max amount of grants to ask from server
+want_grant() {
+       local tgt=$1
+
+       local page_size=$(get_page_size client)
+
+       local nrpages=$($LCTL get_param -n osc.${tgt}.max_pages_per_rpc)
+       local rpc_in_flight=$($LCTL get_param -n osc.${tgt}.max_rpcs_in_flight)
+
+       ((rpc_in_flight ++));
+       nrpages=$((nrpages * rpc_in_flight))
+
+       local dirty_max_pages=$($LCTL get_param -n osc.${tgt}.max_dirty_mb)
+
+       dirty_max_pages=$((dirty_max_pages * 1024 * 1024 / page_size))
+
+       [[ $dirty_max_pages -gt $nrpages ]] && nrpages=$dirty_max_pages
+       local undirty=$((nrpages * page_size))
+
+       local max_extent_pages
+       max_extent_pages=$($LCTL get_param osc.${tgt}.import |
+           grep grant_max_extent_size | awk '{print $2}')
+       max_extent_pages=$((max_extent_pages / page_size))
+       local nrextents=$(((nrpages + max_extent_pages - 1) / max_extent_pages))
+       local grant_extent_tax
+       grant_extent_tax=$($LCTL get_param osc.${tgt}.import |
+           grep grant_extent_tax | awk '{print $2}')
+
+       undirty=$((undirty + nrextents * grant_extent_tax))
+
+       echo $undirty
+}
+
+# this is size of unit for grant allocation. It should be equal to
+# what tgt_grant.c:tgt_grant_chunk() calculates
+grant_chunk() {
+       local tgt=$1
+       local max_brw_size
+       local grant_extent_tax
+
+       max_brw_size=$($LCTL get_param osc.${tgt}.import |
+           grep max_brw_size | awk '{print $2}')
+
+       grant_extent_tax=$($LCTL get_param osc.${tgt}.import |
+           grep grant_extent_tax | awk '{print $2}')
+
+       echo $(((max_brw_size + grant_extent_tax) * 2))
+}
+
+test_64d() {
+       [ $(lustre_version_code ost1) -lt $(version_code 2.10.56) ] &&
+               skip "OST < 2.10.55 doesn't limit grants enough" && return 0
+
+       local tgt=$($LCTL dl | grep "0000-osc-[^mM]" | awk '{print $4}')
+
+       [[ $($LCTL get_param osc.${tgt}.import |
+                   grep "connect_flags:.*grant_param") ]] || \
+                       { skip "no grant_param connect flag"; return; }
+
+       local olddebug=$($LCTL get_param -n debug 2> /dev/null)
+
+       $LCTL set_param debug="$OLDDEBUG" 2> /dev/null || true
+
+       local max_cur_granted=$(($(want_grant $tgt) + $(grant_chunk $tgt)))
+
+       $SETSTRIPE $DIR/$tfile -i 0 -c 1
+       dd if=/dev/zero of=$DIR/$tfile bs=1M count=1000 &
+       ddpid=$!
+
+       while true
+       do
+               local cur_grant=$($LCTL get_param -n osc.${tgt}.cur_grant_bytes)
+               if [[ $cur_grant -gt $max_cur_granted ]]
+               then
+                       kill $ddpid
+                       error "cur_grant $cur_grant > $max_cur_granted"
+               fi
+               kill -0 $ddpid
+               [[ $? -ne 0 ]] && break;
+               sleep 2
+       done
+       $LCTL set_param debug="$olddebug" 2> /dev/null || true
+}
+run_test 64d "check grant limit exceed"
 
 # 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 ||
@@ -5639,21 +6155,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)
 
@@ -5674,7 +6189,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" ||
@@ -5682,38 +6197,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 ===================="
 
@@ -5743,6 +6258,8 @@ run_test 65ic "new find on -1 default directory striping"
 
 test_65j() { # bug6367
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       [ $($LFS getstripe --component-count $MOUNT) -gt 1 ] &&
+               skip "don't delete default PFL layout" && return
        sync; sleep 1
        # if we aren't already remounting for each test, do so for this test
        if [ "$CLEANUP" = ":" -a "$I_MOUNTED" = "yes" ]; then
@@ -5755,7 +6272,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
@@ -5840,23 +6357,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
 }
@@ -5895,7 +6395,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!"
 }
@@ -6031,21 +6531,9 @@ num_inodes() {
        awk '/lustre_inode_cache/ {print $2; exit}' /proc/slabinfo
 }
 
-get_inode_slab_tunables() {
-       awk '/lustre_inode_cache/ {print $9," ",$10," ",$11; exit}' /proc/slabinfo
-}
-
-set_inode_slab_tunables() {
-       echo "lustre_inode_cache $1" > /proc/slabinfo
-}
-
 test_76() { # Now for bug 20433, added originally in bug 1443
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       local SLAB_SETTINGS=$(get_inode_slab_tunables)
        local CPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
-       # we cannot set limit below 1 which means 1 inode in each
-       # per-cpu cache is still allowed
-       set_inode_slab_tunables "1 1 0"
        cancel_lru_locks osc
        BEFORE_INODES=$(num_inodes)
        echo "before inodes: $BEFORE_INODES"
@@ -6068,7 +6556,6 @@ test_76() { # Now for bug 20433, added originally in bug 1443
                        error "inode slab grew from $BEFORE_INODES to $AFTER_INODES"
                fi
        done
-       set_inode_slab_tunables "$SLAB_SETTINGS"
 }
 run_test 76 "confirm clients recycle inodes properly ===="
 
@@ -6218,7 +6705,7 @@ test_77c() {
        [[ "$orig_cksum" == "$dump_cksum" ]] ||
                error "dump content does not match on Client"
 
-       $check_ost || skip "No need to check cksum dump on OSS"
+       $check_ost || { skip "No need to check cksum dump on OSS"; return 0; }
 
        # check cksum dump on OSS
        ost_file=$(do_facet ost1 ls ${ost_file_prefix}\*)
@@ -6491,7 +6978,7 @@ test_82() { # LU-1031
        wait $MULTIPID1
        wait $MULTIPID2
 }
-run_test 82 "Basic grouplock test ==============================="
+run_test 82 "Basic grouplock test"
 
 test_83() {
        local sfile="/boot/System.map-$(uname -r)"
@@ -6504,68 +6991,36 @@ test_83() {
 }
 run_test 83 "Short write in ptask ==============================="
 
-test_99a() {
+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
@@ -6621,7 +7076,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
@@ -6652,10 +7107,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
@@ -6710,8 +7165,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
@@ -6841,7 +7295,7 @@ test_101e() {
        done
 
        echo "Cancel LRU locks on lustre client to flush the client cache"
-       cancel_lru_locks osc
+       cancel_lru_locks $OSC
 
        echo "Reset readahead stats"
        $LCTL set_param -n llite.*.read_ahead_stats 0
@@ -6933,13 +7387,19 @@ test_101g() {
        local list=$(comma_list $(osts_nodes))
        local p="$TMP/$TESTSUITE-$TESTNAME.parameters"
        local brw_size="obdfilter.*.brw_size"
+       local ostver=$(lustre_version_code ost1)
+       local cliver=$(lustre_version_code client)
 
        $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
-               [ $(lustre_version_code ost1) -ge $(version_code 2.9.52) ] &&
-                       suffix="M"
+       if [ $ostver -ge $(version_code 2.8.52) -o \
+            \( $ostver -ge $(version_code 2.7.17) -a \
+               $ostver -lt $(version_code 2.7.50) \) ] &&
+          [ $cliver -ge $(version_code 2.8.52) -o \
+            \( $cliver -ge $(version_code 2.7.17) -a \
+               $cliver -lt $(version_code 2.7.50) \) ]; then
+               [ $ostver -ge $(version_code 2.9.52) ] && suffix="M"
                if [[ $orig_mb -lt 16 ]]; then
                        save_lustre_params $osts "$brw_size" > $p
                        do_nodes $list $LCTL set_param -n $brw_size=16$suffix ||
@@ -6966,7 +7426,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
@@ -6988,7 +7448,7 @@ setup_test102() {
        done
 
        cd $DIR
-       $1 $TAR cf $TMP/f102.tar $tdir --xattrs
+       $1 tar cf $TMP/f102.tar $tdir --xattrs
 }
 
 cleanup_test102() {
@@ -7065,7 +7525,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"
@@ -7096,8 +7556,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 ||
@@ -7147,39 +7607,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
@@ -7249,14 +7705,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 ==="
@@ -7264,28 +7718,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"
 
@@ -7464,7 +7918,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 ||
@@ -7559,43 +8013,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
@@ -7675,11 +8092,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
@@ -7692,10 +8109,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"
 }
@@ -7736,10 +8153,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"
@@ -7779,18 +8195,15 @@ test_115() {
        local nfiles
        local facets=$(get_facets OST)
 
-       save_lustre_params client \
-               "osc.*OST*.max_rpcs_in_flight" > $save_params
-       save_lustre_params $facets \
-               "ost.OSS.ost_io.threads_max" >> $save_params
+       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"
+       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.
@@ -7798,7 +8211,7 @@ test_115() {
 
        # Start I/O.
        local WTL=${WTL:-"$LUSTRE/tests/write_time_limit"}
-       mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        for i in $(seq $nfiles); do
                local file=$DIR/$tdir/${tfile}-$i
                $LFS setstripe -c -1 -i 0 $file
@@ -7888,7 +8301,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 |
@@ -8405,7 +8818,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 || \
@@ -8425,16 +8838,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
 }
@@ -8442,6 +8855,34 @@ run_test 118m "fdatasync dir ========="
 
 [ "$SLOW" = "no" ] && [ -n "$OLD_RESENDCOUNT" ] && set_resend_count $OLD_RESENDCOUNT
 
+test_118n()
+{
+       local begin
+       local end
+
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       remote_ost_nodsh && skip "remote OSTs with nodsh" && return
+
+       # Sleep to avoid a cached response.
+       #define OBD_STATFS_CACHE_SECONDS 1
+       sleep 2
+
+       # Inject a 10 second delay in the OST_STATFS handler.
+       #define OBD_FAIL_OST_STATFS_DELAY 0x242
+       set_nodes_failloc "$(osts_nodes)" 0x242
+
+       begin=$SECONDS
+       stat --file-system $MOUNT > /dev/null
+       end=$SECONDS
+
+       set_nodes_failloc "$(osts_nodes)" 0
+
+       if ((end - begin > 20)); then
+           error "statfs took $((end - begin)) seconds, expected 10"
+       fi
+}
+run_test 118n "statfs() sends OST_STATFS requests in parallel"
+
 test_119a() # bug 11737
 {
         BSIZE=$((512 * 1024))
@@ -8460,7 +8901,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"
@@ -8509,9 +8950,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
@@ -8541,13 +8982,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}')
@@ -8570,12 +9011,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
@@ -8600,9 +9041,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
@@ -8628,12 +9069,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 &&
@@ -8671,14 +9112,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
@@ -8711,17 +9152,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" |
@@ -8771,14 +9212,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
@@ -8854,7 +9295,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
@@ -8874,20 +9315,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)
@@ -8976,8 +9417,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)
 
@@ -8994,8 +9435,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"
@@ -9017,9 +9457,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"
@@ -9053,13 +9492,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
@@ -9071,7 +9510,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))
 
@@ -9084,19 +9523,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"
@@ -9234,7 +9676,7 @@ 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
@@ -9269,7 +9711,7 @@ test_129() {
                        check_mds_dmesg '"has reached"' ||
                                error_exit "reached message should be output"
 
-                       [ $has_warning -eq 0 ] &&
+                       [ $has_warning = "false" ] &&
                                error_exit "warning message should be output"
 
                        dirsize=$(stat -c%s "$DIR/$tdir")
@@ -9316,7 +9758,7 @@ test_130a() {
                skip "ORI-366/LU-1941: FIEMAP unimplemented on ZFS" && return
        [ $RC != 0 ] && error "filefrag $fm_file failed"
 
-       filefrag_op=$(filefrag -ve $fm_file |
+       filefrag_op=$(filefrag -ve -k $fm_file |
                        sed -n '/ext:/,/found/{/ext:/d; /found/d; p}')
        lun=$($GETSTRIPE -i $fm_file)
 
@@ -9348,8 +9790,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" &&
@@ -9367,7 +9808,7 @@ test_130b() {
                error "dd failed on $fm_file"
 
        filefrag -ves $fm_file || error "filefrag $fm_file failed"
-       filefrag_op=$(filefrag -ve $fm_file |
+       filefrag_op=$(filefrag -ve -k $fm_file |
                        sed -n '/ext:/,/found/{/ext:/d; /found/d; p}')
 
        last_lun=$(echo $filefrag_op | cut -d: -f5 |
@@ -9409,8 +9850,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" &&
@@ -9427,7 +9867,7 @@ test_130c() {
                        error "dd failed on $fm_file"
 
        filefrag -ves $fm_file || error "filefrag $fm_file failed"
-       filefrag_op=$(filefrag -ve $fm_file |
+       filefrag_op=$(filefrag -ve -k $fm_file |
                sed -n '/ext:/,/found/{/ext:/d; /found/d; p}')
 
        last_lun=$(echo $filefrag_op | cut -d: -f5 |
@@ -9476,8 +9916,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" &&
@@ -9491,12 +9930,12 @@ 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"
-       filefrag_op=$(filefrag -ve $fm_file |
+       filefrag_op=$(filefrag -ve -k $fm_file |
                        sed -n '/ext:/,/found/{/ext:/d; /found/d; p}')
 
        last_lun=$(echo $filefrag_op | cut -d: -f5 |
@@ -9524,7 +9963,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"
@@ -9538,8 +9977,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
@@ -9559,7 +9997,7 @@ test_130e() {
        done
 
        filefrag -ves $fm_file || error "filefrag $fm_file failed"
-       filefrag_op=$(filefrag -ve $fm_file |
+       filefrag_op=$(filefrag -ve -k $fm_file |
                        sed -n '/ext:/,/found/{/ext:/d; /found/d; p}')
 
        last_lun=$(echo $filefrag_op | cut -d: -f5 |
@@ -9601,6 +10039,27 @@ test_130e() {
 }
 run_test 130e "FIEMAP (test continuation FIEMAP calls)"
 
+test_130f() {
+       filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
+       [ -n "$filefrag_op" ] && skip "filefrag does not support FIEMAP" &&
+               return
+
+       local fm_file=$DIR/$tfile
+       $MULTIOP $fm_file oO_RDWR:O_CREAT:O_LOV_DELAY_CREATE:T33554432c ||
+               error "multiop create with lov_delay_create on $fm_file"
+
+       filefrag -ves $fm_file || error "filefrag $fm_file failed"
+       filefrag_extents=$(filefrag -vek $fm_file |
+                          awk '/extents? found/ { print $2 }')
+       if [[ "$filefrag_extents" != "0" ]]; then
+               error "FIEMAP on $fm_file failed; " \
+                     "returned $filefrag_extents expected 0"
+       fi
+
+       rm -f $fm_file
+}
+run_test 130f "FIEMAP (unstriped file)"
+
 # Test for writev/readv
 test_131a() {
        rwv -f $DIR/$tfile -w -n 3 524288 1048576 1572864 ||
@@ -9754,11 +10213,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
@@ -9767,22 +10226,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 ========================================"
 
@@ -10000,10 +10460,11 @@ test_133g() {
        echo "proc_dirs='$proc_dirs'"
        [ -n "$proc_dirs" ] || error "no proc_dirs on $HOSTNAME"
        find $proc_dirs \
+               -ignore_readdir_race \
                -type f \
                -not -name force_lbug \
                -not -name changelog_mask \
-               -exec badarea_io '{}' \; &> /dev/null ||
+               -exec badarea_io '{}' \; ||
                error "find $proc_dirs failed"
 
        local facet
@@ -10015,10 +10476,11 @@ test_133g() {
                echo "${facet}_proc_dirs='$facet_proc_dirs'"
                [ -z "$facet_proc_dirs" ] && error "no proc_dirs on $facet"
                do_facet $facet find $facet_proc_dirs \
+                       -ignore_readdir_race \
                        -type f \
                        -not -name force_lbug \
                        -not -name changelog_mask \
-                       -exec badarea_io '{}' \\\; &> /dev/null ||
+                       -exec badarea_io '{}' \\\; ||
                                error "$facet find $facet_proc_dirs failed"
        done
 
@@ -10136,32 +10598,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"
 
@@ -10177,31 +10639,31 @@ test_150() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        local TF="$TMP/$tfile"
 
-        dd if=/dev/urandom of=$TF bs=6096 count=1 || error "dd failed"
-        cp $TF $DIR/$tfile
-        cancel_lru_locks osc
-        cmp $TF $DIR/$tfile || error "$TMP/$tfile $DIR/$tfile differ"
-        remount_client $MOUNT
-        df -P $MOUNT
-        cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (remount)"
+       dd if=/dev/urandom of=$TF bs=6096 count=1 || error "dd failed"
+       cp $TF $DIR/$tfile
+       cancel_lru_locks $OSC
+       cmp $TF $DIR/$tfile || error "$TMP/$tfile $DIR/$tfile differ"
+       remount_client $MOUNT
+       df -P $MOUNT
+       cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (remount)"
 
-        $TRUNCATE $TF 6000
-        $TRUNCATE $DIR/$tfile 6000
-        cancel_lru_locks osc
-        cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (truncate1)"
+       $TRUNCATE $TF 6000
+       $TRUNCATE $DIR/$tfile 6000
+       cancel_lru_locks $OSC
+       cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (truncate1)"
 
-        echo "12345" >>$TF
-        echo "12345" >>$DIR/$tfile
-        cancel_lru_locks osc
-        cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (append1)"
+       echo "12345" >>$TF
+       echo "12345" >>$DIR/$tfile
+       cancel_lru_locks $OSC
+       cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (append1)"
 
-        echo "12345" >>$TF
-        echo "12345" >>$DIR/$tfile
-        cancel_lru_locks osc
-        cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (append2)"
+       echo "12345" >>$TF
+       echo "12345" >>$DIR/$tfile
+       cancel_lru_locks $OSC
+       cmp $TF $DIR/$tfile || error "$TF $DIR/$tfile differ (append2)"
 
-        rm -f $TF
-        true
+       rm -f $TF
+       true
 }
 run_test 150 "truncate/append tests"
 
@@ -10209,12 +10671,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"
@@ -10539,6 +11001,8 @@ test_154a() {
        dot_lustre_fid_permission_check "$fid" $DIR ||
                error "dot lustre permission check $fid failed"
 
+       ls -a $MOUNT | grep "\.lustre" && error ".lustre should not be listed"
+
        rm -rf $MOUNT/.lustre && error ".lustre is not allowed to be unlinked"
 
        touch $MOUNT/.lustre/file &&
@@ -10732,7 +11196,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
 
@@ -10748,7 +11213,7 @@ test_155_small_load() {
     dd if=/dev/urandom of=$temp bs=6096 count=1 || \
         error "dd of=$temp bs=6096 count=1 failed"
     cp $temp $file
-    cancel_lru_locks osc
+    cancel_lru_locks $OSC
     cmp $temp $file || error "$temp $file differ"
 
     $TRUNCATE $temp 6000
@@ -11050,9 +11515,8 @@ test_156() {
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
 
-       rm -f $file
        restore_lustre_params < $p
-       rm -f $p
+       rm -f $p $file
 }
 run_test 156 "Verification of tunables"
 
@@ -11322,9 +11786,189 @@ test_160e() {
 }
 run_test 160e "changelog negative testing"
 
+cleanup_160f() {
+       trap 0
+       do_facet $SINGLEMDS $LCTL set_param fail_loc=0 fail_val=0
+       echo "Deregistering changelog client $CL_USER"
+       do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister $CL_USER
+       echo "Deregistering changelog client $CL_USER2"
+       do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister $CL_USER2
+       restore_lustre_params < $save_params
+       rm -f $save_params
+}
+
+test_160f() {
+       # do_facet $SINGLEMDS $LCTL set_param mdd.$MDT0.changelog_gc=1
+       # should be set by default
+
+       local CL_USERS="mdd.$MDT0.changelog_users"
+       local GET_CL_USERS="do_facet $SINGLEMDS $LCTL get_param -n $CL_USERS"
+       local save_params="$TMP/sanity-$TESTNAME.parameters"
+
+       save_lustre_params $SINGLEMDS \
+               "mdd.$MDT0.changelog_max_idle_time" > $save_params
+       save_lustre_params $SINGLEMDS \
+               "mdd.$MDT0.changelog_min_gc_interval" >> $save_params
+       save_lustre_params $SINGLEMDS \
+               "mdd.$MDT0.changelog_min_free_cat_entries" >> $save_params
+
+       trap cleanup_160f EXIT
+
+       # Create a user
+       CL_USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
+               changelog_register -n)
+       echo "Registered as changelog user $CL_USER"
+       CL_USER2=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
+               changelog_register -n)
+       echo "Registered as changelog user $CL_USER2"
+       $GET_CL_USERS | grep -q $CL_USER ||
+               error "User $CL_USER not found in changelog_users"
+       $GET_CL_USERS | grep -q $CL_USER2 ||
+               error "User $CL_USER2 not found in changelog_users"
+
+       # generate some changelogs to accumulate
+       mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+       touch $DIR/$tdir/$tfile || error "touch $DIR/$tdir/$tfile failed"
+       touch $DIR/$tdir/${tfile}2 || error "touch $DIR/$tdir/${tfile}2 failed"
+       rm -f $DIR/$tdir/$tfile || error "rm -f $tfile failed"
+
+       # check changelogs have been generated
+       nbcl=$($LFS changelog $MDT0 | wc -l)
+       [[ $nbcl -eq 0 ]] && error "no changelogs found"
+
+       do_facet $SINGLEMDS $LCTL set_param \
+               mdd.$MDT0.changelog_max_idle_time=10
+       do_facet $SINGLEMDS $LCTL set_param \
+               mdd.$MDT0.changelog_min_gc_interval=2
+       do_facet $SINGLEMDS $LCTL set_param \
+               mdd.$MDT0.changelog_min_free_cat_entries=3
+
+       # simulate changelog catalog almost full
+#define OBD_FAIL_CAT_FREE_RECORDS                  0x1313
+       do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1313
+       do_facet $SINGLEMDS $LCTL set_param fail_val=3
+
+       sleep 6
+       USER_REC1=$($GET_CL_USERS | awk "\$1 == \"$CL_USER\" {print \$2}")
+       $LFS changelog_clear $MDT0 $CL_USER $(($USER_REC1 + 2))
+       USER_REC2=$($GET_CL_USERS | awk "\$1 == \"$CL_USER\" {print \$2}")
+       echo "verifying user clear: $(( $USER_REC1 + 2 )) == $USER_REC2"
+       [ $USER_REC2 == $(($USER_REC1 + 2)) ] ||
+               error "user index expected $(($USER_REC1 + 2)) is $USER_REC2"
+       sleep 5
+
+       # generate one more changelog to trigger fail_loc
+       rm -rf $DIR/$tdir || error "rm -rf $tdir failed"
+
+       # ensure gc thread is done
+       wait_update_facet $SINGLEMDS \
+                         "ps -e -o comm= | grep chlg_gc_thread" "" 20
+
+       # check user still registered
+       $GET_CL_USERS | grep -q $CL_USER ||
+               error "User $CL_USER not found in changelog_users"
+       # check user2 unregistered
+       $GET_CL_USERS | grep -q $CL_USER2 &&
+               error "User $CL_USER2 still found in changelog_users"
+
+       # check changelogs are present and starting at $USER_REC2 + 1
+       FIRST_REC=$($LFS changelog $MDT0 | head -n1 | awk '{print $1}')
+       echo "verifying min purge: $(( $USER_REC2 + 1 )) == $FIRST_REC"
+       [ $FIRST_REC == $(($USER_REC2 + 1)) ] ||
+               error "first index should be $(($USER_REC2 + 1)) is $FIRST_REC"
+
+       cleanup_160f
+}
+run_test 160f "changelog garbage collect (timestamped users)"
+
+test_160g() {
+       # do_facet $SINGLEMDS $LCTL set_param mdd.$MDT0.changelog_gc=1
+       # should be set by default
+
+       local CL_USERS="mdd.$MDT0.changelog_users"
+       local GET_CL_USERS="do_facet $SINGLEMDS $LCTL get_param -n $CL_USERS"
+       local save_params="$TMP/sanity-$TESTNAME.parameters"
+
+       save_lustre_params $SINGLEMDS \
+               "mdd.$MDT0.changelog_max_idle_indexes" > $save_params
+       save_lustre_params $SINGLEMDS \
+               "mdd.$MDT0.changelog_min_gc_interval" >> $save_params
+       save_lustre_params $SINGLEMDS \
+               "mdd.$MDT0.changelog_min_free_cat_entries" >> $save_params
+
+       trap cleanup_160f EXIT
+
+#define OBD_FAIL_TIME_IN_CHLOG_USER                 0x1314
+       do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1314
+
+       # Create a user
+       CL_USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
+               changelog_register -n)
+       echo "Registered as changelog user $CL_USER"
+       CL_USER2=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
+               changelog_register -n)
+       echo "Registered as changelog user $CL_USER2"
+       $GET_CL_USERS | grep -q $CL_USER ||
+               error "User $CL_USER not found in changelog_users"
+       $GET_CL_USERS | grep -q $CL_USER2 ||
+               error "User $CL_USER2 not found in changelog_users"
+
+       # generate some changelogs to accumulate
+       mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+       touch $DIR/$tdir/$tfile || error "touch $DIR/$tdir/$tfile failed"
+       touch $DIR/$tdir/${tfile}2 || error "touch $DIR/$tdir/${tfile}2 failed"
+       rm -f $DIR/$tdir/$tfile || error "rm -f $tfile failed"
+
+       # check changelogs have been generated
+       nbcl=$($LFS changelog $MDT0 | wc -l)
+       [[ $nbcl -eq 0 ]] && error "no changelogs found"
+
+       do_facet $SINGLEMDS $LCTL set_param \
+               mdd.$MDT0.changelog_max_idle_indexes=$((nbcl - 1))
+       do_facet $SINGLEMDS $LCTL set_param \
+               mdd.$MDT0.changelog_min_gc_interval=2
+       do_facet $SINGLEMDS $LCTL set_param \
+               mdd.$MDT0.changelog_min_free_cat_entries=3
+
+       # simulate changelog catalog almost full
+#define OBD_FAIL_CAT_FREE_RECORDS                  0x1313
+       do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1313
+       do_facet $SINGLEMDS $LCTL set_param fail_val=3
+
+       USER_REC1=$($GET_CL_USERS | awk "\$1 == \"$CL_USER\" {print \$2}")
+       $LFS changelog_clear $MDT0 $CL_USER $(($USER_REC1 + 3))
+       USER_REC2=$($GET_CL_USERS | awk "\$1 == \"$CL_USER\" {print \$2}")
+       echo "verifying user clear: $(( $USER_REC1 + 3 )) == $USER_REC2"
+       [ $USER_REC2 == $(($USER_REC1 + 3)) ] ||
+               error "user index expected $(($USER_REC1 + 3)) is $USER_REC2"
+
+       # generate one more changelog to trigger fail_loc
+       rm -rf $DIR/$tdir || error "rm -rf $tdir failed"
+
+       # ensure gc thread is done
+       wait_update_facet $SINGLEMDS \
+                         "ps -e -o comm= | grep chlg_gc_thread" "" 20
+
+       # check user still registered
+       $GET_CL_USERS | grep -q $CL_USER ||
+               error "User $CL_USER not found in changelog_users"
+       # check user2 unregistered
+       $GET_CL_USERS | grep -q $CL_USER2 &&
+               error "User $CL_USER2 still found in changelog_users"
+
+       # check changelogs are present and starting at $USER_REC2 + 1
+       FIRST_REC=$($LFS changelog $MDT0 | head -n1 | awk '{print $1}')
+       echo "verifying min purge: $(( $USER_REC2 + 1 )) == $FIRST_REC"
+       [ $FIRST_REC == $(($USER_REC2 + 1)) ] ||
+               error "first index should be $(($USER_REC2 + 1)) is $FIRST_REC"
+
+       cleanup_160f
+}
+run_test 160g "changelog garbage collect (old users)"
+
 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
@@ -11696,16 +12340,17 @@ run_test 169 "parallel read and truncate should not deadlock"
 
 test_170() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        $LCTL clear    # bug 18514
-        $LCTL debug_daemon start $TMP/${tfile}_log_good
-        touch $DIR/$tfile
-        $LCTL debug_daemon stop
-        sed -e "s/^...../a/g" $TMP/${tfile}_log_good > $TMP/${tfile}_log_bad ||
-               error "sed failed to read log_good"
 
-        $LCTL debug_daemon start $TMP/${tfile}_log_good
-        rm -rf $DIR/$tfile
-        $LCTL debug_daemon stop
+       $LCTL clear     # bug 18514
+       $LCTL debug_daemon start $TMP/${tfile}_log_good
+       touch $DIR/$tfile
+       $LCTL debug_daemon stop
+       sed -e "s/^...../a/g" $TMP/${tfile}_log_good > $TMP/${tfile}_log_bad ||
+               error "sed failed to read log_good"
+
+       $LCTL debug_daemon start $TMP/${tfile}_log_good
+       rm -rf $DIR/$tfile
+       $LCTL debug_daemon stop
 
         $LCTL df $TMP/${tfile}_log_bad > $TMP/${tfile}_log_bad.out 2>&1 ||
                error "lctl df log_bad failed"
@@ -11896,7 +12541,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
@@ -11973,7 +12618,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
@@ -11995,6 +12640,8 @@ test_184a() {
 
        cmp $ref1 $file2 || error "content compare failed ($ref1 != $file2)"
        cmp $ref2 $file1 || error "content compare failed ($ref2 != $file1)"
+
+       lfsck_verify_pfid $file1 $file2 || error "PFID are not transferred"
 }
 run_test 184a "Basic layout swap"
 
@@ -12240,8 +12887,12 @@ test_200() {
        local test_path=$POOL_ROOT/$POOL_DIR_NAME
        local file_dir=$POOL_ROOT/file_tst
        local subdir=$test_path/subdir
-
        local rc=0
+
+       if ! combined_mgs_mds ; then
+               mount_mgs_client
+       fi
+
        while : ; do
                # former test_200a test_200b
                pool_add $POOL                          || { rc=$? ; break; }
@@ -12261,7 +12912,7 @@ test_200() {
                pool_create_files $POOL $file_dir $files "$ost_list" \
                                                        || { rc=$? ; break; }
                # former test_200g test_200h
-               pool_lfs_df $POOL                       || { rc=$? ; break; }
+               pool_lfs_df $POOL                       || { rc=$? ; break; }
                pool_file_rel_path $POOL $test_path     || { rc=$? ; break; }
 
                # former test_201a test_201b test_201c
@@ -12269,11 +12920,15 @@ test_200() {
 
                local f=$test_path/$tfile
                pool_remove_all_targets $POOL $f        || { rc=$? ; break; }
-               pool_remove $POOL $f                    || { rc=$? ; break; }
+               pool_remove $POOL $f                    || { rc=$? ; break; }
                break
        done
 
        destroy_test_pools
+
+       if ! combined_mgs_mds ; then
+               umount_mgs_client
+       fi
        return $rc
 }
 run_test 200 "OST pools"
@@ -12297,99 +12952,83 @@ check_default_stripe_attr() {
                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
@@ -12730,16 +13369,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,
@@ -12849,7 +13484,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"
 
@@ -12972,6 +13606,10 @@ test_220() { #LU-325
 
        $LFS df -i
 
+       if ! combined_mgs_mds ; then
+               mount_mgs_client
+       fi
+
        do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=-1
        #define OBD_FAIL_OST_ENOINO              0x229
        do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0x229
@@ -13002,10 +13640,16 @@ test_220() { #LU-325
        do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=0
        do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0
 
-       do_facet mgs $LCTL pool_remove $FSNAME.$TESTNAME $OST || return 4
-       do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME || return 5
+       do_facet mgs $LCTL pool_remove $FSNAME.$TESTNAME $OST ||
+               error "$LCTL pool_remove $FSNAME.$TESTNAME $OST failed"
+       do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME ||
+               error "$LCTL pool_destroy $FSNAME.$TESTNAME failed"
        echo "unlink $MDSOBJS files @$next_id..."
-       unlinkmany $DIR/$tdir/f $MDSOBJS || return 6
+       unlinkmany $DIR/$tdir/f $MDSOBJS || error "unlinkmany failed"
+
+       if ! combined_mgs_mds ; then
+               umount_mgs_client
+       fi
 }
 run_test 220 "preallocated MDS objects still used if ENOSPC from OST"
 
@@ -13024,25 +13668,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
-}
-run_test 222a "AGL for ls should not trigger CLIO lock failure ================"
+       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"
 
 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
@@ -13051,21 +13695,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 ======================="
 
@@ -13177,8 +13821,6 @@ test_225b () {
              skip_env "Need to mount OST to test" && return
        fi
 
-       [ $MDSCOUNT -ge 2 ] &&
-               skip "skipping now for more than one MDT" && return
        local mds=$(facet_host $SINGLEMDS)
        local target=$(do_nodes $mds 'lctl dl' | \
                       awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}")
@@ -13280,7 +13922,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
@@ -13322,7 +13964,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
@@ -13372,7 +14014,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
@@ -13430,7 +14072,7 @@ test_229() { # LU-2482, LU-3448
        $GETSTRIPE -v $DIR/$tfile
 
        local pattern=$($GETSTRIPE -L $DIR/$tfile)
-       [ X"$pattern" = X"80000001" ] || error "pattern error ($pattern)"
+       [ X"$pattern" = X"released" ] || error "pattern error ($pattern)"
 
        local stripe_count=$($GETSTRIPE -c $DIR/$tfile) || error "getstripe"
        [ $stripe_count -eq 2 ] || error "stripe count not 2 ($stripe_count)"
@@ -13927,19 +14569,44 @@ test_231b() {
 }
 run_test 231b "must not assert on fully utilized OST request buffer"
 
-test_232() {
+test_232a() {
        mkdir -p $DIR/$tdir
+       $LFS setstripe -c1 -i0 $DIR/$tdir/$tfile
+
        #define OBD_FAIL_LDLM_OST_LVB            0x31c
-       $LCTL set_param fail_loc=0x31c
+       do_facet ost1 $LCTL set_param fail_loc=0x31c
 
        # ignore dd failure
        dd if=/dev/zero of=$DIR/$tdir/$tfile bs=1M count=1 || true
 
-       $LCTL set_param fail_loc=0
+       do_facet ost1 $LCTL set_param fail_loc=0
        umount_client $MOUNT || error "umount failed"
        mount_client $MOUNT || error "mount failed"
+       stop ost1 || error "cannot stop ost1"
+       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS || error "cannot start ost1"
 }
-run_test 232 "failed lock should not block umount"
+run_test 232a "failed lock should not block umount"
+
+test_232b() {
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -c1 -i0 $DIR/$tdir/$tfile
+       dd if=/dev/zero of=$DIR/$tdir/$tfile bs=1M count=1
+       sync
+       cancel_lru_locks osc
+
+       #define OBD_FAIL_LDLM_OST_LVB            0x31c
+       do_facet ost1 $LCTL set_param fail_loc=0x31c
+
+       # ignore failure
+       $LFS data_version $DIR/$tdir/$tfile || true
+
+       do_facet ost1 $LCTL set_param fail_loc=0
+       umount_client $MOUNT || error "umount failed"
+       mount_client $MOUNT || error "mount failed"
+       stop ost1 || error "cannot stop ost1"
+       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS || error "cannot start ost1"
+}
+run_test 232b "failed data version lock should not block umount"
 
 test_233a() {
        [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.64) ] ||
@@ -13977,17 +14644,8 @@ test_234() {
        touch $DIR/$tdir/$tfile || error "touch failed"
        # OBD_FAIL_LLITE_XATTR_ENOMEM
        $LCTL set_param fail_loc=0x1405
-       # output of the form: attr 2 4 44 3 fc13 x86_64
-       V=($(IFS=".-" rpm -q attr))
-       if [[ ${V[1]} > 2 || ${V[2]} > 4 || ${V[3]} > 44 ||
-             ${V[1]} = 2 && ${V[2]} = 4 && ${V[3]} = 44 && ${V[4]} > 6 ]]; then
-               # attr pre-2.4.44-7 had a bug with rc
-               # LU-3703 - SLES 11 and FC13 clients have older attr
-               getfattr -n user.attr $DIR/$tdir/$tfile &&
-                       error "getfattr should have failed with ENOMEM"
-       else
-               skip "LU-3703: attr version $(getfattr --version) too old"
-       fi
+       getfattr -n user.attr $DIR/$tdir/$tfile &&
+               error "getfattr should have failed with ENOMEM"
        $LCTL set_param fail_loc=0x0
        rm -rf $DIR/$tdir
 
@@ -14015,7 +14673,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
@@ -14085,9 +14743,10 @@ test_239() {
        mkdir -p $DIR/$tdir
        createmany -o $DIR/$tdir/f- 5000
        unlinkmany $DIR/$tdir/f- 5000
-       do_nodes $list "lctl set_param -n osp*.*.sync_changes 1"
-       changes=$(do_nodes $list "lctl get_param -n osc.*MDT*.sync_changes \
-                       osc.*MDT*.sync_in_flight" | calc_sum)
+       [ $(lustre_version_code $SINGLEMDS) -gt $(version_code 2.10.53) ] &&
+               do_nodes $list "lctl set_param -n osp.*.force_sync=1"
+       changes=$(do_nodes $list "lctl get_param -n osp.*MDT*.sync_changes \
+                       osp.*MDT*.sync_in_flight" | calc_sum)
        [ "$changes" -eq 0 ] || error "$changes not synced"
 }
 run_test 239 "osp_sync test"
@@ -14140,7 +14799,7 @@ run_test 240 "race between ldlm enqueue and the connection RPC (no ASSERT)"
 test_241_bio() {
        for LOOP in $(seq $1); do
                dd if=$DIR/$tfile of=/dev/null bs=40960 count=1 2>/dev/null
-               cancel_lru_locks osc || true
+               cancel_lru_locks $OSC || true
        done
 }
 
@@ -14154,7 +14813,7 @@ test_241_dio() {
 test_241a() { # was test_241
        dd if=/dev/zero of=$DIR/$tfile count=1 bs=40960
        ls -la $DIR/$tfile
-       cancel_lru_locks osc
+       cancel_lru_locks $OSC
        test_241_bio 1000 &
        PID=$!
        test_241_dio 1000
@@ -14188,14 +14847,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"
@@ -14242,6 +14901,14 @@ test_246() { # LU-7371
 }
 run_test 246 "Read file of size 4095 should return right length"
 
+cleanup_247() {
+       local submount=$1
+
+       trap 0
+       umount_client $submount
+       rmdir $submount
+}
+
 test_247a() {
        lctl get_param -n mdc.$FSNAME-MDT0000*.import |
                grep -q subtree ||
@@ -14253,11 +14920,11 @@ test_247a() {
        mkdir -p $submount || error "mkdir $submount failed"
        FILESET="$FILESET/$tdir" mount_client $submount ||
                error "mount $submount failed"
+       trap "cleanup_247 $submount" EXIT
        echo foo > $submount/$tfile || error "write $submount/$tfile failed"
        [ $(cat $MOUNT/$tdir/$tfile) = "foo" ] ||
                error "read $MOUNT/$tdir/$tfile failed"
-       umount_client $submount || error "umount $submount failed"
-       rmdir $submount
+       cleanup_247 $submount
 }
 run_test 247a "mount subdir as fileset"
 
@@ -14284,12 +14951,12 @@ test_247c() {
 
        mkdir -p $MOUNT/$tdir/dir1
        mkdir -p $submount || error "mkdir $submount failed"
+       trap "cleanup_247 $submount" EXIT
        FILESET="$FILESET/$tdir" mount_client $submount ||
                error "mount $submount failed"
        local fid=$($LFS path2fid $MOUNT/)
        $LFS fid2path $submount $fid && error "fid2path should fail"
-       umount_client $submount || error "umount $submount failed"
-       rmdir $submount
+       cleanup_247 $submount
 }
 run_test 247c "running fid2path outside root"
 
@@ -14303,10 +14970,10 @@ test_247d() {
        mkdir -p $submount || error "mkdir $submount failed"
        FILESET="$FILESET/$tdir" mount_client $submount ||
                error "mount $submount failed"
+       trap "cleanup_247 $submount" EXIT
        local fid=$($LFS path2fid $submount/dir1)
        $LFS fid2path $submount $fid || error "fid2path should succeed"
-       umount_client $submount || error "umount $submount failed"
-       rmdir $submount
+       cleanup_247 $submount
 }
 run_test 247d "running fid2path inside root"
 
@@ -14342,12 +15009,13 @@ test_248() {
        # small read with fast read enabled
        $LCTL set_param -n llite.*.fast_read=1
        local t_fast=$(dd if=$DIR/$tfile of=/dev/null bs=4k 2>&1 |
-               awk '/copied/ { print $6 }')
-
+               egrep -o '([[:digit:]\.\,e-]+) s' | cut -d's' -f1 |
+               sed -e 's/,/./' -e 's/[eE]+*/\*10\^/')
        # small read with fast read disabled
        $LCTL set_param -n llite.*.fast_read=0
        local t_slow=$(dd if=$DIR/$tfile of=/dev/null bs=4k 2>&1 |
-               awk '/copied/ { print $6 }')
+               egrep -o '([[:digit:]\.\,e-]+) s' | cut -d's' -f1 |
+               sed -e 's/,/./' -e 's/[eE]+*/\*10\^/')
 
        # verify that fast read is 4 times faster for cache read
        [ $(bc <<< "4 * $t_fast < $t_slow") -eq 1 ] ||
@@ -14360,12 +15028,14 @@ test_248() {
        # 1k non-cache read
        cancel_lru_locks osc
        local t_1k=$(dd if=$DIR/$tfile of=/dev/null bs=1k 2>&1 |
-               awk '/copied/ { print $6 }')
+               egrep -o '([[:digit:]\.\,e-]+) s' | cut -d's' -f1 |
+               sed -e 's/,/./' -e 's/[eE]+*/\*10\^/')
 
        # 1M non-cache read
        cancel_lru_locks osc
        local t_1m=$(dd if=$DIR/$tfile of=/dev/null bs=1k 2>&1 |
-               awk '/copied/ { print $6 }')
+               egrep -o '([[:digit:]\.\,e-]+) s' | cut -d's' -f1 |
+               sed -e 's/,/./' -e 's/[eE]+*/\*10\^/')
 
        # verify that big IO is not 4 times faster than small IO
        [ $(bc <<< "4 * $t_1k >= $t_1m") -eq 1 ] ||
@@ -14432,7 +15102,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
 
@@ -14528,6 +15198,9 @@ test_253() {
                        osp.$mdtosc_proc1.reserved_mb_low)
        echo "prev high watermark $last_wm_h, prev low watermark $last_wm_l"
 
+       if ! combined_mgs_mds ; then
+               mount_mgs_client
+       fi
        create_pool $FSNAME.$TESTNAME || error "Pool creation failed"
        do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $ost_name ||
                error "Adding $ost_name to pool failed"
@@ -14592,6 +15265,10 @@ test_253() {
                error "Remove $ost_name from pool failed"
        do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME ||
                error "Pool destroy fialed"
+
+       if ! combined_mgs_mds ; then
+               umount_mgs_client
+       fi
 }
 run_test 253 "Check object allocation limit"
 
@@ -14731,7 +15408,7 @@ ladvise_willread_performance()
 
        local lowest_speedup=20
        if [ ${average_cache%.*} -lt $lowest_speedup ]; then
-               echo "Speedup with OSS cached read less than $lowest_speedup%, "
+               echo "Speedup with OSS cached read less than $lowest_speedup%," \
                        "got $average_cache%. Skipping ladvise willread check."
                return 0
        fi
@@ -14897,6 +15574,91 @@ test_255b() {
 }
 run_test 255b "check 'lfs ladvise -a dontneed'"
 
+test_255c() {
+       local count
+       local new_count
+       local difference
+       local i
+       local rc
+
+       [ $(lustre_version_code ost1) -lt $(version_code 2.10.50) ] &&
+               skip "lustre < 2.10.53 does not support lockahead" && return
+
+       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 100 to map down to valid return
+               if [ $i -eq 15 ]; then
+                       rc="$((rc * 100))"
+               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
@@ -14905,7 +15667,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
@@ -14935,11 +15697,12 @@ test_256() {
 
        #after mount new plainllog is used
        touch $DIR/$tdir/{11..19}
-       local TEMP256FILE=$(mktemp TEMP256XXXXXX)
+       do_facet mds1 sync
+       local TEMP256FILE=$(mktemp -u TEMP256XXXXXX)
        cat_sl=$(do_facet mds1 \
        "$DEBUGFS -R \\\"dump changelog_catalog $TEMP256FILE\\\" $mdt_dev; \
         llog_reader $TEMP256FILE | grep \\\"type=1064553b\\\" | wc -l")
-       rm $TEMP256FILE
+       do_facet mds1 rm $TEMP256FILE
 
        if (( cat_sl != 2 )); then
                do_facet mds1 $LCTL --device $MDT0 changelog_deregister $cl_user
@@ -14948,11 +15711,12 @@ test_256() {
 
        $LFS changelog_clear $MDT0 $cl_user 0
 
-       TEMP256FILE=$(mktemp TEMP256XXXXXX)
+       do_facet mds1 sync
+       TEMP256FILE=$(mktemp -u TEMP256XXXXXX)
        cat_sl=$(do_facet mds1 \
        "$DEBUGFS -R \\\"dump changelog_catalog $TEMP256FILE\\\" $mdt_dev; \
         llog_reader $TEMP256FILE | grep \\\"type=1064553b\\\" | wc -l")
-       rm $TEMP256FILE
+       do_facet mds1 rm $TEMP256FILE
 
        do_facet mds1 $LCTL --device $MDT0 changelog_deregister $cl_user
 
@@ -14970,7 +15734,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"
@@ -15029,6 +15793,401 @@ test_260() {
 }
 run_test 260 "Check mdc_close fail"
 
+### Data-on-MDT sanity tests ###
+test_270a() {
+
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       # create DoM file
+       local dom=$DIR/$tdir/dom_file
+       local tmp=$DIR/$tdir/tmp_file
+
+       mkdir -p $DIR/$tdir
+
+       # basic checks for DoM component creation
+       $LFS setstripe -E 1024K -E 1024K -L mdt $dom 2>/dev/null &&
+               error "Can set MDT layout to non-first entry"
+
+       $LFS setstripe -E 1024K -L mdt -E 1024K -L mdt $dom 2>/dev/null &&
+               error "Can define multiple entries as MDT layout"
+
+       $LFS setstripe -E 1M -L mdt $dom ||
+               error "Can't create DoM layout"
+
+       [ $($LFS getstripe -L $dom) == "mdt" ] || error "bad pattern"
+       [ $($LFS getstripe -c $dom) == 0 ] || error "bad stripe count"
+       [ $($LFS getstripe -S $dom) == 1048576 ] || error "bad stripe size"
+
+       local mdtidx=$($GETSTRIPE -M $dom)
+       local mdtname=MDT$(printf %04x $mdtidx)
+       local facet=mds$((mdtidx + 1))
+       local space_check=1
+
+       # Skip free space checks with ZFS
+       if [ "$(facet_fstype $facet)" == "zfs" ]; then
+               space_check=0
+       fi
+
+       # write
+       sync
+       local mdtfree1=$(do_facet $facet \
+               lctl get_param -n osd*.*$mdtname.kbytesfree)
+       dd if=/dev/urandom of=$tmp bs=1024 count=100
+       # check also direct IO along write
+       dd if=$tmp of=$dom bs=102400 count=1 oflag=direct
+       sync
+       cmp $tmp $dom || error "file data is different"
+       [ $(stat -c%s $dom) == 102400 ] || error "bad size after write"
+       if [ $space_check == 1 ]; then
+               local mdtfree2=$(do_facet $facet \
+                               lctl get_param -n osd*.*$mdtname.kbytesfree)
+               [ $(($mdtfree1 - $mdtfree2)) -ge 102 ] ||
+                       error "MDT free space is wrong after write"
+       fi
+
+       # truncate
+       $TRUNCATE $dom 10000
+       [ $(stat -c%s $dom) == 10000 ] || error "bad size after truncate"
+       if [ $space_check == 1 ]; then
+               mdtfree1=$(do_facet $facet \
+                               lctl get_param -n osd*.*$mdtname.kbytesfree)
+               [ $(($mdtfree1 - $mdtfree2)) -ge 92 ] ||
+                       error "MDT free space is wrong after truncate"
+       fi
+
+       # append
+       cat $tmp >> $dom
+       sync
+       [ $(stat -c%s $dom) == 112400 ] || error "bad size after append"
+       if [ $space_check == 1 ]; then
+               mdtfree2=$(do_facet $facet \
+                               lctl get_param -n osd*.*$mdtname.kbytesfree)
+               [ $(($mdtfree1 - $mdtfree2)) -ge 102 ] ||
+                       error "MDT free space is wrong after append"
+       fi
+
+       # delete
+       rm $dom
+       if [ $space_check == 1 ]; then
+               mdtfree1=$(do_facet $facet \
+                               lctl get_param -n osd*.*$mdtname.kbytesfree)
+               [ $(($mdtfree1 - $mdtfree2)) -ge 112 ] ||
+                       error "MDT free space is wrong after removal"
+       fi
+
+       # combined striping
+       $LFS setstripe -E 1024K -L mdt -E EOF $dom ||
+               error "Can't create DoM + OST striping"
+
+       dd if=/dev/urandom of=$tmp bs=1024 count=2000
+       # check also direct IO along write
+       dd if=$tmp of=$dom bs=102400 count=20 oflag=direct
+       sync
+       cmp $tmp $dom || error "file data is different"
+       [ $(stat -c%s $dom) == 2048000 ] || error "bad size after write"
+       rm $dom
+       rm $tmp
+
+       return 0
+}
+run_test 270a "DoM: basic functionality tests"
+
+test_270b() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       local dom=$DIR/$tdir/dom_file
+       local max_size=1048576
+
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -E $max_size -L mdt $dom
+
+       # truncate over the limit
+       $TRUNCATE $dom $(($max_size + 1)) &&
+               error "successful truncate over the maximum size"
+       # write over the limit
+       dd if=/dev/zero of=$dom bs=$max_size seek=1 count=1 &&
+               error "successful write over the maximum size"
+       # append over the limit
+       dd if=/dev/zero of=$dom bs=$(($max_size - 3)) count=1
+       echo "12345" >> $dom && error "successful append over the maximum size"
+       rm $dom
+
+       return 0
+}
+run_test 270b "DoM: maximum size overflow checks for DoM-only file"
+
+test_270c() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+       # check files inherit DoM EA
+       touch $DIR/$tdir/first
+       [ $($GETSTRIPE -L $DIR/$tdir/first) == "mdt" ] ||
+               error "bad pattern"
+       [ $($LFS getstripe -c $DIR/$tdir/first) == 0 ] ||
+               error "bad stripe count"
+       [ $($LFS getstripe -S $DIR/$tdir/first) == 1048576 ] ||
+               error "bad stripe size"
+
+       # check directory inherits DoM EA and uses it as default
+       mkdir $DIR/$tdir/subdir
+       touch $DIR/$tdir/subdir/second
+       [ $($LFS getstripe -L $DIR/$tdir/subdir/second) == "mdt" ] ||
+               error "bad pattern in sub-directory"
+       [ $($LFS getstripe -c $DIR/$tdir/subdir/second) == 0 ] ||
+               error "bad stripe count in sub-directory"
+       [ $($LFS getstripe -S $DIR/$tdir/subdir/second) == 1048576 ] ||
+               error "bad stripe size in sub-directory"
+       return 0
+}
+run_test 270c "DoM: DoM EA inheritance tests"
+
+test_270d() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+       # inherit default DoM striping
+       mkdir $DIR/$tdir/subdir
+       touch $DIR/$tdir/subdir/f1
+
+       # change default directory striping
+       $LFS setstripe -c 1 $DIR/$tdir/subdir
+       touch $DIR/$tdir/subdir/f2
+       [ $($LFS getstripe -c $DIR/$tdir/subdir/f2) == 1 ] ||
+               error "wrong default striping in file 2"
+       [ $($LFS getstripe -L $DIR/$tdir/subdir/f2) == "raid0" ] ||
+               error "bad pattern in file 2"
+       return 0
+}
+run_test 270d "DoM: change striping from DoM to RAID0"
+
+test_270e() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       mkdir -p $DIR/$tdir/dom
+       mkdir -p $DIR/$tdir/norm
+       DOMFILES=20
+       NORMFILES=10
+       $LFS setstripe -E 1M -L mdt $DIR/$tdir/dom
+       $LFS setstripe -i 0 -S 2M $DIR/$tdir/norm
+
+       createmany -o $DIR/$tdir/dom/dom- $DOMFILES
+       createmany -o $DIR/$tdir/norm/norm- $NORMFILES
+
+       # find DoM files by layout
+       NUM=$($LFS find -L mdt -type f $DIR/$tdir 2>/dev/null | wc -l)
+       [ $NUM -eq  $DOMFILES ] ||
+               error "lfs find -L: found $NUM, expected $DOMFILES"
+       echo "Test 1: lfs find 20 DOM files by layout: OK"
+
+       # there should be 1 dir with default DOM striping
+       NUM=$($LFS find -L mdt -type d $DIR/$tdir 2>/dev/null | wc -l)
+       [ $NUM -eq  1 ] ||
+               error "lfs find -L: found $NUM, expected 1 dir"
+       echo "Test 2: lfs find 1 DOM dir by layout: OK"
+
+       # find DoM files by stripe size
+       NUM=$($LFS find -S -1200K -type f $DIR/$tdir 2>/dev/null | wc -l)
+       [ $NUM -eq  $DOMFILES ] ||
+               error "lfs find -S: found $NUM, expected $DOMFILES"
+       echo "Test 4: lfs find 20 DOM files by stripe size: OK"
+
+       # find files by stripe offset except DoM files
+       NUM=$($LFS find -i 0 -type f $DIR/$tdir 2>/dev/null | wc -l)
+       [ $NUM -eq  $NORMFILES ] ||
+               error "lfs find -i: found $NUM, expected $NORMFILES"
+       echo "Test 5: lfs find no DOM files by stripe index: OK"
+       return 0
+}
+run_test 270e "DoM: lfs find with DoM files test"
+
+test_270f() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       local mdtname=${FSNAME}-MDT0000-mdtlov
+       local dom=$DIR/$tdir/dom_file
+       local dom_limit_saved=$(do_facet mds1 $LCTL get_param -n \
+                                               lod.$mdtname.dom_stripesize)
+       local dom_limit=131072
+
+       do_facet mds1 $LCTL set_param -n lod.$mdtname.dom_stripesize=$dom_limit
+       local dom_current=$(do_facet mds1 $LCTL get_param -n \
+                                               lod.$mdtname.dom_stripesize)
+       [ ${dom_limit} -eq ${dom_current} ] ||
+               error "Cannot change per-MDT DoM stripe limit to $dom_limit"
+
+       $LFS mkdir -i 0 -c 1 $DIR/$tdir
+       $LFS setstripe -d $DIR/$tdir
+       $LFS setstripe -E $dom_limit -L mdt $DIR/$tdir ||
+               error "Can't set directory default striping"
+
+       # exceed maximum stripe size
+       $LFS setstripe -E $(($dom_limit * 2)) -L mdt $dom &&
+               error "Able to create DoM component size more than LOD limit"
+
+       do_facet mds1 $LCTL set_param -n lod.$mdtname.dom_stripesize=0
+       dom_current=$(do_facet mds1 $LCTL get_param -n \
+                                               lod.$mdtname.dom_stripesize)
+       [ 0 -eq ${dom_current} ] ||
+               error "Can't set zero DoM stripe limit"
+
+       # too low values to be aligned with smallest stripe size 64K
+       do_facet mds1 $LCTL set_param -n lod.$mdtname.dom_stripesize=30000
+       dom_current=$(do_facet mds1 $LCTL get_param -n \
+                                               lod.$mdtname.dom_stripesize)
+       [ 30000 -eq ${dom_current} ] &&
+               error "Can set too small DoM stripe limit"
+
+       do_facet mds1 $LCTL set_param -n lod.$mdtname.dom_stripesize=2147483648
+       dom_current=$(do_facet mds1 $LCTL get_param -n \
+                                               lod.$mdtname.dom_stripesize)
+       echo $dom_current
+       [ 2147483648 -eq ${dom_current} ] &&
+               error "Can set too large DoM stripe limit"
+
+       do_facet mds1 $LCTL set_param -n \
+                               lod.$mdtname.dom_stripesize=$((dom_limit * 2))
+       $LFS setstripe -E $((dom_limit * 2)) -L mdt $dom ||
+               error "Can't create DoM component size after limit change"
+       do_facet mds1 $LCTL set_param -n \
+                               lod.$mdtname.dom_stripesize=$((dom_limit / 2))
+       $LFS setstripe -E $dom_limit -L mdt ${dom}_big &&
+               error "Can create big DoM component after limit decrease"
+       touch ${dom}_def ||
+               error "Can't create file with old default layout"
+
+       do_facet mds1 $LCTL set_param -n lod.*.dom_stripesize=$dom_limit_saved
+       return 0
+}
+run_test 270f "DoM: maximum DoM stripe size checks"
+
+test_271a() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       local dom=$DIR/$tdir/dom
+
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt $dom
+
+       lctl set_param -n mdc.*.stats=clear
+       dd if=/dev/zero of=$dom bs=4096 count=1 || return 1
+       cat $dom > /dev/null
+       local reads=$(lctl get_param -n mdc.*.stats |
+                       awk '/ost_read/ {print $2}')
+       [ -z $reads ] || error "Unexpected $reads READ RPCs"
+       ls $dom
+       rm -f $dom
+}
+run_test 271a "DoM: data is cached for read after write"
+
+test_271b() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       local dom=$DIR/$tdir/dom
+
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt -E EOF $dom
+
+       lctl set_param -n mdc.*.stats=clear
+       dd if=/dev/zero of=$dom bs=4096 count=1 || return 1
+       cancel_lru_locks mdc
+       $CHECKSTAT -t file -s 4096 $dom || error "stat #1 fails"
+       # second stat to check size is cached on client
+       $CHECKSTAT -t file -s 4096 $dom || error "stat #2 fails"
+       local gls=$(lctl get_param -n mdc.*.stats |
+                       awk '/ldlm_glimpse/ {print $2}')
+       [ -z $gls ] || error "Unexpected $gls glimpse RPCs"
+       rm -f $dom
+}
+run_test 271b "DoM: no glimpse RPC for stat (DoM only file)"
+
+test_271ba() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       local dom=$DIR/$tdir/dom
+
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt -E EOF $dom
+
+       lctl set_param -n mdc.*.stats=clear
+       lctl set_param -n osc.*.stats=clear
+       dd if=/dev/zero of=$dom bs=2048K count=1 || return 1
+       cancel_lru_locks mdc
+       $CHECKSTAT -t file -s 2097152 $dom || error "stat"
+       # second stat to check size is cached on client
+       $CHECKSTAT -t file -s 2097152 $dom || error "stat"
+       local gls=$(lctl get_param -n mdc.*.stats |
+                       awk '/ldlm_glimpse/ {print $2}')
+       [ -z $gls ] || error "Unexpected $gls glimpse RPCs"
+       local gls=$(lctl get_param -n osc.*.stats |
+                       awk '/ldlm_glimpse/ {print $2}')
+       [ -z $gls ] || error "Unexpected $gls OSC glimpse RPCs"
+       rm -f $dom
+}
+run_test 271ba "DoM: no glimpse RPC for stat (combined file)"
+
+test_271c() {
+       # test to be enabled with lock_convert
+       skip "skipped until lock convert will be implemented" && return
+
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55" && return
+
+       local dom=$DIR/$tdir/dom
+
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+       local mdtidx=$($LFS getstripe -M $DIR/$tdir)
+       local facet=mds$((mdtidx + 1))
+
+       cancel_lru_locks mdc
+       do_facet $facet lctl set_param -n mdt.*.dom_lock=0
+       createmany -o $dom 1000
+       lctl set_param -n mdc.*.stats=clear
+       smalliomany -w $dom 1000 200
+       lctl get_param -n mdc.*.stats
+       local enq=$(lctl get_param -n mdc.*.stats |
+                       awk '/ldlm_ibits_enqueue/ {print $2}')
+       # Each file has 1 open, 1 IO enqueues, total 2000
+       # but now we have also +1 getxattr for security.capability, total 3000
+       [ $enq -ge 2000 ] || error "Too few enqueues $enq, expected > 2000"
+       unlinkmany $dom 1000
+
+       cancel_lru_locks mdc
+       do_facet $facet lctl set_param -n mdt.*.dom_lock=1
+       createmany -o $dom 1000
+       lctl set_param -n mdc.*.stats=clear
+       smalliomany -w $dom 1000 200
+       lctl get_param -n mdc.*.stats
+       local enq_2=$(lctl get_param -n mdc.*.stats |
+                       awk '/ldlm_ibits_enqueue/ {print $2}')
+       # Expect to see reduced amount of RPCs by 1000 due to single enqueue
+       # for OPEN and IO lock.
+       [ $((enq - enq_2)) -ge 1000 ] ||
+               error "Too many enqueues $enq_2, expected about $((enq - 1000))"
+       unlinkmany $dom 1000
+       return 0
+}
+run_test 271c "DoM: IO lock at open saves enqueue RPCs"
+
 cleanup_test_300() {
        trap 0
        umask $SAVE_UMASK
@@ -15122,7 +16281,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
@@ -15353,17 +16512,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
@@ -15953,6 +17112,33 @@ test_313() {
 }
 run_test 313 "io should fail after last_rcvd update fail"
 
+test_314() {
+       $SETSTRIPE -c 2 -i 0 $DIR/$tfile || error "setstripe failed"
+       do_facet ost1 "$LCTL set_param fail_loc=0x720"
+       rm -f $DIR/$tfile
+       wait_delete_completed
+       do_facet ost1 "$LCTL set_param fail_loc=0"
+}
+run_test 314 "OSP shouldn't fail after last_rcvd update failure"
+
+test_315() { # LU-618
+       local file=$DIR/$tfile
+       rm -f $file
+
+       $MULTIOP $file oO_CREAT:O_DIRECT:O_RDWR:w4096000c
+       $MULTIOP $file oO_RDONLY:r4096000_c &
+       PID=$!
+
+       sleep 2
+
+       local rbytes=$(awk '/read_bytes/ { print $2 }' /proc/$PID/io)
+       kill -USR1 $PID
+
+       [ $rbytes -gt 4000000 ] || error "read is not accounted ($rbytes)"
+       rm -f $file
+}
+run_test 315 "read should be accounted"
+
 test_fake_rw() {
        local read_write=$1
        if [ "$read_write" = "write" ]; then
@@ -16022,7 +17208,7 @@ 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
 }
@@ -16041,7 +17227,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
@@ -16057,7 +17242,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/
@@ -16076,8 +17261,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 ||
@@ -16223,7 +17408,7 @@ test_403() {
 
        wait
 
-       [ `cat $tfile` -gt 0 ] || error "wrong nlink count: `cat $tfile`"
+       [ $(cat $tfile) -gt 0 ] || error "wrong nlink count: $(cat $tfile)"
 
        rm -f $tfile $file1 $file2
 }
@@ -16261,12 +17446,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"
 }
@@ -16280,12 +17466,15 @@ 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)
-
        local test_pool=$TESTNAME
+
+       if ! combined_mgs_mds ; then
+               mount_mgs_client
+       fi
        pool_add $test_pool || error "pool_add failed"
        pool_add_targets $test_pool 0 $(($OSTCOUNT - 1)) 1 ||
                error "pool_add_targets failed"
@@ -16327,7 +17516,7 @@ test_406() {
                [ $size -eq $def_stripe_size ] ||
                        error "$f stripe size $size != $def_stripe_size"
                local pool=$($GETSTRIPE -p $f)
-               [ "#$pool" == "#" ] || error "$f pool $pool is set"
+               [ $pool == $test_pool ] || error "$f pool $pool isn't set"
 
        done
 
@@ -16335,18 +17524,22 @@ 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
 
        local f=$DIR/$tdir/$tfile
        pool_remove_all_targets $test_pool $f
        pool_remove $test_pool $f
+
+       if ! combined_mgs_mds ; then
+               umount_mgs_client
+       fi
 }
 run_test 406 "DNE support fs default striping"
 
@@ -16427,6 +17620,9 @@ 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
@@ -16446,6 +17642,58 @@ test_410()
 }
 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"
+
+test_412() {
+       [ $MDSCOUNT -lt 2 ] &&
+               skip "We need at least 2 MDTs for this test" && return
+
+       if [ $(lustre_version_code mds1) -lt $(version_code 2.10.55) ]; then
+               skip "Need server version at least 2.10.55" & exit 0
+       fi
+
+       $LFS mkdir -i $((MDSCOUNT - 1)),$((MDSCOUNT - 2)) $DIR/$tdir ||
+               error "mkdir failed"
+       $LFS getdirstripe $DIR/$tdir
+       stripe_index=$($LFS getdirstripe -i $DIR/$tdir)
+       [ $stripe_index -eq $((MDSCOUNT - 1)) ] ||
+               error "expect $((MDSCOUT - 1)) get $stripe_index"
+       stripe_count=$($LFS getdirstripe -T $DIR/$tdir)
+       [ $stripe_count -eq 2 ] ||
+               error "expect 2 get $stripe_count"
+}
+run_test 412 "mkdir on specific MDTs"
+
 prep_801() {
        [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] ||
        [[ $(lustre_version_code ost1) -lt $(version_code 2.9.55) ]] &&
@@ -16457,6 +17705,30 @@ 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
 
@@ -16466,34 +17738,29 @@ test_801a() {
        do_facet mgs $LCTL barrier_freeze $FSNAME 10 &
 
        sleep 2
-       local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                              awk '/The barrier for/ { print $7 }')
+       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"
 
@@ -16503,16 +17770,14 @@ test_801a() {
        do_facet mgs $LCTL barrier_thaw $FSNAME &
 
        sleep 2
-       b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
-                        awk '/The barrier for/ { print $7 }')
+       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"
 
@@ -16520,8 +17785,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"
 
@@ -16546,8 +17810,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"
 
@@ -16569,8 +17832,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"
 
@@ -16583,14 +17845,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"
 
@@ -16613,8 +17873,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"
@@ -16625,14 +17884,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"
 
@@ -16705,6 +17962,137 @@ test_802() {
 }
 run_test 802 "simulate readonly device"
 
+test_803() {
+       [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.54) ] &&
+               skip "MDS needs to be newer than 2.10.54" && return
+
+       mkdir -p $DIR/$tdir
+       # Create some objects on all MDTs to trigger related logs objects
+       for idx in $(seq $MDSCOUNT); do
+               $LFS mkdir -c $MDSCOUNT -i $((idx % $MDSCOUNT)) \
+                       $DIR/$tdir/dir${idx} ||
+                       error "Fail to create $DIR/$tdir/dir${idx}"
+       done
+
+       sync; sleep 5
+       echo "before create:"
+       $LFS df -i $MOUNT
+       local before_used=$($LFS df -i | grep MDT0000_UUID | awk '{print $3}')
+
+       for ((i=0; i<10; i++)); do
+               $LFS mkdir -c 1 -i 1 $DIR/$tdir/foo$i ||
+                       error "Fail to create $DIR/$tdir/foo$i"
+       done
+
+       sync; sleep 5
+       echo "after create:"
+       $LFS df -i $MOUNT
+       local after_used=$($LFS df -i | grep MDT0000_UUID | awk '{print $3}')
+
+       [ $after_used -ge $((before_used + 10)) ] ||
+               error "before ($before_used) + 10 > after ($after_used)"
+
+       for ((i=0; i<10; i++)); do
+               rm -rf $DIR/$tdir/foo$i ||
+                       error "Fail to remove $DIR/$tdir/foo$i"
+       done
+
+       wait_delete_completed
+       echo "after unlink:"
+       $LFS df -i $MOUNT
+       before_used=$after_used
+       after_used=$($LFS df -i | grep MDT0000_UUID | awk '{print $3}')
+
+       [ $after_used -le $((before_used - 8)) ] ||
+               error "before ($before_used) - 8 < after ($after_used)"
+}
+run_test 803 "verify agent object for remote object"
+
+test_804() {
+       [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.54) ] &&
+               skip "MDS needs to be newer than 2.10.54" && return
+
+       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
+               skip "ldiskfs only test" && return 0
+
+       mkdir -p $DIR/$tdir
+       $LFS mkdir -c 1 -i 1 $DIR/$tdir/dir0 ||
+               error "Fail to create $DIR/$tdir/dir0"
+
+       local fid=$($LFS path2fid $DIR/$tdir/dir0)
+       local dev=$(mdsdevname 2)
+
+       do_facet mds2 "$DEBUGFS -c -R 'ls /REMOTE_PARENT_DIR' $dev" |
+               grep ${fid} || error "NOT found agent entry for dir0"
+
+       $LFS mkdir -c $MDSCOUNT -i 0 $DIR/$tdir/dir1 ||
+               error "Fail to create $DIR/$tdir/dir1"
+
+       touch $DIR/$tdir/dir1/foo0 ||
+               error "Fail to create $DIR/$tdir/dir1/foo0"
+       fid=$($LFS path2fid $DIR/$tdir/dir1/foo0)
+       local rc=0
+
+       for idx in $(seq $MDSCOUNT); do
+               dev=$(mdsdevname $idx)
+               do_facet mds${idx} \
+                       "$DEBUGFS -c -R 'ls /REMOTE_PARENT_DIR' $dev" |
+                       grep ${fid} && rc=$idx
+       done
+
+       mv $DIR/$tdir/dir1/foo0 $DIR/$tdir/dir1/foo1 ||
+               error "Fail to rename foo0 to foo1"
+       if [ $rc -eq 0 ]; then
+               for idx in $(seq $MDSCOUNT); do
+                       dev=$(mdsdevname $idx)
+                       do_facet mds${idx} \
+                       "$DEBUGFS -c -R 'ls /REMOTE_PARENT_DIR' $dev" |
+                       grep ${fid} && rc=$idx
+               done
+       fi
+
+       mv $DIR/$tdir/dir1/foo1 $DIR/$tdir/dir1/foo2 ||
+               error "Fail to rename foo1 to foo2"
+       if [ $rc -eq 0 ]; then
+               for idx in $(seq $MDSCOUNT); do
+                       dev=$(mdsdevname $idx)
+                       do_facet mds${idx} \
+                       "$DEBUGFS -c -R 'ls /REMOTE_PARENT_DIR' $dev" |
+                       grep ${fid} && rc=$idx
+               done
+       fi
+
+       [ $rc -ne 0 ] || error "NOT found agent entry for foo"
+
+       ln $DIR/$tdir/dir1/foo2 $DIR/$tdir/dir0/guard ||
+               error "Fail to link to $DIR/$tdir/dir1/foo2"
+       mv $DIR/$tdir/dir1/foo2 $DIR/$tdir/dir1/foo0 ||
+               error "Fail to rename foo2 to foo0"
+       unlink $DIR/$tdir/dir1/foo0 ||
+               error "Fail to unlink $DIR/$tdir/dir1/foo0"
+       rm -rf $DIR/$tdir/dir0 ||
+               error "Fail to rm $DIR/$tdir/dir0"
+
+       for idx in $(seq $MDSCOUNT); do
+               dev=$(mdsdevname $idx)
+               rc=0
+
+               stop mds${idx}
+               run_e2fsck $(facet_active_host mds$idx) $dev -n ||
+                       rc=$?
+               start mds${idx} $dev $MDS_MOUNT_OPTS ||
+                       error "mount mds$idx failed"
+               df $MOUNT > /dev/null 2>&1
+
+               # e2fsck should not return error
+               [ $rc -eq 0 ] ||
+                       error "e2fsck detected error on MDT${idx}: rc=$rc"
+       done
+}
+run_test 804 "verify agent entry for remote entry"
+
 #
 # tests that do cleanup/setup should be run at the end
 #