Whamcloud - gitweb
LU-10650 obd: add check to obd_statfs
[fs/lustre-release.git] / lustre / tests / sanity.sh
index bb2a49e..62f31a9 100755 (executable)
@@ -8,34 +8,16 @@
 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!
 
-# skipped tests: LU-8411 LU-9096 LU-9054 LU-10199
-ALWAYS_EXCEPT="  407     253     312     56xb     $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
 
@@ -46,7 +28,6 @@ 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}
@@ -88,6 +69,30 @@ if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
        [ "$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() {
@@ -165,6 +170,45 @@ test_0c() {
 }
 run_test 0c "check import proc"
 
+test_0d() { # LU-3397
+       [ $(lustre_version_code mgs) -lt $(version_code 2.10.57) ] &&
+               skip "proc exports not supported before 2.10.57" && return
+
+       local mgs_exp="mgs.MGS.exports"
+       local client_uuid=$($LCTL get_param -n mgc.*.uuid)
+       local exp_client_nid
+       local exp_client_version
+       local exp_val
+       local imp_val
+       local temp_imp=$DIR/$tfile.import
+       local temp_exp=$DIR/$tfile.export
+
+       # save mgc import file to $temp_imp
+       $LCTL get_param mgc.*.import | tee $temp_imp
+       # Check if client uuid is found in MGS export
+       for exp_client_nid in $(do_facet mgs $LCTL get_param -N $mgs_exp.*); do
+               [ $(do_facet mgs $LCTL get_param $exp_client_nid.uuid) == \
+                       $client_uuid ] &&
+                       break;
+       done
+       # save mgs export file to $temp_exp
+       do_facet mgs $LCTL get_param $exp_client_nid.export | tee $temp_exp
+
+       # Compare the value of field "connect_flags"
+       imp_val=$(grep "connect_flags" $temp_imp)
+       exp_val=$(grep "connect_flags" $temp_exp)
+       [ "$exp_val" == "$imp_val" ] ||
+               error "export flags '$exp_val' != import flags '$imp_val'"
+
+       # Compare the value of client version
+       exp_client_version=$(awk '/target_version:/ { print $2 }' $temp_exp)
+       exp_val=$(version_code $exp_client_version)
+       imp_val=$(lustre_version_code client)
+       [ "$exp_val" == "$imp_val" ] ||
+               error "export client version '$exp_val' != '$imp_val'"
+}
+run_test 0d "check export proc ============================="
+
 test_1() {
        test_mkdir $DIR/$tdir
        test_mkdir $DIR/$tdir/d2
@@ -814,6 +858,38 @@ test_23b() { # bug 18988
 }
 run_test 23b "O_APPEND check"
 
+# LU-9409, size with O_APPEND and tiny writes
+test_23c() {
+       local file=$DIR/$tfile
+
+       # single dd
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=8 count=800
+       $CHECKSTAT -s 6400 $file || error "wrong size, expected 6400"
+       rm -f $file
+
+       # racing tiny writes
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=8 count=800 &
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=8 count=800 &
+       wait
+       $CHECKSTAT -s 12800 $file || error "wrong size, expected 12800"
+       rm -f $file
+
+       #racing tiny & normal writes
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=4096 count=4 &
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=8 count=100 &
+       wait
+       $CHECKSTAT -s 17184 $file || error "wrong size, expected 17184"
+       rm -f $file
+
+       #racing tiny & normal writes 2, ugly numbers
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=4099 count=11 &
+       dd conv=notrunc oflag=append if=/dev/zero of=$file bs=17 count=173 &
+       wait
+       $CHECKSTAT -s 48030 $file || error "wrong size, expected 48030"
+       rm -f $file
+}
+run_test 23c "O_APPEND size checks for tiny writes"
+
 # rename sanity
 test_24a() {
        echo '-- same directory rename'
@@ -858,8 +934,8 @@ test_24e() {
        test_mkdir $DIR/R5b
        touch $DIR/R5a/f
        mv $DIR/R5a/f $DIR/R5b/g
-       $CHECKSTAT -a $DIR/R5a/f || error
-       $CHECKSTAT -t file $DIR/R5b/g || error
+       $CHECKSTAT -a $DIR/R5a/f || error "$DIR/R5a/f exists"
+       $CHECKSTAT -t file $DIR/R5b/g || error "$DIR/R5b/g not file type"
 }
 run_test 24e "touch .../R5a/f; rename .../R5a/f .../R5b/g ======"
 
@@ -868,8 +944,8 @@ test_24f() {
        test_mkdir $DIR/R6b
        touch $DIR/R6a/f $DIR/R6b/g
        mv $DIR/R6a/f $DIR/R6b/g
-       $CHECKSTAT -a $DIR/R6a/f || error
-       $CHECKSTAT -t file $DIR/R6b/g || error
+       $CHECKSTAT -a $DIR/R6a/f || error "$DIR/R6a/f exists"
+       $CHECKSTAT -t file $DIR/R6b/g || error "$DIR/R6b/g not file type"
 }
 run_test 24f "touch .../R6a/f R6b/g; mv .../R6a/f .../R6b/g ===="
 
@@ -878,8 +954,8 @@ test_24g() {
        test_mkdir $DIR/R7b
        test_mkdir $DIR/R7a/d
        mv $DIR/R7a/d $DIR/R7b/e
-       $CHECKSTAT -a $DIR/R7a/d || error
-       $CHECKSTAT -t dir $DIR/R7b/e || error
+       $CHECKSTAT -a $DIR/R7a/d || error "$DIR/R7a/d exists"
+       $CHECKSTAT -t dir $DIR/R7b/e || error "$DIR/R7b/e not dir type"
 }
 run_test 24g "mkdir .../R7{a,b}/d; mv .../R7a/d .../R7b/e ======"
 
@@ -889,8 +965,8 @@ test_24h() {
        test_mkdir -c1 $DIR/R8a/d
        test_mkdir -c1 $DIR/R8b/e
        mrename $DIR/R8a/d $DIR/R8b/e
-       $CHECKSTAT -a $DIR/R8a/d || error
-       $CHECKSTAT -t dir $DIR/R8b/e || error
+       $CHECKSTAT -a $DIR/R8a/d || error "$DIR/R8a/d exists"
+       $CHECKSTAT -t dir $DIR/R8b/e || error "$DIR/R8b/e not dir type"
 }
 run_test 24h "mkdir .../R8{a,b}/{d,e}; rename .../R8a/d .../R8b/e"
 
@@ -900,18 +976,18 @@ test_24i() {
        test_mkdir $DIR/R9/a
        touch $DIR/R9/f
        mrename $DIR/R9/f $DIR/R9/a
-       $CHECKSTAT -t file $DIR/R9/f || error
-       $CHECKSTAT -t dir  $DIR/R9/a || error
-       $CHECKSTAT -a $DIR/R9/a/f || error
+       $CHECKSTAT -t file $DIR/R9/f || error "$DIR/R9/f not file type"
+       $CHECKSTAT -t dir  $DIR/R9/a || error "$DIR/R9/a not dir type"
+       $CHECKSTAT -a $DIR/R9/a/f || error "$DIR/R9/a/f exists"
 }
 run_test 24i "rename file to dir error: touch f ; mkdir a ; rename f a"
 
 test_24j() {
        test_mkdir $DIR/R10
        mrename $DIR/R10/f $DIR/R10/g
-       $CHECKSTAT -t dir $DIR/R10 || error
-       $CHECKSTAT -a $DIR/R10/f || error
-       $CHECKSTAT -a $DIR/R10/g || error
+       $CHECKSTAT -t dir $DIR/R10 || error "$DIR/R10 not dir type"
+       $CHECKSTAT -a $DIR/R10/f || error "$DIR/R10/f exists"
+       $CHECKSTAT -a $DIR/R10/g || error "$DIR/R10/g exists"
 }
 run_test 24j "source does not exist ============================"
 
@@ -920,15 +996,15 @@ test_24k() {
        test_mkdir $DIR/R11a/d
        touch $DIR/R11a/f
        mv $DIR/R11a/f $DIR/R11a/d
-        $CHECKSTAT -a $DIR/R11a/f || error
-        $CHECKSTAT -t file $DIR/R11a/d/f || error
+       $CHECKSTAT -a $DIR/R11a/f || error "$DIR/R11a/f exists"
+       $CHECKSTAT -t file $DIR/R11a/d/f || error "$DIR/R11a/d/f not file type"
 }
 run_test 24k "touch .../R11a/f; mv .../R11a/f .../R11a/d ======="
 
 # bug 2429 - rename foo foo foo creates invalid file
 test_24l() {
        f="$DIR/f24l"
-       $MULTIOP $f OcNs || error
+       $MULTIOP $f OcNs || error "rename of ${f} to itself failed"
 }
 run_test 24l "Renaming a file to itself ========================"
 
@@ -946,10 +1022,10 @@ test_24n() {
     f="$DIR/f24n"
     # this stats the old file after it was renamed, so it should fail
     touch ${f}
-    $CHECKSTAT ${f}
+    $CHECKSTAT ${f} || error "${f} missing"
     mv ${f} ${f}.rename
-    $CHECKSTAT ${f}.rename
-    $CHECKSTAT -a ${f}
+    $CHECKSTAT ${f}.rename || error "${f}.rename missing"
+    $CHECKSTAT -a ${f} || error "${f} exists"
 }
 run_test 24n "Statting the old file after renaming (Posix rename 2)"
 
@@ -964,8 +1040,8 @@ test_24p() {
        test_mkdir $DIR/R12b
        DIRINO=`ls -lid $DIR/R12a | awk '{ print $1 }'`
        mrename $DIR/R12a $DIR/R12b
-       $CHECKSTAT -a $DIR/R12a || error
-       $CHECKSTAT -t dir $DIR/R12b || error
+       $CHECKSTAT -a $DIR/R12a || error "$DIR/R12a exists"
+       $CHECKSTAT -t dir $DIR/R12b || error "$DIR/R12b not dir type"
        DIRINO2=`ls -lid $DIR/R12b | awk '{ print $1 }'`
        [ "$DIRINO" = "$DIRINO2" ] || error "R12a $DIRINO != R12b $DIRINO2"
 }
@@ -1024,7 +1100,7 @@ test_24t() {
 run_test 24t "mkdir .../R16a/b/c; rename .../R16a/b/c .../R16a ="
 
 test_24u() { # bug12192
-       $MULTIOP $DIR/$tfile C2w$((2048 * 1024))c || error
+       $MULTIOP $DIR/$tfile C2w$((2048 * 1024))c || error "multiop failed"
        $CHECKSTAT -s $((2048 * 1024)) $DIR/$tfile || error "wrong file size"
 }
 run_test 24u "create stripe file"
@@ -1285,13 +1361,14 @@ test_25a() {
 
        test_mkdir $DIR/d25
        ln -s d25 $DIR/s25
-       touch $DIR/s25/foo || error
+       touch $DIR/s25/foo ||
+               error "File creation in symlinked directory failed"
 }
 run_test 25a "create file in symlinked directory ==============="
 
 test_25b() {
        [ ! -d $DIR/d25 ] && test_25a
-       $CHECKSTAT -t file $DIR/s25/foo || error
+       $CHECKSTAT -t file $DIR/s25/foo || error "$DIR/s25/foo not file type"
 }
 run_test 25b "lookup file in symlinked directory ==============="
 
@@ -1299,14 +1376,14 @@ test_26a() {
        test_mkdir $DIR/d26
        test_mkdir $DIR/d26/d26-2
        ln -s d26/d26-2 $DIR/s26
-       touch $DIR/s26/foo || error
+       touch $DIR/s26/foo || error "File creation failed"
 }
 run_test 26a "multiple component symlink ======================="
 
 test_26b() {
        test_mkdir -p $DIR/$tdir/d26-2
        ln -s $tdir/d26-2/foo $DIR/s26-2
-       touch $DIR/s26-2 || error
+       touch $DIR/s26-2 || error "File creation failed"
 }
 run_test 26b "multiple component symlink at end of lookup ======"
 
@@ -1355,7 +1432,7 @@ test_27a() {
        $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
+       cp /etc/hosts $DIR/$tdir/$tfile || error "Can't copy to one stripe file"
 }
 run_test 27a "one stripe file"
 
@@ -1547,8 +1624,8 @@ test_27n() {
        reset_enospc
        rm -f $DIR/$tdir/$tfile
        exhaust_precreations 0 0x80000215
-       $LFS setstripe -c -1 $DIR/$tdir
-       touch $DIR/$tdir/$tfile || error
+       $LFS setstripe -c -1 $DIR/$tdir || error "setstripe failed"
+       touch $DIR/$tdir/$tfile || error "touch failed"
        $LFS getstripe $DIR/$tdir/$tfile
        reset_enospc
 }
@@ -1628,7 +1705,7 @@ test_27r() {
        rm -f $DIR/$tdir/$tfile
        exhaust_precreations 0 0x80000215
 
-       $LFS setstripe -i 0 -c 2 $DIR/$tdir/$tfile # && error
+       $LFS setstripe -i 0 -c 2 $DIR/$tdir/$tfile || error "setstripe failed"
 
        reset_enospc
 }
@@ -1674,7 +1751,8 @@ 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"
 
@@ -1971,9 +2049,9 @@ run_test 27z "check SEQ/OID on the MDT and OST filesystems"
 
 test_27A() { # b=19102
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        local restore_size=$($GETSTRIPE -S $MOUNT)
-        local restore_count=$($GETSTRIPE -c $MOUNT)
-        local restore_offset=$($GETSTRIPE -i $MOUNT)
+
+       save_layout_restore_at_exit $MOUNT
+
         $SETSTRIPE -c 0 -i -1 -S 0 $MOUNT
         wait_update $HOSTNAME "$GETSTRIPE -c $MOUNT | sed 's/  *//g'" "1" 20 ||
                 error "stripe count $($GETSTRIPE -c $MOUNT) != 1"
@@ -1983,7 +2061,6 @@ test_27A() { # b=19102
         [ $default_size -eq $dsize ] ||
                 error "stripe size $default_size != $dsize"
         [ $default_offset -eq -1 ] ||error "stripe offset $default_offset != -1"
-        $SETSTRIPE -c $restore_count -i $restore_offset -S $restore_size $MOUNT
 }
 run_test 27A "check filesystem-wide default LOV EA values"
 
@@ -2069,10 +2146,10 @@ test_27D() {
 
        local skip27D
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ] &&
-               skip27D += "-s 29"
+               skip27D+="-s 29"
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.9.55) -o \
          $(lustre_version_code client) -lt $(version_code 2.9.55) ] &&
-               skip27D += "-s 30,31"
+               skip27D+=" -s 30,31"
        llapi_layout_test -d$DIR/$tdir -p$POOL -o$OSTCOUNT $skip27D ||
                error "llapi_layout_test failed"
 
@@ -2158,7 +2235,7 @@ run_test 27F "Client resend delayed layout creation with non-zero size"
 # then visible correctly (#2091)
 test_28() { # bug 2091
        test_mkdir $DIR/d28
-       $CREATETEST $DIR/d28/ct || error
+       $CREATETEST $DIR/d28/ct || error "createtest failed"
 }
 run_test 28 "create/mknod/mkdir with bad file types ============"
 
@@ -2214,7 +2291,7 @@ run_test 29 "IT_GETATTR regression  ============================"
 
 test_30a() { # was test_30
        cp $(which ls) $DIR || cp /bin/ls $DIR
-       $DIR/ls / || error
+       $DIR/ls / || error "Can't execute binary from lustre"
        rm $DIR/ls
 }
 run_test 30a "execute binary from Lustre (execve) =============="
@@ -2222,7 +2299,7 @@ run_test 30a "execute binary from Lustre (execve) =============="
 test_30b() {
        cp `which ls` $DIR || cp /bin/ls $DIR
        chmod go+rx $DIR/ls
-       $RUNAS $DIR/ls / || error
+       $RUNAS $DIR/ls / || error "Can't execute binary from lustre as non-root"
        rm $DIR/ls
 }
 run_test 30b "execute binary from Lustre as non-root ==========="
@@ -2233,29 +2310,30 @@ test_30c() { # b=22376
        chmod a-rw $DIR/ls
        cancel_lru_locks mdc
        cancel_lru_locks osc
-       $RUNAS $DIR/ls / || error
+       $RUNAS $DIR/ls / || error "Can't execute binary from lustre"
        rm -f $DIR/ls
 }
 run_test 30c "execute binary from Lustre without read perms ===="
 
 test_31a() {
-       $OPENUNLINK $DIR/f31 $DIR/f31 || error
-       $CHECKSTAT -a $DIR/f31 || error
+       $OPENUNLINK $DIR/f31 $DIR/f31 || error "openunlink failed"
+       $CHECKSTAT -a $DIR/f31 || error "$DIR/f31 exists"
 }
 run_test 31a "open-unlink file =================================="
 
 test_31b() {
-       touch $DIR/f31 || error
-       ln $DIR/f31 $DIR/f31b || error
-       $MULTIOP $DIR/f31b Ouc || error
-       $CHECKSTAT -t file $DIR/f31 || error
+       touch $DIR/f31 || error "touch $DIR/f31 failed"
+       ln $DIR/f31 $DIR/f31b || error "ln failed"
+       $MULTIOP $DIR/f31b Ouc || error "multiop failed"
+       $CHECKSTAT -t file $DIR/f31 || error "$DIR/f31 not file type"
 }
 run_test 31b "unlink file with multiple links while open ======="
 
 test_31c() {
-       touch $DIR/f31 || error
-       ln $DIR/f31 $DIR/f31c || error
-       multiop_bg_pause $DIR/f31 O_uc || return 1
+       touch $DIR/f31 || error "touch $DIR/f31 failed"
+       ln $DIR/f31 $DIR/f31c || error "ln failed"
+       multiop_bg_pause $DIR/f31 O_uc ||
+               error "multiop_bg_pause for $DIR/f31 failed"
        MULTIPID=$!
        $MULTIOP $DIR/f31c Ouc
        kill -USR1 $MULTIPID
@@ -2264,13 +2342,13 @@ test_31c() {
 run_test 31c "open-unlink file with multiple links ============="
 
 test_31d() {
-       opendirunlink $DIR/d31d $DIR/d31d || error
-       $CHECKSTAT -a $DIR/d31d || error
+       opendirunlink $DIR/d31d $DIR/d31d || error "opendirunlink failed"
+       $CHECKSTAT -a $DIR/d31d || error "$DIR/d31d exists"
 }
 run_test 31d "remove of open directory ========================="
 
 test_31e() { # bug 2904
-       openfilleddirunlink $DIR/d31e || error
+       openfilleddirunlink $DIR/d31e || error "openfilleddirunlink failed"
 }
 run_test 31e "remove of open non-empty directory ==============="
 
@@ -2431,7 +2509,7 @@ test_31p() {
 
        test_mkdir $DIR/$tdir
        $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir
-       $LFS setdirstripe -D -c2 -t all_char $DIR/$tdir/striped_dir
+       $LFS setdirstripe -D -c2 -H all_char $DIR/$tdir/striped_dir
 
        opendirunlink $DIR/$tdir/striped_dir/test1 ||
                error "open unlink test1 failed"
@@ -2461,8 +2539,10 @@ test_32a() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
-       $CHECKSTAT -t dir $DIR/$tdir/ext2-mountpoint/.. || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
+       $CHECKSTAT -t dir $DIR/$tdir/ext2-mountpoint/.. ||
+               error "$DIR/$tdir/ext2-mountpoint/.. not dir type"
        cleanup_test32_mount
 }
 run_test 32a "stat d32a/ext2-mountpoint/.. ====================="
@@ -2472,8 +2552,10 @@ test_32b() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
-       ls -al $DIR/$tdir/ext2-mountpoint/.. || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
+       ls -al $DIR/$tdir/ext2-mountpoint/.. ||
+               error "Can't list $DIR/$tdir/ext2-mountpoint/.."
        cleanup_test32_mount
 }
 run_test 32b "open d32b/ext2-mountpoint/.. ====================="
@@ -2483,9 +2565,11 @@ test_32c() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        test_mkdir -p $DIR/$tdir/d2/test_dir
-       $CHECKSTAT -t dir $DIR/$tdir/ext2-mountpoint/../d2/test_dir || error
+       $CHECKSTAT -t dir $DIR/$tdir/ext2-mountpoint/../d2/test_dir ||
+               error "$DIR/$tdir/ext2-mountpoint/../d2/test_dir not dir type"
        cleanup_test32_mount
 }
 run_test 32c "stat d32c/ext2-mountpoint/../d2/test_dir ========="
@@ -2495,9 +2579,11 @@ test_32d() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        test_mkdir -p $DIR/$tdir/d2/test_dir
-       ls -al $DIR/$tdir/ext2-mountpoint/../d2/test_dir || error
+       ls -al $DIR/$tdir/ext2-mountpoint/../d2/test_dir ||
+               error "Can't list $DIR/$tdir/ext2-mountpoint/../d2/test_dir"
        cleanup_test32_mount
 }
 run_test 32d "open d32d/ext2-mountpoint/../d2/test_dir"
@@ -2554,9 +2640,11 @@ test_32i() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        touch $DIR/$tdir/test_file
-       $CHECKSTAT -t file $DIR/$tdir/ext2-mountpoint/../test_file || error
+       $CHECKSTAT -t file $DIR/$tdir/ext2-mountpoint/../test_file ||
+               error "$DIR/$tdir/ext2-mountpoint/../test_file not file type"
        cleanup_test32_mount
 }
 run_test 32i "stat d32i/ext2-mountpoint/../test_file ==========="
@@ -2566,9 +2654,11 @@ test_32j() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        touch $DIR/$tdir/test_file
-       cat $DIR/$tdir/ext2-mountpoint/../test_file || error
+       cat $DIR/$tdir/ext2-mountpoint/../test_file ||
+               error "Can't open $DIR/$tdir/ext2-mountpoint/../test_file"
        cleanup_test32_mount
 }
 run_test 32j "open d32j/ext2-mountpoint/../test_file ==========="
