Whamcloud - gitweb
LU-12037 mdt: add option for cross-MDT rename
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 3005fea..4f302fe 100755 (executable)
@@ -8,17 +8,28 @@
 set -e
 
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test: LU-9693 LU-6493 LU-9693 LU-11058
-ALWAYS_EXCEPT="$SANITY_EXCEPT  42a     42b     42c     77k"
+# 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 ..
 ALWAYS_EXCEPT="  407     253     312     $ALWAYS_EXCEPT"
-# skipped tests: LU-4684
-ALWAYS_EXCEPT="  17n 160d 230 316      $ALWAYS_EXCEPT"
+
+if $SHARED_KEY; then
+# bug number for skipped tests:        LU-9795 (all below)
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT   17n     60a     133g    300f"
+fi
 
 # Check Grants after these tests
-GRANT_CHECK_LIST="$GRANT_CHECK_LIST 42a 42b 42c 42d 42e 63a 63b 64a 64b 64c"
+GRANT_CHECK_LIST="$GRANT_CHECK_LIST 42a 42b 42c 42d 42e 63a 63b 64a 64b 64c 64d"
+
+# skip the grant tests for ARM until they are fixed
+if [[ $(uname -m) = aarch64 ]]; then
+       # bug number:    LU-11596 (all below)
+       ALWAYS_EXCEPT+=" $GRANT_CHECK_LIST"
+       # bug number:    LU-11671 LU-11594 LU-11667 LU-11729
+       ALWAYS_EXCEPT+=" 45       103a      317      810"
+fi
 
 SRCDIR=$(cd $(dirname $0); echo $PWD)
 export PATH=$PATH:/sbin
@@ -59,17 +70,13 @@ LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi}
 . $LUSTRE/tests/test-framework.sh
 init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
-init_logging
 
-if [[ $MDSCOUNT -gt 1 ]]; then
-       # bug number:    LU-11161
-       ALWAYS_EXCEPT+=" 160g"
-fi
+init_logging
 
 #                                  5          12          (min)"
 [ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 64b 68 71 115 300o"
 
-if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
+if [ "$mds1_FSTYPE" = "zfs" ]; then
        # bug number for skipped test: LU-1957
        ALWAYS_EXCEPT="$ALWAYS_EXCEPT  180"
        #                                               13    (min)"
@@ -108,10 +115,8 @@ elif [ -r /etc/os-release ]; then
 
                if [[ $ubuntu_version -gt $(version_code 16.0.0) ]]; then
                        # bug number for skipped test:
-                       #                LU-10334 LU-10335 LU-10335 LU-10335
-                       ALWAYS_EXCEPT+=" 103a     130a     130b     130c"
-                       #                LU-10335 LU-10335 LU-10366
-                       ALWAYS_EXCEPT+=" 130d     130e     410"
+                       #                LU-10334 LU-10366
+                       ALWAYS_EXCEPT+=" 103a     410"
                fi
        fi
 fi
@@ -147,7 +152,8 @@ MAXFREE=${MAXFREE:-$((200000 * $OSTCOUNT))}
 rm -rf $DIR/[Rdfs][0-9]*
 
 # $RUNAS_ID may get set incorrectly somewhere else
-[ $UID -eq 0 -a $RUNAS_ID -eq 0 ] && error "\$RUNAS_ID set to 0, but \$UID is also 0!"
+[ $UID -eq 0 -a $RUNAS_ID -eq 0 ] &&
+       error "\$RUNAS_ID set to 0, but \$UID is also 0!"
 
 check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS
 
@@ -191,7 +197,7 @@ test_0c() {
 run_test 0c "check import proc"
 
 test_0d() { # LU-3397
-       [ $(lustre_version_code mgs) -lt $(version_code 2.10.57) ] &&
+       [ $MGS_VERSION -lt $(version_code 2.10.57) ] &&
                skip "proc exports not supported before 2.10.57"
 
        local mgs_exp="mgs.MGS.exports"
@@ -223,7 +229,7 @@ test_0d() { # LU-3397
        # 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)
+       imp_val=$CLIENT_VERSION
        [ "$exp_val" == "$imp_val" ] ||
                error "export client version '$exp_val' != '$imp_val'"
 }
@@ -541,12 +547,12 @@ test_17g() {
        local TESTS="59 60 61 4094 4095"
 
        # Fix for inode size boundary in 2.1.4
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.1.4) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.1.4) ] &&
                TESTS="4094 4095"
 
        # Patch not applied to 2.2 or 2.3 branches
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] &&
-       [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.3.55) ] &&
+       [ $MDS1_VERSION -ge $(version_code 2.2.0) ] &&
+       [ $MDS1_VERSION -le $(version_code 2.3.55) ] &&
                TESTS="4094 4095"
 
        # skip long symlink name for rhel6.5.
@@ -631,11 +637,10 @@ run_test 17l "Ensure lgetxattr's returned xattr size is consistent"
 # LU-1540
 test_17m() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip_env "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] &&
-       [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.2.93) ] &&
+       [ $MDS1_VERSION -ge $(version_code 2.2.0) ] &&
+       [ $MDS1_VERSION -le $(version_code 2.2.93) ] &&
                skip "MDS 2.2.0-2.2.93 do not NUL-terminate symlinks"
 
        local short_sym="0123456789"
@@ -708,11 +713,10 @@ check_fs_consistency_17n() {
 test_17n() {
        [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip_env "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] &&
-       [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.2.93) ] &&
+       [ $MDS1_VERSION -ge $(version_code 2.2.0) ] &&
+       [ $MDS1_VERSION -le $(version_code 2.2.93) ] &&
                skip "MDS 2.2.0-2.2.93 do not NUL-terminate symlinks"
 
        local i
@@ -736,7 +740,7 @@ test_17n() {
        check_fs_consistency_17n ||
                error "e2fsck report error after unlink files under remote dir"
 
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.50) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.4.50) ] &&
                skip "lustre < 2.4.50 does not support migrate mv"
 
        for ((i = 0; i < 10; i++)); do
@@ -759,7 +763,7 @@ run_test 17n "run e2fsck against master/slave MDT which contains remote dir"
 
 test_17o() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.64) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.3.64) ] &&
                skip "Need MDS version at least 2.3.64"
 
        local wdir=$DIR/${tdir}o
@@ -1137,12 +1141,6 @@ test_24u() { # bug12192
 }
 run_test 24u "create stripe file"
 
-page_size() {
-       local size
-       size=$(getconf PAGE_SIZE 2>/dev/null)
-       echo -n ${size:-4096}
-}
-
 simple_cleanup_common() {
        local rc=0
        trap 0
@@ -1168,7 +1166,7 @@ test_24v() {
        local fname="$DIR/$tdir/$tfile"
 
        # Performance issue on ZFS see LU-4072 (c.f. LU-2887)
-       [ $(facet_fstype $SINGLEMDS) = "zfs" ] && nrfiles=${COUNT:-10000}
+       [ "$mds1_FSTYPE" = "zfs" ] && nrfiles=${COUNT:-10000}
 
        test_mkdir "$(dirname $fname)"
        # assume MDT0000 has the fewest inodes
@@ -1200,7 +1198,7 @@ test_24v() {
        # take into account of overhead in lu_dirpage header and end mark in
        # each page, plus one in rpc_num calculation.
        local dirent_size=$((32 + (${#tfile} | 7) + 1 + 8))
-       local page_entries=$((($(page_size) - 24) / dirent_size))
+       local page_entries=$(((PAGE_SIZE - 24) / dirent_size))
        local mdt_idx=$($LFS getdirstripe -i $(dirname $fname))
        local rpc_pages=$(max_pages_per_rpc $mdt_idx)
        local rpc_max=$((nrfiles / (page_entries * rpc_pages) + stripes))
@@ -1228,7 +1226,7 @@ run_test 24w "Reading a file larger than 4Gb"
 test_24x() {
        [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.56) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.7.56) ]] &&
                skip "Need MDS version at least 2.7.56"
 
        local MDTIDX=1
@@ -1286,6 +1284,36 @@ test_24y() {
 }
 run_test 24y "rename/link on the same dir should succeed"
 
+test_24z() {
+       [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs"
+       [[ $MDS1_VERSION -lt $(version_code 2.12.51) ]] &&
+               skip "Need MDS version at least 2.12.51"
+
+       local index
+
+       for index in 0 1; do
+               $LFS mkdir -i $index $DIR/$tdir.$index || error "mkdir failed"
+               touch $DIR/$tdir.0/$tfile.$index || error "touch failed"
+       done
+
+       mv $DIR/$tdir.0/$tfile.0 $DIR/$tdir.1 || error "mv $tfile.0 failed"
+
+       index=$($LFS getstripe -m $DIR/$tdir.1/$tfile.0)
+       [ $index -eq 0 ] || error "$tfile.0 is on MDT$index"
+
+       local mdts=$(comma_list $(mdts_nodes))
+
+       do_nodes $mdts $LCTL set_param mdt.*.enable_remote_rename=0
+       stack_trap "do_nodes $mdts $LCTL \
+               set_param mdt.*.enable_remote_rename=1" EXIT
+
+       mv $DIR/$tdir.0/$tfile.1 $DIR/$tdir.1 || error "mv $tfile.1 failed"
+
+       index=$($LFS getstripe -m $DIR/$tdir.1/$tfile.1)
+       [ $index -eq 1 ] || error "$tfile.1 is on MDT$index"
+}
+run_test 24z "cross-MDT rename is done as cp"
+
 test_24A() { # LU-3182
        local NFILES=5000
 
@@ -1391,6 +1419,26 @@ test_24E() {
 }
 run_test 24E "cross MDT rename/link"
 
+test_24F () {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+
+       local repeats=1000
+       [ "$SLOW" = "no" ] && repeats=100
+
+       mkdir -p $DIR/$tdir
+
+       echo "$repeats repeats"
+       for ((i = 0; i < repeats; i++)); do
+               $LFS mkdir -i0 -c2 $DIR/$tdir/test || error "mkdir fails"
+               touch $DIR/$tdir/test/a || error "touch fails"
+               mkdir $DIR/$tdir/test/b || error "mkdir fails"
+               rm -rf $DIR/$tdir/test || error "rmdir fails"
+       done
+
+       true
+}
+run_test 24F "hash order vs readdir (LU-11330)"
+
 test_25a() {
        echo '== symlink sanity ============================================='
 
@@ -1495,7 +1543,7 @@ run_test 27d "create file with default settings"
 
 test_27e() {
        # LU-5839 adds check for existed layout before setting it
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.56) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.7.56) ]] &&
                skip "Need MDS version at least 2.7.56"
 
        test_mkdir $DIR/$tdir
@@ -1508,7 +1556,7 @@ run_test 27e "setstripe existing file (should return error)"
 test_27f() {
        test_mkdir $DIR/$tdir
        $LFS setstripe -S 100 -i 0 -c 1 $DIR/$tdir/$tfile &&
-               error "$SETSTRIPE $DIR/$tdir/$tfile failed"
+               error "$LFS setstripe $DIR/$tdir/$tfile failed"
        $CHECKSTAT -t file $DIR/$tdir/$tfile &&
                error "$CHECKSTAT -t file $DIR/$tdir/$tfile should fail"
        dd if=/dev/zero of=$DIR/$tdir/$tfile bs=4k count=4 || error "dd failed"
@@ -1634,7 +1682,7 @@ exhaust_precreations() {
        do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
 
        test_mkdir -p $DIR/$tdir/${OST}
-       $SETSTRIPE -i $OSTIDX -c 1 $DIR/$tdir/${OST}
+       $LFS setstripe -i $OSTIDX -c 1 $DIR/$tdir/${OST}
 #define OBD_FAIL_OST_ENOSPC              0x215
        do_facet $ofacet lctl set_param fail_val=$FAILIDX fail_loc=0x215
        echo "Creating to objid $last_id on ost $OST..."
@@ -1954,33 +2002,33 @@ run_test 27y "create files while OST0 is degraded and the rest inactive"
 
 check_seq_oid()
 {
-        log "check file $1"
-
-        lmm_count=$($GETSTRIPE -c $1)
-        lmm_seq=$($GETSTRIPE -v $1 | awk '/lmm_seq/ { print $2 }')
-        lmm_oid=$($GETSTRIPE -v $1 | awk '/lmm_object_id/ { print $2 }')
-
-        local old_ifs="$IFS"
-        IFS=$'[:]'
-        fid=($($LFS path2fid $1))
-        IFS="$old_ifs"
-
-        log "FID seq ${fid[1]}, oid ${fid[2]} ver ${fid[3]}"
-        log "LOV seq $lmm_seq, oid $lmm_oid, count: $lmm_count"
-
-        # compare lmm_seq and lu_fid->f_seq
-        [ $lmm_seq = ${fid[1]} ] || { error "SEQ mismatch"; return 1; }
-        # compare lmm_object_id and lu_fid->oid
-        [ $lmm_oid = ${fid[2]} ] || { error "OID mismatch"; return 2; }
-
-        # check the trusted.fid attribute of the OST objects of the file
-        local have_obdidx=false
-        local stripe_nr=0
-        $GETSTRIPE $1 | while read obdidx oid hex seq; do
-                # skip lines up to and including "obdidx"
-                [ -z "$obdidx" ] && break
-                [ "$obdidx" = "obdidx" ] && have_obdidx=true && continue
-                $have_obdidx || continue
+       log "check file $1"
+
+       lmm_count=$($LFS getstripe -c $1)
+       lmm_seq=$($LFS getstripe -v $1 | awk '/lmm_seq/ { print $2 }')
+       lmm_oid=$($LFS getstripe -v $1 | awk '/lmm_object_id/ { print $2 }')
+
+       local old_ifs="$IFS"
+       IFS=$'[:]'
+       fid=($($LFS path2fid $1))
+       IFS="$old_ifs"
+
+       log "FID seq ${fid[1]}, oid ${fid[2]} ver ${fid[3]}"
+       log "LOV seq $lmm_seq, oid $lmm_oid, count: $lmm_count"
+
+       # compare lmm_seq and lu_fid->f_seq
+       [ $lmm_seq = ${fid[1]} ] || { error "SEQ mismatch"; return 1; }
+       # compare lmm_object_id and lu_fid->oid
+       [ $lmm_oid = ${fid[2]} ] || { error "OID mismatch"; return 2; }
+
+       # check the trusted.fid attribute of the OST objects of the file
+       local have_obdidx=false
+       local stripe_nr=0
+       $LFS getstripe $1 | while read obdidx oid hex seq; do
+               # skip lines up to and including "obdidx"
+               [ -z "$obdidx" ] && break
+               [ "$obdidx" = "obdidx" ] && have_obdidx=true && continue
+               $have_obdidx || continue
 
                local ost=$((obdidx + 1))
                local dev=$(ostdevname $ost)
@@ -2049,7 +2097,7 @@ check_seq_oid()
                        error "FF stripe $ff_pstripe != $stripe_nr"
 
                stripe_nr=$((stripe_nr + 1))
-               [ $(lustre_version_code client) -lt $(version_code 2.9.55) ] &&
+               [ $CLIENT_VERSION -lt $(version_code 2.9.55) ] &&
                        continue
                if grep -q 'stripe_count=' <<<$ff; then
                        local ff_scnt=$(sed -e 's/.*stripe_count=//' \
@@ -2090,10 +2138,10 @@ test_27A() { # b=19102
 
        save_layout_restore_at_exit $MOUNT
        $LFS 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"
-       local default_size=$($GETSTRIPE -S $MOUNT)
-       local default_offset=$($GETSTRIPE -i $MOUNT)
+       wait_update $HOSTNAME "$LFS getstripe -c $MOUNT | sed 's/  *//g'" "1" 20 ||
+               error "stripe count $($LFS getstripe -c $MOUNT) != 1"
+       local default_size=$($LFS getstripe -S $MOUNT)
+       local default_offset=$($LFS getstripe -i $MOUNT)
        local dsize=$(do_facet $SINGLEMDS \
                "$LCTL get_param -n lod.$(facet_svc $SINGLEMDS)*.stripesize")
        [ $default_size -eq $dsize ] ||
@@ -2139,9 +2187,9 @@ test_27C() { #LU-2871
        cd $DIR/$tdir
        for i in $(seq 0 $((OSTCOUNT - 1))); do
                # set stripe across all OSTs starting from OST$i
-               $SETSTRIPE -i $i -c -1 $tfile$i
+               $LFS setstripe -i $i -c -1 $tfile$i
                # get striping information
-               ost_idx=($($GETSTRIPE $tfile$i |
+               ost_idx=($($LFS getstripe $tfile$i |
                         tail -n $((OSTCOUNT + 1)) | awk '{print $1}'))
                echo ${ost_idx[@]}
 
@@ -2185,10 +2233,10 @@ test_27D() {
        pool_add_targets $POOL $ost_range || error "pool_add_targets failed"
 
        local skip27D
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.8.55) ] &&
                skip27D+="-s 29"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.9.55) -o \
-         $(lustre_version_code client) -lt $(version_code 2.9.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.9.55) -o \
+         $CLIENT_VERSION -lt $(version_code 2.9.55) ] &&
                skip27D+=" -s 30,31"
        llapi_layout_test -d$DIR/$tdir -p$POOL -o$OSTCOUNT $skip27D ||
                error "llapi_layout_test failed"
@@ -2205,7 +2253,7 @@ run_test 27D "validate llapi_layout API"
 # accessing a widely striped file.
 test_27E() {
        [ $OSTCOUNT -lt 2 ] && skip_env "needs >= 2 OSTs"
-       [ $(lustre_version_code client) -lt $(version_code 2.5.57) ] &&
+       [ $CLIENT_VERSION -lt $(version_code 2.5.57) ] &&
                skip "client does not have LU-3338 fix"
 
        # 72 bytes is the minimum space required to store striping
@@ -2235,13 +2283,13 @@ run_test 27E "check that default extended attribute size properly increases"
 test_27F() { # LU-5346/LU-7975
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [[ $OSTCOUNT -lt 2 ]] && skip "needs >= 2 OSTs"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.51) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.8.51) ]] &&
                skip "Need MDS version at least 2.8.51"
        remote_ost_nodsh && skip "remote OST with nodsh"
 
        test_mkdir $DIR/$tdir
        rm -f $DIR/$tdir/f0
-       $SETSTRIPE -c 2 $DIR/$tdir
+       $LFS setstripe -c 2 $DIR/$tdir
 
        # stop all OSTs to reproduce situation for LU-7975 ticket
        for num in $(seq $OSTCOUNT); do
@@ -2267,14 +2315,17 @@ test_27F() { # LU-5346/LU-7975
        wait $catpid || error "cat failed"
 
        cmp /etc/hosts $DIR/$tdir/f0 || error "cmp failed"
-       [[ $($GETSTRIPE -c $DIR/$tdir/f0) == 2 ]] || error "wrong stripecount"
+       [[ $($LFS getstripe -c $DIR/$tdir/f0) == 2 ]] ||
+               error "wrong stripecount"
 
 }
 run_test 27F "Client resend delayed layout creation with non-zero size"
 
 test_27G() { #LU-10629
-       [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return
-       remote_mds_nodsh && skip "remote MDS with nodsh" && return
+       [ $MDS1_VERSION -lt $(version_code 2.11.51) ] &&
+               skip "Need MDS version at least 2.11.51"
+       [ -n "$FILESET" ] && skip "SKIP due to FILESET set"
+       remote_mds_nodsh && skip "remote MDS with nodsh"
        local POOL=${POOL:-testpool}
        local ostrange="0 0 1"
 
@@ -2298,7 +2349,7 @@ test_27G() { #LU-10629
 run_test 27G "Clear OST pool from stripe"
 
 test_27H() {
-       [[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.11.54) ]] &&
+       [[ $MDS1_VERSION -le $(version_code 2.11.54) ]] &&
                skip "Need MDS version newer than 2.11.54"
        [[ $OSTCOUNT -lt 3 ]] && skip_env "needs >= 3 OSTs"
        test_mkdir $DIR/$tdir
@@ -2314,8 +2365,8 @@ test_27H() {
             egrep -c "l_ost_idx: [02]$") == "2" )) ||
                error "expected l_ost_idx: [02]$ not matched"
 
-       # make sure ost list have been cleared
-       local stripesize=$($GETSTRIPE -S $DIR/$tdir)
+       # make sure ost list has been cleared
+       local stripesize=$($LFS getstripe -S $DIR/$tdir)
        $LFS setstripe -S $((stripesize * 4)) -i 1 \
                -c $((OSTCOUNT - 1)) $DIR/$tdir || error "setstripe"
        touch $DIR/$tdir/f3
@@ -2451,19 +2502,19 @@ test_31f() { # bug 4554
 
        set -vx
        test_mkdir $DIR/d31f
-       $SETSTRIPE -S 1048576 -c 1 $DIR/d31f
+       $LFS setstripe -S 1048576 -c 1 $DIR/d31f
        cp /etc/hosts $DIR/d31f
        ls -l $DIR/d31f
-       $GETSTRIPE $DIR/d31f/hosts
+       $LFS getstripe $DIR/d31f/hosts
        multiop_bg_pause $DIR/d31f D_c || return 1
        MULTIPID=$!
 
        rm -rv $DIR/d31f || error "first of $DIR/d31f"
        test_mkdir $DIR/d31f
-       $SETSTRIPE -S 1048576 -c 1 $DIR/d31f
+       $LFS setstripe -S 1048576 -c 1 $DIR/d31f
        cp /etc/hosts $DIR/d31f
        ls -l $DIR/d31f
-       $GETSTRIPE $DIR/d31f/hosts
+       $LFS getstripe $DIR/d31f/hosts
        multiop_bg_pause $DIR/d31f D_c || return 1
        MULTIPID2=$!
 
@@ -3100,10 +3151,10 @@ TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
 test_34a() {
        rm -f $DIR/f34
        $MCREATE $DIR/f34 || error "mcreate failed"
-       $GETSTRIPE $DIR/f34 2>&1 | grep -q "no stripe info" ||
+       $LFS 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" ||
+       $LFS 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"
@@ -3115,7 +3166,7 @@ test_34b() {
        $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" ||
+       $LFS 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"
@@ -3127,7 +3178,8 @@ test_34c() {
        $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
+       $LFS getstripe $DIR/f34 2>&1 | grep -q "no stripe info" &&
+               error "$LFS getstripe failed"
        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 ||
                error "Size of $DIR/f34 not equal to $TEST_34_SIZE bytes"
 }
@@ -3207,7 +3259,7 @@ test_34h() {
        # Since just timed wait is not good enough, let's do a sync write
        # that way we are sure enough time for a roundtrip + processing
        # passed + 2 seconds of extra margin.
-       dd if=/dev/zero of=$DIR/${tfile}-1 bs=4096 oflag=direct count=1
+       dd if=/dev/zero of=$DIR/${tfile}-1 bs=$PAGE_SIZE oflag=direct count=1
        rm $DIR/${tfile}-1
        sleep 2
 
@@ -3282,7 +3334,7 @@ subr_36fh() {
        sleep 1
        touch --date="$DATESTR" $DIR/$tdir/$tfile # setattr timestamp in past
        LS_BEFORE="`ls -l $DIR/$tdir/$tfile`" # old timestamp from client cache
-       cancel_lru_locks osc
+       cancel_lru_locks $OSC
        LS_AFTER="`ls -l $DIR/$tdir/$tfile`"  # timestamp from OST object
        date; date +%s
        [ "$LS_BEFORE" != "$LS_AFTER" ] && \
@@ -3305,30 +3357,36 @@ run_test 36f "utime on file racing with OST BRW write =========="
 test_36g() {
        remote_ost_nodsh && skip "remote OST with nodsh"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
+       [ $MDS1_VERSION -lt $(version_code 2.12.51) ] &&
+               skip "Need MDS version at least 2.12.51"
 
        local fmd_max_age
-       local fmd_before
-       local fmd_after
+       local fmd
+       local facet="ost1"
+       local tgt="obdfilter"
+
+       [[ $OSC == "mdc" ]] && tgt="mdt" && facet="mds1"
 
        test_mkdir $DIR/$tdir
-       fmd_max_age=$(do_facet ost1 \
-               "lctl get_param -n obdfilter.*.client_cache_seconds 2> /dev/null | \
+       fmd_max_age=$(do_facet $facet \
+               "lctl get_param -n $tgt.*.tgt_fmd_seconds 2> /dev/null | \
                head -n 1")
 
-       fmd_before=$(do_facet ost1 \
-               "awk '/ll_fmd_cache/ {print \\\$2}' /proc/slabinfo")
+       echo "FMD max age: ${fmd_max_age}s"
        touch $DIR/$tdir/$tfile
+       fmd=$(do_facet $facet "lctl get_param -n $tgt.*.exports.*.fmd_count" |
+               gawk '{cnt=cnt+$1}  END{print cnt}')
+       echo "FMD before: $fmd"
+       [[ $fmd == 0 ]] &&
+               error "FMD wasn't create by touch"
        sleep $((fmd_max_age + 12))
-       fmd_after=$(do_facet ost1 \
-               "awk '/ll_fmd_cache/ {print \\\$2}' /proc/slabinfo")
-
-       echo "fmd_before: $fmd_before"
-       echo "fmd_after: $fmd_after"
-       [[ $fmd_after -gt $fmd_before ]] &&
-               echo "AFTER: $fmd_after > BEFORE: $fmd_before" &&
-               error "fmd didn't expire after ping" || true
+       fmd=$(do_facet $facet "lctl get_param -n $tgt.*.exports.*.fmd_count" |
+               gawk '{cnt=cnt+$1}  END{print cnt}')
+       echo "FMD after: $fmd"
+       [[ $fmd == 0 ]] ||
+               error "FMD wasn't expired by ping"
 }
-run_test 36g "filter mod data cache expiry ====================="
+run_test 36g "FMD cache expiry ====================="
 
 test_36h() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
@@ -3425,7 +3483,7 @@ test_39b() {
                [ $unlink_new2 -eq $unlink_new ] || error "unlink file reverses mtime"
                [ $rename_new2 -eq $rename_new ] || error "rename file reverses mtime"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3459,7 +3517,7 @@ test_39c() {
                [ "$mtime2" = "$mtime3" ] || \
                        error "mtime ($mtime2) changed (to $mtime3) on rename"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3477,7 +3535,7 @@ test_39d() {
                [ $mtime = $TEST_39_MTIME ] || \
                        error "mtime($mtime) is not set to $TEST_39_MTIME"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3497,7 +3555,7 @@ test_39e() {
                [ $mtime2 = $TEST_39_MTIME ] || \
                        error "mtime($mtime2) is not set to $TEST_39_MTIME"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3518,7 +3576,7 @@ test_39f() {
                [ $mtime2 = $TEST_39_MTIME ] || \
                        error "mtime($mtime2) is not set to $TEST_39_MTIME"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3539,7 +3597,7 @@ test_39g() {
                [ "$mtime1" = "$mtime2" ] || \
                        error "lost mtime: $mtime2, should be $mtime1"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3566,7 +3624,7 @@ test_39h() {
                        [ "$mtime2" = $TEST_39_MTIME ] || \
                                error "lost mtime: $mtime2, should be $TEST_39_MTIME"
 
-                       cancel_lru_locks osc
+                       cancel_lru_locks $OSC
                        if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
                done
        fi
@@ -3590,7 +3648,7 @@ test_39i() {
                [ "$mtime1" = "$mtime2" ] || \
                        error "lost mtime: $mtime2, should be $mtime1"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3621,7 +3679,7 @@ test_39j() {
                        error "mtime is lost on close: $mtime2, " \
                              "should be $mtime1"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
        lctl set_param fail_loc=0
@@ -3725,7 +3783,7 @@ test_39m() {
                [ "$timestamps" = "$far_past_atime $far_past_mtime" ] || \
                        error "atime or mtime set incorrectly"
 
-               cancel_lru_locks osc
+               cancel_lru_locks $OSC
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
@@ -3993,7 +4051,6 @@ test_42e() { # bug22074
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        local TDIR=$DIR/${tdir}e
-       local pagesz=$(page_size)
        local pages=16 # hardcoded 16 pages, don't change it.
        local files=$((OSTCOUNT * 500)) # hopefully 500 files on each OST
        local proc_osc0="osc.${FSNAME}-OST0000-osc-[^MDT]*"
@@ -4001,7 +4058,7 @@ test_42e() { # bug22074
        local warmup_files
 
        test_mkdir $DIR/${tdir}e
-       $SETSTRIPE -c 1 $TDIR
+       $LFS setstripe -c 1 $TDIR
        createmany -o $TDIR/f $files
 
        max_dirty_mb=$($LCTL get_param -n $proc_osc0/max_dirty_mb)
@@ -4014,7 +4071,7 @@ test_42e() { # bug22074
        # write a large amount of data into one file and sync, to get good
        # avail_grant number from OST.
        for ((i=0; i<$warmup_files; i++)); do
-               idx=$($GETSTRIPE -i $TDIR/w$i)
+               idx=$($LFS getstripe -i $TDIR/w$i)
                [ $idx -ne 0 ] && continue
                dd if=/dev/zero of=$TDIR/w$i bs="$max_dirty_mb"M count=1
                break
@@ -4028,7 +4085,7 @@ test_42e() { # bug22074
        # RPCs directly. but depends on the env, VFS may trigger flush during this
        # period, hopefully we are good.
        for ((i=0; i<$warmup_files; i++)); do
-               idx=$($GETSTRIPE -i $TDIR/w$i)
+               idx=$($LFS getstripe -i $TDIR/w$i)
                [ $idx -ne 0 ] && continue
                dd if=/dev/zero of=$TDIR/w$i bs=1M count=1 2>/dev/null
        done
@@ -4038,8 +4095,8 @@ test_42e() { # bug22074
        # perform the real test
        $LCTL set_param $proc_osc0/rpc_stats 0
        for ((;i<$files; i++)); do
-               [ $($GETSTRIPE -i $TDIR/f$i) -eq 0 ] || continue
-               dd if=/dev/zero of=$TDIR/f$i bs=$pagesz count=$pages 2>/dev/null
+               [ $($LFS getstripe -i $TDIR/f$i) -eq 0 ] || continue
+               dd if=/dev/zero of=$TDIR/f$i bs=$PAGE_SIZE count=$pages 2>/dev/null
        done
        sync
        $LCTL get_param $proc_osc0/rpc_stats
@@ -4218,10 +4275,10 @@ test_46() {
        f="$DIR/f46"
        stop_writeback
        sync
-       dd if=/dev/zero of=$f bs=`page_size` seek=511 count=1
+       dd if=/dev/zero of=$f bs=$PAGE_SIZE seek=511 count=1
        sync
-       dd conv=notrunc if=/dev/zero of=$f bs=`page_size` seek=1023 count=1
-       dd conv=notrunc if=/dev/zero of=$f bs=`page_size` seek=511 count=1
+       dd conv=notrunc if=/dev/zero of=$f bs=$PAGE_SIZE seek=1023 count=1
+       dd conv=notrunc if=/dev/zero of=$f bs=$PAGE_SIZE seek=511 count=1
        sync
        start_writeback
 }
@@ -4230,8 +4287,8 @@ run_test 46 "dirtying a previously written page ================"
 # test_47 is removed "Device nodes check" is moved to test_28
 
 test_48a() { # bug 2399
-       [ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.63) ] &&
+       [ "$mds1_FSTYPE" = "zfs" ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.3.63) ] &&
                skip "MDS prior to 2.3.63 handle ZFS dir .. incorrectly"
 
        test_mkdir $DIR/$tdir
@@ -4340,7 +4397,7 @@ test_49() { # LU-1030
        [[ $ost1_size -lt 2 ]] && ost1_size=2
        [[ $ost1_size -gt 819200 ]] && ost1_size=819200
 
-       $SETSTRIPE -c 1 -i 0 $DIR/$tfile
+       $LFS setstripe -c 1 -i 0 $DIR/$tfile
        dd if=/dev/zero of=$DIR/$tfile bs=4k count=$((ost1_size >> 2)) &
        local dd_pid=$!
 
@@ -4493,7 +4550,7 @@ test_51d() {
 run_test 51d "check object distribution"
 
 test_51e() {
-       if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
+       if [ "$mds1_FSTYPE" != ldiskfs ]; then
                skip_env "ldiskfs only test"
        fi
 
@@ -4599,7 +4656,7 @@ test_53() {
        local found=false
        local support_last_seq=true
 
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.60) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.3.60) ]] ||
                support_last_seq=false
 
        # only test MDT0000
@@ -4662,7 +4719,7 @@ test_54b() {
        f="$DIR/f54b"
        mknod $f c 1 3
        chmod 0666 $f
-       dd if=/dev/zero of=$f bs=$(page_size) count=1
+       dd if=/dev/zero of=$f bs=$PAGE_SIZE count=1
 }
 run_test 54b "char device works in lustre ======================"
 
@@ -4701,17 +4758,17 @@ test_54c() {
        trap cleanup_54c EXIT
        mknod $loopdev b 7 $LOOPNUM
        echo "make a loop file system with $DIR/$tfile on $loopdev ($LOOPNUM)."
-       dd if=/dev/zero of=$DIR/$tfile bs=$(get_page_size client) seek=1024 count=1 > /dev/null
+       dd if=/dev/zero of=$DIR/$tfile bs=$PAGE_SIZE seek=1024 count=1 > /dev/null
        losetup $loopdev $DIR/$tfile ||
                error "can't set up $loopdev for $DIR/$tfile"
        mkfs.ext2 $loopdev || error "mke2fs on $loopdev"
        test_mkdir $DIR/$tdir
        mount -t ext2 $loopdev $DIR/$tdir ||
                error "error mounting $loopdev on $DIR/$tdir"
-       dd if=/dev/zero of=$DIR/$tdir/tmp bs=$(get_page_size client) count=30 ||
+       dd if=/dev/zero of=$DIR/$tdir/tmp bs=$PAGE_SIZE count=30 ||
                error "dd write"
        df $DIR/$tdir
-       dd if=$DIR/$tdir/tmp of=/dev/zero bs=$(get_page_size client) count=30 ||
+       dd if=$DIR/$tdir/tmp of=/dev/zero bs=$PAGE_SIZE count=30 ||
                error "dd read"
        cleanup_54c
 }
@@ -5053,6 +5110,41 @@ test_56o() {
 }
 run_test 56o "check lfs find -mtime for old files"
 
+test_56ob() {
+       local dir=$DIR/$tdir
+       local expected=1
+       local count=0
+
+       # just to make sure there is something that won't be found
+       test_mkdir $dir
+       touch $dir/$tfile.now
+
+       for age in year week day hour min; do
+               count=$((count + 1))
+
+               touch $dir/$tfile-a.$age $dir/$tfile-m.$age
+               touch --date="$count $age ago" -a $dir/$tfile-a.$age
+               touch --date="$count $age ago" -m $dir/$tfile-m.$age
+
+               local cmd="$LFS find $dir -mtime $count${age:0:1}"
+               local nums=$($cmd | wc -l)
+               [ $nums -eq $expected ] ||
+                       error "'$cmd' wrong: found $nums, expected $expected"
+
+               cmd="$LFS find $dir -atime $count${age:0:1}"
+               nums=$($cmd | wc -l)
+               [ $nums -eq $expected ] ||
+                       error "'$cmd' wrong: found $nums, expected $expected"
+       done
+
+       sleep 2
+       cmd="$LFS find $dir -ctime +1s -type f"
+       nums=$($cmd | wc -l)
+       (( $nums == $count * 2 + 1)) ||
+               error "'$cmd' wrong: found $nums, expected $((expected*2+1))"
+}
+run_test 56ob "check lfs find -atime -mtime -ctime with units"
+
 test_56p() {
        [ $RUNAS_ID -eq $UID ] &&
                skip_env "RUNAS_ID = UID = $UID -- skipping"
@@ -5386,7 +5478,7 @@ test_56w() {
 
        check_stripe_count $dir/file1 $expected
 
-       if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.90) ];
+       if [ $MDS1_VERSION -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
@@ -5517,7 +5609,7 @@ test_56wb() {
 run_test 56wb "check lfs_migrate pool support"
 
 test_56wc() {
-       local file1="$DIR/$tdir/file 1"
+       local file1="$DIR/$tdir/file1"
 
        echo -n "Creating test dir..."
        test_mkdir $DIR/$tdir &> /dev/null || error "cannot create dir"
@@ -5787,7 +5879,7 @@ check_migrate_links() {
 }
 
 test_56xb() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local dir="$DIR/$tdir"
@@ -5795,24 +5887,95 @@ test_56xb() {
        test_mkdir "$dir" || error "cannot create dir $dir"
 
        echo "testing lfs migrate mode when all links fit within xattrs"
-       LFS_MIGRATE_RSYNC=false check_migrate_links "$dir" 2 99
+       LFS_MIGRATE_RSYNC_MODE=false check_migrate_links "$dir" 2 99
 
        echo "testing rsync mode when all links fit within xattrs"
-       LFS_MIGRATE_RSYNC=true check_migrate_links "$dir" 2 99
+       LFS_MIGRATE_RSYNC_MODE=true check_migrate_links "$dir" 2 99
 
        echo "testing lfs migrate mode when all links do not fit within xattrs"
-       LFS_MIGRATE_RSYNC=false check_migrate_links "$dir" 101 100
+       LFS_MIGRATE_RSYNC_MODE=false check_migrate_links "$dir" 101 100
 
        echo "testing rsync mode when all links do not fit within xattrs"
-       LFS_MIGRATE_RSYNC=true check_migrate_links "$dir" 101 100
+       LFS_MIGRATE_RSYNC_MODE=true check_migrate_links "$dir" 101 100
+
 
        # clean up
        rm -rf $dir
 }
 run_test 56xb "lfs migration hard link support"
 
+test_56xc() {
+       [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs"
+
+       local dir="$DIR/$tdir"
+
+       test_mkdir "$dir" || error "cannot create dir $dir"
+
+       # Test 1: ensure file < 1 GB is always migrated with 1 stripe
+       echo -n "Setting initial stripe for 20MB test file..."
+       $LFS setstripe -c 2 -i 0 "$dir/20mb" || error "cannot setstripe"
+       echo "done"
+       echo -n "Sizing 20MB test file..."
+       truncate "$dir/20mb" 20971520 || error "cannot create 20MB test file"
+       echo "done"
+       echo -n "Verifying small file autostripe count is 1..."
+       $LFS_MIGRATE -y -A -C 1 "$dir/20mb" &> /dev/null ||
+               error "cannot migrate 20MB file"
+       local stripe_count=$($LFS getstripe -c "$dir/20mb") ||
+               error "cannot get stripe for $dir/20mb"
+       [ $stripe_count -eq 1 ] ||
+               error "unexpected stripe count $stripe_count for 20MB file"
+       rm -f "$dir/20mb"
+       echo "done"
+
+       # Test 2: File is small enough to fit within the available space on
+       # sqrt(size_in_gb) + 1 OSTs but is larger than 1GB.  The file must
+       # have at least an additional 1KB for each desired stripe for test 3
+       echo -n "Setting stripe for 1GB test file..."
+       $LFS setstripe -c 1 -i 0 "$dir/1gb" || error "cannot setstripe"
+       echo "done"
+       echo -n "Sizing 1GB test file..."
+       # File size is 1GB + 3KB
+       truncate "$dir/1gb" 1073744896 &> /dev/null ||
+               error "cannot create 1GB test file"
+       echo "done"
+       echo -n "Migrating 1GB file..."
+       $LFS_MIGRATE -y -A -C 1 "$dir/1gb" &> /dev/null ||
+               error "cannot migrate file"
+       echo "done"
+       echo -n "Verifying autostripe count is sqrt(n) + 1..."
+       stripe_count=$($LFS getstripe -c "$dir/1gb") ||
+               error "cannot get stripe for $dir/1gb"
+       [ $stripe_count -eq 2 ] ||
+               error "unexpected stripe count $stripe_count (expected 2)"
+       echo "done"
+
+       # Test 3: File is too large to fit within the available space on
+       # sqrt(n) + 1 OSTs.  Simulate limited available space with -X
+       if [ $OSTCOUNT -ge 3 ]; then
+               # The required available space is calculated as
+               # file size (1GB + 3KB) / OST count (3).
+               local kb_per_ost=349526
+
+               echo -n "Migrating 1GB file..."
+               $LFS_MIGRATE -y -A -C 1 -X $kb_per_ost "$dir/1gb" &>> \
+                       /dev/null || error "cannot migrate file"
+               echo "done"
+
+               stripe_count=$($LFS getstripe -c "$dir/1gb")
+               echo -n "Verifying autostripe count with limited space..."
+               [ "$stripe_count" -a $stripe_count -eq 3 ] ||
+                       error "unexpected stripe count $stripe_count (wanted 3)"
+               echo "done"
+       fi
+
+       # clean up
+       rm -rf $dir
+}
+run_test 56xc "lfs migration autostripe"
+
 test_56y() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.4.53) ] &&
                skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53"
 
        local res=""
@@ -5907,6 +6070,9 @@ test_56ab() { # LU-10705
 run_test 56ab "lfs find --blocks"
 
 test_56ba() {
+       [ $MDS1_VERSION -lt $(version_code 2.10.50) ] &&
+               skip "Need MDS version at least 2.10.50"
+
        # Create composite files with one component
        local dir=$DIR/$tdir
 
@@ -5969,7 +6135,7 @@ test_56ba() {
 run_test 56ba "test lfs find --component-end, -start, -count, and -flags"
 
 test_56ca() {
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.57) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.10.57) ]] ||
                skip "Need MDS version at least 2.10.57"
 
        local td=$DIR/$tdir
@@ -6045,7 +6211,7 @@ run_test 56ca "check lfs find --mirror-count|-N and --mirror-state"
 test_57a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        # note test will not do anything if MDS is not local
-       if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
+       if [ "$mds1_FSTYPE" != ldiskfs ]; then
                skip_env "ldiskfs only test"
        fi
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -6065,7 +6231,7 @@ run_test 57a "verify MDS filesystem created with large inodes =="
 
 test_57b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
+       if [ "$mds1_FSTYPE" != ldiskfs ]; then
                skip_env "ldiskfs only test"
        fi
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -6157,7 +6323,7 @@ test_60a() {
                        skip_env "missing subtest run-llog.sh"
 
        log "$TEST60_HEAD - from kernel mode"
-       do_facet mgs "$LCTL set_param debug=warning; $LCTL dk > /dev/null"
+       do_facet mgs "$LCTL dk > /dev/null"
        do_facet mgs "bash run-llog.sh" || error "run-llog.sh failed"
        do_facet mgs $LCTL dk > $TMP/$tfile
 
@@ -6237,68 +6403,28 @@ test_60a() {
 }
 run_test 60a "llog_test run from kernel module and test llog_reader"
 
-test_60aa() {
-       remote_mgs_nodsh && skip "remote MGS with nodsh"
-
-       # test old logid format
-       if [ $(lustre_version_code mgs) -le $(version_code 3.1.53) ]; then
-               do_facet mgs $LCTL dl | grep MGS
-               do_facet mgs "$LCTL --device %MGS llog_print \\\\\\\$$FSNAME-client" ||
-                       error "old llog_print failed"
-       fi
-
-       # test new logid format
-       if [ $(lustre_version_code mgs) -ge $(version_code 2.9.53) ]; then
-               do_facet mgs "$LCTL --device MGS llog_print $FSNAME-client" ||
-                       error "new llog_print failed"
-       fi
-}
-run_test 60aa "llog_print works with FIDs and simple names"
-
-test_60ab() {
-       # test llog_print with params
-
-       [[ $(lustre_version_code $SINGLEMDS) -gt $(version_code 2.11.51) ]] ||
-               skip "Need server version greater than 2.11.51"
-
-       local yaml
-       local orig_val
-
-       orig_val=$(do_facet mgs $LCTL get_param jobid_name)
-       do_facet mgs $LCTL set_param -P jobid_name="testname"
-
-       yaml=$(do_facet mgs $LCTL --device MGS llog_print params |
-           grep jobid_name | tail -n 1)
-
-       local param=`awk '{ print $10 }' <<< "$yaml"`
-       local val=`awk '{ print $12 }' <<< "$yaml"`
-       #return to the default
-       do_facet mgs $LCTL set_param -P jobid_name=$orig_val
-       [ $val = "testname" ] || error "bad value: $val"
-       [ $param = "jobid_name," ] || error "Bad param: $param"
-}
-run_test 60ab "llog_print params output values from set_param -P"
-
 test_60b() { # bug 6411
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        dmesg > $DIR/$tfile
-       LLOG_COUNT=$(dmesg | awk "/$TEST60_HEAD/ { marker = 1; from_marker = 0; }
-                               /llog.test/ {
-                                       if (marker)
-                                               from_marker++
-                                       from_begin++
-                               }
-                               END {
-                                       if (marker)
-                                               print from_marker
-                                       else
-                                               print from_begin
-                               }")
-       [[ $LLOG_COUNT -gt 100 ]] &&
+       LLOG_COUNT=$(do_facet mgs dmesg |
+                    awk "/$TEST60_HEAD/ { marker = 1; from_marker = 0; }
+                         /llog_[a-z]*.c:[0-9]/ {
+                               if (marker)
+                                       from_marker++
+                               from_begin++
+                         }
+                         END {
+                               if (marker)
+                                       print from_marker
+                               else
+                                       print from_begin
+                         }")
+
+       [[ $LLOG_COUNT -gt 120 ]] &&
                error "CDEBUG_LIMIT not limiting messages ($LLOG_COUNT)" || true
 }
-run_test 60b "limit repeated messages from CERROR/CWARN ========"
+run_test 60b "limit repeated messages from CERROR/CWARN"
 
 test_60c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
@@ -6343,16 +6469,51 @@ test_60e() {
 }
 run_test 60e "no space while new llog is being created"
 
-test_61() {
+test_60g() {
+       local pid
+
+       test_mkdir -c $MDSCOUNT $DIR/$tdir
+       $LFS setdirstripe -D -i -1 -c $MDSCOUNT $DIR/$tdir
+
+       (
+               local index=0
+               while true; do
+                       mkdir $DIR/$tdir/subdir$index 2>/dev/null
+                       rmdir $DIR/$tdir/subdir$index 2>/dev/null
+                       index=$((index + 1))
+               done
+       ) &
+
+       pid=$!
+
+       for i in $(seq 100); do 
+               # define OBD_FAIL_OSD_TXN_START    0x19a
+               do_facet mds1 lctl set_param fail_loc=0x8000019a
+               usleep 100
+       done
+
+       kill -9 $pid
+
+       mkdir $DIR/$tdir/new || error "mkdir failed"
+       rmdir $DIR/$tdir/new || error "rmdir failed"
+}
+run_test 60g "transaction abort won't cause MDT hung"
+
+test_61a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        f="$DIR/f61"
-       dd if=/dev/zero of=$f bs=$(page_size) count=1 || error "dd $f failed"
+       dd if=/dev/zero of=$f bs=$PAGE_SIZE count=1 || error "dd $f failed"
        cancel_lru_locks osc
        $MULTIOP $f OSMWUc || error "$MULTIOP $f failed"
        sync
 }
-run_test 61 "mmap() writes don't make sync hang ================"
+run_test 61a "mmap() writes don't make sync hang ================"
+
+test_61b() {
+       mmap_mknod_test $tfile || error "mmap_mknod_test failed"
+}
+run_test 61b "mmap() of unstriped file is successful"
 
 # bug 2330 - insufficient obd_match error checking causes LBUG
 test_62() {
@@ -6438,8 +6599,6 @@ run_test 64c "verify grant shrink"
 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)
 
@@ -6448,15 +6607,15 @@ want_grant() {
 
        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=$((dirty_max_pages * 1024 * 1024 / PAGE_SIZE))
 
        [[ $dirty_max_pages -gt $nrpages ]] && nrpages=$dirty_max_pages
-       local undirty=$((nrpages * page_size))
+       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))
+       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 |
@@ -6484,7 +6643,7 @@ grant_chunk() {
 }
 
 test_64d() {
-       [ $(lustre_version_code ost1) -lt $(version_code 2.10.56) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.10.56) ] &&
                skip "OST < 2.10.55 doesn't limit grants enough"
 
        local tgt=$($LCTL dl | grep "0000-osc-[^mM]" | awk '{print $4}')
@@ -6501,7 +6660,7 @@ test_64d() {
        local max_cur_granted=$(($(want_grant $tgt) + $(grant_chunk $tgt)))
        stack_trap "rm -f $file" EXIT
 
-       $SETSTRIPE $file -i 0 -c 1
+       $LFS setstripe $file -i 0 -c 1
        dd if=/dev/zero of=$file bs=1M count=1000 &
        ddpid=$!
 
@@ -6538,9 +6697,9 @@ test_65b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir $DIR/$tdir
-       local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
+       local STRIPESIZE=$($LFS getstripe -S $DIR/$tdir)
 
-       $SETSTRIPE -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
+       $LFS setstripe -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
                                                error "setstripe"
        touch $DIR/$tdir/f2
        $LVERIFY $DIR/$tdir $DIR/$tdir/f2 || error "lverify failed"
@@ -6552,7 +6711,7 @@ test_65c() {
        [ $OSTCOUNT -lt 2 ] && skip_env "need at least 2 OSTs"
 
        test_mkdir $DIR/$tdir
-       local stripesize=$($GETSTRIPE -S $DIR/$tdir)
+       local stripesize=$($LFS getstripe -S $DIR/$tdir)
 
        $LFS setstripe -S $((stripesize * 4)) -i 1 \
                -c $((OSTCOUNT - 1)) $DIR/$tdir || error "setstripe"
@@ -6565,8 +6724,8 @@ test_65d() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir $DIR/$tdir
-       local STRIPECOUNT=$($GETSTRIPE -c $DIR/$tdir)
-       local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
+       local STRIPECOUNT=$($LFS getstripe -c $DIR/$tdir)
+       local STRIPESIZE=$($LFS getstripe -S $DIR/$tdir)
 
        if [[ $STRIPECOUNT -le 0 ]]; then
                sc=1
@@ -6576,7 +6735,7 @@ test_65d() {
        else
                sc=$(($STRIPECOUNT - 1))
        fi
-       $SETSTRIPE -S $STRIPESIZE -c $sc $DIR/$tdir || error "setstripe"
+       $LFS setstripe -S $STRIPESIZE -c $sc $DIR/$tdir || error "setstripe"
        touch $DIR/$tdir/f4 $DIR/$tdir/f5
        $LVERIFY $DIR/$tdir $DIR/$tdir/f4 $DIR/$tdir/f5 ||
                error "lverify failed"
@@ -6588,8 +6747,8 @@ test_65e() {
 
        test_mkdir $DIR/$tdir
 
-       $SETSTRIPE $DIR/$tdir || error "setstripe"
-       $GETSTRIPE -v $DIR/$tdir | grep "Default" ||
+       $LFS setstripe $DIR/$tdir || error "setstripe"
+       $LFS getstripe -v $DIR/$tdir | grep "Default" ||
                                        error "no stripe info failed"
        touch $DIR/$tdir/f6
        $LVERIFY $DIR/$tdir $DIR/$tdir/f6 || error "lverify failed"
@@ -6600,7 +6759,8 @@ test_65f() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir $DIR/${tdir}f
-       $RUNAS $SETSTRIPE $DIR/${tdir}f && error "setstripe succeeded" || true
+       $RUNAS $LFS setstripe $DIR/${tdir}f &&
+               error "setstripe succeeded" || true
 }
 run_test 65f "dir setstripe permission (should return error) ==="
 
@@ -6608,7 +6768,7 @@ test_65g() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir $DIR/$tdir
-       local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
+       local STRIPESIZE=$($LFS getstripe -S $DIR/$tdir)
 
        $LFS setstripe -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
                error "setstripe -S failed"
@@ -6622,12 +6782,12 @@ test_65h() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir $DIR/$tdir
-       local STRIPESIZE=$($GETSTRIPE -S $DIR/$tdir)
+       local STRIPESIZE=$($LFS getstripe -S $DIR/$tdir)
 
        $LFS setstripe -S $((STRIPESIZE * 2)) -i 0 -c 1 $DIR/$tdir ||
                error "setstripe -S failed"
        test_mkdir $DIR/$tdir/dd1
-       [ $($LFS getstripe -c $DIR/$tdir) = $($GETSTRIPE -c $DIR/$tdir/dd1) ] ||
+       [ $($LFS getstripe -c $DIR/$tdir) = $($LFS getstripe -c $DIR/$tdir/dd1) ] ||
                error "stripe info inherit failed"
 }
 run_test 65h "directory stripe info inherit ===================="
@@ -6664,11 +6824,11 @@ test_65j() { # bug6367
 
        save_layout_restore_at_exit $MOUNT
 
-       $SETSTRIPE -d $MOUNT || error "setstripe failed"
+       $LFS setstripe -d $MOUNT || error "setstripe failed"
 }
 run_test 65j "set default striping on root directory (bug 6367)="
 
-cleaup_65k() {
+cleanup_65k() {
        rm -rf $DIR/$tdir
        wait_delete_completed
        do_facet $SINGLEMDS "lctl set_param -n \
@@ -6687,7 +6847,7 @@ test_65k() { # bug11679
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
        local disable_precreate=true
-       [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.8.54) ] &&
+       [ $MDS1_VERSION -le $(version_code 2.8.54) ] &&
                disable_precreate=false
 
        echo "Check OST status: "
@@ -6706,7 +6866,7 @@ test_65k() { # bug11679
                               awk -F: /$ost/'{ print $1 }' | head -n 1)
 
                mkdir -p $DIR/$tdir
-               $SETSTRIPE -i $ostnum -c 1 $DIR/$tdir
+               $LFS setstripe -i $ostnum -c 1 $DIR/$tdir
                createmany -o $DIR/$tdir/$tfile.$ostnum. 1000
 
                echo "Deactivate: " $INACTIVE_OSC
@@ -6722,8 +6882,8 @@ test_65k() { # bug11679
 
                for idx in $(seq 0 $((OSTCOUNT - 1))); do
                        [ -f $DIR/$tdir/$idx ] && continue
-                       echo "$SETSTRIPE -i $idx -c 1 $DIR/$tdir/$idx"
-                       $SETSTRIPE -i $idx -c 1 $DIR/$tdir/$idx ||
+                       echo "$LFS setstripe -i $idx -c 1 $DIR/$tdir/$idx"
+                       $LFS setstripe -i $idx -c 1 $DIR/$tdir/$idx ||
                                { cleanup_65k;
                                  error "setstripe $idx should succeed"; }
                        rm -f $DIR/$tdir/$idx || error "rm $idx failed"
@@ -6747,14 +6907,14 @@ test_65l() { # bug 12836
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir -p $DIR/$tdir/test_dir
-       $SETSTRIPE -c -1 $DIR/$tdir/test_dir
+       $LFS setstripe -c -1 $DIR/$tdir/test_dir
        $LFS find -mtime -1 $DIR/$tdir >/dev/null
 }
 run_test 65l "lfs find on -1 stripe dir ========================"
 
 test_65m() {
        local layout=$(save_layout $MOUNT)
-       $RUNAS $SETSTRIPE -c 2 $MOUNT && {
+       $RUNAS $LFS setstripe -c 2 $MOUNT && {
                restore_layout $MOUNT $layout
                error "setstripe should fail by non-root users"
        }
@@ -6762,6 +6922,101 @@ test_65m() {
 }
 run_test 65m "normal user can't set filesystem default stripe"
 
+test_65n() {
+       [ -n "$FILESET" ] && skip "Not functional for FILESET set"
+       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.12.50) ]] ||
+               skip "Need MDS version at least 2.12.50"
+       [[ $PARALLEL != "yes" ]] || skip "skip parallel run"
+
+       [[ $OSTCOUNT -ge 2 ]] || skip_env "needs >= 2 OSTs"
+       which getfattr > /dev/null 2>&1 || skip_env "no getfattr command"
+       which setfattr > /dev/null 2>&1 || skip_env "no setfattr command"
+
+       local root_layout=$(save_layout $MOUNT)
+       stack_trap "restore_layout $MOUNT $root_layout" EXIT
+
+       # new subdirectory under root directory should not inherit
+       # the default layout from root
+       local dir1=$MOUNT/$tdir-1
+       mkdir $dir1 || error "mkdir $dir1 failed"
+       ! getfattr -n trusted.lov $dir1 &> /dev/null ||
+               error "$dir1 shouldn't have LOV EA"
+
+       # delete the default layout on root directory
+       $LFS setstripe -d $MOUNT || error "delete root default layout failed"
+
+       local dir2=$MOUNT/$tdir-2
+       mkdir $dir2 || error "mkdir $dir2 failed"
+       ! getfattr -n trusted.lov $dir2 &> /dev/null ||
+               error "$dir2 shouldn't have LOV EA"
+
+       # set a new striping pattern on root directory
+       local def_stripe_size=$($LFS getstripe -S $MOUNT)
+       local new_def_stripe_size=$((def_stripe_size * 2))
+       $LFS setstripe -S $new_def_stripe_size $MOUNT ||
+               error "set stripe size on $MOUNT failed"
+
+       # new file created in $dir2 should inherit the new stripe size from
+       # the filesystem default
+       local file2=$dir2/$tfile-2
+       touch $file2 || error "touch $file2 failed"
+
+       local file2_stripe_size=$($LFS getstripe -S $file2)
+       [[ $file2_stripe_size -eq $new_def_stripe_size ]] ||
+               error "$file2 didn't inherit stripe size $new_def_stripe_size"
+
+       local dir3=$MOUNT/$tdir-3
+       mkdir $dir3 || error "mkdir $dir3 failed"
+       ! getfattr -n trusted.lov $dir3 &> /dev/null ||
+               error "$dir3 shouldn't have LOV EA"
+
+       # set OST pool on root directory
+       local pool=$TESTNAME
+       pool_add $pool || error "add $pool failed"
+       pool_add_targets $pool 0 $((OSTCOUNT - 1)) 1 ||
+               error "add targets to $pool failed"
+
+       $LFS setstripe -p $pool $MOUNT ||
+               error "set OST pool on $MOUNT failed"
+
+       # new file created in $dir3 should inherit the pool from
+       # the filesystem default
+       local file3=$dir3/$tfile-3
+       touch $file3 || error "touch $file3 failed"
+
+       local file3_pool=$($LFS getstripe -p $file3)
+       [[ "$file3_pool" = "$pool" ]] ||
+               error "$file3 didn't inherit OST pool $pool"
+
+       local dir4=$MOUNT/$tdir-4
+       mkdir $dir4 || error "mkdir $dir4 failed"
+       ! getfattr -n trusted.lov $dir4 &> /dev/null ||
+               error "$dir4 shouldn't have LOV EA"
+
+       # new file created in $dir4 should inherit the pool from
+       # the filesystem default
+       local file4=$dir4/$tfile-4
+       touch $file4 || error "touch $file4 failed"
+
+       local file4_pool=$($LFS getstripe -p $file4)
+       [[ "$file4_pool" = "$pool" ]] ||
+               error "$file4 didn't inherit OST pool $pool"
+
+       # new subdirectory under non-root directory should inherit
+       # the default layout from its parent directory
+       $LFS setstripe -S $new_def_stripe_size -p $pool $dir4 ||
+               error "set directory layout on $dir4 failed"
+
+       local dir5=$dir4/$tdir-5
+       mkdir $dir5 || error "mkdir $dir5 failed"
+
+       local dir4_layout=$(get_layout_param $dir4)
+       local dir5_layout=$(get_layout_param $dir5)
+       [[ "$dir4_layout" = "$dir5_layout" ]] ||
+               error "$dir5 should inherit the default layout from $dir4"
+}
+run_test 65n "don't inherit default layout from root for new subdirectories"
+
 # bug 2543 - update blocks count on client
 test_66() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
@@ -6790,7 +7045,7 @@ test_69() {
        remote_ost_nodsh && skip "remote OST with nodsh"
 
        f="$DIR/$tfile"
-       $SETSTRIPE -c 1 -i 0 $f
+       $LFS setstripe -c 1 -i 0 $f
 
        $DIRECTIO write ${f}.2 0 1 || error "directio write error"
 
@@ -7085,7 +7340,7 @@ test_77c() {
                error "dd write error: $?"
        fid=$($LFS path2fid $DIR/$tfile)
 
-       if [ $(lustre_version_code ost1) -ge $(version_code 2.9.57) ]
+       if [ $OST1_VERSION -ge $(version_code 2.9.57) ]
        then
                check_ost=true
                ost_file_prefix=$(do_facet ost1 $LCTL get_param -n debug_path)
@@ -7194,7 +7449,7 @@ test_77g() { # bug 10889
        local file=$DIR/$tfile
        stack_trap "rm -f $file" EXIT
 
-       $SETSTRIPE -c 1 -i 0 $file
+       $LFS setstripe -c 1 -i 0 $file
        #define OBD_FAIL_OST_CHECKSUM_RECEIVE       0x21a
        do_facet ost1 lctl set_param fail_loc=0x8000021a
        set_checksums 1
@@ -7237,6 +7492,9 @@ test_77k() { # LU-10906
                checksum=$(eval $get_checksum)
                [ $checksum -eq $i ] || error "checksum($checksum) != $i"
        done
+       # remove persistent param to avoid races with checksum mountopt below
+       do_facet mgs $LCTL set_param -P -d $cksum_param ||
+               error "failed to delete checksum on MGS"
 
        for opt in "checksum" "nochecksum"; do
                #remount with mount option
@@ -7298,7 +7556,7 @@ test_78() { # bug 10901
 
        [ "$SLOW" = "no" ] && NSEQ=1 && [ $F78SIZE -gt 32 ] && F78SIZE=32
        echo "File size: $F78SIZE"
-       $SETSTRIPE -c $OSTCOUNT $DIR/$tfile || error "setstripe failed"
+       $LFS setstripe -c $OSTCOUNT $DIR/$tfile || error "setstripe failed"
        for i in $(seq 1 $NSEQ); do
                FSIZE=$(($F78SIZE / ($NSEQ - $i + 1)))
                echo directIO rdwr round $i of $NSEQ
@@ -7350,7 +7608,7 @@ test_80() { # bug 10718
        local soc_old=$(do_facet ost1 lctl get_param -n $soc | head -n1)
        local hosts=
        if [ "$soc_old" != "never" ] &&
-               [ "$(facet_fstype ost1)" != "ldiskfs" ]; then
+               [ "$ost1_FSTYPE" != "ldiskfs" ]; then
                        hosts=$(for host in $(seq -f "ost%g" 1 $OSTCOUNT); do
                                facet_active_host $host; done | sort -u)
                        do_nodes $hosts lctl set_param $soc=never
@@ -7381,7 +7639,7 @@ test_81a() { # LU-456
        do_facet ost1 lctl set_param fail_loc=0x80000228
 
        # write should trigger a retry and success
-       $SETSTRIPE -i 0 -c 1 $DIR/$tfile
+       $LFS setstripe -i 0 -c 1 $DIR/$tfile
        $MULTIOP $DIR/$tfile oO_CREAT:O_RDWR:O_SYNC:w4096c
        RC=$?
        if [ $RC -ne 0 ] ; then
@@ -7399,7 +7657,7 @@ test_81b() { # LU-456
        do_facet ost1 lctl set_param fail_loc=0x228
 
        # write should retry several times and return -ENOSPC finally
-       $SETSTRIPE -i 0 -c 1 $DIR/$tfile
+       $LFS setstripe -i 0 -c 1 $DIR/$tfile
        $MULTIOP $DIR/$tfile oO_CREAT:O_RDWR:O_SYNC:w4096c
        RC=$?
        ENOSPC=28
@@ -7431,18 +7689,6 @@ test_82() { # LU-1031
 }
 run_test 82 "Basic grouplock test"
 
-test_83() {
-       local sfile="/boot/System.map-$(uname -r)"
-       [ ! -f $sfile ] && skip "No $sfile found"
-       # define OBD_FAIL_LLITE_PTASK_IO_FAIL 0x140d
-       $LCTL set_param fail_loc=0x140d
-       cp $sfile $DIR/$tfile || error "write failed"
-       diff -c $sfile $DIR/$tfile || error "files are different"
-       $LCTL set_param fail_loc=0
-       rm -f $DIR/$tfile
-}
-run_test 83 "Short write in ptask ==============================="
-
 test_99() {
        [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs"
 
@@ -7562,11 +7808,11 @@ run_test 101a "check read-ahead for random reads"
 
 setup_test101bc() {
        test_mkdir $DIR/$tdir
-       local STRIPE_SIZE=$1
+       local ssize=$1
        local FILE_LENGTH=$2
        STRIPE_OFFSET=0
 
-       local FILE_SIZE_MB=$((FILE_LENGTH / STRIPE_SIZE))
+       local FILE_SIZE_MB=$((FILE_LENGTH / ssize))
 
        local list=$(comma_list $(osts_nodes))
        set_osd_param $list '' read_cache_enable 0
@@ -7574,9 +7820,9 @@ setup_test101bc() {
 
        trap cleanup_test101bc EXIT
        # prepare the read-ahead file
-       $SETSTRIPE -S $STRIPE_SIZE -i $STRIPE_OFFSET -c $OSTCOUNT $DIR/$tfile
+       $LFS setstripe -S $ssize -i $STRIPE_OFFSET -c $OSTCOUNT $DIR/$tfile
 
-       dd if=/dev/zero of=$DIR/$tfile bs=$STRIPE_SIZE \
+       dd if=/dev/zero of=$DIR/$tfile bs=$ssize \
                                count=$FILE_SIZE_MB 2> /dev/null
 
 }
@@ -7655,13 +7901,14 @@ test_101c() {
        local STRIPE_SIZE=1048576
        local FILE_LENGTH=$((STRIPE_SIZE*100))
        local nreads=10000
+       local rsize=65536
        local osc_rpc_stats
 
        setup_test101bc $STRIPE_SIZE $FILE_LENGTH
 
        cancel_lru_locks osc
        $LCTL set_param osc.*.rpc_stats 0
-       $READS -f $DIR/$tfile -s$FILE_LENGTH -b65536 -n$nreads -t 180
+       $READS -f $DIR/$tfile -s$FILE_LENGTH -b$rsize -n$nreads -t 180
        for osc_rpc_stats in $($LCTL get_param -N osc.*.rpc_stats); do
                local stats=$($LCTL get_param -n $osc_rpc_stats)
                local lines=$(echo "$stats" | awk 'END {print NR;}')
@@ -7673,8 +7920,8 @@ test_101c() {
                for size in 1 2 4 8; do
                        local rpc=$(echo "$stats" |
                                    awk '($1 == "'$size':") {print $2; exit; }')
-                       [ $rpc != 0 ] &&
-                               error "Small $((size*4))k read IO $rpc !"
+                       [ $rpc != 0 ] && ((size * PAGE_SIZE < rsize)) &&
+                               error "Small $((size*PAGE_SIZE)) read IO $rpc!"
                done
                echo "$osc_rpc_stats check passed!"
        done
@@ -7700,7 +7947,7 @@ test_101d() {
                skip "Need free space ${sz_MB}M, have ${free_MB}M"
 
        echo "Create test file $file size ${sz_MB}M, ${free_MB}M free"
-       $SETSTRIPE -c -1 $file || error "setstripe failed"
+       $LFS setstripe -c -1 $file || error "setstripe failed"
 
        dd if=/dev/zero of=$file bs=1M count=$sz_MB || error "dd failed"
        echo Cancel LRU locks on lustre client to flush the client cache
@@ -7805,7 +8052,7 @@ run_test 101f "check mmap read performance"
 
 test_101g_brw_size_test() {
        local mb=$1
-       local pages=$((mb * 1048576 / $(page_size)))
+       local pages=$((mb * 1048576 / PAGE_SIZE))
        local file=$DIR/$tfile
 
        $LCTL set_param osc.*.max_pages_per_rpc=${mb}M ||
@@ -7847,19 +8094,17 @@ 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 [ $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 [ $OST1_VERSION -ge $(version_code 2.8.52) -o \
+            \( $OST1_VERSION -ge $(version_code 2.7.17) -a \
+               $OST1_VERSION -lt $(version_code 2.7.50) \) ] &&
+          [ $CLIENT_VERSION -ge $(version_code 2.8.52) -o \
+            \( $CLIENT_VERSION -ge $(version_code 2.7.17) -a \
+               $CLIENT_VERSION -lt $(version_code 2.7.50) \) ]; then
+               [ $OST1_VERSION -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 ||
@@ -7895,14 +8140,14 @@ setup_test102() {
 
        trap cleanup_test102 EXIT
        cd $DIR
-       $1 $SETSTRIPE -S $STRIPE_SIZE -i $STRIPE_OFFSET -c $STRIPE_COUNT $tdir
+       $1 $LFS setstripe -S $STRIPE_SIZE -i $STRIPE_OFFSET -c $STRIPE_COUNT $tdir
        cd $DIR/$tdir
        for num in 1 2 3 4; do
                for count in $(seq 1 $STRIPE_COUNT); do
                        for idx in $(seq 0 $[$STRIPE_COUNT - 1]); do
                                local size=`expr $STRIPE_SIZE \* $num`
                                local file=file"$num-$idx-$count"
-                               $1 $SETSTRIPE -S $size -i $idx -c $count $file
+                               $1 $LFS setstripe -S $size -i $idx -c $count $file
                        done
                done
        done
@@ -7986,9 +8231,9 @@ test_102b() {
        # b10930: get/set/list trusted.lov xattr
        echo "get/set/list trusted.lov xattr ..."
        local testfile=$DIR/$tfile
-       $SETSTRIPE -S 65536 -i 1 -c $OSTCOUNT $testfile ||
+       $LFS setstripe -S 65536 -i 1 -c $OSTCOUNT $testfile ||
                error "setstripe failed"
-       local STRIPECOUNT=$($GETSTRIPE -c $testfile) ||
+       local STRIPECOUNT=$($LFS getstripe -c $testfile) ||
                error "getstripe failed"
        getfattr -d -m "^trusted" $testfile 2>/dev/null | grep "trusted.lov" ||
                error "can't get trusted.lov from $testfile"
@@ -7999,8 +8244,8 @@ test_102b() {
 
        $MCREATE $testfile2
        setfattr -n trusted.lov -v $value $testfile2
-       local stripe_size=$($GETSTRIPE -S $testfile2)
-       local stripe_count=$($GETSTRIPE -c $testfile2)
+       local stripe_size=$($LFS getstripe -S $testfile2)
+       local stripe_count=$($LFS getstripe -c $testfile2)
        [[ $stripe_size -eq 65536 ]] ||
                error "stripe size $stripe_size != 65536"
        [[ $stripe_count -eq $STRIPECOUNT ]] ||
@@ -8019,9 +8264,9 @@ test_102c() {
        test_mkdir $DIR/$tdir
        chown $RUNAS_ID $DIR/$tdir
        local testfile=$DIR/$tdir/$tfile
-       $RUNAS $SETSTRIPE -S 65536 -i 1 -c $OSTCOUNT $testfile ||
+       $RUNAS $LFS setstripe -S 65536 -i 1 -c $OSTCOUNT $testfile ||
                error "setstripe failed"
-       local STRIPECOUNT=$($RUNAS $GETSTRIPE -c $testfile) ||
+       local STRIPECOUNT=$($RUNAS $LFS getstripe -c $testfile) ||
                error "getstripe failed"
        $RUNAS getfattr -d -m "^lustre" $testfile 2> /dev/null | \
        grep "lustre.lov" || error "can't get lustre.lov from $testfile"
@@ -8032,8 +8277,8 @@ test_102c() {
 
        $RUNAS $MCREATE $testfile2
        $RUNAS setfattr -n lustre.lov -v $value $testfile2
-       local stripe_size=$($RUNAS $GETSTRIPE -S $testfile2)
-       local stripe_count=$($RUNAS $GETSTRIPE -c $testfile2)
+       local stripe_size=$($RUNAS $LFS getstripe -S $testfile2)
+       local stripe_count=$($RUNAS $LFS getstripe -c $testfile2)
        [ $stripe_size -eq 65536 ] || error "stripe size $stripe_size != 65536"
        [ $stripe_count -eq $STRIPECOUNT ] ||
                error "stripe count $stripe_count != $STRIPECOUNT"
@@ -8190,7 +8435,7 @@ test_102k() {
        local default_size=$($LFS getstripe -S $test_kdir)
        local default_count=$($LFS getstripe -c $test_kdir)
        local default_offset=$($LFS getstripe -i $test_kdir)
-       $SETSTRIPE -S 65536 -i 0 -c $OSTCOUNT $test_kdir ||
+       $LFS setstripe -S 65536 -i 0 -c $OSTCOUNT $test_kdir ||
                error 'dir setstripe failed'
        setfattr -n trusted.lov $test_kdir
        local stripe_size=$($LFS getstripe -S $test_kdir)
@@ -8255,7 +8500,7 @@ getxattr() { # getxattr path name
 test_102n() { # LU-4101 mdt: protect internal xattrs
        [ -z "$(which setfattr 2>/dev/null)" ] &&
                skip "could not find setfattr"
-       if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.50) ]
+       if [ $MDS1_VERSION -lt $(version_code 2.5.50) ]
        then
                skip "MDT < 2.5.50 allows setxattr on internal trusted xattrs"
        fi
@@ -8274,7 +8519,7 @@ test_102n() { # LU-4101 mdt: protect internal xattrs
        # Get 'before' xattrs of $file1.
        getfattr --absolute-names --dump --match=- $file1 > $xattr0
 
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.53) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.8.53) ] &&
                namelist+=" lfsck_namespace"
        for name in $namelist; do
                # Try to copy xattr from $file0 to $file1.
@@ -8300,7 +8545,7 @@ test_102n() { # LU-4101 mdt: protect internal xattrs
                setfattr --remove=$trusted.$name $file1 2> /dev/null
        done
 
-       if [ $(lustre_version_code $SINGLEMDS) -gt $(version_code 2.6.50) ]
+       if [ $MDS1_VERSION -gt $(version_code 2.6.50) ]
        then
                name="lfsck_ns"
                # Try to copy xattr from $file0 to $file1.
@@ -8335,7 +8580,7 @@ test_102n() { # LU-4101 mdt: protect internal xattrs
 run_test 102n "silently ignore setxattr on internal trusted xattrs"
 
 test_102p() { # LU-4703 setxattr did not check ownership
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.56) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.5.56) ] &&
                skip "MDS needs to be at least 2.5.56"
 
        local testfile=$DIR/$tfile
@@ -8354,7 +8599,7 @@ test_102p() { # LU-4703 setxattr did not check ownership
 run_test 102p "check setxattr(2) correctly fails without permission"
 
 test_102q() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.92) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.6.92) ] &&
                skip "MDS needs to be at least 2.6.92"
 
        orphan_linkea_check $DIR/$tfile || error "orphan_linkea_check"
@@ -8362,7 +8607,7 @@ test_102q() {
 run_test 102q "flistxattr should not return trusted.link EAs for orphans"
 
 test_102r() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.93) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.6.93) ] &&
                skip "MDS needs to be at least 2.6.93"
 
        touch $DIR/$tfile || error "touch"
@@ -8395,7 +8640,7 @@ test_102r() {
 run_test 102r "set EAs with empty values"
 
 test_102s() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "MDS needs to be at least 2.11.52"
 
        local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
@@ -8421,7 +8666,7 @@ test_102s() {
 run_test 102s "getting nonexistent xattrs should fail"
 
 test_102t() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "MDS needs to be at least 2.11.52"
 
        local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
@@ -8482,9 +8727,9 @@ test_103a() {
        echo "performing permissions..."
        run_acl_subtest permissions || error "permissions failed"
        # LU-1482 mdd: Setting xattr are properly checked with and without ACLs
-       if [ $(lustre_version_code $SINGLEMDS) -gt $(version_code 2.8.55) -o \
-            \( $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6) -a \
-            $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.5.29) \) ]
+       if [ $MDS1_VERSION -gt $(version_code 2.8.55) -o \
+            \( $MDS1_VERSION -lt $(version_code 2.6) -a \
+            $MDS1_VERSION -ge $(version_code 2.5.29) \) ]
        then
                echo "performing permissions xattr..."
                run_acl_subtest permissions_xattr ||
@@ -8508,7 +8753,7 @@ test_103a() {
        fi
 
        echo "LU-2561 newly created file is same size as directory..."
-       if [ $(facet_fstype $SINGLEMDS) != "zfs" ]; then
+       if [ "$mds1_FSTYPE" != "zfs" ]; then
                run_acl_subtest 2561 || error "LU-2561 test failed"
        else
                run_acl_subtest 2561_zfs || error "LU-2561 zfs test failed"
@@ -8528,6 +8773,7 @@ test_103a() {
 run_test 103a "acl test"
 
 test_103b() {
+       declare -a pids
        local U
 
        for U in {0..511}; do
@@ -8552,6 +8798,12 @@ test_103b() {
                        error "lfs setstripe -N2 $DIR/$tfile.m$O '$S' != '$O'"
                rm -f $DIR/$tfile.[smp]$0
                } &
+               local pid=$!
+
+               # limit the concurrently running threads to 64. LU-11878
+               local idx=$((U % 64))
+               [ -z "${pids[idx]}" ] || wait ${pids[idx]}
+               pids[idx]=$pid
        done
        wait
 }
@@ -8585,7 +8837,7 @@ test_104a() {
        lfs df || error "lfs df with deactivated OSC failed"
        lctl --device %$OSC activate
        # wait the osc back to normal
-       wait_osc_import_state client ost FULL
+       wait_osc_import_ready client ost
 
        lfs df || error "lfs df with reactivated OSC failed"
        rm -f $DIR/$tfile
@@ -8597,7 +8849,6 @@ test_104b() {
        [ $RUNAS_ID -eq $UID ] &&
                skip_env "RUNAS_ID = UID = $UID -- skipping"
 
-       chmod 666 /dev/obd
        denied_cnt=$(($($RUNAS $LFS check servers 2>&1 |
                        grep "Permission denied" | wc -l)))
        if [ $denied_cnt -ne 0 ]; then
@@ -8882,7 +9133,7 @@ test_116a() { # was previously test_116()
                DIFF=$((threshold - DIFF2 + 2))
                DIFF2=$((MINV * DIFF / 100))
                echo "Fill $DIFF% remaining space in OST$MINI with ${DIFF2}KB"
-               $SETSTRIPE -i $MINI -c 1 $DIR/$tdir/OST${MINI} ||
+               $LFS setstripe -i $MINI -c 1 $DIR/$tdir/OST${MINI} ||
                        error "setstripe failed"
                DIFF=$((DIFF2 / 2048))
                i=0
@@ -8915,7 +9166,7 @@ test_116a() { # was previously test_116()
        MAXV1=$MAXV
 
        # now fill using QOS
-       $SETSTRIPE -c 1 $DIR/$tdir
+       $LFS setstripe -c 1 $DIR/$tdir
        FILL=$((FILL / 200))
        if [ $FILL -gt 600 ]; then
                FILL=600
@@ -8950,12 +9201,12 @@ test_116a() { # was previously test_116()
        UUID=$(lctl get_param -n lov.${FSNAME}-clilov-*.target_obd |
               awk '/'$MINI1': / {print $2; exit}')
        echo $UUID
-       MINC=$($GETSTRIPE --ost $UUID $DIR/$tdir | grep $DIR | wc -l)
+       MINC=$($LFS getstripe --ost $UUID $DIR/$tdir | grep $DIR | wc -l)
        echo "$MINC files created on smaller OST $MINI1"
        UUID=$(lctl get_param -n lov.${FSNAME}-clilov-*.target_obd |
               awk '/'$MAXI1': / {print $2; exit}')
        echo $UUID
-       MAXC=$($GETSTRIPE --ost $UUID $DIR/$tdir | grep $DIR | wc -l)
+       MAXC=$($LFS getstripe --ost $UUID $DIR/$tdir | grep $DIR | wc -l)
        echo "$MAXC files created on larger OST $MAXI1"
        if [[ $MINC -gt 0 ]]; then
                FILL=$((MAXC * 100 / MINC - 100))
@@ -9018,7 +9269,7 @@ reset_async() {
        FILE=$DIR/reset_async
 
        # Ensure all OSCs are cleared
-       $SETSTRIPE -c -1 $FILE
+       $LFS setstripe -c -1 $FILE
        dd if=/dev/zero of=$FILE bs=64k count=$OSTCOUNT
        sync
        rm $FILE
@@ -9453,7 +9704,7 @@ test_119b() # bug 11737
 {
        [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs"
 
-       $SETSTRIPE -c 2 $DIR/$tfile || error "setstripe failed"
+       $LFS setstripe -c 2 $DIR/$tfile || error "setstripe failed"
        dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1 || error "dd failed"
        sync
        $MULTIOP $DIR/$tfile oO_RDONLY:O_DIRECT:r$((2048 * 1024)) ||
@@ -9478,7 +9729,7 @@ test_119d() # bug 15950
         MAX_RPCS_IN_FLIGHT=`$LCTL get_param -n osc.*OST0000-osc-[^mM]*.max_rpcs_in_flight`
         $LCTL set_param -n osc.*OST0000-osc-[^mM]*.max_rpcs_in_flight 1
         BSIZE=1048576
-        $SETSTRIPE $DIR/$tfile -i 0 -c 1 || error "setstripe failed"
+        $LFS setstripe $DIR/$tfile -i 0 -c 1 || error "setstripe failed"
         $DIRECTIO write $DIR/$tfile 0 1 $BSIZE || error "first directio failed"
         #define OBD_FAIL_OSC_DIO_PAUSE           0x40d
         lctl set_param fail_loc=0x40d
@@ -9501,7 +9752,7 @@ run_test 119d "The DIO path should try to send a new rpc once one is completed"
 test_120a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       test_mkdir $DIR/$tdir
+       test_mkdir -i0 -c1 $DIR/$tdir
        $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
                skip_env "no early lock cancel on server"
 
@@ -9512,13 +9763,13 @@ test_120a() {
        cancel_lru_locks osc
 
        stat $DIR/$tdir > /dev/null
-       can1=$(do_facet $SINGLEMDS \
+       can1=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk1=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
               awk '/ldlm_bl_callback/ {print $2}')
-       test_mkdir -c1 $DIR/$tdir/d1
-       can2=$(do_facet $SINGLEMDS \
+       test_mkdir -i0 -c1 $DIR/$tdir/d1
+       can2=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk2=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
@@ -9562,24 +9813,24 @@ run_test 120b "Early Lock Cancel: create test"
 test_120c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       test_mkdir -c1 $DIR/$tdir
+       test_mkdir -i0 -c1 $DIR/$tdir
        $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
                skip "no early lock cancel on server"
 
        lru_resize_disable mdc
        lru_resize_disable osc
-       test_mkdir -c1 $DIR/$tdir/d1
-       test_mkdir -c1 $DIR/$tdir/d2
+       test_mkdir -i0 -c1 $DIR/$tdir/d1
+       test_mkdir -i0 -c1 $DIR/$tdir/d2
        touch $DIR/$tdir/d1/f1
        cancel_lru_locks mdc
        stat $DIR/$tdir/d1 $DIR/$tdir/d2 $DIR/$tdir/d1/f1 > /dev/null
-       can1=$(do_facet $SINGLEMDS \
+       can1=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk1=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
               awk '/ldlm_bl_callback/ {print $2}')
        ln $DIR/$tdir/d1/f1 $DIR/$tdir/d2/f2
-       can2=$(do_facet $SINGLEMDS \
+       can2=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk2=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
@@ -9594,7 +9845,7 @@ run_test 120c "Early Lock Cancel: link test"
 test_120d() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       test_mkdir -c1 $DIR/$tdir
+       test_mkdir -i0 -c1 $DIR/$tdir
        $LCTL get_param -n mdc.*.connect_flags | grep -q early_lock_cancel ||
                skip_env "no early lock cancel on server"
 
@@ -9603,13 +9854,13 @@ test_120d() {
        touch $DIR/$tdir
        cancel_lru_locks mdc
        stat $DIR/$tdir > /dev/null
-       can1=$(do_facet $SINGLEMDS \
+       can1=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk1=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
               awk '/ldlm_bl_callback/ {print $2}')
        chmod a+x $DIR/$tdir
-       can2=$(do_facet $SINGLEMDS \
+       can2=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk2=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
@@ -9629,7 +9880,7 @@ test_120e() {
 
        local dlmtrace_set=false
 
-       test_mkdir -c1 $DIR/$tdir
+       test_mkdir -i0 -c1 $DIR/$tdir
        lru_resize_disable mdc
        lru_resize_disable osc
        ! $LCTL get_param debug | grep -q dlmtrace &&
@@ -9643,14 +9894,14 @@ test_120e() {
        # during unlink (LU-4206), so cancel osc lock now.
        sleep 2
        cancel_lru_locks osc
-       can1=$(do_facet $SINGLEMDS \
+       can1=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk1=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
               awk '/ldlm_bl_callback/ {print $2}')
        unlink $DIR/$tdir/f1
        sleep 5
-       can2=$(do_facet $SINGLEMDS \
+       can2=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk2=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
@@ -9671,11 +9922,11 @@ test_120f() {
                skip_env "no early lock cancel on server"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
-       test_mkdir -c1 $DIR/$tdir
+       test_mkdir -i0 -c1 $DIR/$tdir
        lru_resize_disable mdc
        lru_resize_disable osc
-       test_mkdir -c1 $DIR/$tdir/d1
-       test_mkdir -c1 $DIR/$tdir/d2
+       test_mkdir -i0 -c1 $DIR/$tdir/d1
+       test_mkdir -i0 -c1 $DIR/$tdir/d2
        dd if=/dev/zero of=$DIR/$tdir/d1/f1 count=1
        dd if=/dev/zero of=$DIR/$tdir/d2/f2 count=1
        cancel_lru_locks mdc
@@ -9687,14 +9938,14 @@ test_120f() {
        # during rename (LU-4206), so cancel osc lock now.
        sleep 2
        cancel_lru_locks osc
-       can1=$(do_facet $SINGLEMDS \
+       can1=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk1=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
               awk '/ldlm_bl_callback/ {print $2}')
        mrename $DIR/$tdir/d1/f1 $DIR/$tdir/d2/f2
        sleep 5
-       can2=$(do_facet $SINGLEMDS \
+       can2=$(do_facet mds1 \
               "$LCTL get_param -n ldlm.services.ldlm_canceld.stats" |
               awk '/ldlm_cancel/ {print $2}')
        blk2=$($LCTL get_param -n ldlm.services.ldlm_cbd.stats |
@@ -10112,7 +10363,7 @@ run_test 126 "check that the fsgid provided by the client is taken into account"
 test_127a() { # bug 15521
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
-       $SETSTRIPE -i 0 -c 1 $DIR/$tfile || error "setstripe failed"
+       $LFS setstripe -i 0 -c 1 $DIR/$tfile || error "setstripe failed"
        $LCTL set_param osc.*.stats=0
        FSIZE=$((2048 * 1024))
        dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
@@ -10151,38 +10402,44 @@ run_test 127a "verify the client stats are sane"
 
 test_127b() { # bug LU-333
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
+       local name count samp unit min max sum sumsq
 
        $LCTL set_param llite.*.stats=0
-       FSIZE=65536 # sized fixed to match PAGE_SIZE for most clients
 
        # perform 2 reads and writes so MAX is different from SUM.
-       dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
-       dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
+       dd if=/dev/zero of=$DIR/$tfile bs=$PAGE_SIZE count=1
+       dd if=/dev/zero of=$DIR/$tfile bs=$PAGE_SIZE count=1
        cancel_lru_locks osc
-       dd if=$DIR/$tfile of=/dev/null bs=$FSIZE count=1
-       dd if=$DIR/$tfile of=/dev/null bs=$FSIZE count=1
-
-        $LCTL get_param llite.*.stats | grep samples > $TMP/${tfile}.tmp
-        while read NAME COUNT SAMP UNIT MIN MAX SUM SUMSQ; do
-                echo "got $COUNT $NAME"
-                eval $NAME=$COUNT || error "Wrong proc format"
-
-        case $NAME in
-                read_bytes)
-                        [ $COUNT -ne 2 ] && error "count is not 2: $COUNT"
-                        [ $MIN -ne $FSIZE ] && error "min is not $FSIZE: $MIN"
-                        [ $MAX -ne $FSIZE ] && error "max is incorrect: $MAX"
-                        [ $SUM -ne $((FSIZE * 2)) ] && error "sum is wrong: $SUM"
-                        ;;
-                write_bytes)
-                        [ $COUNT -ne 2 ] && error "count is not 2: $COUNT"
-                        [ $MIN -ne $FSIZE ] && error "min is not $FSIZE: $MIN"
-                        [ $MAX -ne $FSIZE ] && error "max is incorrect: $MAX"
-                        [ $SUM -ne $((FSIZE * 2)) ] && error "sum is wrong: $SUM"
-                        ;;
-                        *) ;;
-                esac
-        done < $TMP/${tfile}.tmp
+       dd if=$DIR/$tfile of=/dev/null bs=$PAGE_SIZE count=1
+       dd if=$DIR/$tfile of=/dev/null bs=$PAGE_SIZE count=1
+
+       $LCTL get_param llite.*.stats | grep samples > $TMP/$tfile.tmp
+       while read name count samp unit min max sum sumsq; do
+               echo "got $count $name"
+               eval $name=$count || error "Wrong proc format"
+
+               case $name in
+               read_bytes)
+                       [ $count -ne 2 ] && error "count is not 2: $count"
+                       [ $min -ne $PAGE_SIZE ] &&
+                               error "min is not $PAGE_SIZE: $min"
+                       [ $max -ne $PAGE_SIZE ] &&
+                               error "max is incorrect: $max"
+                       [ $sum -ne $((PAGE_SIZE * 2)) ] &&
+                               error "sum is wrong: $sum"
+                       ;;
+               write_bytes)
+                       [ $count -ne 2 ] && error "count is not 2: $count"
+                       [ $min -ne $PAGE_SIZE ] &&
+                               error "min is not $PAGE_SIZE: $min"
+                       [ $max -ne $PAGE_SIZE ] &&
+                               error "max is incorrect: $max"
+                       [ $sum -ne $((PAGE_SIZE * 2)) ] &&
+                               error "sum is wrong: $sum"
+                       ;;
+               *) ;;
+               esac
+       done < $TMP/$tfile.tmp
 
        #check that we actually got some stats
        [ "$read_bytes" ] || error "Missing read_bytes stats"
@@ -10236,9 +10493,9 @@ check_mds_dmesg() {
 
 test_129() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.5.56) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.5.56) ]] ||
                skip "Need MDS version with at least 2.5.56"
-       if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
+       if [ "$mds1_FSTYPE" != ldiskfs ]; then
                skip_env "ldiskfs only test"
        fi
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -10309,20 +10566,20 @@ test_130a() {
        trap cleanup_130 EXIT RETURN
 
        local fm_file=$DIR/$tfile
-       $SETSTRIPE -S 65536 -c 1 $fm_file || error "setstripe on $fm_file"
+       $LFS setstripe -S 65536 -c 1 $fm_file || error "setstripe on $fm_file"
        dd if=/dev/zero of=$fm_file bs=65536 count=1 ||
                error "dd failed for $fm_file"
 
        # LU-1795: test filefrag/FIEMAP once, even if unsupported
        filefrag -ves $fm_file
        RC=$?
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $fm_file) + 1)))" = "zfs" ] &&
+       [ "$(facet_fstype ost$(($($LFS getstripe -i $fm_file) + 1)))" = "zfs" ] &&
                skip_env "ORI-366/LU-1941: FIEMAP unimplemented on ZFS"
        [ $RC != 0 ] && error "filefrag $fm_file failed"
 
        filefrag_op=$(filefrag -ve -k $fm_file |
                        sed -n '/ext:/,/found/{/ext:/d; /found/d; p}')
-       lun=$($GETSTRIPE -i $fm_file)
+       lun=$($LFS getstripe -i $fm_file)
 
        start_blk=`echo $filefrag_op | cut -d: -f2 | cut -d. -f1`
        IFS=$'\n'
@@ -10360,9 +10617,9 @@ test_130b() {
        trap cleanup_130 EXIT RETURN
 
        local fm_file=$DIR/$tfile
-       $SETSTRIPE -S 65536 -c $OSTCOUNT $fm_file ||
+       $LFS setstripe -S 65536 -c $OSTCOUNT $fm_file ||
                        error "setstripe on $fm_file"
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $fm_file) + 1)))" = "zfs" ] &&
+       [ "$(facet_fstype ost$(($($LFS getstripe -i $fm_file) + 1)))" = "zfs" ] &&
                skip_env "ORI-366/LU-1941: FIEMAP unimplemented on ZFS"
 
        dd if=/dev/zero of=$fm_file bs=1M count=$OSTCOUNT ||
@@ -10419,8 +10676,8 @@ test_130c() {
        trap cleanup_130 EXIT RETURN
 
        local fm_file=$DIR/$tfile
-       $SETSTRIPE -S 65536 -c 2 $fm_file || error "setstripe on $fm_file"
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $fm_file) + 1)))" = "zfs" ] &&
+       $LFS setstripe -S 65536 -c 2 $fm_file || error "setstripe on $fm_file"
+       [ "$(facet_fstype ost$(($($LFS getstripe -i $fm_file) + 1)))" = "zfs" ] &&
                skip_env "ORI-366/LU-1941: FIEMAP unimplemented on ZFS"
 
        dd if=/dev/zero of=$fm_file seek=1 bs=1M count=1 ||
@@ -10484,12 +10741,12 @@ test_130d() {
        trap cleanup_130 EXIT RETURN
 
        local fm_file=$DIR/$tfile
-       $SETSTRIPE -S 65536 -c $OSTCOUNT $fm_file ||
+       $LFS setstripe -S 65536 -c $OSTCOUNT $fm_file ||
                        error "setstripe on $fm_file"
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $fm_file) + 1)))" = "zfs" ] &&
+       [ "$(facet_fstype ost$(($($LFS getstripe -i $fm_file) + 1)))" = "zfs" ] &&
                skip_env "ORI-366/LU-1941: FIEMAP unimplemented on ZFS"
 
-       local actual_stripe_count=$($GETSTRIPE -c $fm_file)
+       local actual_stripe_count=$($LFS getstripe -c $fm_file)
        dd if=/dev/zero of=$fm_file bs=1M count=$actual_stripe_count ||
                error "dd failed on $fm_file"
 
@@ -10544,8 +10801,8 @@ test_130e() {
        trap cleanup_130 EXIT RETURN
 
        local fm_file=$DIR/$tfile
-       $SETSTRIPE -S 131072 -c 2 $fm_file || error "setstripe on $fm_file"
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $fm_file) + 1)))" = "zfs" ] &&
+       $LFS setstripe -S 131072 -c 2 $fm_file || error "setstripe on $fm_file"
+       [ "$(facet_fstype ost$(($($LFS getstripe -i $fm_file) + 1)))" = "zfs" ] &&
                skip_env "ORI-366/LU-1941: FIEMAP unimplemented on ZFS"
 
        NUM_BLKS=512
@@ -10681,7 +10938,6 @@ check_stats() {
                 ;;
        *) error "Wrong facet '$facet'" ;;
        esac
-       echo $res
        [ "$res" ] || error "The counter for $op on $facet was not incremented"
        # if the argument $3 is zero, it means any stat increment is ok.
        if [[ $want -gt 0 ]]; then
@@ -10712,7 +10968,7 @@ test_133a() {
        touch ${testdir}/${tfile} || error "touch failed"
        check_stats $SINGLEMDS "open" 1
        check_stats $SINGLEMDS "close" 1
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.8.54) ] && {
+       [ $MDS1_VERSION -ge $(version_code 2.8.54) ] && {
                mknod ${testdir}/${tfile}-pipe p || error "mknod failed"
                check_stats $SINGLEMDS "mknod" 2
        }
@@ -10740,6 +10996,8 @@ test_133a() {
 run_test 133a "Verifying MDT stats ========================================"
 
 test_133b() {
+       local res
+
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_ost_nodsh && skip "remote OST with nodsh"
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -10758,7 +11016,7 @@ test_133b() {
        chmod 444 ${testdir}/${tfile} || error "chmod failed"
        check_stats $SINGLEMDS "setattr" 1
        do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
-       if [ $(lustre_version_code $SINGLEMDS) -ne $(version_code 2.2.0) ]
+       if [ $MDS1_VERSION -ne $(version_code 2.2.0) ]
        then            # LU-1740
                ls -l ${testdir}/${tfile} > /dev/null|| error "ls failed"
                check_stats $SINGLEMDS "getattr" 1
@@ -10772,9 +11030,33 @@ test_133b() {
        # Sleep to avoid a cached response.
        #define OBD_STATFS_CACHE_SECONDS 1
        sleep 2
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.exports.*.stats=clear
        $LFS df || error "lfs failed"
        check_stats $SINGLEMDS "statfs" 1
 
+       # check aggregated statfs (LU-10018)
+       [ $MDS1_VERSION -lt $(version_code 2.11.54) ] &&
+               return 0
+       [ $CLIENT_VERSION -lt $(version_code 2.11.54) ] &&
+               return 0
+       sleep 2
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.exports.*.stats=clear
+       df $DIR
+       check_stats $SINGLEMDS "statfs" 1
+
+       # We want to check that the client didn't send OST_STATFS to
+       # ost1 but the MDT also uses OST_STATFS for precreate. So some
+       # extra care is needed here.
+       if remote_mds; then
+               local nid=$($LCTL list_nids | head -1 | sed  "s/\./\\\./g")
+               local param="obdfilter.$FSNAME-OST0000.exports.'$nid'.stats"
+
+               res=$(do_facet ost1 $LCTL get_param $param | grep statfs)
+               [ "$res" ] && error "OST got STATFS"
+       fi
+
        return 0
 }
 run_test 133b "Verifying extra MDT stats =================================="
@@ -10789,7 +11071,7 @@ test_133c() {
        test_mkdir -p $testdir
 
        # verify obdfilter stats.
-       $SETSTRIPE -c 1 -i 0 $testdir/$tfile
+       $LFS setstripe -c 1 -i 0 $testdir/$tfile
        sync
        cancel_lru_locks osc
        wait_delete_completed
@@ -10957,7 +11239,7 @@ test_133e() {
 
        mkdir -p ${testdir} || error "mkdir failed"
 
-       $SETSTRIPE -c 1 -i 0 ${testdir}/${tfile}
+       $LFS setstripe -c 1 -i 0 ${testdir}/${tfile}
 
        for ctr in {write,read}_bytes; do
                sync
@@ -11016,7 +11298,7 @@ test_133f() {
        find $proc_dirs -exec cat '{}' \; &> /dev/null
 
        # Second verifying readability.
-       $LCTL get_param -R '*' &> /dev/null || error "proc file read failed"
+       $LCTL get_param -R '*' &> /dev/null
 
        # Verifing writability with badarea_io.
        find $proc_dirs \
@@ -11072,7 +11354,7 @@ run_test 133g "Check reads/writes of server lustre proc files with bad area io"
 test_133h() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
        remote_ost_nodsh && skip "remote OST with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.9.54) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.9.54) ]] &&
                skip "Need MDS version at least 2.9.54"
 
        local facet
@@ -11100,7 +11382,7 @@ run_test 133h "Proc files should end with newlines"
 
 test_134a() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.54) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.7.54) ]] &&
                skip "Need MDS version at least 2.7.54"
 
        mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
@@ -11136,7 +11418,7 @@ run_test 134a "Server reclaims locks when reaching lock_reclaim_threshold"
 
 test_134b() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.54) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.7.54) ]] &&
                skip "Need MDS version at least 2.7.54"
 
        mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
@@ -11260,7 +11542,7 @@ function roc_hit_init() {
        test_mkdir $dir
        #use setstripe to do a write to every ost
        for i in $(seq 0 $((OSTCOUNT-1))); do
-               $SETSTRIPE -c 1 -i $i $dir || error "$SETSTRIPE $file failed"
+               $LFS setstripe -c 1 -i $i $dir || error "$LFS setstripe $file failed"
                dd if=/dev/urandom of=$file bs=4k count=4 2>&1 > /dev/null
                idx=$(printf %04x $i)
                BEFORE=$(get_osd_param $list *OST*$idx stats |
@@ -11483,7 +11765,7 @@ dot_lustre_fid_permission_check() {
        mrename $test_dir/$tdir $MOUNT/.lustre/fid &&
                error "rename to $MOUNT/.lustre/fid should fail."
 
-       if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.51) ]
+       if [ $MDS1_VERSION -ge $(version_code 2.3.51) ]
        then            # LU-3547
                local old_obf_mode=$(stat --format="%a" $DIR/.lustre/fid)
                local new_obf_mode=777
@@ -11504,7 +11786,7 @@ dot_lustre_fid_permission_check() {
        $OPENFILE -f O_LOV_DELAY_CREATE:O_CREAT $test_dir/$tfile-2
        fid=$($LFS path2fid $test_dir/$tfile-2)
 
-       if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.50) ]
+       if [ $MDS1_VERSION -ge $(version_code 2.6.50) ]
        then # LU-5424
                echo "cp /etc/passwd $MOUNT/.lustre/fid/$fid"
                cp /etc/passwd $MOUNT/.lustre/fid/$fid ||
@@ -11522,7 +11804,7 @@ dot_lustre_fid_permission_check() {
 }
 
 test_154A() {
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.1) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.4.1) ]] &&
                skip "Need MDS version at least 2.4.1"
 
        local tf=$DIR/$tfile
@@ -11540,7 +11822,7 @@ test_154A() {
 run_test 154A "lfs path2fid and fid2path basic checks"
 
 test_154B() {
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.1) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.4.1) ]] &&
                skip "Need MDS version at least 2.4.1"
 
        mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
@@ -11565,7 +11847,7 @@ run_test 154B "verify the ll_decode_linkea tool"
 test_154a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ -n "$FILESET" ] && skip "SKIP due to FILESET set"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.2.51) ]] ||
                skip "Need MDS version at least 2.2.51"
        [ -z "$(which setfacl)" ] && skip_env "must have setfacl tool"
 
@@ -11596,7 +11878,7 @@ test_154b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ -n "$FILESET" ] && skip "SKIP due to FILESET set"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.2.51) ]] ||
                skip "Need MDS version at least 2.2.51"
 
        local remote_dir=$DIR/$tdir/remote_dir
@@ -11620,7 +11902,7 @@ test_154b() {
 run_test 154b "Open-by-FID for remote directory"
 
 test_154c() {
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.1) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.4.1) ]] &&
                skip "Need MDS version at least 2.4.1"
 
        touch $DIR/$tfile.1 $DIR/$tfile.2 $DIR/$tfile.3
@@ -11649,7 +11931,7 @@ run_test 154c "lfs path2fid and fid2path multiple arguments"
 
 test_154d() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.53) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.5.53) ]] &&
                skip "Need MDS version at least 2.5.53"
 
        if remote_mds; then
@@ -11683,7 +11965,7 @@ run_test 154d "Verify open file fid"
 
 test_154e()
 {
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.50) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.6.50) ]] &&
                skip "Need MDS version at least 2.6.50"
 
        if ls -a $MOUNT | grep -q '^\.lustre$'; then
@@ -11774,8 +12056,8 @@ run_test 154f "get parent fids by reading link ea"
 test_154g()
 {
        [ -n "$FILESET" ] && skip "SKIP due to FILESET set"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.92) && \
-          $(lustre_version_code client) -gt $(version_code 2.6.99) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.6.92) &&
+          $CLIENT_VERSION -gt $(version_code 2.6.99) ]] ||
                skip "Need MDS version at least 2.6.92"
 
        mkdir -p $DIR/$tdir
@@ -11826,7 +12108,7 @@ test_155_big_load() {
        [ $MAXV -le $large_file_size ] &&
                skip_env "max available OST size needs > $large_file_size KB"
 
-       $SETSTRIPE $file -c 1 -i $MAXI || error "$SETSTRIPE $file failed"
+       $LFS setstripe $file -c 1 -i $MAXI || error "$LFS setstripe $file failed"
 
        dd if=/dev/urandom of=$temp bs=$large_file_size count=1k ||
                error "dd of=$temp bs=$large_file_size count=1k failed"
@@ -11968,8 +12250,9 @@ run_test 155h "Verify big file correctness: read cache:off write_cache:off"
 test_156() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_ost_nodsh && skip "remote OST with nodsh"
-       [ "$(facet_fstype ost1)" = "zfs" -a \
-          $(lustre_version_code ost1 -lt $(version_code 2.6.93)) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.6.93) ] &&
+               skip "stats not implemented on old servers"
+       [ "$ost1_FSTYPE" = "zfs" ] &&
                skip "LU-1956/LU-2261: stats not implemented on OSD ZFS"
 
        local CPAGES=3
@@ -12114,7 +12397,7 @@ run_test 156 "Verification of tunables"
 test_160a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.2.0) ] ||
                skip "Need MDS version at least 2.2.0"
 
        changelog_register || error "changelog_register failed"
@@ -12234,7 +12517,7 @@ run_test 160a "changelog sanity"
 test_160b() { # LU-3587
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.2.0) ] ||
                skip "Need MDS version at least 2.2.0"
 
        changelog_register || error "changelog_register failed"
@@ -12260,14 +12543,13 @@ test_160c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
-       local rc=0
-       local server_version=$(lustre_version_code $SINGLEMDS)
-
-       [[ $server_version -gt $(version_code 2.5.57) ]] ||
-               [[ $server_version -gt $(version_code 2.5.1) &&
-                  $server_version -lt $(version_code 2.5.50) ]] ||
+       [[ $MDS1_VERSION -gt $(version_code 2.5.57) ]] ||
+               [[ $MDS1_VERSION -gt $(version_code 2.5.1) &&
+                  $MDS1_VERSION -lt $(version_code 2.5.50) ]] ||
                skip "Need MDS version at least 2.5.58 or 2.5.2+"
 
+       local rc=0
+
        # Registration step
        changelog_register || error "changelog_register failed"
 
@@ -12288,7 +12570,7 @@ test_160d() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.7.60) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.7.60) ]] ||
                skip "Need MDS version at least 2.7.60"
 
        # Registration step
@@ -12335,8 +12617,8 @@ run_test 160e "changelog negative testing (should return errors)"
 
 test_160f() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.56) ]] ||
-               { skip "Need MDS version at least 2.10.56"; return 0; }
+       [[ $MDS1_VERSION -ge $(version_code 2.10.56) ]] ||
+               skip "Need MDS version at least 2.10.56"
 
        local mdts=$(comma_list $(mdts_nodes))
 
@@ -12449,7 +12731,7 @@ run_test 160f "changelog garbage collect (timestamped users)"
 
 test_160g() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.56) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.10.56) ]] ||
                skip "Need MDS version at least 2.10.56"
 
        local mdts=$(comma_list $(mdts_nodes))
@@ -12476,7 +12758,10 @@ test_160g() {
        local nbcl=$(changelog_dump | wc -l)
        [[ $nbcl -eq 0 ]] && error "no changelogs found"
 
-       for param in "changelog_max_idle_indexes=$((nbcl / 2))" \
+       # reduce the max_idle_indexes value to make sure we exceed it
+       max_ndx=$((nbcl / 2 - 1))
+
+       for param in "changelog_max_idle_indexes=$max_ndx" \
                     "changelog_gc=1" \
                     "changelog_min_gc_interval=2" \
                     "changelog_min_free_cat_entries=3"; do
@@ -12563,8 +12848,8 @@ run_test 160g "changelog garbage collect (old users)"
 
 test_160h() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.56) ]] ||
-               { skip "Need MDS version at least 2.10.56"; return 0; }
+       [[ $MDS1_VERSION -ge $(version_code 2.10.56) ]] ||
+               skip "Need MDS version at least 2.10.56"
 
        local mdts=$(comma_list $(mdts_nodes))
 
@@ -12877,7 +13162,7 @@ run_test 161b "link ea sanity under remote directory"
 test_161c() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.1.5) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.1.5) ]] &&
                skip "Need MDS version at least 2.1.5"
 
        # define CLF_RENAME_LAST 0x0001
@@ -12950,6 +13235,7 @@ run_test 161c "check CL_RENME[UNLINK] changelog record flags"
 
 test_161d() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
+       [ -n "$FILESET" ] && skip "Not functional for FILESET set"
 
        local pid
        local fid
@@ -13079,7 +13365,7 @@ run_test 162b "striped directory path lookup sanity"
 
 # LU-4239: Verify fid2path works with paths 100 or more directories deep
 test_162c() {
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.51) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.7.51) ]] &&
                skip "Need MDS version at least 2.7.51"
 
        local lpath=$tdir.local
@@ -13311,7 +13597,7 @@ run_test 180b "test obdecho directly on obdfilter"
 test_180c() { # LU-2598
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_ost_nodsh && skip "remote OST with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.0) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.4.0) ]] &&
                skip "Need MDS version at least 2.4.0"
 
        do_rpc_nodes $(facet_active_host ost1) load_module obdecho/obdecho &&
@@ -13383,7 +13669,7 @@ run_test 182 "Test parallel modify metadata operations ================"
 test_183() { # LU-2275
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.56) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.3.56) ]] &&
                skip "Need MDS version at least 2.3.56"
 
        mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
@@ -13416,18 +13702,18 @@ test_184a() {
        ref2=/etc/group
        file1=$dir0/f1
        file2=$dir0/f2
-       $SETSTRIPE -c1 $file1
+       $LFS setstripe -c1 $file1
        cp $ref1 $file1
-       $SETSTRIPE -c2 $file2
+       $LFS setstripe -c2 $file2
        cp $ref2 $file2
-       gen1=$($GETSTRIPE -g $file1)
-       gen2=$($GETSTRIPE -g $file2)
+       gen1=$($LFS getstripe -g $file1)
+       gen2=$($LFS getstripe -g $file2)
 
        $LFS swap_layouts $file1 $file2 || error "swap of file layout failed"
-       gen=$($GETSTRIPE -g $file1)
+       gen=$($LFS getstripe -g $file1)
        [[ $gen1 != $gen ]] ||
                "Layout generation on $file1 does not change"
-       gen=$($GETSTRIPE -g $file2)
+       gen=$($LFS getstripe -g $file2)
        [[ $gen2 != $gen ]] ||
                "Layout generation on $file2 does not change"
 
@@ -13449,12 +13735,12 @@ test_184b() {
        dir1=$dir0/d1
        dir2=$dir0/d2
        mkdir $dir1 $dir2
-       $SETSTRIPE -c1 $file1
-       $SETSTRIPE -c2 $file2
-       $SETSTRIPE -c1 $file3
+       $LFS setstripe -c1 $file1
+       $LFS setstripe -c2 $file2
+       $LFS setstripe -c1 $file3
        chown $RUNAS_ID $file3
-       gen1=$($GETSTRIPE -g $file1)
-       gen2=$($GETSTRIPE -g $file2)
+       gen1=$($LFS getstripe -g $file1)
+       gen2=$($LFS getstripe -g $file2)
 
        $LFS swap_layouts $dir1 $dir2 &&
                error "swap of directories layouts should fail"
@@ -13552,7 +13838,7 @@ test_184d() {
 run_test 184d "allow stripeless layouts swap"
 
 test_184e() {
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.94) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.6.94) ]] ||
                skip "Need MDS version at least 2.6.94"
        check_swap_layouts_support
        [ -z "$(which getfattr 2>/dev/null)" ] &&
@@ -13587,9 +13873,23 @@ test_184e() {
 }
 run_test 184e "Recreate layout after stripeless layout swaps"
 
+test_184f() {
+       # Create a file with name longer than sizeof(struct stat) ==
+       # 144 to see if we can get chars from the file name to appear
+       # in the returned striping. Note that 'f' == 0x66.
+       local file=$(for ((i = 0; i < 200; i++)); do echo -n f; done)
+
+       mkdir -p $DIR/$tdir
+       mcreate $DIR/$tdir/$file
+       if lfs find --stripe-count 0x6666 $DIR/$tdir | grep $file; then
+               error "IOC_MDC_GETFILEINFO returned garbage striping"
+       fi
+}
+run_test 184f "IOC_MDC_GETFILEINFO for files with long names but no striping"
+
 test_185() { # LU-2441
        # LU-3553 - no volatile file support in old servers
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.60) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.3.60) ]] ||
                skip "Need MDS version at least 2.3.60"
 
        mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