@@ -2578,10 +2668,12 @@ test_32k() {
        rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        test_mkdir -p $DIR/$tdir/d2
-       touch $DIR/$tdir/d2/test_file || error
-       $CHECKSTAT -t file $DIR/$tdir/ext2-mountpoint/../d2/test_file || error
+       touch $DIR/$tdir/d2/test_file || error "touch failed"
+       $CHECKSTAT -t file $DIR/$tdir/ext2-mountpoint/../d2/test_file ||
+               error "$DIR/$tdir/ext2-mountpoint/../d2/test_file not file type"
        cleanup_test32_mount
 }
 run_test 32k "stat d32k/ext2-mountpoint/../d2/test_file ========"
@@ -2591,10 +2683,12 @@ test_32l() {
        rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint || error
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        test_mkdir -p $DIR/$tdir/d2
-       touch $DIR/$tdir/d2/test_file
-       cat  $DIR/$tdir/ext2-mountpoint/../d2/test_file || error
+       touch $DIR/$tdir/d2/test_file || error "touch failed"
+       cat  $DIR/$tdir/ext2-mountpoint/../d2/test_file ||
+               error "Can't open $DIR/$tdir/ext2-mountpoint/../d2/test_file"
        cleanup_test32_mount
 }
 run_test 32l "open d32l/ext2-mountpoint/../d2/test_file ========"
@@ -2605,8 +2699,10 @@ test_32m() {
        TMP_DIR=$DIR/d32m/tmp
        ln -s $DIR $TMP_DIR/symlink11
        ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
-       $CHECKSTAT -t link $DIR/d32m/tmp/symlink11 || error
-       $CHECKSTAT -t link $DIR/d32m/symlink01 || error
+       $CHECKSTAT -t link $DIR/d32m/tmp/symlink11 ||
+               error "symlink11 not a link"
+       $CHECKSTAT -t link $DIR/d32m/symlink01 ||
+               error "symlink01 not a link"
 }
 run_test 32m "stat d32m/symlink->tmp/symlink->lustre-root ======"
 
@@ -2616,8 +2712,8 @@ test_32n() {
        TMP_DIR=$DIR/d32n/tmp
        ln -s $DIR $TMP_DIR/symlink11
        ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
-       ls -l $DIR/d32n/tmp/symlink11  || error
-       ls -l $DIR/d32n/symlink01 || error
+       ls -l $DIR/d32n/tmp/symlink11  || error "listing symlink11"
+       ls -l $DIR/d32n/symlink01 || error "listing symlink01"
 }
 run_test 32n "open d32n/symlink->tmp/symlink->lustre-root ======"
 
@@ -2627,10 +2723,13 @@ test_32o() {
        TMP_DIR=$DIR/d32o/tmp
        ln -s $DIR/$tfile $TMP_DIR/symlink12
        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
-       $CHECKSTAT -t link $DIR/d32o/tmp/symlink12 || error
-       $CHECKSTAT -t link $DIR/d32o/symlink02 || error
-       $CHECKSTAT -t file -f $DIR/d32o/tmp/symlink12 || error
-       $CHECKSTAT -t file -f $DIR/d32o/symlink02 || error
+       $CHECKSTAT -t link $DIR/d32o/tmp/symlink12 ||
+               error "symlink12 not a link"
+       $CHECKSTAT -t link $DIR/d32o/symlink02 || error "symlink02 not a link"
+       $CHECKSTAT -t file -f $DIR/d32o/tmp/symlink12 ||
+               error "$DIR/d32o/tmp/symlink12 not file type"
+       $CHECKSTAT -t file -f $DIR/d32o/symlink02 ||
+               error "$DIR/d32o/symlink02 not file type"
 }
 run_test 32o "stat d32o/symlink->tmp/symlink->lustre-root/$tfile"
 