@@ -13626,7 +13926,7 @@ run_test 185 "Volatile file support"
 
 test_187a() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.0) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.3.0) ] &&
                skip "Need MDS version at least 2.3.0"
 
        local dir0=$DIR/$tdir/$testnum
@@ -13647,7 +13947,7 @@ run_test 187a "Test data version change"
 
 test_187b() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.0) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.3.0) ] &&
                skip "Need MDS version at least 2.3.0"
 
        local dir0=$DIR/$tdir/$testnum
@@ -13733,7 +14033,7 @@ default_attr() {
 
 # usage: check_default_stripe_attr
 check_default_stripe_attr() {
-       ACTUAL=$($GETSTRIPE $* $DIR/$tdir)
+       ACTUAL=$($LFS getstripe $* $DIR/$tdir)
        case $1 in
        --stripe-count|-c)
                [ -n "$2" ] && EXPECTED=0 || EXPECTED=$(default_attr count);;
@@ -13751,7 +14051,7 @@ check_default_stripe_attr() {
 
 test_204a() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-count 0 --stripe-size 0 --stripe-index -1 $DIR/$tdir
+       $LFS setstripe --stripe-count 0 --stripe-size 0 --stripe-index -1 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count
        check_default_stripe_attr --stripe-size
@@ -13761,7 +14061,7 @@ run_test 204a "Print default stripe attributes"
 
 test_204b() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-count 1 $DIR/$tdir
+       $LFS setstripe --stripe-count 1 $DIR/$tdir
 
        check_default_stripe_attr --stripe-size
        check_default_stripe_attr --stripe-index
@@ -13770,7 +14070,7 @@ run_test 204b "Print default stripe size and offset"
 
 test_204c() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-size 65536 $DIR/$tdir
+       $LFS setstripe --stripe-size 65536 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count
        check_default_stripe_attr --stripe-index
@@ -13779,7 +14079,7 @@ run_test 204c "Print default stripe count and offset"
 
 test_204d() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-index 0 $DIR/$tdir
+       $LFS setstripe --stripe-index 0 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count
        check_default_stripe_attr --stripe-size
@@ -13788,7 +14088,7 @@ run_test 204d "Print default stripe count and size"
 
 test_204e() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE -d $DIR/$tdir
+       $LFS setstripe -d $DIR/$tdir
 
        check_default_stripe_attr --stripe-count --raw
        check_default_stripe_attr --stripe-size --raw
@@ -13798,7 +14098,7 @@ run_test 204e "Print raw stripe attributes"
 
 test_204f() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-count 1 $DIR/$tdir
+       $LFS setstripe --stripe-count 1 $DIR/$tdir
 
        check_default_stripe_attr --stripe-size --raw
        check_default_stripe_attr --stripe-index --raw
@@ -13807,7 +14107,7 @@ run_test 204f "Print raw stripe size and offset"
 
 test_204g() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-size 65536 $DIR/$tdir
+       $LFS setstripe --stripe-size 65536 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count --raw
        check_default_stripe_attr --stripe-index --raw
@@ -13816,7 +14116,7 @@ run_test 204g "Print raw stripe count and offset"
 
 test_204h() {
        test_mkdir $DIR/$tdir
-       $SETSTRIPE --stripe-index 0 $DIR/$tdir
+       $LFS setstripe --stripe-index 0 $DIR/$tdir
 
        check_default_stripe_attr --stripe-count --raw
        check_default_stripe_attr --stripe-size --raw
@@ -13895,13 +14195,13 @@ verify_jobstats() {
 jobstats_set() {
        local new_jobenv=$1
 
-       do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$new_jobenv
-       wait_update $HOSTNAME "$LCTL get_param -n jobid_var" $new_jobenv
+       set_persistent_param_and_check client "jobid_var" \
+               "$FSNAME.sys.jobid_var" $new_jobenv
 }
 
 test_205() { # Job stats
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.7.1) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.7.1) ]] ||
                skip "Need MDS version with at least 2.7.1"
        remote_mgs_nodsh && skip "remote MGS with nodsh"
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -13912,9 +14212,13 @@ test_205() { # Job stats
 
        local old_jobenv=$($LCTL get_param -n jobid_var)
        [ $old_jobenv != $JOBENV ] && jobstats_set $JOBENV
-       stack_trap "do_facet mgs \
-               $LCTL conf_param $FSNAME.sys.jobid_var=$old_jobenv" EXIT
 
+       if [[ $PERM_CMD == *"set_param -P"* ]]; then
+               stack_trap "do_facet mgs $PERM_CMD jobid_var=$old_jobenv" EXIT
+       else
+               stack_trap "do_facet mgs $PERM_CMD \
+                       $FSNAME.sys.jobid_var=$old_jobenv" EXIT
+       fi
        changelog_register
 
        local old_interval=$(do_facet $SINGLEMDS lctl get_param -n \
@@ -13946,7 +14250,7 @@ test_205() { # Job stats
        verify_jobstats "$cmd" "$SINGLEMDS"
        # create all files on OST0000 so verify_jobstats can find OST stats
        # open & close
-       cmd="$SETSTRIPE -i 0 -c 1 $DIR/$tfile"
+       cmd="$LFS setstripe -i 0 -c 1 $DIR/$tfile"
        verify_jobstats "$cmd" "$SINGLEMDS"
        # setattr
        cmd="touch $DIR/$tfile"
@@ -13975,7 +14279,7 @@ test_205() { # Job stats
            grep -c "job_id.*mkdir") -gt 1 ] && error "old jobstats not expired"
 
        # Ensure that jobid are present in changelog (if supported by MDS)
-       if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.52) ];then
+       if [ $MDS1_VERSION -ge $(version_code 2.6.52) ];then
                changelog_dump | tail -10
                jobids=$(changelog_dump | tail -9 | grep -c "j=")
                [ $jobids -eq 9 ] ||
@@ -14002,7 +14306,7 @@ run_test 205 "Verify job stats"
 # LU-1480, LU-1773 and LU-1657
 test_206() {
        mkdir -p $DIR/$tdir
-       $SETSTRIPE -c -1 $DIR/$tdir
+       $LFS setstripe -c -1 $DIR/$tdir
 #define OBD_FAIL_LOV_INIT 0x1403
        $LCTL set_param fail_loc=0xa0001403
        $LCTL set_param fail_val=1
@@ -14051,7 +14355,7 @@ test_208() {
        # is done, this test suite should be revised. - Jinshan
 
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.4.52) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.4.52) ]] ||
                skip "Need MDS version at least 2.4.52"
 
        echo "==== test 1: verify get lease work"
@@ -14409,7 +14713,7 @@ test_220() { #LU-325
        create_pool $FSNAME.$TESTNAME || return 1
        do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $OST || return 2
 
-       $SETSTRIPE $DIR/$tdir -i $OSTIDX -c 1 -p $FSNAME.$TESTNAME
+       $LFS setstripe $DIR/$tdir -i $OSTIDX -c 1 -p $FSNAME.$TESTNAME
 
        MDSOBJS=$((last_id - next_id))
        echo "preallocated objects on MDS is $MDSOBJS" "($last_id - $next_id)"
@@ -14546,29 +14850,26 @@ test_224c() { # LU-6441
                                osc.*.max_pages_per_rpc)
        local at_max=$($LCTL get_param -n at_max)
        local timeout=$($LCTL get_param -n timeout)
-       local test_at="$LCTL get_param -n at_max"
+       local test_at="at_max"
        local param_at="$FSNAME.sys.at_max"
-       local test_timeout="$LCTL get_param -n timeout"
+       local test_timeout="timeout"
        local param_timeout="$FSNAME.sys.timeout"
 
        $LCTL set_param -n osc.*.max_pages_per_rpc=1024
 
-       set_conf_param_and_check client "$test_at" "$param_at" 0 ||
-               error "conf_param at_max=0 failed"
-       set_conf_param_and_check client "$test_timeout" "$param_timeout" 5 ||
-               error "conf_param timeout=5 failed"
+       set_persistent_param_and_check client "$test_at" "$param_at" 0
+       set_persistent_param_and_check client "$test_timeout" "$param_timeout" 5
 
-       #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB3   0x520
-       do_facet ost1 $LCTL set_param fail_loc=0x520
+       #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB3 0x520
+       do_facet ost1 "$LCTL set_param fail_loc=0x520"
        $LFS setstripe -c 1 -i 0 $DIR/$tfile
        dd if=/dev/zero of=$DIR/$tfile bs=8MB count=1
        sync
-       do_facet ost1 $LCTL set_param fail_loc=0
+       do_facet ost1 "$LCTL set_param fail_loc=0"
 
-       set_conf_param_and_check client "$test_at" "$param_at" $at_max ||
-               error "conf_param at_max=$at_max failed"
-       set_conf_param_and_check client "$test_timeout" "$param_timeout" \
-               $timeout || error "conf_param timeout=$timeout failed"
+       set_persistent_param_and_check client "$test_at" "$param_at" $at_max
+       set_persistent_param_and_check client "$test_timeout" "$param_timeout" \
+               $timeout
 
        $LCTL set_param -n $pages_per_rpc
        restore_lustre_params < $p
@@ -14582,7 +14883,7 @@ test_225a () {
        if [ -z ${MDSSURVEY} ]; then
                skip_env "mds-survey not found"
        fi
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.2.51) ] ||
                skip "Need MDS version at least 2.2.51"
 
        local mds=$(facet_host $SINGLEMDS)