@@ -2650,9 +2749,10 @@ test_32p() {
        log 32p_7
        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
        log 32p_8
-       cat $DIR/d32p/tmp/symlink12 || error
+       cat $DIR/d32p/tmp/symlink12 ||
+               error "Can't open $DIR/d32p/tmp/symlink12"
        log 32p_9
-       cat $DIR/d32p/symlink02 || error
+       cat $DIR/d32p/symlink02 || error "Can't open $DIR/d32p/symlink02"
        log 32p_10
 }
 run_test 32p "open d32p/symlink->tmp/symlink->lustre-root/$tfile"
@@ -2662,8 +2762,9 @@ test_32q() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       touch $DIR/$tdir/ext2-mountpoint/under_the_mount
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint
+       touch $DIR/$tdir/ext2-mountpoint/under_the_mount || error "touch failed"
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        ls $DIR/$tdir/ext2-mountpoint | grep "\<under_the_mount\>" && error
        cleanup_test32_mount
 }
@@ -2674,8 +2775,9 @@ test_32r() {
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
        trap cleanup_test32_mount EXIT
        test_mkdir -p $DIR/$tdir/ext2-mountpoint
-       touch $DIR/$tdir/ext2-mountpoint/under_the_mount
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint
+       touch $DIR/$tdir/ext2-mountpoint/under_the_mount || error "touch failed"
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint ||
+               error "mount failed for $EXT2_DEV $DIR/$tdir/ext2-mountpoint"
        ls $DIR/$tdir/ext2-mountpoint | grep -q under_the_mount && error || true
        cleanup_test32_mount
 }
@@ -2890,47 +2992,59 @@ run_test 33g "nonroot user create already existing root created file"
 TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
 test_34a() {
        rm -f $DIR/f34
-       $MCREATE $DIR/f34 || error
-       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" || error
-       $TRUNCATE $DIR/f34 $TEST_34_SIZE || error
-       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" || error
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
+       $MCREATE $DIR/f34 || error "mcreate failed"
+       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" ||
+               error "getstripe failed"
+       $TRUNCATE $DIR/f34 $TEST_34_SIZE || error "truncate failed"
+       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" ||
+               error "getstripe failed"
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
+               error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
 }
 run_test 34a "truncate file that has not been opened ==========="
 
 test_34b() {
        [ ! -f $DIR/f34 ] && test_34a
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
+               error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
        $OPENFILE -f O_RDONLY $DIR/f34
-       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" || error
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
+       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" ||
+               error "getstripe failed"
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
+               error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
 }
 run_test 34b "O_RDONLY opening file doesn't create objects ====="
 
 test_34c() {
        [ ! -f $DIR/f34 ] && test_34a
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
+               error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
        $OPENFILE -f O_RDWR $DIR/f34
        $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" && error
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
+               error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
 }
 run_test 34c "O_RDWR opening file-with-size works =============="
 
 test_34d() {
        [ ! -f $DIR/f34 ] && test_34a
-       dd if=/dev/zero of=$DIR/f34 conv=notrunc bs=4k count=1 || error
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
+       dd if=/dev/zero of=$DIR/f34 conv=notrunc bs=4k count=1 ||
+               error "dd failed"
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
+               error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
        rm $DIR/f34
 }
 run_test 34d "write to sparse file ============================="
 
 test_34e() {
        rm -f $DIR/f34e
-       $MCREATE $DIR/f34e || error
-       $TRUNCATE $DIR/f34e 1000 || error
-       $CHECKSTAT -s 1000 $DIR/f34e || error
+       $MCREATE $DIR/f34e || error "mcreate failed"
+       $TRUNCATE $DIR/f34e 1000 || error "truncate failed"
+       $CHECKSTAT -s 1000 $DIR/f34e ||
+               error "Size of $DIR/f34e not equal to 1000 bytes"
        $OPENFILE -f O_RDWR $DIR/f34e
-       $CHECKSTAT -s 1000 $DIR/f34e || error
+       $CHECKSTAT -s 1000 $DIR/f34e ||
+               error "Size of $DIR/f34e not equal to 1000 bytes"
 }
 run_test 34e "create objects, some with size and some without =="
 
@@ -2938,7 +3052,7 @@ test_34f() { # bug 6242, 6243
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        SIZE34F=48000
        rm -f $DIR/f34f
-       $MCREATE $DIR/f34f || error
+       $MCREATE $DIR/f34f || error "mcreate failed"
        $TRUNCATE $DIR/f34f $SIZE34F || error "truncating $DIR/f3f to $SIZE34F"
        dd if=$DIR/f34f of=$TMP/f34f
        $CHECKSTAT -s $SIZE34F $TMP/f34f || error "$TMP/f34f not $SIZE34F bytes"
@@ -2951,18 +3065,20 @@ run_test 34f "read from a file with no objects until EOF ======="
 
 test_34g() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       dd if=/dev/zero of=$DIR/$tfile bs=1 count=100 seek=$TEST_34_SIZE || error
-       $TRUNCATE $DIR/$tfile $((TEST_34_SIZE / 2))|| error
-       $CHECKSTAT -s $((TEST_34_SIZE / 2)) $DIR/$tfile || error "truncate failed"
+       dd if=/dev/zero of=$DIR/$tfile bs=1 count=100 seek=$TEST_34_SIZE ||
+               error "dd failed"
+       $TRUNCATE $DIR/$tfile $((TEST_34_SIZE / 2))|| error "truncate failed"
+       $CHECKSTAT -s $((TEST_34_SIZE / 2)) $DIR/$tfile ||
+               error "Size of $DIR/$tfile not equal to $((TEST_34_SIZE / 2))"
        cancel_lru_locks osc
-       $CHECKSTAT -s $((TEST_34_SIZE / 2)) $DIR/$tfile || \
+       $CHECKSTAT -s $((TEST_34_SIZE / 2)) $DIR/$tfile ||
                error "wrong size after lock cancel"
 
-       $TRUNCATE $DIR/$tfile $TEST_34_SIZE || error
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/$tfile || \
+       $TRUNCATE $DIR/$tfile $TEST_34_SIZE || error "truncate failed"
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/$tfile ||
                error "expanding truncate failed"
        cancel_lru_locks osc
-       $CHECKSTAT -s $TEST_34_SIZE $DIR/$tfile || \
+       $CHECKSTAT -s $TEST_34_SIZE $DIR/$tfile ||
                error "wrong expanded size after lock cancel"
 }
 run_test 34g "truncate long file ==============================="