@@ -14606,7 +14907,7 @@ test_225b () {
        if [ -z ${MDSSURVEY} ]; then
                skip_env "mds-survey not found"
        fi
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.2.51) ] ||
                skip "Need MDS version at least 2.2.51"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -14716,8 +15017,7 @@ run_test 227 "running truncated executable does not cause OOM"
 test_228a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip_env "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
 
        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
        local myDIR=$DIR/$tdir
@@ -14758,8 +15058,7 @@ run_test 228a "try to reuse idle OI blocks"
 test_228b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip_env "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
 
        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
        local myDIR=$DIR/$tdir
@@ -14808,8 +15107,7 @@ run_test 228b "idle OI blocks can be reused after MDT restart"
 test_228c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip_env "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
 
        local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
        local myDIR=$DIR/$tdir
@@ -14854,7 +15152,7 @@ run_test 228c "NOT shrink the last entry in OI index node to recycle idle leaf"
 test_229() { # LU-2482, LU-3448
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $OSTCOUNT -lt 2 ] && skip_env "needs >= 2 OSTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.4.53) ] &&
                skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53"
 
        rm -f $DIR/$tfile
@@ -14863,12 +15161,13 @@ test_229() { # LU-2482, LU-3448
        $MULTIOP $DIR/$tfile H2c ||
                error "failed to create file with released layout"
 
-       $GETSTRIPE -v $DIR/$tfile
+       $LFS getstripe -v $DIR/$tfile
 
-       local pattern=$($GETSTRIPE -L $DIR/$tfile)
+       local pattern=$($LFS getstripe -L $DIR/$tfile)
        [ X"$pattern" = X"released" ] || error "pattern error ($pattern)"
 
-       local stripe_count=$($GETSTRIPE -c $DIR/$tfile) || error "getstripe"
+       local stripe_count=$($LFS getstripe -c $DIR/$tfile) ||
+               error "getstripe"
        [ $stripe_count -eq 2 ] || error "stripe count not 2 ($stripe_count)"
        stat $DIR/$tfile || error "failed to stat released file"
 
@@ -14886,7 +15185,7 @@ run_test 229 "getstripe/stat/rm/attr changes work on released files"
 test_230a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        local MDTIDX=1
@@ -14914,7 +15213,7 @@ run_test 230a "Create remote directory and files under the remote directory"
 test_230b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        local MDTIDX=1
@@ -14946,8 +15245,8 @@ test_230b() {
        local old_file_mode=$(stat -c%f $migrate_dir/$tfile)
 
        mkdir -p $migrate_dir/dir_default_stripe2
-       $SETSTRIPE -c 2 $migrate_dir/dir_default_stripe2
-       $SETSTRIPE -c 2 $migrate_dir/${tfile}_stripe2
+       $LFS setstripe -c 2 $migrate_dir/dir_default_stripe2
+       $LFS setstripe -c 2 $migrate_dir/${tfile}_stripe2
 
        mkdir -p $other_dir
        ln $migrate_dir/$tfile $other_dir/luna
@@ -15082,10 +15381,11 @@ test_230c() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        local MDTIDX=1
+       local total=3
        local mdt_index
        local file
        local migrate_dir=$DIR/$tdir/migrate_dir
@@ -15094,37 +15394,47 @@ test_230c() {
        #the directory is still accessiable.
        test_mkdir $DIR/$tdir
        test_mkdir -i0 -c1 $migrate_dir
+       test_mkdir -i1 -c1 $DIR/$tdir/remote_dir
        stat $migrate_dir
-       createmany -o $migrate_dir/f 10 ||
+       createmany -o $migrate_dir/f $total ||
                error "create files under ${migrate_dir} failed"
 
-       # fail after migrating top dir, and this will fail only once, so one
-       # sub file migration will fail, others succeed.
+       # fail after migrating top dir, and this will fail only once, so the
+       # first sub file migration will fail (currently f3), others succeed.
        #OBD_FAIL_MIGRATE_ENTRIES       0x1801
        do_facet mds1 lctl set_param fail_loc=0x1801
        local t=$(ls $migrate_dir | wc -l)
        $LFS migrate --mdt-index $MDTIDX $migrate_dir &&
                error "migrate should fail"
+       local u=$(ls $migrate_dir | wc -l)
+       [ "$u" == "$t" ] || error "$u != $t during migration"
 
        # add new dir/file should succeed
        mkdir $migrate_dir/dir ||
                error "mkdir failed under migrating directory"
        touch $migrate_dir/file ||
-               error "touch file failed under migrating directory"
-       # add file with existing name should fail
-       $OPENFILE -f O_CREAT:O_EXCL $migrate_dir/f1 &&
-               error "open(O_CREAT|O_EXCL) f1 should fail"
-       $MULTIOP $migrate_dir/f1 m &&
-               error "create f1 should fail"
-       $MULTIOP $migrate_dir/f3 m &&
-               error "create f3 should fail"
-
-       local u=$(ls $migrate_dir | wc -l)
-       u=$((u - 2))
-       [ "$u" == "$t" ] || error "$u != $t during migration"
+               error "create file failed under migrating directory"
 
-       for file in $(find $migrate_dir); do
-               stat $file || error "stat $file failed"
+       # add file with existing name should fail
+       for file in $migrate_dir/f*; do
+               stat $file > /dev/null || error "stat $file failed"
+               $OPENFILE -f O_CREAT:O_EXCL $file &&
+                       error "open(O_CREAT|O_EXCL) $file should fail"
+               $MULTIOP $file m && error "create $file should fail"
+               touch $DIR/$tdir/remote_dir/$tfile ||
+                       error "touch $tfile failed"
+               ln $DIR/$tdir/remote_dir/$tfile $file &&
+                       error "link $file should fail"
+               mdt_index=$($LFS getstripe -m $file)
+               if [ $mdt_index == 0 ]; then
+                       # file failed to migrate is not allowed to rename to
+                       mv $DIR/$tdir/remote_dir/$tfile $file &&
+                               error "rename to $file should fail"
+               else
+                       mv $DIR/$tdir/remote_dir/$tfile $file ||
+                               error "rename to $file failed"
+               fi
+               echo hello >> $file || error "write $file failed"
        done
 
        # resume migration with different options should fail
@@ -15152,8 +15462,10 @@ run_test 230c "check directory accessiblity if migration failed"
 test_230d() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
+       # LU-11235
+       [ "$mds1_FSTYPE" == "zfs" ] && skip "skip ZFS backend"
 
        local migrate_dir=$DIR/$tdir/migrate_dir
        local old_index
@@ -15209,7 +15521,7 @@ run_test 230d "check migrate big directory"
 test_230e() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        local i
@@ -15257,7 +15569,7 @@ run_test 230e "migrate mulitple local link files"
 test_230f() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        local a_fid
@@ -15308,7 +15620,7 @@ run_test 230f "migrate mulitple remote link files"
 test_230g() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        mkdir -p $DIR/$tdir/migrate_dir
@@ -15322,7 +15634,7 @@ run_test 230g "migrate dir to non-exist MDT"
 test_230h() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        local mdt_index
@@ -15346,7 +15658,7 @@ run_test 230h "migrate .. and root"
 test_230i() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
                skip "Need MDS version at least 2.11.52"
 
        mkdir -p $DIR/$tdir/migrate_dir
@@ -15359,12 +15671,91 @@ test_230i() {
 }
 run_test 230i "lfs migrate -m tolerates trailing slashes"
 
+test_230j() {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
+
+       $LFS mkdir -m 0 -c 1 $DIR/$tdir || error "mkdir $tdir failed"
+       $LFS setstripe -E 1M -L mdt $DIR/$tdir/$tfile ||
+               error "create $tfile failed"
+       cat /etc/passwd > $DIR/$tdir/$tfile
+
+       $LFS migrate -m 1 $DIR/$tdir
+
+       cmp /etc/passwd $DIR/$tdir/$tfile ||
+               error "DoM file mismatch after migration"
+}
+run_test 230j "DoM file data not changed after dir migration"
+
+test_230k() {
+       [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
+               skip "Need MDS version at least 2.11.56"
+
+       local total=20
+       local files_on_starting_mdt=0
+
+       $LFS mkdir -i -1 -c 2 $DIR/$tdir || error "mkdir failed"
+       $LFS getdirstripe $DIR/$tdir
+       for i in $(seq $total); do
+               echo $((i*i - i)) > $DIR/$tdir/$tfile.$i || error "write failed"
+               [[ $($LFS getstripe -m $DIR/$tdir/$tfile.$i) -eq 0 ]] &&
+                       files_on_starting_mdt=$((files_on_starting_mdt + 1))
+       done
+
+       echo "$files_on_starting_mdt files on MDT0"
+
+       $LFS migrate -m 1,3 $DIR/$tdir || error "migrate -m 1,3 failed"
+       $LFS getdirstripe $DIR/$tdir
+
+       files_on_starting_mdt=0
+       for i in $(seq $total); do
+               $(echo $((i*i - i)) | cmp $DIR/$tdir/$tfile.$i -) ||
+                       error "file $tfile.$i mismatch after migration"
+               [[ $($LFS getstripe -m $DIR/$tdir/$tfile.$i) -eq 1 ]] &&
+                       files_on_starting_mdt=$((files_on_starting_mdt + 1))
+       done
+
+       echo "$files_on_starting_mdt files on MDT1 after migration"
+       [[ $files_on_starting_mdt -eq $total ]] && error "all files on MDT1"
+
+       $LFS migrate -m 0 -c 2 $DIR/$tdir || error "migrate -m 0 -c 2 failed"
+       $LFS getdirstripe $DIR/$tdir
+
+       files_on_starting_mdt=0
+       for i in $(seq $total); do
+               $(echo $((i*i - i)) | cmp $DIR/$tdir/$tfile.$i -) ||
+                       error "file $tfile.$i mismatch after 2nd migration"
+               [[ $($LFS getstripe -m $DIR/$tdir/$tfile.$i) -eq 0 ]] &&
+                       files_on_starting_mdt=$((files_on_starting_mdt + 1))
+       done
+
+       echo "$files_on_starting_mdt files on MDT0 after 2nd migration"
+       [[ $files_on_starting_mdt -eq $total ]] && error "all files on MDT0"
+
+       true
+}
+run_test 230k "file data not changed after dir migration"
+
+test_230l() {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
+               skip "Need MDS version at least 2.11.56"
+
+       $LFS mkdir -i 0 -c 1 $DIR/$tdir || error "mkdir failed"
+       createmany -o $DIR/$tdir/f___________________________________ 1000 ||
+               error "create files under remote dir failed $i"
+       $LFS migrate -m 1 $DIR/$tdir || error "migrate failed"
+}
+run_test 230l "readdir between MDTs won't crash"
+
 test_231a()
 {
        # For simplicity this test assumes that max_pages_per_rpc
        # is the same across all OSCs
        local max_pages=$($LCTL get_param -n osc.*.max_pages_per_rpc | head -n1)
-       local bulk_size=$((max_pages * 4096))
+       local bulk_size=$((max_pages * PAGE_SIZE))
        local brw_size=$(do_facet ost1 $LCTL get_param -n obdfilter.*.brw_size |
                                       head -n 1)
 
@@ -15437,7 +15828,7 @@ test_232a() {
 run_test 232a "failed lock should not block umount"
 
 test_232b() {
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.58) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.10.58) ] ||
                skip "Need MDS version at least 2.10.58"
 
        mkdir -p $DIR/$tdir
@@ -15461,7 +15852,7 @@ test_232b() {
 run_test 232b "failed data version lock should not block umount"
 
 test_233a() {
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.64) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.3.64) ] ||
                skip "Need MDS version at least 2.3.64"
        [ -n "$FILESET" ] && skip_env "SKIP due to FILESET set"
 
@@ -15473,7 +15864,7 @@ test_233a() {
 run_test 233a "checking that OBF of the FS root succeeds"
 
 test_233b() {
-       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.5.90) ] ||
+       [ $MDS1_VERSION -ge $(version_code 2.5.90) ] ||
                skip "Need MDS version at least 2.5.90"
        [ -n "$FILESET" ] && skip_env "SKIP due to FILESET set"
 
@@ -15509,7 +15900,7 @@ test_234() {
 run_test 234 "xattr cache should not crash on ENOMEM"
 
 test_235() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.52) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.4.52) ] &&
                skip "Need MDS version at least 2.4.52"
 
        flock_deadlock $DIR/$tfile
@@ -15535,9 +15926,9 @@ test_236() {
        local file2=$DIR/$tdir/f2
 
        test_mkdir -c1 $DIR/$tdir
-       $SETSTRIPE -c 1 $file1 || error "cannot setstripe on '$file1': rc = $?"
+       $LFS setstripe -c 1 $file1 || error "cannot setstripe on '$file1': rc = $?"
        cp $ref1 $file1 || error "cp $ref1 $file1 failed: rc = $?"
-       $SETSTRIPE -c 2 $file2 || error "cannot setstripe on '$file2': rc = $?"
+       $LFS setstripe -c 2 $file2 || error "cannot setstripe on '$file2': rc = $?"
        cp $ref2 $file2 || error "cp $ref2 $file2 failed: rc = $?"
        local fd=$(free_fd)
        local cmd="exec $fd<>$file2"
@@ -15554,25 +15945,11 @@ test_236() {
 }
 run_test 236 "Layout swap on open unlinked file"
 
-# test to verify file handle related system calls
-# (name_to_handle_at/open_by_handle_at)
-# The new system calls are supported in glibc >= 2.14.
-
-test_237() {
-       echo "Test file_handle syscalls" > $DIR/$tfile ||
-               error "write failed"
-       check_fhandle_syscalls $DIR/$tfile ||
-               error "check_fhandle_syscalls failed"
-}
-run_test 237 "Verify name_to_handle_at/open_by_handle_at syscalls"
-
 # LU-4659 linkea consistency
 test_238() {
-       local server_version=$(lustre_version_code $SINGLEMDS)
-
-       [[ $server_version -gt $(version_code 2.5.57) ]] ||
-               [[ $server_version -gt $(version_code 2.5.1) &&
-                  $server_version -lt $(version_code 2.5.50) ]] ||
+       [[ $MDS1_VERSION -gt $(version_code 2.5.57) ]] ||
+               [[ $MDS1_VERSION -gt $(version_code 2.5.1) &&
+                  $MDS1_VERSION -lt $(version_code 2.5.50) ]] ||
                skip "Need MDS version at least 2.5.58 or 2.5.2+"
 
        touch $DIR/$tfile
@@ -15591,7 +15968,7 @@ test_238() {
 run_test 238 "Verify linkea consistency"
 
 test_239A() { # was test_239
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.60) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.5.60) ] &&
                skip "Need MDS version at least 2.5.60"
 
        local list=$(comma_list $(mdts_nodes))
@@ -15599,7 +15976,7 @@ test_239A() { # was test_239
        mkdir -p $DIR/$tdir
        createmany -o $DIR/$tdir/f- 5000
        unlinkmany $DIR/$tdir/f- 5000
-       [ $(lustre_version_code $SINGLEMDS) -gt $(version_code 2.10.53) ] &&
+       [ $MDS1_VERSION -gt $(version_code 2.10.4) ] &&
                do_nodes $list "lctl set_param -n osp.*.force_sync=1"
        changes=$(do_nodes $list "lctl get_param -n osp.*MDT*.sync_changes \
                        osp.*MDT*.sync_in_flight" | calc_sum)
@@ -15655,36 +16032,48 @@ test_240() {
 run_test 240 "race between ldlm enqueue and the connection RPC (no ASSERT)"
 
 test_241_bio() {
-       for LOOP in $(seq $1); do
-               dd if=$DIR/$tfile of=/dev/null bs=40960 count=1 2>/dev/null
+       local count=$1
+       local bsize=$2
+
+       for LOOP in $(seq $count); do
+               dd if=$DIR/$tfile of=/dev/null bs=$bsize count=1 2>/dev/null
                cancel_lru_locks $OSC || true
        done
 }
 
 test_241_dio() {
+       local count=$1
+       local bsize=$2
+
        for LOOP in $(seq $1); do
-               dd if=$DIR/$tfile of=/dev/null bs=40960 count=1 \
-                                               iflag=direct 2>/dev/null
+               dd if=$DIR/$tfile of=/dev/null bs=$bsize count=1 iflag=direct \
+                       2>/dev/null
        done
 }
 
 test_241a() { # was test_241
-       dd if=/dev/zero of=$DIR/$tfile count=1 bs=40960
+       local bsize=$PAGE_SIZE
+
+       (( bsize < 40960 )) && bsize=40960
+       dd if=/dev/zero of=$DIR/$tfile count=1 bs=$bsize
        ls -la $DIR/$tfile
        cancel_lru_locks $OSC
-       test_241_bio 1000 &
+       test_241_bio 1000 $bsize &
        PID=$!
-       test_241_dio 1000
+       test_241_dio 1000 $bsize
        wait $PID
 }
 run_test 241a "bio vs dio"
 
 test_241b() {
-       dd if=/dev/zero of=$DIR/$tfile count=1 bs=40960
+       local bsize=$PAGE_SIZE
+
+       (( bsize < 40960 )) && bsize=40960
+       dd if=/dev/zero of=$DIR/$tfile count=1 bs=$bsize
        ls -la $DIR/$tfile
-       test_241_dio 1000 &
+       test_241_dio 1000 $bsize &
        PID=$!
-       test_241_dio 1000
+       test_241_dio 1000 $bsize
        wait $PID
 }
 run_test 241b "dio vs dio"
@@ -15748,7 +16137,7 @@ run_test 245 "check mdc connection flag/data: multiple modify RPCs"
 
 test_246() { # LU-7371
        remote_ost_nodsh && skip "remote OST with nodsh"
-       [ $(lustre_version_code ost1) -lt $(version_code 2.7.62) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.7.62) ] &&
                skip "Need OST version >= 2.7.62"
 
        do_facet ost1 $LCTL set_param fail_val=4095
@@ -15907,11 +16296,11 @@ test_248() {
 run_test 248 "fast read verification"
 
 test_249() { # LU-7890
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.53) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.8.53) ] &&
                skip "Need at least version 2.8.54"
 
        rm -f $DIR/$tfile
-       $SETSTRIPE -c 1 $DIR/$tfile
+       $LFS setstripe -c 1 $DIR/$tfile
        # Offset 2T == 4k * 512M
        dd if=/dev/zero of=$DIR/$tfile bs=4k count=1 seek=512M ||
                error "dd to 2T offset failed"
@@ -15919,10 +16308,10 @@ test_249() { # LU-7890
 run_test 249 "Write above 2T file size"
 
 test_250() {
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR/$tfile) + 1)))" = "zfs" ] \
+       [ "$(facet_fstype ost$(($($LFS getstripe -i $DIR/$tfile) + 1)))" = "zfs" ] \
         && skip "no 16TB file size limit on ZFS"
 
-       $SETSTRIPE -c 1 $DIR/$tfile
+       $LFS setstripe -c 1 $DIR/$tfile
        # ldiskfs extent file size limit is (16TB - 4KB - 1) bytes
        local size=$((16 * 1024 * 1024 * 1024 * 1024 - 4096 - 1))
        $TRUNCATE $DIR/$tfile $size || error "truncate $tfile to $size failed"
@@ -15933,7 +16322,7 @@ test_250() {
 run_test 250 "Write above 16T limit"
 
 test_251() {
-       $SETSTRIPE -c -1 -S 1048576 $DIR/$tfile
+       $LFS setstripe -c -1 -S 1048576 $DIR/$tfile
 
        #define OBD_FAIL_LLITE_LOST_LAYOUT 0x1407
        #Skip once - writing the first stripe will succeed
@@ -15952,8 +16341,7 @@ run_test 251 "Handling short read and write correctly"
 test_252() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
        remote_ost_nodsh && skip "remote OST with nodsh"
-       if [ "$(facet_fstype ost1)" != "ldiskfs" -o \
-            "$(facet_fstype mds1)" != "ldiskfs" ]; then
+       if [ "$ost1_FSTYPE" != "ldiskfs" -o "$mds1_FSTYPE" != "ldiskfs" ]; then
                skip_env "ldiskfs only test"
        fi
 
@@ -16066,7 +16454,7 @@ test_253() {
                lov.$FSNAME-*.pools.$TESTNAME | sort -u |
                grep $ost_name" "$ost_name""_UUID" $((TIMEOUT/2)) ||
                error "Client can not see the pool"
-       $SETSTRIPE $DIR/$tdir -i $ostidx -c 1 -p $FSNAME.$TESTNAME ||
+       $LFS setstripe $DIR/$tdir -i $ostidx -c 1 -p $FSNAME.$TESTNAME ||
                error "Setstripe failed"
 
        dd if=/dev/zero of=$DIR/$tdir/0 bs=1M count=10
@@ -16268,7 +16656,7 @@ ladvise_willread_performance()
        # the test won't work on ZFS until it supports 'ladvise dontneed', but
        # it is still good to run until then to exercise 'ladvise willread'
        ! $LFS ladvise -a dontneed $DIR/$tfile &&
-               [ "$(facet_fstype ost1)" = "zfs" ] &&
+               [ "$ost1_FSTYPE" = "zfs" ] &&
                echo "osd-zfs does not support dontneed or drop_caches" &&
                return 0
 
@@ -16279,7 +16667,7 @@ ladvise_willread_performance()
 }
 
 test_255a() {
-       [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.8.54) ] &&
                skip "lustre < 2.8.54 does not support ladvise "
        remote_ost_nodsh && skip "remote OST with nodsh"
 
@@ -16366,7 +16754,7 @@ facet_meminfo() {
 }
 
 test_255b() {
-       [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.8.54) ] &&
                skip "lustre < 2.8.54 does not support ladvise "
        remote_ost_nodsh && skip "remote OST with nodsh"
 
@@ -16379,7 +16767,7 @@ test_255b() {
                skip "ladvise ioctl is not supported"
 
        ! $LFS ladvise -a dontneed $DIR/$tfile &&
-               [ "$(facet_fstype ost1)" = "zfs" ] &&
+               [ "$ost1_FSTYPE" = "zfs" ] &&
                skip "zfs-osd does not support 'ladvise dontneed'"
 
        local size_mb=100
@@ -16429,7 +16817,7 @@ test_255b() {
 run_test 255b "check 'lfs ladvise -a dontneed'"
 
 test_255c() {
-       [ $(lustre_version_code ost1) -lt $(version_code 2.10.50) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.10.50) ] &&
                skip "lustre < 2.10.53 does not support lockahead"
 
        local count
@@ -16439,7 +16827,7 @@ test_255c() {
        local rc
 
        test_mkdir -p $DIR/$tdir
-       $SETSTRIPE -i 0 $DIR/$tdir
+       $LFS setstripe -i 0 $DIR/$tdir
 
        #test 10 returns only success/failure
        i=10
@@ -16479,7 +16867,7 @@ test_255c() {
                cancel_lru_locks osc
 
                count=$($LCTL get_param -n \
-                      ldlm.namespaces.$FSNAME-OST0000*osc-f*.lock_unused_count)
+                      ldlm.namespaces.$FSNAME-OST0000*osc-[-0-9a-f]*.lock_unused_count)
 
                lockahead_test -d $DIR/$tdir -t $i -f $tfile
                rc=$?
@@ -16488,7 +16876,7 @@ test_255c() {
                fi
 
                new_count=$($LCTL get_param -n \
-                      ldlm.namespaces.$FSNAME-OST0000*osc-f*.lock_unused_count)
+                      ldlm.namespaces.$FSNAME-OST0000*osc-[-0-9a-f]*.lock_unused_count)
                difference="$((new_count - count))"
 
                # Test 15 output is divided by 100 to map down to valid return
@@ -16515,8 +16903,7 @@ run_test 255c "suite of ladvise lockahead tests"
 test_256() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip "ldiskfs only test"
        changelog_users $SINGLEMDS | grep "^cl" &&
                skip "active changelog user"
 
@@ -16570,7 +16957,7 @@ run_test 256 "Check llog delete for empty and not full state"
 
 test_257() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.8.55) ]] &&
                skip "Need MDS version at least 2.8.55"
 
        test_mkdir $DIR/$tdir
@@ -16588,6 +16975,7 @@ test_257() {
        stop $facet || error "stop MDS failed"
        start $facet $(mdsdevname $((mdtidx + 1))) $MDS_MOUNT_OPTS ||
                error "start MDS fail"
+       wait_recovery_complete $facet
 }
 run_test 257 "xattr locks are not lost"
 
@@ -16629,8 +17017,7 @@ test_259() {
        local before
        local after
 
-       [ "$(facet_fstype mds1)" != "ldiskfs" ] &&
-               skip "ldiskfs only test" && return
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip "ldiskfs only test"
 
        stack_trap "rm -f $file" EXIT
 
@@ -16673,8 +17060,8 @@ 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"
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
+               skip "Need MDS version at least 2.10.55 for DoM"
 
        # create DoM file
        local dom=$DIR/$tdir/dom_file
@@ -16683,14 +17070,13 @@ test_270a() {
        mkdir -p $DIR/$tdir
 
        # basic checks for DoM component creation
-       $LFS setstripe -E 1024K -E 1024K -L mdt $dom 2>/dev/null &&
+       $LFS setstripe -E 1024K -E 2048K -L mdt $dom 2>/dev/null &&
                error "Can set MDT layout to non-first entry"
 
-       $LFS setstripe -E 1024K -L mdt -E 1024K -L mdt $dom 2>/dev/null &&
+       $LFS setstripe -E 1024K -L mdt -E 2048K -L mdt $dom 2>/dev/null &&
                error "Can define multiple entries as MDT layout"
 
-       $LFS setstripe -E 1M -L mdt $dom ||
-               error "Can't create DoM layout"
+       $LFS setstripe -E 1M -L mdt $dom || error "Can't create DoM layout"
 
        [ $($LFS getstripe -L $dom) == "mdt" ] || error "bad pattern"
        [ $($LFS getstripe -c $dom) == 0 ] || error "bad stripe count"
@@ -16702,46 +17088,61 @@ test_270a() {
        local space_check=1
 
        # Skip free space checks with ZFS
-       if [ "$(facet_fstype $facet)" == "zfs" ]; then
-               space_check=0
-       fi
+       [ "$(facet_fstype $facet)" == "zfs" ] && space_check=0
 
        # write
        sync
+       local size_tmp=$((65536 * 3))
        local mdtfree1=$(do_facet $facet \
-               lctl get_param -n osd*.*$mdtname.kbytesfree)
-       dd if=/dev/urandom of=$tmp bs=1024 count=100
+                        lctl get_param -n osd*.*$mdtname.kbytesfree)
+
+       dd if=/dev/urandom of=$tmp bs=1024 count=$((size_tmp / 1024))
        # check also direct IO along write
-       dd if=$tmp of=$dom bs=102400 count=1 oflag=direct
+       # IO size must be a multiple of PAGE_SIZE on all platforms (ARM=64KB)
+       dd if=$tmp of=$dom bs=65536 count=$((size_tmp / 65536)) oflag=direct
        sync
        cmp $tmp $dom || error "file data is different"
-       [ $(stat -c%s $dom) == 102400 ] || error "bad size after write"
+       [ $(stat -c%s $dom) == $size_tmp ] ||
+               error "bad size after write: $(stat -c%s $dom) != $size_tmp"
        if [ $space_check == 1 ]; then
                local mdtfree2=$(do_facet $facet \
-                               lctl get_param -n osd*.*$mdtname.kbytesfree)
-               [ $(($mdtfree1 - $mdtfree2)) -ge 102 ] ||
-                       error "MDT free space is wrong after write"
+                                lctl get_param -n osd*.*$mdtname.kbytesfree)
+
+               # increase in usage from by $size_tmp
+               [ $(($mdtfree1 - $mdtfree2)) -ge $((size_tmp / 1024)) ] ||
+                       error "MDT free space wrong after write: " \
+                             "$mdtfree1 >= $mdtfree2 + $size_tmp/1024"
        fi
 
        # truncate
-       $TRUNCATE $dom 10000
-       [ $(stat -c%s $dom) == 10000 ] || error "bad size after truncate"
+       local size_dom=10000
+
+       $TRUNCATE $dom $size_dom
+       [ $(stat -c%s $dom) == $size_dom ] ||
+               error "bad size after truncate: $(stat -c%s $dom) != $size_dom"
        if [ $space_check == 1 ]; then
                mdtfree1=$(do_facet $facet \
                                lctl get_param -n osd*.*$mdtname.kbytesfree)
-               [ $(($mdtfree1 - $mdtfree2)) -ge 92 ] ||
-                       error "MDT free space is wrong after truncate"
+               # decrease in usage from $size_tmp to new $size_dom
+               [ $(($mdtfree1 - $mdtfree2)) -ge \
+                 $(((size_tmp - size_dom) / 1024)) ] ||
+                       error "MDT free space is wrong after truncate: " \
+                             "$mdtfree1 >= $mdtfree2 + ($size_tmp - $size_dom) / 1024"
        fi
 
        # append
        cat $tmp >> $dom
        sync
-       [ $(stat -c%s $dom) == 112400 ] || error "bad size after append"
+       size_dom=$((size_dom + size_tmp))
+       [ $(stat -c%s $dom) == $size_dom ] ||
+               error "bad size after append: $(stat -c%s $dom) != $size_dom"
        if [ $space_check == 1 ]; then
                mdtfree2=$(do_facet $facet \
                                lctl get_param -n osd*.*$mdtname.kbytesfree)
-               [ $(($mdtfree1 - $mdtfree2)) -ge 102 ] ||
-                       error "MDT free space is wrong after append"
+               # increase in usage by $size_tmp from previous
+               [ $(($mdtfree1 - $mdtfree2)) -ge $((size_tmp / 1024)) ] ||
+                       error "MDT free space is wrong after append: " \
+                             "$mdtfree1 >= $mdtfree2 + $size_tmp/1024"
        fi
 
        # delete
@@ -16749,29 +17150,32 @@ test_270a() {
        if [ $space_check == 1 ]; then
                mdtfree1=$(do_facet $facet \
                                lctl get_param -n osd*.*$mdtname.kbytesfree)
-               [ $(($mdtfree1 - $mdtfree2)) -ge 112 ] ||
-                       error "MDT free space is wrong after removal"
+               # decrease in usage by $size_dom from previous
+               [ $(($mdtfree1 - $mdtfree2)) -ge $((size_dom / 1024)) ] ||
+                       error "MDT free space is wrong after removal: " \
+                             "$mdtfree1 >= $mdtfree2 + $size_dom/1024"
        fi
 
        # combined striping
        $LFS setstripe -E 1024K -L mdt -E EOF $dom ||
                error "Can't create DoM + OST striping"
 
-       dd if=/dev/urandom of=$tmp bs=1024 count=2000
+       size_tmp=2031616 # must be a multiple of PAGE_SIZE=65536 on ARM
+       dd if=/dev/urandom of=$tmp bs=1024 count=$((size_tmp / 1024))
        # check also direct IO along write
-       dd if=$tmp of=$dom bs=102400 count=20 oflag=direct
+       dd if=$tmp of=$dom bs=65536 count=$((size_tmp / 65536)) oflag=direct
        sync
        cmp $tmp $dom || error "file data is different"
-       [ $(stat -c%s $dom) == 2048000 ] || error "bad size after write"
-       rm $dom
-       rm $tmp
+       [ $(stat -c%s $dom) == $size_tmp ] ||
+               error "bad size after write: $(stat -c%s $dom) != $size_tmp"
+       rm $dom $tmp
 
        return 0
 }
 run_test 270a "DoM: basic functionality tests"
 
 test_270b() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local dom=$DIR/$tdir/dom_file
@@ -16796,7 +17200,7 @@ 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) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        mkdir -p $DIR/$tdir
@@ -16804,7 +17208,7 @@ test_270c() {
 
        # check files inherit DoM EA
        touch $DIR/$tdir/first
-       [ $($GETSTRIPE -L $DIR/$tdir/first) == "mdt" ] ||
+       [ $($LFS getstripe -L $DIR/$tdir/first) == "mdt" ] ||
                error "bad pattern"
        [ $($LFS getstripe -c $DIR/$tdir/first) == 0 ] ||
                error "bad stripe count"
@@ -16825,7 +17229,7 @@ test_270c() {
 run_test 270c "DoM: DoM EA inheritance tests"
 
 test_270d() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        mkdir -p $DIR/$tdir
@@ -16847,7 +17251,7 @@ test_270d() {
 run_test 270d "DoM: change striping from DoM to RAID0"
 
 test_270e() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        mkdir -p $DIR/$tdir/dom
@@ -16888,7 +17292,7 @@ test_270e() {
 run_test 270e "DoM: lfs find with DoM files test"
 
 test_270f() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local mdtname=${FSNAME}-MDT0000-mdtlov
@@ -16970,7 +17374,7 @@ test_270f() {
 run_test 270f "DoM: maximum DoM stripe size checks"
 
 test_271a() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local dom=$DIR/$tdir/dom
@@ -16982,16 +17386,15 @@ test_271a() {
        lctl set_param -n mdc.*.stats=clear
        dd if=/dev/zero of=$dom bs=4096 count=1 || return 1
        cat $dom > /dev/null
-       local reads=$(lctl get_param -n mdc.*.stats |
-                       awk '/ost_read/ {print $2}')
-       [ -z $reads ] || error "Unexpected $reads READ RPCs"
+       local reads=$(lctl get_param -n mdc.*.stats | grep -c ost_read)
+       [ $reads -eq 0 ] || error "Unexpected $reads READ RPCs"
        ls $dom
        rm -f $dom
 }
 run_test 271a "DoM: data is cached for read after write"
 
 test_271b() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local dom=$DIR/$tdir/dom
@@ -17006,15 +17409,14 @@ test_271b() {
        $CHECKSTAT -t file -s 4096 $dom || error "stat #1 fails"
        # second stat to check size is cached on client
        $CHECKSTAT -t file -s 4096 $dom || error "stat #2 fails"
-       local gls=$(lctl get_param -n mdc.*.stats |
-                       awk '/ldlm_glimpse/ {print $2}')
-       [ -z $gls ] || error "Unexpected $gls glimpse RPCs"
+       local gls=$(lctl get_param -n mdc.*.stats | grep -c ldlm_glimpse)
+       [ $gls -eq 0 ] || error "Unexpected $gls glimpse RPCs"
        rm -f $dom
 }
 run_test 271b "DoM: no glimpse RPC for stat (DoM only file)"
 
 test_271ba() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local dom=$DIR/$tdir/dom
@@ -17030,18 +17432,29 @@ test_271ba() {
        $CHECKSTAT -t file -s 2097152 $dom || error "stat"
        # second stat to check size is cached on client
        $CHECKSTAT -t file -s 2097152 $dom || error "stat"
-       local gls=$(lctl get_param -n mdc.*.stats |
-                       awk '/ldlm_glimpse/ {print $2}')
-       [ -z $gls ] || error "Unexpected $gls glimpse RPCs"
-       local gls=$(lctl get_param -n osc.*.stats |
-                       awk '/ldlm_glimpse/ {print $2}')
-       [ -z $gls ] || error "Unexpected $gls OSC glimpse RPCs"
+       local gls=$(lctl get_param -n mdc.*.stats | grep -c ldlm_glimpse)
+       [ $gls == 0 ] || error "Unexpected $gls glimpse RPCs"
+       local gls=$(lctl get_param -n osc.*.stats | grep -c ldlm_glimpse)
+       [ $gls == 0 ] || error "Unexpected $gls OSC glimpse RPCs"
        rm -f $dom
 }
 run_test 271ba "DoM: no glimpse RPC for stat (combined file)"
 
+
+get_mdc_stats() {
+       local mdtidx=$1
+       local param=$2
+       local mdt=MDT$(printf %04x $mdtidx)
+
+       if [ -z $param ]; then
+               lctl get_param -n mdc.*$mdt*.stats
+       else
+               lctl get_param -n mdc.*$mdt*.stats | awk "/$param/"'{print $2}'
+       fi
+}
+
 test_271c() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
                skip "Need MDS version at least 2.10.55"
 
        local dom=$DIR/$tdir/dom
@@ -17058,9 +17471,8 @@ test_271c() {
        createmany -o $dom 1000
        lctl set_param -n mdc.*.stats=clear
        smalliomany -w $dom 1000 200
-       lctl get_param -n mdc.*.stats
-       local enq=$(lctl get_param -n mdc.*.stats |
-                       awk '/ldlm_ibits_enqueue/ {print $2}')
+       get_mdc_stats $mdtidx
+       local enq=$(get_mdc_stats $mdtidx ldlm_ibits_enqueue)
        # Each file has 1 open, 1 IO enqueues, total 2000
        # but now we have also +1 getxattr for security.capability, total 3000
        [ $enq -ge 2000 ] || error "Too few enqueues $enq, expected > 2000"
@@ -17071,9 +17483,7 @@ test_271c() {
        createmany -o $dom 1000
        lctl set_param -n mdc.*.stats=clear
        smalliomany -w $dom 1000 200
-       lctl get_param -n mdc.*.stats
-       local enq_2=$(lctl get_param -n mdc.*.stats |
-                       awk '/ldlm_ibits_enqueue/ {print $2}')
+       local enq_2=$(get_mdc_stats $mdtidx ldlm_ibits_enqueue)
        # Expect to see reduced amount of RPCs by 1000 due to single enqueue
        # for OPEN and IO lock.
        [ $((enq - enq_2)) -ge 1000 ] ||
@@ -17089,8 +17499,8 @@ cleanup_271def_tests() {
 }
 
 test_271d() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.57) ] &&
-               skip "Need MDS version at least 2.10.57" && return
+       [ $MDS1_VERSION -lt $(version_code 2.10.57) ] &&
+               skip "Need MDS version at least 2.10.57"
 
        local dom=$DIR/$tdir/dom
        local tmp=$TMP/$tfile
@@ -17100,8 +17510,7 @@ test_271d() {
 
        $LFS setstripe -E 1024K -L mdt $DIR/$tdir
 
-       local mdtidx=$($GETSTRIPE -M $DIR/$tdir)
-       local facet=mds$((mdtidx + 1))
+       local mdtidx=$($LFS getstripe --mdt-index $DIR/$tdir)
 
        cancel_lru_locks mdc
        dd if=/dev/urandom of=$tmp bs=1000 count=1
@@ -17114,12 +17523,9 @@ test_271d() {
        # append data to the same file it should update local page
        echo "Append to the same page"
        cat /etc/hosts >> $dom
-       local num=$(lctl get_param -n mdc.*.stats |
-               awk '/ost_read/ {print $2}')
-       local ra=$(lctl get_param -n mdc.*.stats |
-               awk '/req_active/ {print $2}')
-       local rw=$(lctl get_param -n mdc.*.stats |
-               awk '/req_waittime/ {print $2}')
+       local num=$(get_mdc_stats $mdtidx ost_read)
+       local ra=$(get_mdc_stats $mdtidx req_active)
+       local rw=$(get_mdc_stats $mdtidx req_waittime)
 
        [ -z $num ] || error "$num READ RPC occured"
        [ $ra == $rw ] || error "$((ra - rw)) resend occured"
@@ -17133,12 +17539,9 @@ test_271d() {
 
        echo "Open and read file"
        cat $dom > /dev/null
-       local num=$(lctl get_param -n mdc.*.stats |
-               awk '/ost_read/ {print $2}')
-       local ra=$(lctl get_param -n mdc.*.stats |
-               awk '/req_active/ {print $2}')
-       local rw=$(lctl get_param -n mdc.*.stats |
-               awk '/req_waittime/ {print $2}')
+       local num=$(get_mdc_stats $mdtidx ost_read)
+       local ra=$(get_mdc_stats $mdtidx req_active)
+       local rw=$(get_mdc_stats $mdtidx req_waittime)
 
        [ -z $num ] || error "$num READ RPC occured"
        [ $ra == $rw ] || error "$((ra - rw)) resend occured"
@@ -17152,8 +17555,8 @@ test_271d() {
 run_test 271d "DoM: read on open (1K file in reply buffer)"
 
 test_271e() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.57) ] &&
-               skip "Need MDS version at least 2.10.57" && return
+       [ $MDS1_VERSION -lt $(version_code 2.10.57) ] &&
+               skip "Need MDS version at least 2.10.57"
 
        local dom=$DIR/$tdir/dom
        local tmp=$TMP/${tfile}.data
@@ -17163,8 +17566,7 @@ test_271e() {
 
        $LFS setstripe -E 1024K -L mdt $DIR/$tdir
 
-       local mdtidx=$($GETSTRIPE -M $DIR/$tdir)
-       local facet=mds$((mdtidx + 1))
+       local mdtidx=$($LFS getstripe --mdt-index $DIR/$tdir)
 
        cancel_lru_locks mdc
        dd if=/dev/urandom of=$tmp bs=30K count=1
@@ -17176,12 +17578,9 @@ test_271e() {
        echo "Append to the same page"
        cat /etc/hosts >> $dom
 
-       local num=$(lctl get_param -n mdc.*.stats | \
-               awk '/ost_read/ {print $2}')
-       local ra=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_active/ {print $2}')
-       local rw=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_waittime/ {print $2}')
+       local num=$(get_mdc_stats $mdtidx ost_read)
+       local ra=$(get_mdc_stats $mdtidx req_active)
+       local rw=$(get_mdc_stats $mdtidx req_waittime)
 
        [ -z $num ] || error "$num READ RPC occured"
        # Reply buffer can be adjusted for larger buffer by resend
@@ -17195,12 +17594,9 @@ test_271e() {
 
        echo "Open and read file"
        cat $dom > /dev/null
-       local num=$(lctl get_param -n mdc.*.stats | \
-               awk '/ost_read/ {print $2}')
-       local ra=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_active/ {print $2}')
-       local rw=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_waittime/ {print $2}')
+       local num=$(get_mdc_stats $mdtidx ost_read)
+       local ra=$(get_mdc_stats $mdtidx req_active)
+       local rw=$(get_mdc_stats $mdtidx req_waittime)
 
        [ -z $num ] || error "$num READ RPC occured"
        # Reply buffer can be adjusted for larger buffer by resend
@@ -17214,8 +17610,8 @@ test_271e() {
 run_test 271e "DoM: read on open (30K file with reply buffer adjusting)"
 
 test_271f() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.57) ] &&
-               skip "Need MDS version at least 2.10.57" && return
+       [ $MDS1_VERSION -lt $(version_code 2.10.57) ] &&
+               skip "Need MDS version at least 2.10.57"
 
        local dom=$DIR/$tdir/dom
        local tmp=$TMP/$tfile
@@ -17225,8 +17621,7 @@ test_271f() {
 
        $LFS setstripe -E 1024K -L mdt $DIR/$tdir
 
-       local mdtidx=$($GETSTRIPE -M $DIR/$tdir)
-       local facet=mds$((mdtidx + 1))
+       local mdtidx=$($LFS getstripe --mdt-index $DIR/$tdir)
 
        cancel_lru_locks mdc
        dd if=/dev/urandom of=$tmp bs=200000 count=1
@@ -17237,12 +17632,9 @@ test_271f() {
 
        echo "Append to the same page"
        cat /etc/hosts >> $dom
-       local num=$(lctl get_param -n mdc.*.stats | \
-               awk '/ost_read/ {print $2}')
-       local ra=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_active/ {print $2}')
-       local rw=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_waittime/ {print $2}')
+       local num=$(get_mdc_stats $mdtidx ost_read)
+       local ra=$(get_mdc_stats $mdtidx req_active)
+       local rw=$(get_mdc_stats $mdtidx req_waittime)
 
        [ -z $num ] || error "$num READ RPC occured"
        [ $ra == $rw ] || error "$((ra - rw)) resend occured"
@@ -17256,12 +17648,9 @@ test_271f() {
 
        echo "Open and read file"
        cat $dom > /dev/null
-       local num=$(lctl get_param -n mdc.*.stats | \
-               awk '/ost_read/ {print $2}')
-       local ra=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_active/ {print $2}')
-       local rw=$(lctl get_param -n mdc.*.stats | \
-               awk '/req_waittime/ {print $2}')
+       local num=$(get_mdc_stats $mdtidx ost_read)
+       local ra=$(get_mdc_stats $mdtidx req_active)
+       local rw=$(get_mdc_stats $mdtidx req_waittime)
 
        [ $num -eq 1 ] || error "expect 1 READ RPC, $num occured"
        [ $ra == $rw ] || error "$((ra - rw)) resend occured"
@@ -17274,9 +17663,142 @@ test_271f() {
 }
 run_test 271f "DoM: read on open (200K file and read tail)"
 
+test_272a() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.50) ] &&
+               skip "Need MDS version at least 2.11.50"
+
+       local dom=$DIR/$tdir/dom
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 256K -L mdt -E -1 -c1 $dom
+       dd if=/dev/urandom of=$dom bs=512K count=1 ||
+               error "failed to write data into $dom"
+       local old_md5=$(md5sum $dom)
+
+       $LFS migrate -E 256K -L mdt -E -1 -c2 $dom ||
+               error "failed to migrate to the same DoM component"
+
+       local new_md5=$(md5sum $dom)
+
+       [ "$old_md5" == "$new_md5" ] ||
+               error "md5sum differ: $old_md5, $new_md5"
+
+       [ $($LFS getstripe -c $dom) -eq 2 ] ||
+               error "migrate stripe count bad: $(LFS getstripe -c $dom) != 2"
+}
+run_test 272a "DoM migration: new layout with the same DOM component"
+
+test_272b() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.50) ] &&
+               skip "Need MDS version at least 2.11.50"
+
+       local dom=$DIR/$tdir/dom
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -E 1M -L mdt -E -1 -c1 $dom
+
+       local mdtidx=$($LFS getstripe -m $dom)
+       local mdtname=MDT$(printf %04x $mdtidx)
+       local facet=mds$((mdtidx + 1))
+
+       local mdtfree1=$(do_facet $facet \
+               lctl get_param -n osd*.*$mdtname.kbytesfree)
+       dd if=/dev/urandom of=$dom bs=2M count=1 ||
+               error "failed to write data into $dom"
+       local old_md5=$(md5sum $dom)
+       cancel_lru_locks mdc
+       local mdtfree1=$(do_facet $facet \
+               lctl get_param -n osd*.*$mdtname.kbytesfree)
+
+       $LFS migrate -c2 $dom ||
+               error "failed to migrate to the new composite layout"
+       [ $($LFS getstripe -L $dom) == 'mdt' ] &&
+               error "MDT stripe was not removed"
+
+       cancel_lru_locks mdc
+       local new_md5=$(md5sum $dom)
+       [ "$old_md5" != "$new_md5" ] &&
+               error "$old_md5 != $new_md5"
+
+       # Skip free space checks with ZFS
+       if [ "$(facet_fstype $facet)" != "zfs" ]; then
+               local mdtfree2=$(do_facet $facet \
+                               lctl get_param -n osd*.*$mdtname.kbytesfree)
+               [ $mdtfree2 -gt $mdtfree1 ] ||
+                       error "MDT space is not freed after migration"
+       fi
+       return 0
+}
+run_test 272b "DoM migration: DOM file to the OST-striped file (plain)"
+
+test_272c() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.50) ] &&
+               skip "Need MDS version at least 2.11.50"
+
+       local dom=$DIR/$tdir/$tfile
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -E 1M -L mdt -E -1 -c1 $dom
+
+       local mdtidx=$($LFS getstripe -m $dom)
+       local mdtname=MDT$(printf %04x $mdtidx)
+       local facet=mds$((mdtidx + 1))
+
+       dd if=/dev/urandom of=$dom bs=2M count=1 oflag=direct ||
+               error "failed to write data into $dom"
+       local old_md5=$(md5sum $dom)
+       cancel_lru_locks mdc
+       local mdtfree1=$(do_facet $facet \
+               lctl get_param -n osd*.*$mdtname.kbytesfree)
+
+       $LFS migrate -E 2M -c1 -E -1 -c2 $dom ||
+               error "failed to migrate to the new composite layout"
+       [ $($LFS getstripe -L $dom) == 'mdt' ] &&
+               error "MDT stripe was not removed"
+
+       cancel_lru_locks mdc
+       local new_md5=$(md5sum $dom)
+       [ "$old_md5" != "$new_md5" ] &&
+               error "$old_md5 != $new_md5"
+
+       # Skip free space checks with ZFS
+       if [ "$(facet_fstype $facet)" != "zfs" ]; then
+               local mdtfree2=$(do_facet $facet \
+                               lctl get_param -n osd*.*$mdtname.kbytesfree)
+               [ $mdtfree2 -gt $mdtfree1 ] ||
+                       error "MDS space is not freed after migration"
+       fi
+       return 0
+}
+run_test 272c "DoM migration: DOM file to the OST-striped file (composite)"
+
+test_273a() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.50) ] &&
+               skip "Need MDS version at least 2.11.50"
+
+       # Layout swap cannot be done if either file has DOM component,
+       # this will never be supported, migration should be used instead
+
+       local dom=$DIR/$tdir/$tfile
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -c2 ${dom}_plain
+       $LFS setstripe -E 1M -L mdt -E -1 -c2 ${dom}_dom
+       $LFS swap_layouts ${dom}_plain ${dom}_dom &&
+               error "can swap layout with DoM component"
+       $LFS swap_layouts ${dom}_dom ${dom}_plain &&
+               error "can swap layout with DoM component"
+
+       $LFS setstripe -E 1M -c1 -E -1 -c2 ${dom}_comp
+       $LFS swap_layouts ${dom}_comp ${dom}_dom &&
+               error "can swap layout with DoM component"
+       $LFS swap_layouts ${dom}_dom ${dom}_comp &&
+               error "can swap layout with DoM component"
+       return 0
+}
+run_test 273a "DoM: layout swapping should fail with DOM"
+
 test_275() {
        remote_ost_nodsh && skip "remote OST with nodsh"
-       [ $(lustre_version_code ost1) -lt $(version_code 2.10.57) ] &&
+       [ $OST1_VERSION -lt $(version_code 2.10.57) ] &&
                skip "Need OST version >= 2.10.57"
 
        local file=$DIR/$tfile
@@ -17399,7 +17921,7 @@ test_striped_dir() {
 }
 
 test_300a() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.0) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.0) ] &&
                skip "skipped for lustre < 2.7.0"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
@@ -17410,7 +17932,7 @@ test_300a() {
 run_test 300a "basic striped dir sanity test"
 
 test_300b() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.0) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.0) ] &&
                skip "skipped for lustre < 2.7.0"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