@@ -2972,7 +3088,7 @@ test_34h() {
        local gid=10
        local sz=1000
 
-       dd if=/dev/zero of=$DIR/$tfile bs=1M count=10 || error
+       dd if=/dev/zero of=$DIR/$tfile bs=1M count=10 || error "dd failed"
        sync # Flush the cache so that multiop below does not block on cache
             # flush when getting the group lock
        $MULTIOP $DIR/$tfile OG${gid}T${sz}g${gid}c &
@@ -3006,13 +3122,13 @@ run_test 35a "exec file with mode 444 (should return and not leak)"
 
 test_36a() {
        rm -f $DIR/f36
-       utime $DIR/f36 || error
+       utime $DIR/f36 || error "utime failed for MDS"
 }
 run_test 36a "MDS utime check (mknod, utime)"
 
 test_36b() {
        echo "" > $DIR/f36
-       utime $DIR/f36 || error
+       utime $DIR/f36 || error "utime failed for OST"
 }
 run_test 36b "OST utime check (open, utime)"
 
@@ -3020,14 +3136,14 @@ test_36c() {
        rm -f $DIR/d36/f36
        test_mkdir $DIR/d36
        chown $RUNAS_ID $DIR/d36
-       $RUNAS utime $DIR/d36/f36 || error
+       $RUNAS utime $DIR/d36/f36 || error "utime failed for MDS as non-root"
 }
 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
+       $RUNAS utime $DIR/d36/f36 || error "utime failed for OST as non-root"
 }
 run_test 36d "non-root OST utime check (open, utime)"
 
@@ -3839,6 +3955,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"
@@ -3853,6 +3970,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"
@@ -4481,107 +4599,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; }
 
@@ -4589,6 +4717,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'"
 