@@ -17439,7 +17961,7 @@ test_300b() {
 run_test 300b "check ctime/mtime for striped dir"
 
 test_300c() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.0) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.0) ] &&
                skip "skipped for lustre < 2.7.0"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
@@ -17465,7 +17987,7 @@ test_300c() {
 run_test 300c "chown && check ls under striped directory"
 
 test_300d() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.0) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.0) ] &&
                skip "skipped for lustre < 2.7.0"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
@@ -17474,7 +17996,7 @@ test_300d() {
        local file
 
        mkdir -p $DIR/$tdir
-       $SETSTRIPE -c 2 $DIR/$tdir
+       $LFS setstripe -c 2 $DIR/$tdir
 
        #local striped directory
        $LFS setdirstripe -i 0 -c 2 -H all_char $DIR/$tdir/striped_dir ||
@@ -17499,7 +18021,7 @@ test_300d() {
 run_test 300d "check default stripe under striped directory"
 
 test_300e() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
@@ -17548,7 +18070,7 @@ run_test 300e "check rename under striped directory"
 test_300f() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local stripe_count
@@ -17637,7 +18159,7 @@ test_300_check_default_striped_dir()
 
 test_300g() {
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local dir
@@ -17689,7 +18211,7 @@ run_test 300g "check default striped directory for normal directory"
 
 test_300h() {
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local dir
@@ -17720,7 +18242,7 @@ run_test 300h "check default striped directory for striped directory"
 test_300i() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local stripe_count
@@ -17775,7 +18297,7 @@ run_test 300i "client handle unknown hash type striped directory"
 test_300j() {
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local stripe_count
@@ -17802,9 +18324,14 @@ run_test 300j "test large update record"
 test_300k() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
+       # this test needs a huge transaction
+       local kb
+       kb=$(do_facet $SINGLEMDS lctl get_param -n osd*.lustre-MDT0000.kbytestotal)
+       [ $kb -lt $((1024*1024)) ] && skip "too small mds: $kb"
+
        local stripe_count
        local file
 
@@ -17828,7 +18355,7 @@ run_test 300k "test large striped directory"
 test_300l() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local stripe_index
@@ -17852,7 +18379,7 @@ run_test 300l "non-root user to create dir under striped dir with stale layout"
 test_300m() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -ge 2 ] && skip_env "Only for single MDT"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        mkdir -p $DIR/$tdir/striped_dir
@@ -17894,7 +18421,7 @@ cleanup_300n() {
 test_300n() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
@@ -17937,7 +18464,7 @@ run_test 300n "non-root user to create dir under striped dir with default EA"
 test_300o() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.55) ] &&
                skip "Need MDS version at least 2.7.55"
 
        local numfree1
@@ -18010,6 +18537,31 @@ test_300q() {
 }
 run_test 300q "create remote directory under orphan directory"
 
+test_300r() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+               skip "Need MDS version at least 2.7.55" && return
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+       mkdir $DIR/$tdir
+
+       $LFS setdirstripe -i 0 -c -1 $DIR/$tdir/striped_dir ||
+               error "set striped dir error"
+
+       $LFS getdirstripe $DIR/$tdir/striped_dir ||
+               error "getstripeddir fails"
+
+       local stripe_count
+       stripe_count=$($LFS getdirstripe $DIR/$tdir/striped_dir |
+                     awk '/lmv_stripe_count:/ { print $2 }')
+
+       [ $MDSCOUNT -ne $stripe_count ] &&
+               error "wrong stripe count $stripe_count expected $MDSCOUNT"
+
+       rm -rf $DIR/$tdir/striped_dir ||
+               error "unlink striped dir fails"
+}
+run_test 300r "test -1 striped directory"
+
 prepare_remote_file() {
        mkdir $DIR/$tdir/src_dir ||
                error "create remote source failed"
@@ -18093,40 +18645,39 @@ run_test 310c "open-unlink remote file with multiple links"
 test_311() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.54) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.8.54) ] &&
                skip "lustre < 2.8.54 does not contain LU-4825 fix"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
        local old_iused=$($LFS df -i | grep OST0000 | awk '{ print $3 }')