@@ -4604,474 +4733,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"
 
 test_56i() {
-       tdir=${tdir}i
-       test_mkdir $DIR/$tdir
-       UUID=$(ostuuid_from_index 0 $DIR/$tdir)
-       CMD="$LFIND -ost $UUID $DIR/$tdir"
-       OUT=$($CMD)
-       [ -z "$OUT" ] || error "'$CMD' returned directory '$OUT'"
+       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"
 
 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 "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
@@ -5081,14 +5215,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
@@ -5096,78 +5231,298 @@ 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..."
+       pool_list=($($LFS pool_list $FSNAME | grep "$FSNAME\." | cut -d. -f2))
+
+       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 "needs >= 2 OSTs" && return
 
-       local dir0=$DIR/$tdir
+       local dir=$DIR/$tdir
        local ref1=/etc/passwd
-       local file1=$dir0/file1
+       local file1=$dir/file1
 
-       test_mkdir $dir0 || error "creating dir $dir0"
+       test_mkdir $dir || error "creating dir $dir"
        $LFS setstripe -c 2 $file1
        cp $ref1 $file1
        $LFS migrate -c 1 $file1 || error "migrate failed rc = $?"
@@ -5184,16 +5539,19 @@ test_56xa() {
        check_swap_layouts_support && return 0
        [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" && return
 
-       local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $dir0
+       local dir=$DIR/$tdir/$testnum
+
+       test_mkdir -p $dir
 
        local ref1=/etc/passwd
-       local file1=$dir0/file1
+       local file1=$dir/file1
 
        $LFS setstripe -c 2 $file1
        cp $ref1 $file1
        $LFS migrate --block -c 1 $file1 || error "migrate failed rc = $?"
+
        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"
 
@@ -5263,6 +5621,7 @@ check_migrate_links() {
                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
@@ -5272,11 +5631,13 @@ check_migrate_links() {
        # 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"
@@ -5285,24 +5646,24 @@ check_migrate_links() {
 }
 
 test_56xb() {
-       local dir0="$DIR/$tdir"
+       local dir="$DIR/$tdir"
 
-       test_mkdir "$dir0" || error "cannot create dir $dir0"
+       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 "$dir0" 2 99
+       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 "$dir0" 2 99
+       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 "$dir0" 101 100
+       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 "$dir0" 101 100
+       LFS_MIGRATE_RSYNC=true check_migrate_links "$dir" 101 100
 
        # clean up
-       rm -rf $dir0
+       rm -rf $dir
 }
 run_test 56xb "lfs migration hard link support"
 
@@ -5312,28 +5673,27 @@ test_56y() {
                return
 
        local res=""
-       local dir0=$DIR/$tdir/$testnum
-       test_mkdir -p $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"
 
@@ -5344,18 +5704,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"
 }
@@ -5364,11 +5728,13 @@ 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
 
-       createmany -o $DIR/$tdir/striped_dir/${tfile}- 1024
-       local dirs=$(lfs find --size +8k $DIR/$tdir/)
+       mkdir $dir
+       $LFS setdirstripe -c$MDSCOUNT $dir/striped_dir
+
+       createmany -o $dir/striped_dir/${tfile}- 1024
+       local dirs=$(lfs find --size +8k $dir/)
 
        [ -n "$dirs" ] || error "lfs find --size wrong under striped dir"
 }
@@ -5376,66 +5742,140 @@ run_test 56aa "lfs find --size under striped dir"
 
 test_56ba() {
        # Create composite files with one component
-       TDIR=$DIR/$tdir/1Mfiles
-       setup_56 5 1 "--component-end 1M"
+       local dir=$DIR/$tdir
+
+       setup_56 $dir/1Mfiles 5 1 "--component-end 1M"
        # Create composite files with three components
-       TDIR=$DIR/$tdir/2Mfiles
-       setup_56 5 2 "-E 2M -E 4M -E 6M"
-       TDIR=$DIR/$tdir
+       setup_56 $dir/2Mfiles 5 2 "-E 2M -E 4M -E 6M"
        # Create non-composite files
-       createmany -o $TDIR/${tfile}- 10
+       createmany -o $dir/${tfile}- 10
+
+       local nfiles=$($LFS find --component-end 1M --type f $dir | wc -l)
 
-       local nfiles=$($LFIND --component-end 1M --type f $TDIR | wc -l)
        [[ $nfiles == 10 ]] ||
                error "lfs find -E 1M found $nfiles != 10 files"
 
-       nfiles=$($LFIND ! -E 1M --type f $TDIR | wc -l)
+       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
-       local nfiles=$($LFIND --component-start 0 --type f $TDIR | wc -l)
+       nfiles=$($LFS find --component-start 0 --type f $dir | wc -l)
        [[ $nfiles == 35 ]] ||
-               error "lfs find --component-start 0 found $nfiles != 35 files"
+               error "lfs find --component-start 0 - $nfiles != 35 files"
 
-       nfiles=$($LFIND --component-start 2M --type f $TDIR | wc -l)
+       nfiles=$($LFS find --component-start 2M --type f $dir | wc -l)
        [[ $nfiles == 15 ]] ||
-               error "$LFIND --component-start 2M found $nfiles != 15 files"
+               error "lfs find --component-start 2M - $nfiles != 15 files"
 
        # All files created here have a componenet that does not starts at 2M
-       nfiles=$($LFIND ! --component-start 2M --type f $TDIR | wc -l)
+       nfiles=$($LFS find ! --component-start 2M --type f $dir | wc -l)
        [[ $nfiles == 35 ]] ||
-               error "$LFIND ! --component-start 2M found $nfiles != 35 files"
+               error "lfs find ! --component-start 2M - $nfiles != 35 files"
 
        # Find files with a specified number of components
-       local nfiles=$($LFIND --component-count 3 --type f $TDIR | wc -l)
+       local nfiles=$($LFS find --component-count 3 --type f $dir | wc -l)
        [[ $nfiles == 15 ]] ||
-               error "lfs find --component-count 3 found $nfiles != 15 files"
+               error "lfs find --component-count 3 - $nfiles != 15 files"
 
        # Remember non-composite files have a component count of zero
-       local nfiles=$($LFIND --component-count 0 --type f $TDIR | wc -l)
+       local nfiles=$($LFS find --component-count 0 --type f $dir | wc -l)
        [[ $nfiles == 10 ]] ||
-               error "lfs find --component-count 0 found $nfiles != 10 files"
+               error "lfs find --component-count 0 - $nfiles != 10 files"
 
-       nfiles=$($LFIND ! --component-count 3 --type f $TDIR | wc -l)
+       nfiles=$($LFS find ! --component-count 3 --type f $dir | wc -l)
        [[ $nfiles == 20 ]] ||
-               error "$LFIND ! --component-count 3 found $nfiles != 20 files"
+               error "lfs find ! --component-count 3 - $nfiles != 20 files"
 
        # All files have a flag called "init"
-       local nfiles=$($LFIND --component-flags init --type f $TDIR | wc -l)
+       local nfiles=$($LFS find --component-flags init --type f $dir | wc -l)
        [[ $nfiles == 35 ]] ||
-               error "$LFIND --component-flags init found $nfiles != 35 files"
+               error "lfs find --component-flags init - $nfiles != 35 files"
 
        # Multi-component files will have a component not initialized
-       local nfiles=$($LFIND ! --component-flags init --type f $TDIR | wc -l)
+       local nfiles=$($LFS find ! --component-flags init --type f $dir | wc -l)
        [[ $nfiles == 15 ]] ||
-               error "$LFIND !--component-flags init found $nfiles != 15 files"
+               error "lfs find !--component-flags init - $nfiles != 15 files"
 
-       rm -rf $TDIR
+       rm -rf $dir
 
 }
 run_test 56ba "test lfs find --component-end, -start, -count, and -flags"
 
+test_56ca() {
+       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.57) ]] ||
+               { skip "Need MDS version at least 2.10.57"; return 0; }
+
+       local td=$DIR/$tdir
+       local tf=$td/$tfile
+       local dir
+       local nfiles
+       local cmd
+       local i
+       local j
+
+       # create mirrored directories and mirrored files
+       mkdir $td || error "mkdir $td failed"
+       $LFS mirror create -N3 $td || error "create mirrored dir $td failed"
+       createmany -o $tf- 10 || error "create $tf- failed"
+
+       for i in $(seq 2); do
+               dir=$td/dir$i
+               mkdir $dir || error "mkdir $dir failed"
+               $LFS mirror create -N$((3 + i)) $dir ||
+                       error "create mirrored dir $dir failed"
+               createmany -o $dir/$tfile- 10 ||
+                       error "create $dir/$tfile- failed"
+       done
+
+       # change the states of some mirrored files
+       echo foo > $tf-6
+       for i in $(seq 2); do
+               dir=$td/dir$i
+               for j in $(seq 4 9); do
+                       echo foo > $dir/$tfile-$j
+               done
+       done
+
+       # find mirrored files with specific mirror count
+       cmd="$LFS find --mirror-count 3 --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 10 ]] || error "$cmd: $nfiles != 10 files"
+
+       cmd="$LFS find ! --mirror-count 3 --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 20 ]] || error "$cmd: $nfiles != 20 files"
+
+       cmd="$LFS find --mirror-count +2 --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 30 ]] || error "$cmd: $nfiles != 30 files"
+
+       cmd="$LFS find --mirror-count -6 --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 30 ]] || error "$cmd: $nfiles != 30 files"
+
+       # find mirrored files with specific file state
+       cmd="$LFS find --maxdepth 1 --mirror-state=^ro --type f $td"
+       [[ $($cmd) = $tf-6 ]] || error "$cmd: didn't return $tf-6"
+
+       cmd="$LFS find --mirror-state=ro --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 17 ]] || error "$cmd: $nfiles != 17 files"
+
+       cmd="$LFS find ! --mirror-state=ro --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 13 ]] || error "$cmd: $nfiles != 13 files"
+
+       cmd="$LFS find --mirror-state=wp --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 13 ]] || error "$cmd: $nfiles != 13 files"
+
+       cmd="$LFS find ! --mirror-state=sp --type f $td"
+       nfiles=$($cmd | wc -l)
+       [[ $nfiles = 30 ]] || error "$cmd: $nfiles != 30 files"
+}
+run_test 56ca "check lfs find --mirror-count|-N and --mirror-state"
+
 test_57a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        # note test will not do anything if MDS is not local
@@ -5788,6 +6228,92 @@ test_64c() {
 }
 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
@@ -5888,38 +6414,38 @@ test_65h() {
 }
 run_test 65h "directory stripe info inherit ===================="
 
-test_65i() { # bug6367
+test_65i() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        $SETSTRIPE -S 65536 -c -1 $MOUNT
-}
-run_test 65i "set non-default striping on root directory (bug 6367)="
 
-test_65ia() { # bug12836
-       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       $GETSTRIPE $MOUNT || error "getstripe $MOUNT failed"
-}
-run_test 65ia "getstripe on -1 default directory striping"
+       save_layout_restore_at_exit $MOUNT
 
-test_65ib() { # bug12836
-       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       $GETSTRIPE -v $MOUNT || error "getstripe -v $MOUNT failed"
-}
-run_test 65ib "getstripe -v on -1 default directory striping"
+       # bug6367: set non-default striping on root directory
+       $LFS setstripe -S 65536 -c -1 $MOUNT || error "error setting stripe"
 
-test_65ic() { # bug12836
-       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       # bug12836: getstripe on -1 default directory striping
+       $LFS getstripe $MOUNT || error "getstripe $MOUNT failed"
+
+       # bug12836: getstripe -v on -1 default directory striping
+       $LFS getstripe -v $MOUNT || error "getstripe -v $MOUNT failed"
+
+       # bug12836: new find on -1 default directory striping
        $LFS find -mtime -1 $MOUNT > /dev/null || error "find $MOUNT failed"
 }
-run_test 65ic "new find on -1 default directory striping"
+run_test 65i "various tests to set root directory striping"
 
 test_65j() { # bug6367
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+
        sync; sleep 1
+
        # if we aren't already remounting for each test, do so for this test
        if [ "$CLEANUP" = ":" -a "$I_MOUNTED" = "yes" ]; then
                cleanup || error "failed to unmount"
                setup
        fi
+
+       save_layout_restore_at_exit $MOUNT
+
        $SETSTRIPE -d $MOUNT || error "setstripe failed"
 }
 run_test 65j "set default striping on root directory (bug 6367)="
@@ -5994,7 +6520,11 @@ test_65l() { # bug 12836
 run_test 65l "lfs find on -1 stripe dir ========================"
 
 test_65m() {
-       $RUNAS $SETSTRIPE -c 2 $MOUNT && error "setstripe should fail"
+       local layout=$(save_layout $MOUNT)
+       $RUNAS $SETSTRIPE -c 2 $MOUNT && {
+               restore_layout $MOUNT $layout
+               error "setstripe should fail by non-root users"
+       }
        true
 }
 run_test 65m "normal user can't set filesystem default stripe"
@@ -6359,7 +6889,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}\*)
@@ -7041,14 +7571,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) -a \
-            $(lustre_version_code client) -ge $(version_code 2.8.52) ]; then
-               [ $(lustre_version_code ost1) -ge $(version_code 2.9.52) ] &&
-                       suffix="M"
+       if [ $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 ||
@@ -8504,6 +9039,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))
@@ -9332,7 +9895,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")
@@ -9379,7 +9942,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)
 
@@ -9429,7 +9992,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 |
@@ -9488,7 +10051,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 |
@@ -9556,7 +10119,7 @@ test_130d() {
                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 |
@@ -9618,7 +10181,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 |
@@ -9660,6 +10223,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 ||
@@ -10060,6 +10644,7 @@ 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 \
@@ -10075,6 +10660,7 @@ 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 \
@@ -10599,6 +11185,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 &&
@@ -11111,9 +11699,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"
 
@@ -11383,6 +11970,186 @@ 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 -c1 $DIR/$tdir
@@ -11682,7 +12449,7 @@ test_162b() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
        mkdir $DIR/$tdir
-       $LFS setdirstripe -i0 -c$MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i0 -c$MDSCOUNT -H all_char $DIR/$tdir/striped_dir ||
                                error "create striped dir failed"
 
        local FID=$($LFS getdirstripe $DIR/$tdir/striped_dir |
@@ -11757,16 +12524,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"
@@ -12056,6 +12824,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"
 
@@ -13486,7 +14256,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)"
@@ -13983,19 +14753,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) ] ||
@@ -14033,17 +14828,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
 