+       local mdts=$(comma_list $(mdts_nodes))
 
        mkdir -p $DIR/$tdir
-       $SETSTRIPE -i 0 -c 1 $DIR/$tdir
+       $LFS setstripe -i 0 -c 1 $DIR/$tdir
        createmany -o $DIR/$tdir/$tfile. 1000
 
        # statfs data is not real time, let's just calculate it
        old_iused=$((old_iused + 1000))
 
-       local count=$(do_facet $SINGLEMDS "lctl get_param -n \
+       local count=$(do_facet $SINGLEMDS "$LCTL get_param -n \
                        osp.*OST0000*MDT0000.create_count")
-       local max_count=$(do_facet $SINGLEMDS "lctl get_param -n \
+       local max_count=$(do_facet $SINGLEMDS "$LCTL get_param -n \
                                osp.*OST0000*MDT0000.max_create_count")
-       for idx in $(seq $MDSCOUNT); do
-               do_facet mds$idx "lctl set_param -n \
-                       osp.*OST0000*MDT000?.max_create_count=0"
-       done
+       do_nodes $mdts "$LCTL set_param -n osp.*OST0000*.max_create_count=0"
 
-       $SETSTRIPE -i 0 $DIR/$tdir/$tfile || error "setstripe failed"
-       local index=$($GETSTRIPE -i $DIR/$tdir/$tfile)
+       $LFS setstripe -i 0 $DIR/$tdir/$tfile || error "setstripe failed"
+       local index=$($LFS getstripe -i $DIR/$tdir/$tfile)
        [ $index -ne 0 ] || error "$tfile stripe index is 0"
 
        unlinkmany $DIR/$tdir/$tfile. 1000
 
-       for idx in $(seq $MDSCOUNT); do
-               do_facet mds$idx "lctl set_param -n \
-                       osp.*OST0000*MDT000?.max_create_count=$max_count"
-               do_facet mds$idx "lctl set_param -n \
-                       osp.*OST0000*MDT000?.create_count=$count"
-       done
+       do_nodes $mdts "$LCTL set_param -n \
+                       osp.*OST0000*.max_create_count=$max_count"
+       [ $MDS1_VERSION -lt $(version_code 2.12.51) ] &&
+               do_nodes $mdts "$LCTL set_param -n \
+                               osp.*OST0000*.create_count=$count"
+       do_nodes $mdts "$LCTL get_param osp.*OST0000*.create_count" |
+                       grep "=0" && error "create_count is zero"
 
        local new_iused
        for i in $(seq 120); do
@@ -18179,13 +18730,12 @@ zfs_object_blksz() {
 
 test_312() { # LU-4856
        remote_ost_nodsh && skip "remote OST with nodsh"
-       [ $(facet_fstype ost1) = "zfs" ] ||
+       [ "$ost1_FSTYPE" = "zfs" ] ||
                skip_env "the test only applies to zfs"
 
        local max_blksz=$(do_facet ost1 \
                          $ZFS get -p recordsize $(facet_device ost1) |
                          awk '!/VALUE/{print $3}')
-       local min_blksz=$(getconf PAGE_SIZE)
 
        # to make life a little bit easier
        $LFS mkdir -c 1 -i 0 $DIR/$tdir
@@ -18197,30 +18747,31 @@ test_312() { # LU-4856
 
        # Get ZFS object id
        local zfs_objid=$(zfs_oid_to_objid ost1 $oid)
+       # block size change by sequential overwrite
+       local bs
 
-       # block size change by sequential over write
-       local blksz
-       for ((bs=$min_blksz; bs <= max_blksz; bs <<= 2)); do
+       for ((bs=$PAGE_SIZE; bs <= max_blksz; bs *= 4)) ; do
                dd if=/dev/zero of=$tf bs=$bs count=1 oflag=sync conv=notrunc
 
-               blksz=$(zfs_object_blksz ost1 $zfs_objid)
+               local blksz=$(zfs_object_blksz ost1 $zfs_objid)
                [ $blksz -eq $bs ] || error "blksz error: $blksz, expected: $bs"
        done
        rm -f $tf
 
        # block size change by sequential append write
-       dd if=/dev/zero of=$tf bs=$min_blksz count=1 oflag=sync conv=notrunc
+       dd if=/dev/zero of=$tf bs=$PAGE_SIZE count=1 oflag=sync conv=notrunc
        oid=$($LFS getstripe $tf | awk '/obdidx/{getline; print $2}')
        zfs_objid=$(zfs_oid_to_objid ost1 $oid)
+       local count
 
-       for ((count = 1; count < $((max_blksz / min_blksz)); count *= 2)); do
-               dd if=/dev/zero of=$tf bs=$min_blksz count=$count seek=$count \
+       for ((count = 1; count < $((max_blksz / PAGE_SIZE)); count *= 2)); do
+               dd if=/dev/zero of=$tf bs=$PAGE_SIZE count=$count seek=$count \
                        oflag=sync conv=notrunc
 
                blksz=$(zfs_object_blksz ost1 $zfs_objid)
-               [ $blksz -eq $((2 * count * min_blksz)) ] ||
-                       error "blksz error, actual $blksz, "    \
-                               "expected: 2 * $count * $min_blksz"
+               [ $blksz -eq $((2 * count * PAGE_SIZE)) ] ||
+                       error "blksz error, actual $blksz, " \
+                               "expected: 2 * $count * $PAGE_SIZE"
        done
        rm -f $tf
 
@@ -18231,8 +18782,8 @@ test_312() { # LU-4856
 
        dd if=/dev/zero of=$tf bs=1K count=1 oflag=sync conv=notrunc
        blksz=$(zfs_object_blksz ost1 $zfs_objid)
-       [ $blksz -eq $min_blksz ] ||
-               error "blksz error: $blksz, expected: $min_blksz"
+       [ $blksz -eq $PAGE_SIZE ] ||
+               error "blksz error: $blksz, expected: $PAGE_SIZE"
 
        dd if=/dev/zero of=$tf bs=64K count=1 oflag=sync conv=notrunc seek=128
        blksz=$(zfs_object_blksz ost1 $zfs_objid)
@@ -18248,12 +18799,13 @@ test_313() {
        remote_ost_nodsh && skip "remote OST with nodsh"
 
        local file=$DIR/$tfile
+
        rm -f $file
-       $SETSTRIPE -c 1 -i 0 $file || error "setstripe failed"
+       $LFS setstripe -c 1 -i 0 $file || error "setstripe failed"
 
        # define OBD_FAIL_TGT_RCVD_EIO           0x720
        do_facet ost1 "$LCTL set_param fail_loc=0x720"
-       dd if=/dev/zero of=$file bs=4096 oflag=direct count=1 &&
+       dd if=/dev/zero of=$file bs=$PAGE_SIZE oflag=direct count=1 &&
                error "write should failed"
        do_facet ost1 "$LCTL set_param fail_loc=0"
        rm -f $file
@@ -18263,7 +18815,7 @@ run_test 313 "io should fail after last_rcvd update fail"
 test_314() {
        [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs"
 
-       $SETSTRIPE -c 2 -i 0 $DIR/$tfile || error "setstripe failed"
+       $LFS setstripe -c 2 -i 0 $DIR/$tfile || error "setstripe failed"
        do_facet ost1 "$LCTL set_param fail_loc=0x720"
        rm -f $DIR/$tfile
        wait_delete_completed
@@ -18272,11 +18824,14 @@ test_314() {
 run_test 314 "OSP shouldn't fail after last_rcvd update failure"
 
 test_315() { # LU-618
+       [ -f /proc/$$/io ] || skip_env "no IO accounting in kernel"
+
        local file=$DIR/$tfile
        rm -f $file
 
-       $MULTIOP $file oO_CREAT:O_DIRECT:O_RDWR:w4096000c
-       $MULTIOP $file oO_RDONLY:r4096000_c &
+       $MULTIOP $file oO_CREAT:O_DIRECT:O_RDWR:w4063232c ||
+               error "multiop file write failed"
+       $MULTIOP $file oO_RDONLY:r4063232_c &
        PID=$!
 
        sleep 2
@@ -18303,6 +18858,8 @@ test_316() {
 run_test 316 "lfs mv"
 
 test_317() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.53) ] &&
+               skip "Need MDS version at least 2.11.53"
        local trunc_sz
        local grant_blk_size
 
@@ -18369,6 +18926,31 @@ test_317() {
 }
 run_test 317 "Verify blocks get correctly update after truncate"
 
+test_319() {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+
+       local before=$(date +%s)
+       local evict
+       local mdir=$DIR/$tdir
+       local file=$mdir/xxx
+
+       $LFS mkdir -i0 $mdir || error "mkdir $mdir fails"
+       touch $file
+
+#define OBD_FAIL_LDLM_LOCAL_CANCEL_PAUSE 0x32c
+       $LCTL set_param fail_val=5 fail_loc=0x8000032c
+       $LFS mv -m1 $file &
+
+       sleep 1
+       dd if=$file of=/dev/null
+       wait
+       evict=$($LCTL get_param mdc.$FSNAME-MDT*.state |
+         awk -F"[ [,]" '/EVICTED ]$/ { if (mx<$5) {mx=$5;} } END { print mx }')
+
+       [ -z "$evict" ] || [[ $evict -le $before ]] || error "eviction happened"
+}
+run_test 319 "lost lease lock on migrate error"
+
 test_fake_rw() {
        local read_write=$1
        if [ "$read_write" = "write" ]; then
@@ -18383,7 +18965,7 @@ test_fake_rw() {
        local saved_debug=$($LCTL get_param -n debug)
        $LCTL set_param debug=0
 
-       $SETSTRIPE -c 1 -i 0 $DIR/$tfile
+       $LFS setstripe -c 1 -i 0 $DIR/$tfile
 
        # get ost1 size - lustre-OST0000
        local ost1_avail_size=$($LFS df | awk /${ost1_svc}/'{ print $4 }')
@@ -18436,7 +19018,7 @@ run_test 399a "fake write should not be slower than normal write"
 
 test_399b() { # LU-8726 for OST fake read
        remote_ost_nodsh && skip "remote OST with nodsh"
-       if [ "$(facet_fstype ost1)" != "ldiskfs" ]; then
+       if [ "$ost1_FSTYPE" != "ldiskfs" ]; then
                skip_env "ldiskfs only test"
        fi
 
@@ -18596,12 +19178,11 @@ test_401d() {
 run_test 401d "Verify 'lctl set_param' accepts values containing '='"
 
 test_402() {
-       local server_version=$(lustre_version_code $SINGLEMDS)
-       [[ $server_version -ge $(version_code 2.7.66) ]] ||
-       [[ $server_version -ge $(version_code 2.7.18.4) &&
-               $server_version -lt $(version_code 2.7.50) ]] ||
-       [[ $server_version -ge $(version_code 2.7.2) &&
-               $server_version -lt $(version_code 2.7.11) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.7.66) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.7.18.4) &&
+               $MDS1_VERSION -lt $(version_code 2.7.50) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.7.2) &&
+               $MDS1_VERSION -lt $(version_code 2.7.11) ]] ||
                skip "Need MDS version 2.7.2+ or 2.7.18.4+ or 2.7.66+"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
@@ -18643,8 +19224,7 @@ test_403() {
 run_test 403 "i_nlink should not drop to zero due to aliasing"
 
 test_404() { # LU-6601
-       local server_version=$(lustre_version_code $SINGLEMDS)
-       [[ $server_version -ge $(version_code 2.8.53) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.8.53) ]] ||
                skip "Need server version newer than 2.8.52"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
@@ -18674,8 +19254,9 @@ test_404() { # LU-6601
 run_test 404 "validate manual {de}activated works properly for OSPs"
 
 test_405() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.92) -o \
-       [ $(lustre_version_code client) -lt $(version_code 2.6.99) ] &&
+       [ -n "$FILESET" ] && skip "Not functional for FILESET set"
+       [ $MDS1_VERSION -lt $(version_code 2.6.92) -o \
+       [ $CLIENT_VERSION -lt $(version_code 2.6.99) ] &&
                skip "Layout swap lock is not supported"
        check_swap_layouts_support
 
@@ -18690,7 +19271,7 @@ test_406() {
        [ $OSTCOUNT -lt 2 ] && skip_env "needs >= 2 OSTs"
        [ -n "$FILESET" ] && skip "SKIP due to FILESET set"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.50) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.8.50) ] &&
                skip "Need MDS version at least 2.8.50"
 
        local def_stripe_size=$($LFS getstripe -S $MOUNT)
@@ -18760,7 +19341,7 @@ run_test 406 "DNE support fs default striping"
 
 test_407() {
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.8.55) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.8.55) ]] &&
                skip "Need MDS version at least 2.8.55"
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
@@ -18782,7 +19363,7 @@ test_407() {
 run_test 407 "transaction fail should cause operation fail"
 
 test_408() {
-       dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 oflag=direct
+       dd if=/dev/zero of=$DIR/$tfile bs=$PAGE_SIZE count=1 oflag=direct
 
        #define OBD_FAIL_OSC_BRW_PREP_REQ2        0x40a
        lctl set_param fail_loc=0x8000040a
@@ -18803,8 +19384,7 @@ run_test 408 "drop_caches should not hang due to page leaks"
 
 test_409()
 {
-       [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
-       check_mount_and_prep
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
 
        mkdir -p $DIR/$tdir || error "(0) Fail to mkdir"
        $LFS mkdir -i 1 -c 2 $DIR/$tdir/foo || error "(1) Fail to mkdir"
@@ -18828,12 +19408,13 @@ test_409()
        echo "Unlink hard links start at $(date)"
        unlinkmany $DIR/$tdir/foo/${PREFIX}_ 1000 ||
                error "(7) Fail to unlink"
+       echo "Unlink hard links finished at $(date)"
 }
 run_test 409 "Large amount of cross-MDTs hard links on the same file"
 
 test_410()
 {
-       [[ $(lustre_version_code client) -lt $(version_code 2.9.59) ]] &&
+       [[ $CLIENT_VERSION -lt $(version_code 2.9.59) ]] &&
                skip "Need client version at least 2.9.59"
 
        # Create a file, and stat it from the kernel
@@ -18878,9 +19459,9 @@ test_411() {
        echo 1M > $cgdir/memory.limit_in_bytes
 
        # Should not LBUG, just be killed by oom-killer
-       sh -c "echo \$$ > $cgdir/tasks && dd if=$DIR/$tfile of=/dev/null" &&
-               error "fail to trigger a memory allocation error"
-
+       # dd will return 0 even allocation failure in some environment.
+       # So don't check return value
+       sh -c "echo \$$ > $cgdir/tasks && dd if=$DIR/$tfile of=/dev/null"
        cleanup_test411_cgroup $cgdir
 
        return 0
@@ -18963,7 +19544,7 @@ test_415() {
 
        total=500
        # this test may be slow on ZFS
-       [ "$(facet_fstype mds1)" == "zfs" ] && total=100
+       [ "$mds1_FSTYPE" == "zfs" ] && total=100
 
        # though this test is designed for striped directory, let's test normal
        # directory too since lock is always saved as CoS lock.
@@ -18992,9 +19573,144 @@ test_415() {
 }
 run_test 415 "lock revoke is not missing"
 
+test_416() {
+       [ $(lustre_version_code mds1) -lt $(version_code 2.11.55) ] &&
+               skip "Need server version at least 2.11.55"
+
+       # define OBD_FAIL_OSD_TXN_START    0x19a
+       do_facet mds1 lctl set_param fail_loc=0x19a
+
+       lfs mkdir -c $MDSCOUNT $DIR/$tdir
+
+       true
+}
+run_test 416 "transaction start failure won't cause system hung"
+
+cleanup_417() {
+       trap 0
+       do_nodes $(comma_list $(mdts_nodes)) \
+               "$LCTL set_param -n mdt.*MDT*.enable_dir_migration=1"
+       do_nodes $(comma_list $(mdts_nodes)) \
+               "$LCTL set_param -n mdt.*MDT*.enable_remote_dir=1"
+       do_nodes $(comma_list $(mdts_nodes)) \
+               "$LCTL set_param -n mdt.*MDT*.enable_striped_dir=1"
+}
+
+test_417() {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
+       [[ $MDS1_VERSION -lt $(version_code 2.11.56) ]] &&
+               skip "Need MDS version at least 2.11.56"
+
+       trap cleanup_417 RETURN EXIT
+
+       $LFS mkdir -i 1 $DIR/$tdir.1 || error "create remote dir $tdir.1 failed"
+       do_nodes $(comma_list $(mdts_nodes)) \
+               "$LCTL set_param -n mdt.*MDT*.enable_dir_migration=0"
+       $LFS migrate -m 0 $DIR/$tdir.1 &&
+               error "migrate dir $tdir.1 should fail"
+
+       do_nodes $(comma_list $(mdts_nodes)) \
+               "$LCTL set_param -n mdt.*MDT*.enable_remote_dir=0"
+       $LFS mkdir -i 1 $DIR/$tdir.2 &&
+               error "create remote dir $tdir.2 should fail"
+
+       do_nodes $(comma_list $(mdts_nodes)) \
+               "$LCTL set_param -n mdt.*MDT*.enable_striped_dir=0"
+       $LFS mkdir -c 2 $DIR/$tdir.3 &&
+               error "create striped dir $tdir.3 should fail"
+       true
+}
+run_test 417 "disable remote dir, striped dir and dir migration"
+
+# Checks that the outputs of df [-i] and lfs df [-i] match
+#
+# usage: check_lfs_df <blocks | inodes> <mountpoint>
+check_lfs_df() {
+       local dir=$2
+       local inodes
+       local df_out
+       local lfs_df_out
+       local count
+       local passed=false
+
+       # blocks or inodes
+       [ "$1" == "blocks" ] && inodes= || inodes="-i"
+
+       for count in {1..100}; do
+               cancel_lru_locks
+               sync; sleep 0.2
+
+               # read the lines of interest
+               df_out=($(df -P $inodes $dir | tail -n +2)) ||
+                       error "df $inodes $dir | tail -n +2 failed"
+               lfs_df_out=($($LFS df $inodes $dir | grep summary:)) ||
+                       error "lfs df $inodes $dir | grep summary: failed"
+
+               # skip first substrings of each output as they are different
+               # "<NID>:/<fsname>" for df, "filesystem_summary:" for lfs df
+               # compare the two outputs
+               passed=true
+               for i in {1..5}; do
+                       [ "${df_out[i]}" != "${lfs_df_out[i]}" ] && passed=false
+               done
+               $passed && break
+       done
+
+       if ! $passed; then
+               df -P $inodes $dir
+               echo
+               lfs df $inodes $dir
+               error "df and lfs df $1 output mismatch: "      \
+                     "df ${inodes}: ${df_out[*]}, "            \
+                     "lfs df ${inodes}: ${lfs_df_out[*]}"
+       fi
+}
+
+test_418() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run"
+
+       local dir=$DIR/$tdir
+       local numfiles=$((RANDOM % 4096 + 2))
+       local numblocks=$((RANDOM % 256 + 1))
+
+       wait_delete_completed
+       test_mkdir $dir
+
+       # check block output
+       check_lfs_df blocks $dir
+       # check inode output
+       check_lfs_df inodes $dir
+
+       # create a single file and retest
+       echo "Creating a single file and testing"
+       createmany -o $dir/$tfile- 1 &>/dev/null ||
+               error "creating 1 file in $dir failed"
+       check_lfs_df blocks $dir
+       check_lfs_df inodes $dir
+
+       # create a random number of files
+       echo "Creating $((numfiles - 1)) files and testing"
+       createmany -o $dir/$tfile- 1 $((numfiles - 1)) &>/dev/null ||
+               error "creating $((numfiles - 1)) files in $dir failed"
+
+       # write a random number of blocks to the first test file
+       echo "Writing $numblocks 4K blocks and testing"
+       dd if=/dev/urandom of=$dir/${tfile}-0 bs=4K conv=fsync \
+               count=$numblocks &>/dev/null ||
+               error "dd to $dir/${tfile}-0 failed"
+
+       # retest
+       check_lfs_df blocks $dir
+       check_lfs_df inodes $dir
+
+       unlinkmany $dir/$tfile- $numfiles &>/dev/null ||
+               error "unlinking $numfiles files in $dir failed"
+}
+run_test 418 "df and lfs df outputs match"
+
 prep_801() {
        [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] ||
-       [[ $(lustre_version_code ost1) -lt $(version_code 2.9.55) ]] &&
+       [[ $OST1_VERSION -lt $(version_code 2.9.55) ]] &&
                skip "Need server version at least 2.9.55"
 
        start_full_debug_logging
@@ -19005,7 +19721,7 @@ post_801() {
 }
 
 barrier_stat() {
-       if [ $(lustre_version_code mgs) -le $(version_code 2.10.0) ]; then
+       if [ $MGS_VERSION -le $(version_code 2.10.0) ]; then
                local st=$(do_facet mgs $LCTL barrier_stat $FSNAME |
                           awk '/The barrier for/ { print $7 }')
                echo $st
@@ -19018,7 +19734,7 @@ barrier_stat() {
 barrier_expired() {
        local expired
 
-       if [ $(lustre_version_code mgs) -le $(version_code 2.10.0) ]; then
+       if [ $MGS_VERSION -le $(version_code 2.10.0) ]; then
                expired=$(do_facet mgs $LCTL barrier_stat $FSNAME |
                          awk '/will be expired/ { print $7 }')
        else
@@ -19207,7 +19923,7 @@ saved_MGS_MOUNT_OPTS=$MGS_MOUNT_OPTS
 saved_MDS_MOUNT_OPTS=$MDS_MOUNT_OPTS
 saved_OST_MOUNT_OPTS=$OST_MOUNT_OPTS
 
-cleanup_802() {
+cleanup_802a() {
        trap 0
 
        stopall
@@ -19217,10 +19933,10 @@ cleanup_802() {
        setupall
 }
 
-test_802() {
+test_802a() {
 
        [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] ||
-       [[ $(lustre_version_code ost1) -lt $(version_code 2.9.55) ]] &&
+       [[ $OST1_VERSION -lt $(version_code 2.9.55) ]] &&
                skip "Need server version at least 2.9.55"
 
        [[ $ENABLE_QUOTA ]] && skip "Quota enabled for read-only test"
@@ -19230,7 +19946,7 @@ test_802() {
        cp $LUSTRE/tests/test-framework.sh $DIR/$tdir/ ||
                error "(2) Fail to copy"
 
-       trap cleanup_802 EXIT
+       trap cleanup_802a EXIT
 
        # sync by force before remount as readonly
        sync; sync_all_data; sleep 3; sync_all_data
@@ -19259,13 +19975,44 @@ test_802() {
        diff $LUSTRE/tests/test-framework.sh $DIR/$tdir/test-framework.sh ||
                error "(7) Read should succeed under ro mode"
 
-       cleanup_802
+       cleanup_802a
 }
-run_test 802 "simulate readonly device"
+run_test 802a "simulate readonly device"
+
+test_802b() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run"
+        remote_mds_nodsh && skip "remote MDS with nodsh"
+
+       do_facet $SINGLEMDS $LCTL get_param mdt.*.readonly ||
+               skip "readonly option not available"
+
+       $LFS mkdir -i 0 -c 1 $DIR/$tdir || error "(1) fail to mkdir"
+
+       cp $LUSTRE/tests/test-framework.sh $DIR/$tdir/ ||
+               error "(2) Fail to copy"
+
+       # write back all cached data before setting MDT to readonly
+       cancel_lru_locks
+       sync_all_data
+
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.readonly=1
+       stack_trap "do_facet $SINGLEMDS $LCTL set_param mdt.*.readonly=0" EXIT
+
+       echo "Modify should be refused"
+       touch $DIR/$tdir/guard && error "(6) Touch should fail under ro mode"
+
+       echo "Read should be allowed"
+       diff $LUSTRE/tests/test-framework.sh $DIR/$tdir/test-framework.sh ||
+               error "(7) Read should succeed under ro mode"
+
+       # disable readonly
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.readonly=0
+}
+run_test 802b "be able to set MDTs to readonly"
 
 test_803() {
        [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.54) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.54) ] &&
                skip "MDS needs to be newer than 2.10.54"
 
        mkdir -p $DIR/$tdir
@@ -19277,11 +20024,12 @@ test_803() {
        done
 
        sync; sleep 3
+       wait_delete_completed # ensure old test cleanups are finished
        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
+       for i in {1..10}; do
                $LFS mkdir -c 1 -i 1 $DIR/$tdir/foo$i ||
                        error "Fail to create $DIR/$tdir/foo$i"
        done
@@ -19291,10 +20039,11 @@ test_803() {
        $LFS df -i $MOUNT
        local after_used=$($LFS df -i | grep MDT0000_UUID | awk '{print $3}')
 
-       [ $after_used -ge $((before_used + 10)) ] ||
+       # allow for an llog to be cleaned up during the test
+       [ $after_used -ge $((before_used + 10 - 1)) ] ||
                error "before ($before_used) + 10 > after ($after_used)"
 
-       for ((i=0; i<10; i++)); do
+       for i in {1..10}; do
                rm -rf $DIR/$tdir/foo$i ||
                        error "Fail to remove $DIR/$tdir/foo$i"
        done
@@ -19303,20 +20052,19 @@ test_803() {
        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)"
+       # allow for an llog to be created during the test
+       [ $after_used -le $((before_used + 1)) ] ||
+               error "after ($after_used) > before ($before_used) + 1"
 }
 run_test 803 "verify agent object for remote object"
 
 test_804() {
        [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs"
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.54) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.54) ] &&
                skip "MDS needs to be newer than 2.10.54"
-       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
-               skip_env "ldiskfs only test"
+       [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
 
        mkdir -p $DIR/$tdir
        $LFS mkdir -c 1 -i 1 $DIR/$tdir/dir0 ||
@@ -19402,11 +20150,10 @@ cleanup_805() {
 
 test_805() {
        local zfs_version=$(do_node $SINGLEMDS cat /sys/module/zfs/version)
-       [ "$(facet_fstype mds1)" != "zfs" ] &&
-               skip "ZFS specific test"
+       [ "$mds1_FSTYPE" != "zfs" ] && skip "ZFS specific test"
        [ $(version_code $zfs_version) -lt $(version_code 0.7.2) ] &&
                skip "netfree not implemented before 0.7"
-       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.57) ]] ||
+       [[ $MDS1_VERSION -ge $(version_code 2.10.57) ]] ||
                skip "Need MDS version at least 2.10.57"
 
        local fsset
@@ -19466,8 +20213,8 @@ check_lsom_size()
 }
 
 test_806() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
-               skip "Need MDS version at least 2.11.52" && return
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        local bs=1048576
 
@@ -19476,7 +20223,7 @@ test_806() {
        local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
        save_lustre_params client "llite.*.xattr_cache" > $save
        lctl set_param llite.*.xattr_cache=0
-       stack_trap "restore_lustre_params < $save" EXIT
+       stack_trap "restore_lustre_params < $save; rm -f $save" EXIT
 
        # single-threaded write
        echo "Test SOM for single-threaded write"
@@ -19489,7 +20236,7 @@ test_806() {
        local offset=0
        local i
 
-       echo "Test SOM for single client muti-threaded($num) write"
+       echo "Test SOM for single client multi-threaded($num) write"
        $TRUNCATE $DIR/$tfile 0
        for ((i = 0; i < $num; i++)); do
                $MULTIOP $DIR/$tfile Oz${offset}w${bs}c &
@@ -19518,7 +20265,7 @@ test_806() {
        offset=0
        i=0
 
-       echo "Test SOM for muti-client ($num) writes"
+       echo "Test SOM for multi-client ($num) writes"
        $TRUNCATE $DIR/$tfile 0
        for client in ${CLIENTS//,/ }; do
                do_node $client $MULTIOP $DIR/$tfile Oz${offset}w${bs}c &
@@ -19561,8 +20308,9 @@ test_806() {
 run_test 806 "Verify Lazy Size on MDS"
 
 test_807() {
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.52) ] &&
-               skip "Need MDS version at least 2.11.52" && return
+       [ -n "$FILESET" ] && skip "Not functional for FILESET set"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        # Registration step
        changelog_register || error "changelog_register failed"
@@ -19573,7 +20321,7 @@ test_807() {
        local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
        save_lustre_params client "llite.*.xattr_cache" > $save
        lctl set_param llite.*.xattr_cache=0
-       stack_trap "restore_lustre_params < $save" EXIT
+       stack_trap "restore_lustre_params < $save; rm -f $save" EXIT
 
        rm -rf $DIR/$tdir || error "rm $tdir failed"
        mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
@@ -19591,7 +20339,7 @@ test_807() {
        local offset=0
        local i=0
 
-       echo "Test SOM for muti-client ($num) writes"
+       echo "Test SOM for multi-client ($num) writes"
        touch $DIR/$tfile || error "touch $tfile failed"
        $TRUNCATE $DIR/$tfile 0
        for client in ${CLIENTS//,/ }; do
@@ -19616,6 +20364,292 @@ test_807() {
 }
 run_test 807 "verify LSOM syncing tool"
 
+check_som_nologged()
+{
+       local lines=$($LFS changelog $FSNAME-MDT0000 |
+               grep 'x=trusted.som' | wc -l)
+       [ $lines -ne 0 ] && error "trusted.som xattr is logged in Changelogs"
+}
+
+test_808() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.55) ] &&
+               skip "Need MDS version at least 2.11.55"
+
+       # Registration step
+       changelog_register || error "changelog_register failed"
+
+       touch $DIR/$tfile || error "touch $tfile failed"
+       check_som_nologged
+
+       dd if=/dev/zero of=$DIR/$tfile bs=1048576 count=1 ||
+               error "write $tfile failed"
+       check_som_nologged
+
+       $TRUNCATE $DIR/$tfile 1234
+       check_som_nologged
+
+       $TRUNCATE $DIR/$tfile 1048576
+       check_som_nologged
+
+       # Deregistration step
+       changelog_deregister || error "changelog_deregister failed"
+}
+run_test 808 "Check trusted.som xattr not logged in Changelogs"
+
+check_som_nodata()
+{
+       $LFS getsom $1
+       [[ $? -eq 61 ]] || error "DoM-only file $1 has SOM xattr"
+}
+
+test_809() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
+               skip "Need MDS version at least 2.11.56"
+
+       $LFS setstripe -E 1M -L mdt $DIR/$tfile ||
+               error "failed to create DoM-only file $DIR/$tfile"
+       touch $DIR/$tfile || error "touch $tfile failed"
+       check_som_nodata $DIR/$tfile
+
+       dd if=/dev/zero of=$DIR/$tfile bs=2048 count=1 ||
+               error "write $tfile failed"
+       check_som_nodata $DIR/$tfile
+
+       $TRUNCATE $DIR/$tfile 1234
+       check_som_nodata $DIR/$tfile
+
+       $TRUNCATE $DIR/$tfile 4097
+       check_som_nodata $DIR/$file
+}
+run_test 809 "Verify no SOM xattr store for DoM-only files"
+
+test_810() {
+       local ORIG
+       local CSUM
+
+       # t10 seem to dislike partial pages
+       lctl set_param osc.*.checksum_type=adler
+       lctl set_param fail_loc=0x411
+       dd if=/dev/urandom of=$DIR/$tfile bs=10240 count=2
+       ORIG=$(md5sum $DIR/$tfile)
+       lctl set_param ldlm.namespaces.*osc*.lru_size=clear
+       CSUM=$(md5sum $DIR/$tfile)
+       set_checksum_type adler
+       if [ "$ORIG" != "$CSUM" ]; then
+               error "$ORIG != $CSUM"
+       fi
+}
+run_test 810 "partial page writes on ZFS (LU-11663)"
+
+test_811() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "Need MDS version at least 2.11.56"
+
+       #define OBD_FAIL_MDS_ORPHAN_DELETE      0x165
+       do_facet mds1 $LCTL set_param fail_loc=0x165
+       $MULTIOP $DIR/$tfile Ouc || error "multiop failed"
+
+       stop mds1
+       start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS
+
+       sleep 5
+       [[ $(do_facet mds1 pgrep orph_.*-MDD | wc -l) -eq 0 ]] ||
+               error "MDD orphan cleanup thread not quit"
+}
+run_test 811 "orphan name stub can be cleaned up in startup"
+
+test_812() {
+       [ $OST1_VERSION -lt $(version_code 2.12.51) ] &&
+               skip "OST < 2.12.51 doesn't support this fail_loc"
+
+       $LFS setstripe -c 1 -i 0 $DIR/$tfile
+       # ensure ost1 is connected
+       stat $DIR/$tfile >/dev/null || error "can't stat"
+       wait_osc_import_state client ost1 FULL
+       # no locks, no reqs to let the connection idle
+       cancel_lru_locks osc
+
+       # delay OST_DISCONNECT on OST1 to put OSC into intermediate state
+#define OBD_FAIL_OST_DISCONNECT_DELAY   0x245
+       do_facet ost1 "$LCTL set_param fail_loc=0x245 fail_val=8"
+       wait_osc_import_state client ost1 CONNECTING
+       do_facet ost1 "$LCTL set_param fail_loc=0 fail_val=0"
+
+       stat $DIR/$tfile >/dev/null || error "can't stat file"
+}
+run_test 812 "do not drop reqs generated when imp is going to idle (LU-11951)"
+
+test_813() {
+       local file_heat_sav=$($LCTL get_param -n llite.*.file_heat 2>/dev/null)
+       [ -z "$file_heat_sav" ] && skip "no file heat support"
+
+       local readsample
+       local writesample
+       local readbyte
+       local writebyte
+       local readsample1
+       local writesample1
+       local readbyte1
+       local writebyte1
+
+       local period_second=$($LCTL get_param -n llite.*.heat_period_second)
+       local decay_pct=$($LCTL get_param -n llite.*.heat_decay_percentage)
+
+       $LCTL set_param -n llite.*.file_heat=1
+       echo "Turn on file heat"
+       echo "Period second: $period_second, Decay percentage: $decay_pct"
+
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+
+       local out=$($LFS heat_get $DIR/$tfile)
+
+       $LFS heat_get $DIR/$tfile
+       readsample=$(echo "$out" | grep 'readsample' | awk '{ print $2 }')
+       writesample=$(echo "$out" | grep 'writesample' | awk '{ print $2 }')
+       readbyte=$(echo "$out" | grep 'readbyte' | awk '{ print $2 }')
+       writebyte=$(echo "$out" | grep 'writebyte' | awk '{ print $2 }')
+
+       [ $readsample -le 4 ] || error "read sample ($readsample) is wrong"
+       [ $writesample -le 3 ] || error "write sample ($writesample) is wrong"
+       [ $readbyte -le 20 ] || error "read bytes ($readbyte) is wrong"
+       [ $writebyte -le 15 ] || error "write bytes ($writebyte) is wrong"
+
+       sleep $((period_second + 3))
+       echo "Sleep $((period_second + 3)) seconds..."
+       # The recursion formula to calculate the heat of the file f is as
+       # follow:
+       # Hi+1(f) = (1-P)*Hi(f)+ P*Ci
+       # Where Hi is the heat value in the period between time points i*I and
+       # (i+1)*I; Ci is the access count in the period; the symbol P refers
+       # to the weight of Ci.
+       out=$($LFS heat_get $DIR/$tfile)
+       $LFS heat_get $DIR/$tfile
+       readsample=$(echo "$out" | grep 'readsample' | awk '{ print $2 }')
+       writesample=$(echo "$out" | grep 'writesample' | awk '{ print $2 }')
+       readbyte=$(echo "$out" | grep 'readbyte' | awk '{ print $2 }')
+       writebyte=$(echo "$out" | grep 'writebyte' | awk '{ print $2 }')
+
+       [ $(bc <<< "$readsample <= 4 * $decay_pct / 100") -eq 1 ] ||
+               error "read sample ($readsample) is wrong"
+       [ $(bc <<< "$writesample <= 3 * $decay_pct / 100") -eq 1 ] ||
+               error "write sample ($writesample) is wrong"
+       [ $(bc <<< "$readbyte <= 20 * $decay_pct / 100") -eq 1 ] ||
+               error "read bytes ($readbyte) is wrong"
+       [ $(bc <<< "$writebyte <= 15 * $decay_pct / 100") -eq 1 ] ||
+               error "write bytes ($writebyte) is wrong"
+
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+
+       sleep $((period_second + 3))
+       echo "Sleep $((period_second + 3)) seconds..."
+
+       out=$($LFS heat_get $DIR/$tfile)
+       $LFS heat_get $DIR/$tfile
+       readsample1=$(echo "$out" | grep 'readsample' | awk '{ print $2 }')
+       writesample1=$(echo "$out" | grep 'writesample' | awk '{ print $2 }')
+       readbyte1=$(echo "$out" | grep 'readbyte' | awk '{ print $2 }')
+       writebyte1=$(echo "$out" | grep 'writebyte' | awk '{ print $2 }')
+
+       [ $(bc <<< "$readsample1 <= ($readsample * (100 - $decay_pct) + \
+               4 * $decay_pct) / 100") -eq 1 ] ||
+               error "read sample ($readsample1) is wrong"
+       [ $(bc <<< "$writesample1 <= ($writesample * (100 - $decay_pct) + \
+               3 * $decay_pct) / 100") -eq 1 ] ||
+               error "write sample ($writesample1) is wrong"
+       [ $(bc <<< "$readbyte1 <= ($readbyte * (100 - $decay_pct) + \
+               20 * $decay_pct) / 100") -eq 1 ] ||
+               error "read bytes ($readbyte1) is wrong"
+       [ $(bc <<< "$writebyte1 <= ($writebyte * (100 - $decay_pct) + \
+               15 * $decay_pct) / 100") -eq 1 ] ||
+               error "write bytes ($writebyte1) is wrong"
+
+       echo "Turn off file heat for the file $DIR/$tfile"
+       $LFS heat_set -o $DIR/$tfile
+
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+
+       out=$($LFS heat_get $DIR/$tfile)
+       $LFS heat_get $DIR/$tfile
+       readsample=$(echo "$out" | grep 'readsample' | awk '{ print $2 }')
+       writesample=$(echo "$out" | grep 'writesample' | awk '{ print $2 }')
+       readbyte=$(echo "$out" | grep 'readbyte' | awk '{ print $2 }')
+       writebyte=$(echo "$out" | grep 'writebyte' | awk '{ print $2 }')
+
+       [ $readsample -eq 0 ] || error "read sample ($readsample) is wrong"
+       [ $writesample -eq 0 ] || error "write sample ($writesample) is wrong"
+       [ $readbyte -eq 0 ] || error "read bytes ($readbyte) is wrong"
+       [ $writebyte -eq 0 ] || error "write bytes ($writebyte) is wrong"
+
+       echo "Trun on file heat for the file $DIR/$tfile"
+       $LFS heat_set -O $DIR/$tfile
+
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+
+       out=$($LFS heat_get $DIR/$tfile)
+       $LFS heat_get $DIR/$tfile
+       readsample=$(echo "$out" | grep 'readsample' | awk '{ print $2 }')
+       writesample=$(echo "$out" | grep 'writesample' | awk '{ print $2 }')
+       readbyte=$(echo "$out" | grep 'readbyte' | awk '{ print $2 }')
+       writebyte=$(echo "$out" | grep 'writebyte' | awk '{ print $2 }')
+
+       [ $readsample -gt 0 ] || error "read sample ($readsample) is wrong"
+       [ $writesample -gt 0 ] || error "write sample ($writesample) is wrong"
+       [ $readbyte -gt 0 ] || error "read bytes ($readbyte) is wrong"
+       [ $writebyte -gt 0 ] || error "write bytes ($writebyte) is wrong"
+
+       $LFS heat_set -c $DIR/$tfile
+       $LCTL set_param -n llite.*.file_heat=0
+       echo "Turn off file heat support for the Lustre filesystem"
+
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       echo "QQQQ" > $DIR/$tfile
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+       cat $DIR/$tfile > /dev/null
+
+       out=$($LFS heat_get $DIR/$tfile)
+       $LFS heat_get $DIR/$tfile
+       readsample=$(echo "$out" | grep 'readsample' | awk '{ print $2 }')
+       writesample=$(echo "$out" | grep 'writesample' | awk '{ print $2 }')
+       readbyte=$(echo "$out" | grep 'readbyte' | awk '{ print $2 }')
+       writebyte=$(echo "$out" | grep 'writebyte' | awk '{ print $2 }')
+
+       [ $readsample -eq 0 ] || error "read sample ($readsample) is wrong"
+       [ $writesample -eq 0 ] || error "write sample ($writesample) is wrong"
+       [ $readbyte -eq 0 ] || error "read bytes ($readbyte) is wrong"
+       [ $writebyte -eq 0 ] || error "write bytes ($writebyte) is wrong"
+
+       $LCTL set_param -n llite.*.file_heat=$file_heat_sav
+       rm -f $DIR/$tfile
+}
+run_test 813 "File heat verfication"
+
 #
 # tests that do cleanup/setup should be run at the end
 #