@@ -14299,6 +15085,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 ||
@@ -14310,11 +15104,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"
 
@@ -14341,12 +15135,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"
 
@@ -14360,10 +15154,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"
 
@@ -14904,6 +15698,8 @@ facet_meminfo() {
 }
 
 test_255b() {
+       [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
+               skip "lustre < 2.8.54 does not support ladvise " && return
        remote_ost_nodsh && skip "remote OST with nodsh" && return
 
        lfs setstripe -c 1 -i 0 $DIR/$tfile
@@ -14979,7 +15775,7 @@ test_255c() {
 
        #test 10 returns only success/failure
        i=10
-       lockahead_test -d $DIR/$tdir -t $i
+       lockahead_test -d $DIR/$tdir -t $i -f $tfile
        rc=$?
        if [ $rc -eq 255 ]; then
                error "Ladvise test${i} failed, ${rc}"
@@ -14991,7 +15787,7 @@ test_255c() {
                $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
+       lockahead_test -d $DIR/$tdir -t $i -f $tfile
        rc=$?
        if [ $rc -eq 255 ]; then
                error "Ladvise test${i} failed, ${rc}"
@@ -15017,7 +15813,7 @@ test_255c() {
                count=$($LCTL get_param -n \
                       ldlm.namespaces.$FSNAME-OST0000*osc-f*.lock_unused_count)
 
-               lockahead_test -d $DIR/$tdir -t $i
+               lockahead_test -d $DIR/$tdir -t $i -f $tfile
                rc=$?
                if [ $rc -eq 255 ]; then
                        error "Ladvise test ${i} failed, ${rc}"
@@ -15040,12 +15836,11 @@ test_255c() {
 
        #test 22 returns only success/failure
        i=22
-       lockahead_test -d $DIR/$tdir -t $i
+       lockahead_test -d $DIR/$tdir -t $i -f $tfile
        rc=$?
        if [ $rc -eq 255 ]; then
                error "Ladvise test${i} failed, ${rc}"
        fi
-
 }
 run_test 255c "suite of ladvise lockahead tests"
 
@@ -15185,6 +15980,10 @@ 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
@@ -15201,7 +16000,7 @@ test_270a() {
        $LFS setstripe -E 1M -L mdt $dom ||
                error "Can't create DoM layout"
 
-       [ $($LFS getstripe -L $dom) == 100 ] || error "bad pattern"
+       [ $($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"
 
@@ -15280,6 +16079,9 @@ test_270a() {
 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
 
@@ -15302,12 +16104,15 @@ test_270b() {
 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) == 100 ] ||
+       [ $($GETSTRIPE -L $DIR/$tdir/first) == "mdt" ] ||
                error "bad pattern"
        [ $($LFS getstripe -c $DIR/$tdir/first) == 0 ] ||
                error "bad stripe count"
@@ -15317,7 +16122,7 @@ test_270c() {
        # 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) == 100 ] ||
+       [ $($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"
@@ -15328,6 +16133,9 @@ test_270c() {
 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
 
@@ -15340,13 +16148,16 @@ test_270d() {
        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) == 1 ] ||
+       [ $($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
@@ -15358,25 +16169,25 @@ test_270e() {
        createmany -o $DIR/$tdir/norm/norm- $NORMFILES
 
        # find DoM files by layout
-       NUM=$($LFIND -L mdt -type f $DIR/$tdir 2>/dev/null | wc -l)
+       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=$($LFIND -L mdt -type d $DIR/$tdir 2>/dev/null | wc -l)
+       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=$($LFIND -S -1200K -type f $DIR/$tdir 2>/dev/null | wc -l)
+       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=$($LFIND -i 0 -type f $DIR/$tdir 2>/dev/null | wc -l)
+       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"
@@ -15385,6 +16196,9 @@ test_270e() {
 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 \
@@ -15443,6 +16257,9 @@ test_270f() {
 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
@@ -15461,6 +16278,9 @@ test_271a() {
 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
@@ -15481,6 +16301,9 @@ test_271b() {
 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
@@ -15508,6 +16331,9 @@ 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
@@ -15547,6 +16373,25 @@ test_271c() {
 }
 run_test 271c "DoM: IO lock at open saves enqueue RPCs"
 
+test_276() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+       local pid
+
+       do_facet ost1 "(while true; do \
+               $LCTL get_param obdfilter.*.filesfree > /dev/null 2>&1; \
+               done) & pid=\\\$!; echo \\\$pid > $TMP/sanity_276_pid" &
+       pid=$!
+
+       for LOOP in $(seq 20); do
+               stop ost1
+               start ost1 $(ostdevname 1) $OST_MOUNT_OPTS
+       done
+       kill -9 $pid
+       do_facet ost1 "pid=\\\$(cat $TMP/sanity_276_pid); kill -9 \\\$pid; \
+               rm $TMP/sanity_276_pid"
+}
+run_test 276 "Race between mount and obd_statfs"
+
 cleanup_test_300() {
        trap 0
        umask $SAVE_UMASK
@@ -15561,7 +16406,7 @@ test_striped_dir() {
        SAVE_UMASK=$(umask)
        trap cleanup_test_300 RETURN EXIT
 
-       $LFS setdirstripe -i $mdt_index -c 2 -t all_char -m 755 \
+       $LFS setdirstripe -i $mdt_index -c 2 -H all_char -o 755 \
                                                $DIR/$tdir/striped_dir ||
                error "set striped dir error"
 
@@ -15640,23 +16485,19 @@ test_300b() {
        local mtime2
        local mtime3
 
-       test_mkdir $DIR/$tdir
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+       test_mkdir $DIR/$tdir || error "mkdir fail"
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
-       for ((i=0; i<10; i++)); do
+       for i in {0..9}; do
                mtime1=$(stat -c %Y $DIR/$tdir/striped_dir)
                sleep 1
-               touch $DIR/$tdir/striped_dir/file_$i ||
-                                       error "touch error $i"
+               touch $DIR/$tdir/striped_dir/file_$i || error "touch error $i"
                mtime2=$(stat -c %Y $DIR/$tdir/striped_dir)
-               [ $mtime1 -eq $mtime2 ] &&
-                       error "mtime not change after create"
+               [ $mtime1 -eq $mtime2 ] && error "mtime unchanged after create"
                sleep 1
-               rm -f $DIR/$tdir/striped_dir/file_$i ||
-                                       error "unlink error $i"
+               rm -f $DIR/$tdir/striped_dir/file_$i || error "unlink error $i"
                mtime3=$(stat -c %Y $DIR/$tdir/striped_dir)
-               [ $mtime2 -eq $mtime3 ] &&
-                       error "mtime did not change after unlink"
+               [ $mtime2 -eq $mtime3 ] && error "mtime unchanged after unlink"
        done
        true
 }
@@ -15699,7 +16540,7 @@ test_300d() {
        $SETSTRIPE -c 2 $DIR/$tdir
 
        #local striped directory
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
        createmany -o $DIR/$tdir/striped_dir/f 10 ||
                error "create 10 files failed"
@@ -15730,7 +16571,7 @@ test_300e() {
 
        mkdir -p $DIR/$tdir
 
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
 
        touch $DIR/$tdir/striped_dir/a
@@ -15741,13 +16582,13 @@ test_300e() {
        mkdir $DIR/$tdir/striped_dir/dir_b
        mkdir $DIR/$tdir/striped_dir/dir_c
 
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_a ||
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir/stp_a ||
                error "set striped adir under striped dir error"
 
        $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir/stp_b ||
                error "set striped bdir under striped dir error"
 
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_c ||
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir/stp_c ||
                error "set striped cdir under striped dir error"
 
        mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_b ||
@@ -15777,10 +16618,10 @@ test_300f() {
        rm -rf $DIR/$tdir
        mkdir -p $DIR/$tdir
 
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
 
-       $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir1 ||
+       $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir1 ||
                error "set striped dir error"
 
        touch $DIR/$tdir/striped_dir/a
@@ -15914,8 +16755,7 @@ test_300h() {
        local stripe_count
 
        mkdir $DIR/$tdir
-       $LFS setdirstripe -i 0 -c $MDSCOUNT -t all_char \
-                                       $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c$MDSCOUNT -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
 
        test_300_check_default_striped_dir striped_dir $MDSCOUNT 1
@@ -15946,7 +16786,7 @@ test_300i() {
 
        mkdir $DIR/$tdir
 
-       $LFS setdirstripe -i 0 -c$MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c$MDSCOUNT -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
 
        createmany -o $DIR/$tdir/striped_dir/f- 10 ||
@@ -16002,7 +16842,7 @@ test_300j() {
 
        #define OBD_FAIL_SPLIT_UPDATE_REC       0x1702
        $LCTL set_param fail_loc=0x1702
-       $LFS setdirstripe -i 0 -c$MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c$MDSCOUNT -H all_char $DIR/$tdir/striped_dir ||
                error "set striped dir error"
 
        createmany -o $DIR/$tdir/striped_dir/f- 10 ||
@@ -16230,7 +17070,8 @@ prepare_remote_file() {
        mkdir $DIR/$tdir/src_dir ||
                error "create remote source failed"
 
-       cp /etc/hosts $DIR/$tdir/src_dir/a || error
+       cp /etc/hosts $DIR/$tdir/src_dir/a ||
+                error "cp to remote source failed"
        touch $DIR/$tdir/src_dir/a
 
        $LFS mkdir -i 1 $DIR/$tdir/tgt_dir ||
@@ -16261,8 +17102,9 @@ test_310a() {
        prepare_remote_file || error "prepare remote file failed"
 
        #open-unlink file
-       $OPENUNLINK $remote_file $remote_file || error
-       $CHECKSTAT -a $remote_file || error
+       $OPENUNLINK $remote_file $remote_file ||
+               error "openunlink $remote_file failed"
+       $CHECKSTAT -a $remote_file || error "$remote_file exists"
 }
 run_test 310a "open unlink remote file"
 
@@ -16480,6 +17322,24 @@ test_314() {
 }
 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
@@ -16749,7 +17609,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
 }
@@ -16807,10 +17667,7 @@ test_406() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.50) ] &&
                skip "Need MDS version at least 2.8.50" && return
 
-       local def_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 def_stripe_size=$($LFS getstripe -S $MOUNT)
        local test_pool=$TESTNAME
 
        if ! combined_mgs_mds ; then
@@ -16820,60 +17677,51 @@ test_406() {
        pool_add_targets $test_pool 0 $(($OSTCOUNT - 1)) 1 ||
                error "pool_add_targets failed"
 
+       save_layout_restore_at_exit $MOUNT
+
        # parent set default stripe count only, child will stripe from both
        # parent and fs default
-       $SETSTRIPE -c 1 -i 1 -S $((def_stripe_size * 2)) -p $test_pool $MOUNT ||
+       $LFS setstripe -c 1 -i 1 -S $((def_stripe_size * 2)) -p $test_pool $MOUNT ||
                error "setstripe $MOUNT failed"
        $LFS mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed"
-       $SETSTRIPE -c $OSTCOUNT $DIR/$tdir || error "setstripe $tdir failed"
+       $LFS setstripe -c $OSTCOUNT $DIR/$tdir || error "setstripe $tdir failed"
        for i in $(seq 10); do
                local f=$DIR/$tdir/$tfile.$i
                touch $f || error "touch failed"
-               local count=$($GETSTRIPE -c $f)
+               local count=$($LFS getstripe -c $f)
                [ $count -eq $OSTCOUNT ] ||
                        error "$f stripe count $count != $OSTCOUNT"
-               local offset=$($GETSTRIPE -i $f)
+               local offset=$($LFS getstripe -i $f)
                [ $offset -eq 1 ] || error "$f stripe offset $offset != 1"
-               local size=$($GETSTRIPE -S $f)
+               local size=$($LFS getstripe -S $f)
                [ $size -eq $((def_stripe_size * 2)) ] ||
                        error "$f stripe size $size != $((def_stripe_size * 2))"
-               local pool=$($GETSTRIPE -p $f)
+               local pool=$($LFS getstripe -p $f)
                [ $pool == $test_pool ] || error "$f pool $pool != $test_pool"
        done
 
        # change fs default striping, delete parent default striping, now child
        # will stripe from new fs default striping only
-       $SETSTRIPE -c 1 -S $def_stripe_size -i 0 $MOUNT ||
+       $LFS setstripe -c 1 -S $def_stripe_size -i 0 $MOUNT ||
                error "change $MOUNT default stripe failed"
-       $SETSTRIPE -c 0 $DIR/$tdir || error "delete $tdir default stripe failed"
+       $LFS setstripe -c 0 $DIR/$tdir ||
+               error "delete $tdir default stripe failed"
        for i in $(seq 11 20); do
                local f=$DIR/$tdir/$tfile.$i
                touch $f || error "touch $f failed"
-               local count=$($GETSTRIPE -c $f)
+               local count=$($LFS getstripe -c $f)
                [ $count -eq 1 ] || error "$f stripe count $count != 1"
-               local offset=$($GETSTRIPE -i $f)
+               local offset=$($LFS getstripe -i $f)
                [ $offset -eq 0 ] || error "$f stripe offset $offset != 0"
-               local size=$($GETSTRIPE -S $f)
+               local size=$($LFS getstripe -S $f)
                [ $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"
-
+               local pool=$($LFS getstripe -p $f)
+               [ $pool == $test_pool ] || error "$f pool $pool isn't set"
        done
 
        unlinkmany $DIR/$tdir/$tfile. 1 20
 
-       # restore FS default striping
-       if [ -z $def_pool ]; then
-               $SETSTRIPE -c $def_stripe_count -S $def_stripe_size \
-                       -i $def_stripe_offset $MOUNT ||
-                       error "restore default striping failed"
-       else
-               $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
@@ -17015,6 +17863,26 @@ test_411() {
 }
 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) ]] &&
@@ -17283,6 +18151,184 @@ 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 3
+       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 3
+       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
+
+       sleep 3 # avoid MDT return cached statfs
+       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"
+
+cleanup_805() {
+       do_facet $SINGLEMDS zfs set quota=$old $fsset
+       unlinkmany $DIR/$tdir/f- 1000000
+       trap 0
+}
+
+test_805() {
+       local zfs_version=$(do_node $SINGLEMDS cat /sys/module/zfs/version)
+       [ "$(facet_fstype mds1)" != "zfs" ] &&
+               skip "ZFS specific test" && return
+       [ $(version_code $zfs_version) -lt $(version_code 0.7.2) ] &&
+               skip "netfree not implemented before 0.7" && return
+       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.57) ]] ||
+               { skip "Need MDS version at least 2.10.57" && return 0; }
+
+       local fsset
+       local freekb
+       local usedkb
+       local old
+       local quota
+       local pref="osd-zfs.lustre-MDT0000."
+
+       # limit available space on MDS dataset to meet nospace issue
+       # quickly. then ZFS 0.7.2 can use reserved space if asked
+       # properly (using netfree flag in osd_declare_destroy()
+       fsset=$(do_facet $SINGLEMDS lctl get_param -n $pref.mntdev)
+       old=$(do_facet $SINGLEMDS zfs get -H quota $fsset | \
+               gawk '{print $3}')
+       freekb=$(do_facet $SINGLEMDS lctl get_param -n $pref.kbytesfree)
+       usedkb=$(do_facet $SINGLEMDS lctl get_param -n $pref.kbytestotal)
+       let "usedkb=usedkb-freekb"
+       let "freekb=freekb/2"
+       if let "freekb > 5000"; then
+               let "freekb=5000"
+       fi
+       do_facet $SINGLEMDS zfs set quota=$(((usedkb+freekb)*1024)) $fsset
+       trap cleanup_805 EXIT
+       mkdir $DIR/$tdir
+       $LFS setstripe -E 1M -L mdt $DIR/$tdir || error "DoM not working"
+       createmany -m $DIR/$tdir/f- 1000000 && error "ENOSPC wasn't met"
+       rm -rf $DIR/$tdir || error "not able to remove"
+       do_facet $SINGLEMDS zfs set quota=$old $fsset
+       trap 0
+}
+run_test 805 "ZFS can remove from full fs"
+
 #
 # tests that do cleanup/setup should be run at the end
 #