Whamcloud - gitweb
LU-11208 tests: add version check to sanity tests
[fs/lustre-release.git] / lustre / tests / sanity.sh
index dc04e97..e78788a 100755 (executable)
@@ -8,16 +8,27 @@
 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"
 
+if $SHARED_KEY; then
+# bug number for skipped tests:        LU-9795 (all below)
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT   17n     60a     133g    300f"
+fi
+
+if [[ $(uname -m) = aarch64 ]]; then
+       # bug number:    LU-11596 (all below)
+       ALWAYS_EXCEPT+=" 42d 42e 63a 63b 64a 64b 64c"
+       # bug number:    LU-11671 LU-11594 LU-11667 LU-11729
+       ALWAYS_EXCEPT+=" 45       103a      317      810"
+fi
+
 # Check Grants after these tests
 GRANT_CHECK_LIST="$GRANT_CHECK_LIST 42a 42b 42c 42d 42e 63a 63b 64a 64b 64c"
-
 SRCDIR=$(cd $(dirname $0); echo $PWD)
 export PATH=$PATH:/sbin
 
@@ -57,12 +68,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}
+get_lustre_env
 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)"
@@ -101,10 +113,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-10365 LU-10366
-                       ALWAYS_EXCEPT+=" 130d     130e     400a     410"
+                       #                LU-10334 LU-10366
+                       ALWAYS_EXCEPT+=" 103a     410"
                fi
        fi
 fi
@@ -140,7 +150,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
 
@@ -184,7 +195,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"
@@ -216,7 +227,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'"
 }
@@ -534,12 +545,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.
@@ -624,11 +635,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"
@@ -701,11 +711,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
@@ -729,7 +738,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
@@ -752,7 +761,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
@@ -1130,12 +1139,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
@@ -1161,7 +1164,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
@@ -1193,7 +1196,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))
@@ -1221,7 +1224,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
@@ -1488,7 +1491,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
@@ -1501,7 +1504,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"
@@ -1627,7 +1630,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..."
@@ -1947,33 +1950,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)
@@ -2042,7 +2045,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=//' \
@@ -2083,10 +2086,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 ] ||
@@ -2132,9 +2135,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[@]}
 
@@ -2178,10 +2181,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"
@@ -2198,7 +2201,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
@@ -2228,13 +2231,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
@@ -2260,14 +2263,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"
 
@@ -2290,6 +2296,32 @@ test_27G() { #LU-10629
 }
 run_test 27G "Clear OST pool from stripe"
 
+test_27H() {
+       [[ $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
+       $LFS setstripe -o 0 -o 2 $DIR/$tdir || error "setstripe failed"
+       touch $DIR/$tdir/$tfile
+       $LFS getstripe -c $DIR/$tdir/$tfile
+       [ $($LFS getstripe -c $DIR/$tdir/$tfile) -eq 2 ] ||
+               error "two-stripe file doesn't have two stripes"
+
+       dd if=/dev/zero of=$DIR/$tdir/$tfile bs=4k count=4 || error "dd failed"
+       $LFS getstripe -y $DIR/$tdir/$tfile
+       (( $($LFS getstripe -y $DIR/$tdir/$tfile |
+            egrep -c "l_ost_idx: [02]$") == "2" )) ||
+               error "expected l_ost_idx: [02]$ not matched"
+
+       # 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
+       $LVERIFY $DIR/$tdir $DIR/$tdir/f3 || error "lverify failed"
+}
+run_test 27H "Set specific OSTs stripe"
+
 # createtest also checks that device nodes are created and
 # then visible correctly (#2091)
 test_28() { # bug 2091
@@ -2418,19 +2450,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=$!
 
@@ -3067,10 +3099,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"
@@ -3082,7 +3114,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"
@@ -3094,7 +3126,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"
 }
@@ -3174,7 +3207,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
 
@@ -3960,7 +3993,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]*"
@@ -3968,7 +4000,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)
@@ -3981,7 +4013,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
@@ -3995,7 +4027,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
@@ -4005,8 +4037,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
@@ -4185,10 +4217,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
 }
@@ -4197,8 +4229,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
@@ -4307,7 +4339,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=$!
 
@@ -4460,7 +4492,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
 
@@ -4566,7 +4598,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
@@ -4629,7 +4661,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 ======================"
 
@@ -4668,17 +4700,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
 }
@@ -5353,7 +5385,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
@@ -5484,7 +5516,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"
@@ -5754,7 +5786,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"
@@ -5779,7 +5811,7 @@ test_56xb() {
 run_test 56xb "lfs migration hard link support"
 
 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=""
@@ -5874,6 +5906,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
 
@@ -5936,7 +5971,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
@@ -6012,7 +6047,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"
@@ -6032,7 +6067,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"
@@ -6124,7 +6159,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
 
@@ -6204,68 +6239,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"
@@ -6310,11 +6305,41 @@ test_60e() {
 }
 run_test 60e "no space while new llog is being created"
 
+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_61() {
        [ $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
@@ -6405,8 +6430,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)
 
@@ -6415,15 +6438,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 |
@@ -6451,7 +6474,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}')
@@ -6468,7 +6491,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=$!
 
@@ -6505,9 +6528,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"
@@ -6519,7 +6542,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"
@@ -6532,8 +6555,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
@@ -6543,7 +6566,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"
@@ -6555,8 +6578,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"
@@ -6567,7 +6590,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) ==="
 
@@ -6575,7 +6599,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"
@@ -6589,12 +6613,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 ===================="
@@ -6631,11 +6655,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 \
@@ -6654,7 +6678,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: "
@@ -6673,7 +6697,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
@@ -6689,8 +6713,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"
@@ -6714,14 +6738,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"
        }
@@ -6729,6 +6753,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"
@@ -6757,7 +6876,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"
 
@@ -7052,7 +7171,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)
@@ -7161,7 +7280,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
@@ -7204,6 +7323,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
@@ -7265,7 +7387,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
@@ -7317,7 +7439,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
@@ -7348,7 +7470,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
@@ -7366,7 +7488,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
@@ -7398,18 +7520,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"
 
@@ -7529,11 +7639,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
@@ -7541,9 +7651,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
 
 }
@@ -7622,13 +7732,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;}')
@@ -7640,8 +7751,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
@@ -7667,7 +7778,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
@@ -7772,7 +7883,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 ||
@@ -7814,19 +7925,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 ||
@@ -7862,14 +7971,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
@@ -7953,9 +8062,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"
@@ -7966,8 +8075,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 ]] ||
@@ -7986,9 +8095,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"
@@ -7999,8 +8108,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"
@@ -8110,7 +8219,7 @@ test_102h() { # bug 15777
 run_test 102h "grow xattr from inside inode to external block"
 
 test_102ha() {
-       large_xattr_enabled || skip_env "large_xattr disabled"
+       large_xattr_enabled || skip_env "ea_inode feature disabled"
 
        grow_xattr $(max_xattr_size)
 }
@@ -8157,7 +8266,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)
@@ -8222,7 +8331,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
@@ -8241,7 +8350,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.
@@ -8267,7 +8376,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.
@@ -8302,7 +8411,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
@@ -8321,7 +8430,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"
@@ -8329,7 +8438,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"
@@ -8361,6 +8470,56 @@ test_102r() {
 }
 run_test 102r "set EAs with empty values"
 
+test_102s() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "MDS needs to be at least 2.11.52"
+
+       local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
+
+       save_lustre_params client "llite.*.xattr_cache" > $save
+
+       for cache in 0 1; do
+               lctl set_param llite.*.xattr_cache=$cache
+
+               rm -f $DIR/$tfile
+               touch $DIR/$tfile || error "touch"
+               for prefix in lustre security system trusted user; do
+                       # Note getxattr() may fail with 'Operation not
+                       # supported' or 'No such attribute' depending
+                       # on prefix and cache.
+                       getfattr -n $prefix.n102s $DIR/$tfile &&
+                               error "getxattr '$prefix.n102s' should fail (cache = $cache)"
+               done
+       done
+
+       restore_lustre_params < $save
+}
+run_test 102s "getting nonexistent xattrs should fail"
+
+test_102t() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "MDS needs to be at least 2.11.52"
+
+       local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
+
+       save_lustre_params client "llite.*.xattr_cache" > $save
+
+       for cache in 0 1; do
+               lctl set_param llite.*.xattr_cache=$cache
+
+               for buf_size in 0 256; do
+                       rm -f $DIR/$tfile
+                       touch $DIR/$tfile || error "touch"
+                       setfattr -n user.multiop $DIR/$tfile
+                       $MULTIOP $DIR/$tfile oa$buf_size ||
+                               error "cannot get zero length xattr value (buf_size = $buf_size)"
+               done
+       done
+
+       restore_lustre_params < $save
+}
+run_test 102t "zero length xattr values handled correctly"
+
 run_acl_subtest()
 {
     $LUSTRE/tests/acl/run $LUSTRE/tests/acl/$1.test
@@ -8399,9 +8558,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 ||
@@ -8425,7 +8584,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"
@@ -8445,6 +8604,7 @@ test_103a() {
 run_test 103a "acl test"
 
 test_103b() {
+       declare -a pids
        local U
 
        for U in {0..511}; do
@@ -8469,6 +8629,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
 }
@@ -8514,7 +8680,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
@@ -8799,7 +8964,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
@@ -8832,7 +8997,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
@@ -8867,12 +9032,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))
@@ -8935,7 +9100,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
@@ -9370,7 +9535,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)) ||
@@ -9395,7 +9560,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
@@ -10029,7 +10194,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
@@ -10068,38 +10233,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"
@@ -10153,9 +10324,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"
@@ -10226,20 +10397,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'
@@ -10277,9 +10448,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 ||
@@ -10336,8 +10507,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 ||
@@ -10401,12 +10572,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"
 
@@ -10461,8 +10632,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
@@ -10598,7 +10769,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
@@ -10629,7 +10799,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
        }
@@ -10657,6 +10827,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"
@@ -10675,15 +10847,48 @@ 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
        fi
+       rm -rf $DIR/${tdir}
+
+       # when DNE is enabled, MDT uses STATFS RPC to ping other targets
+       # so the check below is not reliable
+       [ $MDSCOUNT -eq 1 ] || return 0
+
+       # 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
 
-       rm -rf $DIR/${tdir}
+       # 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 =================================="
 
@@ -10697,7 +10902,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
@@ -10865,7 +11070,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
@@ -10904,6 +11109,18 @@ run_test 133e "Verifying OST {read,write}_bytes nid stats ================="
 
 proc_regexp="/{proc,sys}/{fs,sys,kernel/debug}/{lustre,lnet}/"
 
+# Some versions of find (4.5.11, 4.5.14) included in CentOS 7.3-7.5 do
+# not honor the -ignore_readdir_race option correctly. So we call
+# error_ignore() rather than error() in these cases. See LU-11152.
+error_133() {
+       if (find --version; do_facet mds1 find --version) |
+               grep -q '\b4\.5\.1[1-4]\b'; then
+               error_ignore LU-11152 "$@"
+       else
+               error "$@"
+       fi
+}
+
 test_133f() {
        # First without trusting modes.
        local proc_dirs=$(eval \ls -d $proc_regexp 2>/dev/null)
@@ -10912,7 +11129,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 \
@@ -10921,7 +11138,7 @@ test_133f() {
                -not -name force_lbug \
                -not -name changelog_mask \
                -exec badarea_io '{}' \; ||
-                       error "find $proc_dirs failed"
+                       error_133 "find $proc_dirs failed"
 }
 run_test 133f "Check reads/writes of client lustre proc files with bad area io"
 
@@ -10955,7 +11172,7 @@ test_133g() {
                        -not -name force_lbug \
                        -not -name changelog_mask \
                        -exec badarea_io '{}' \\\; ||
-                               error "$facet find $facet_proc_dirs failed"
+                               error_133 "$facet find $facet_proc_dirs failed"
        done
 
        # remount the FS in case writes/reads /proc break the FS
@@ -10968,7 +11185,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
@@ -10996,7 +11213,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"
@@ -11032,7 +11249,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"
@@ -11156,7 +11373,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 |
@@ -11379,7 +11596,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
@@ -11400,7 +11617,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 ||
@@ -11418,7 +11635,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
@@ -11436,7 +11653,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"
@@ -11461,7 +11678,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"
 
@@ -11492,7 +11709,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
@@ -11516,7 +11733,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
@@ -11545,7 +11762,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
@@ -11579,7 +11796,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
@@ -11670,8 +11887,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
@@ -11722,7 +11939,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"
@@ -11738,8 +11955,7 @@ test_155_big_load() {
 save_writethrough() {
        local facets=$(get_facets OST)
 
-       save_lustre_params $facets "obdfilter.*.writethrough_cache_enable" > $1
-       save_lustre_params $facets "osd-*.*.writethrough_cache_enable" >> $1
+       save_lustre_params $facets "osd-*.*.writethrough_cache_enable" > $1
 }
 
 test_155a() {
@@ -11865,8 +12081,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
@@ -12011,7 +12228,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"
@@ -12131,7 +12348,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"
@@ -12157,14 +12374,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"
 
@@ -12185,7 +12401,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
@@ -12232,8 +12448,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))
 
@@ -12346,7 +12562,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))
@@ -12373,7 +12589,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
@@ -12460,8 +12679,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))
 
@@ -12774,7 +12993,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
@@ -12847,6 +13066,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
@@ -12976,7 +13196,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
@@ -13208,7 +13428,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 &&
@@ -13280,7 +13500,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"
@@ -13313,18 +13533,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"
 
@@ -13346,12 +13566,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"
@@ -13449,7 +13669,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)" ] &&
@@ -13484,9 +13704,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"
@@ -13523,7 +13757,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
@@ -13544,7 +13778,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
@@ -13630,7 +13864,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);;
@@ -13648,7 +13882,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
@@ -13658,7 +13892,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
@@ -13667,7 +13901,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
@@ -13676,7 +13910,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
@@ -13685,7 +13919,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
@@ -13695,7 +13929,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
@@ -13704,7 +13938,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
@@ -13713,7 +13947,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
@@ -13792,13 +14026,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"
@@ -13809,9 +14043,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 \
@@ -13843,7 +14081,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"
@@ -13872,7 +14110,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 ] ||
@@ -13899,7 +14137,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
@@ -13948,7 +14186,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"
@@ -14306,7 +14544,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)"
@@ -14443,29 +14681,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
@@ -14479,7 +14714,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)
@@ -14503,7 +14738,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"
@@ -14613,8 +14848,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
@@ -14655,8 +14889,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
@@ -14705,8 +14938,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
@@ -14751,7 +14983,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
@@ -14760,12 +14992,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"
 
@@ -14783,6 +15016,8 @@ 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"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        local MDTIDX=1
 
@@ -14809,6 +15044,8 @@ 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"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        local MDTIDX=1
        local mdt_index
@@ -14839,8 +15076,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
@@ -14972,11 +15209,14 @@ test_230b() {
 run_test 230b "migrate directory"
 
 test_230c() {
-       [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
+       [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
        remote_mds_nodsh && skip "remote MDS with nodsh"
+       [ $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
@@ -14985,35 +15225,59 @@ 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"
 
-       #failed after migrating 5 entries
+       # 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=0x20001801
-       do_facet mds1 lctl  set_param fail_val=5
+       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 after 5 entries"
-
-       mkdir $migrate_dir/dir &&
-               error "mkdir succeeds under migrating directory"
-       touch $migrate_dir/file &&
-               error "touch file succeeds under migrating directory"
-
+               error "migrate should fail"
        local u=$(ls $migrate_dir | wc -l)
        [ "$u" == "$t" ] || error "$u != $t during migration"
 
-       for file in $(find $migrate_dir); do
-               stat $file || error "stat $file failed"
+       # add new dir/file should succeed
+       mkdir $migrate_dir/dir ||
+               error "mkdir failed under migrating directory"
+       touch $migrate_dir/file ||
+               error "create file failed under migrating directory"
+
+       # 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
 
-       do_facet mds1 lctl set_param fail_loc=0
-       do_facet mds1 lctl set_param fail_val=0
+       # resume migration with different options should fail
+       $LFS migrate -m 0 $migrate_dir &&
+               error "migrate -m 0 $migrate_dir should fail"
+
+       $LFS migrate -m $MDTIDX -c 2 $migrate_dir &&
+               error "migrate -c 2 $migrate_dir should fail"
 
+       # resume migration should succeed
        $LFS migrate -m $MDTIDX $migrate_dir ||
-               error "migrate open files should failed with open files"
+               error "migrate $migrate_dir failed"
 
        echo "Finish migration, then checking.."
        for file in $(find $migrate_dir); do
@@ -15024,20 +15288,37 @@ test_230c() {
 
        rm -rf $DIR/$tdir || error "rm dir failed after migration"
 }
-run_test 230c "check directory accessiblity if migration is failed"
+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"
+       [ $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 MDTIDX=1
-       local mdt_index
        local migrate_dir=$DIR/$tdir/migrate_dir
+       local old_index
+       local new_index
+       local old_count
+       local new_count
+       local new_hash
+       local mdt_index
        local i
        local j
 
+       old_index=$((RANDOM % MDSCOUNT))
+       old_count=$((MDSCOUNT - old_index))
+       new_index=$((RANDOM % MDSCOUNT))
+       new_count=$((MDSCOUNT - new_index))
+       new_hash="all_char"
+
+       [ $old_count -gt 1 ] && old_count=$((old_count - RANDOM % old_count))
+       [ $new_count -gt 1 ] && new_count=$((new_count - RANDOM % new_count))
+
        test_mkdir $DIR/$tdir
-       test_mkdir -i0 -c1 $migrate_dir
+       test_mkdir -i $old_index -c $old_count $migrate_dir
 
        for ((i=0; i<100; i++)); do
                test_mkdir -i0 -c1 $migrate_dir/dir_${i}
@@ -15045,14 +15326,23 @@ test_230d() {
                        error "create files under remote dir failed $i"
        done
 
-       $LFS migrate -m $MDTIDX $migrate_dir ||
+       echo -n "Migrate from MDT$old_index "
+       [ $old_count -gt 1 ] && echo -n "... MDT$((old_index + old_count - 1)) "
+       echo -n "to MDT$new_index"
+       [ $new_count -gt 1 ] && echo -n " ... MDT$((new_index + new_count - 1))"
+       echo
+
+       echo "$LFS migrate -m$new_index -c$new_count -H $new_hash $migrate_dir"
+       $LFS migrate -m $new_index -c $new_count -H $new_hash $migrate_dir ||
                error "migrate remote dir error"
 
        echo "Finish migration, then checking.."
        for file in $(find $migrate_dir); do
                mdt_index=$($LFS getstripe -m $file)
-               [ $mdt_index == $MDTIDX ] ||
-                       error "$file is not on MDT${MDTIDX}"
+               if [ $mdt_index -lt $new_index ] ||
+                  [ $mdt_index -gt $((new_index + new_count - 1)) ]; then
+                       error "$file is on MDT$mdt_index"
+               fi
        done
 
        rm -rf $DIR/$tdir || error "rm dir failed after migration"
@@ -15062,6 +15352,8 @@ run_test 230d "check migrate big directory"
 test_230e() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        local i
        local j
@@ -15108,6 +15400,8 @@ run_test 230e "migrate mulitple local link files"
 test_230f() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        local a_fid
        local ln_fid
@@ -15157,6 +15451,8 @@ run_test 230f "migrate mulitple remote link files"
 test_230g() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        mkdir -p $DIR/$tdir/migrate_dir
 
@@ -15169,8 +15465,8 @@ 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.7.64) ] &&
-               skip "Need MDS version at least 2.7.64"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        local mdt_index
 
@@ -15182,21 +15478,19 @@ test_230h() {
        $LFS migrate -m1 $DIR/$tdir/.. &&
                error "migrating mountpoint2 should fail"
 
-       $LFS migrate -m1 $DIR/$tdir/migrate_dir/.. ||
-               error "migrating $tdir fail"
-
-       mdt_index=$($LFS getstripe -m $DIR/$tdir)
-       [ $mdt_index == 1 ] || error "$mdt_index != 1 after migration"
-
-       mdt_index=$($LFS getstripe -m $DIR/$tdir/migrate_dir)
-       [ $mdt_index == 1 ] || error "$mdt_index != 1 after migration"
+       # same as mv
+       $LFS migrate -m1 $DIR/$tdir/migrate_dir/.. &&
+               error "migrating $tdir/migrate_dir/.. should fail"
 
+       true
 }
 run_test 230h "migrate .. and root"
 
 test_230i() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
 
        mkdir -p $DIR/$tdir/migrate_dir
 
@@ -15208,12 +15502,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)
 
@@ -15286,7 +15659,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
@@ -15310,7 +15683,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"
 
@@ -15322,7 +15695,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"
 
@@ -15358,7 +15731,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
@@ -15384,9 +15757,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"
@@ -15403,25 +15776,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
@@ -15440,7 +15799,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))
@@ -15448,7 +15807,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)
@@ -15504,36 +15863,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"
@@ -15597,7 +15968,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
@@ -15756,11 +16127,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"
@@ -15768,10 +16139,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"
@@ -15782,7 +16153,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
@@ -15801,8 +16172,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
 
@@ -15915,7 +16285,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
@@ -16117,7 +16487,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
 
@@ -16128,7 +16498,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"
 
@@ -16215,7 +16585,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"
 
@@ -16228,7 +16598,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
@@ -16240,6 +16610,9 @@ test_255b() {
        dd if=/dev/zero of=$DIR/$tfile bs=1048576 count=$size_mb ||
                error "dd to $DIR/$tfile failed"
 
+       #force write to complete before dropping OST cache & checking memory
+       sync
+
        local total=$(facet_meminfo ost1 MemTotal)
        echo "Total memory: $total KiB"
 
@@ -16275,7 +16648,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
@@ -16285,7 +16658,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
@@ -16325,7 +16698,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=$?
@@ -16334,7 +16707,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
@@ -16361,8 +16734,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"
 
@@ -16416,7 +16788,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
@@ -16434,6 +16806,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"
 
@@ -16475,8 +16848,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
 
@@ -16519,8 +16891,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
@@ -16529,14 +16901,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"
@@ -16548,46 +16919,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
@@ -16595,29 +16981,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
@@ -16642,7 +17031,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
@@ -16650,7 +17039,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"
@@ -16671,7 +17060,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
@@ -16693,7 +17082,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
@@ -16734,7 +17123,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
@@ -16816,7 +17205,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
@@ -16828,16 +17217,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
@@ -16852,15 +17240,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
@@ -16876,18 +17263,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
@@ -16904,9 +17302,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"
@@ -16917,9 +17314,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 ] ||
@@ -16929,19 +17324,322 @@ test_271c() {
 }
 run_test 271c "DoM: IO lock at open saves enqueue RPCs"
 
-test_275() {
-       remote_ost_nodsh && skip "remote OST with nodsh"
-       [ $(lustre_version_code ost1) -lt $(version_code 2.10.57) ] &&
-               skip "Need OST version >= 2.10.57"
+cleanup_271def_tests() {
+       trap 0
+       rm -f $1
+}
 
-       local file=$DIR/$tfile
-       local oss
+test_271d() {
+       [ $MDS1_VERSION -lt $(version_code 2.10.57) ] &&
+               skip "Need MDS version at least 2.10.57"
 
-       oss=$(comma_list $(osts_nodes))
+       local dom=$DIR/$tdir/dom
+       local tmp=$TMP/$tfile
+       trap "cleanup_271def_tests $tmp" EXIT
 
-       dd if=/dev/urandom of=$file bs=1M count=2 ||
-               error "failed to create a file"
-       cancel_lru_locks osc
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+       local mdtidx=$($LFS getstripe -M $DIR/$tdir)
+
+       cancel_lru_locks mdc
+       dd if=/dev/urandom of=$tmp bs=1000 count=1
+       dd if=$tmp of=$dom bs=1000 count=1
+       cancel_lru_locks mdc
+
+       cat /etc/hosts >> $tmp
+       lctl set_param -n mdc.*.stats=clear
+
+       # append data to the same file it should update local page
+       echo "Append to the same page"
+       cat /etc/hosts >> $dom
+       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"
+       echo "... DONE"
+
+       # compare content
+       cmp $tmp $dom || error "file miscompare"
+
+       cancel_lru_locks mdc
+       lctl set_param -n mdc.*.stats=clear
+
+       echo "Open and read file"
+       cat $dom > /dev/null
+       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"
+       echo "... DONE"
+
+       # compare content
+       cmp $tmp $dom || error "file miscompare"
+
+       return 0
+}
+run_test 271d "DoM: read on open (1K file in reply buffer)"
+
+test_271e() {
+       [ $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
+       trap "cleanup_271def_tests $tmp" EXIT
+
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+       local mdtidx=$($LFS getstripe -M $DIR/$tdir)
+
+       cancel_lru_locks mdc
+       dd if=/dev/urandom of=$tmp bs=30K count=1
+       dd if=$tmp of=$dom bs=30K count=1
+       cancel_lru_locks mdc
+       cat /etc/hosts >> $tmp
+       lctl set_param -n mdc.*.stats=clear
+
+       echo "Append to the same page"
+       cat /etc/hosts >> $dom
+
+       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
+       echo "... DONE with $((ra - rw)) resends"
+
+       # compare content
+       cmp $tmp $dom || error "file miscompare"
+
+       cancel_lru_locks mdc
+       lctl set_param -n mdc.*.stats=clear
+
+       echo "Open and read file"
+       cat $dom > /dev/null
+       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
+       echo "... DONE with $((ra - rw)) resends"
+
+       # compare content
+       cmp $tmp $dom || error "file miscompare"
+
+       return 0
+}
+run_test 271e "DoM: read on open (30K file with reply buffer adjusting)"
+
+test_271f() {
+       [ $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
+       trap "cleanup_271def_tests $tmp" EXIT
+
+       mkdir -p $DIR/$tdir
+
+       $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+       local mdtidx=$($LFS getstripe -M $DIR/$tdir)
+
+       cancel_lru_locks mdc
+       dd if=/dev/urandom of=$tmp bs=200000 count=1
+       dd if=$tmp of=$dom bs=200000 count=1
+       cancel_lru_locks mdc
+       cat /etc/hosts >> $tmp
+       lctl set_param -n mdc.*.stats=clear
+
+       echo "Append to the same page"
+       cat /etc/hosts >> $dom
+       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"
+       echo "... DONE"
+
+       # compare content
+       cmp $tmp $dom || error "file miscompare"
+
+       cancel_lru_locks mdc
+       lctl set_param -n mdc.*.stats=clear
+
+       echo "Open and read file"
+       cat $dom > /dev/null
+       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"
+       echo "... DONE"
+
+       # compare content
+       cmp $tmp $dom || error "file miscompare"
+
+       return 0
+}
+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"
+       [ $OST1_VERSION -lt $(version_code 2.10.57) ] &&
+               skip "Need OST version >= 2.10.57"
+
+       local file=$DIR/$tfile
+       local oss
+
+       oss=$(comma_list $(osts_nodes))
+
+       dd if=/dev/urandom of=$file bs=1M count=2 ||
+               error "failed to create a file"
+       cancel_lru_locks osc
 
        #lock 1
        dd if=$file of=/dev/null bs=1M count=1 iflag=direct ||
@@ -17054,7 +17752,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"
@@ -17065,7 +17763,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"
@@ -17094,7 +17792,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"
@@ -17120,7 +17818,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"
@@ -17129,7 +17827,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 ||
@@ -17154,7 +17852,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"
@@ -17203,7 +17901,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
@@ -17292,7 +17990,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
@@ -17344,7 +18042,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
@@ -17375,7 +18073,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
@@ -17430,7 +18128,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
@@ -17457,9 +18155,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
 
@@ -17467,7 +18170,7 @@ test_300k() {
 
        #define OBD_FAIL_LARGE_STRIPE   0x1703
        $LCTL set_param fail_loc=0x1703
-       $LFS setdirstripe -i 0 -c512 $DIR/$tdir/striped_dir ||
+       $LFS setdirstripe -i 0 -c192 $DIR/$tdir/striped_dir ||
                error "set striped dir error"
        $LCTL set_param fail_loc=0
 
@@ -17483,7 +18186,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
@@ -17507,7 +18210,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
@@ -17549,7 +18252,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"
 
@@ -17592,7 +18295,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
@@ -17665,6 +18368,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"
@@ -17748,40 +18476,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
@@ -17834,13 +18561,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
@@ -17852,30 +18578,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
 
@@ -17886,8 +18613,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)
@@ -17903,12 +18630,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
@@ -17918,7 +18646,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
@@ -17930,8 +18658,9 @@ test_315() { # LU-618
        local file=$DIR/$tfile
        rm -f $file
 
-       $MULTIOP $file oO_CREAT:O_DIRECT:O_RDWR:w4096000c
-       $MULTIOP $file oO_RDONLY:r4096000_c &
+       $MULTIOP $file oO_CREAT:O_DIRECT:O_RDWR:w4063232c ||
+               error "multiop file write failed"
+       $MULTIOP $file oO_RDONLY:r4063232_c &
        PID=$!
 
        sleep 2
@@ -17946,7 +18675,7 @@ run_test 315 "read should be accounted"
 
 test_316() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
-       large_xattr_enabled || skip_env "large_xattr disabled"
+       large_xattr_enabled || skip_env "ea_inode feature disabled"
 
        rm -rf $DIR/$tdir/d
        mkdir -p $DIR/$tdir/d
@@ -17958,6 +18687,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
 
@@ -18038,7 +18769,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 }')
@@ -18091,7 +18822,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
 
@@ -18111,12 +18842,12 @@ test_400a() { # LU-1606, was conf-sanity test_74
 
        if ! [[ -d $prefix ]]; then
                # Assume we're running in tree and fixup the include path.
-               extra_flags+=" -I$LUSTRE/include"
-               extra_flags+=" -L$LUSTRE/utils"
+               extra_flags+=" -I$LUSTRE/../lnet/include/uapi -I$LUSTRE/include/uapi -I$LUSTRE/include"
+               extra_flags+=" -L$LUSTRE/utils/.lib"
        fi
 
        for prog in $LUSTRE_TESTS_API_DIR/*.c; do
-               $CC -Wall -Werror $extra_flags -llustreapi -o $out $prog ||
+               $CC -Wall -Werror $extra_flags -o $out $prog -llustreapi ||
                        error "client api broken"
        done
        rm -f $out
@@ -18251,12 +18982,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"
 
@@ -18298,8 +19028,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"
 
@@ -18329,8 +19058,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
 
@@ -18345,7 +19075,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)
@@ -18415,7 +19145,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"
 
@@ -18437,7 +19167,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
@@ -18488,7 +19218,7 @@ 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
@@ -18533,9 +19263,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
@@ -18604,9 +19334,187 @@ test_414() {
 }
 run_test 414 "simulate ENOMEM in ptlrpc_register_bulk()"
 
+test_415() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run"
+       [ $(lustre_version_code mds1) -lt $(version_code 2.11.52) ] &&
+               skip "Need server version at least 2.11.52"
+
+       # LU-11102
+       local total
+       local setattr_pid
+       local start_time
+       local end_time
+       local duration
+
+       total=500
+       # this test may be slow on ZFS
+       [ "$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.
+       test_mkdir $DIR/$tdir || error "mkdir $tdir"
+       createmany -o $DIR/$tdir/$tfile. $total || error "createmany"
+
+       (
+               while true; do
+                       touch $DIR/$tdir
+               done
+       ) &
+       setattr_pid=$!
+
+       start_time=$(date +%s)
+       for i in $(seq $total); do
+               mrename $DIR/$tdir/$tfile.$i $DIR/$tdir/$tfile-new.$i \
+                       > /dev/null
+       done
+       end_time=$(date +%s)
+       duration=$((end_time - start_time))
+
+       kill -9 $setattr_pid
+
+       echo "rename $total files took $duration sec"
+       [ $duration -lt 100 ] || error "rename took $duration sec"
+}
+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 tries=100
+       local count=0
+       local passed=false
+
+       # blocks or inodes
+       [ "$1" == "blocks" ] && inodes= || inodes="-i"
+
+       while (( count < tries )); do
+               cancel_lru_locks
+               sync; sleep 0.2
+
+               # read the lines of interest
+               df_out=($(df $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
+               df_out=(${df_out[@]:1})
+               lfs_df_out=(${lfs_df_out[@]:1})
+
+               # compare the two outputs
+               passed=true
+
+               for i in {0..4}; do
+                       [ "${df_out[i]}" != "${lfs_df_out[i]}" ] && passed=false
+               done
+               $passed && break
+       done
+
+       $passed || error "df and lfs df $1 output mismatch: "   \
+                        "df ${inodes}: ${df_out[*]}, "         \
+                        "lfs df ${inodes}: ${lfs_df_out[*]}"
+}
+
+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
@@ -18617,7 +19525,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
@@ -18630,7 +19538,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
@@ -18819,7 +19727,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
@@ -18829,18 +19737,20 @@ 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"
+
        mkdir $DIR/$tdir || error "(1) fail to mkdir"
 
        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
@@ -18869,13 +19779,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
@@ -18887,11 +19828,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
@@ -18901,10 +19843,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
@@ -18913,20 +19856,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 ||
@@ -19012,11 +19954,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
@@ -19050,6 +19991,277 @@ test_805() {
 }
 run_test 805 "ZFS can remove from full fs"
 
+# Size-on-MDS test
+check_lsom_data()
+{
+       local file=$1
+       local size=$($LFS getsom -s $file)
+       local expect=$(stat -c %s $file)
+
+       [[ $size == $expect ]] ||
+               error "$file expected size: $expect, got: $size"
+
+       local blocks=$($LFS getsom -b $file)
+       expect=$(stat -c %b $file)
+       [[ $blocks == $expect ]] ||
+               error "$file expected blocks: $expect, got: $blocks"
+}
+
+check_lsom_size()
+{
+       local size=$($LFS getsom -s $1)
+       local expect=$2
+
+       [[ $size == $expect ]] ||
+               error "$file expected size: $expect, got: $size"
+}
+
+test_806() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.52) ] &&
+               skip "Need MDS version at least 2.11.52"
+
+       local bs=1048576
+
+       touch $DIR/$tfile || error "touch $tfile failed"
+
+       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; rm -f $save" EXIT
+
+       # single-threaded write
+       echo "Test SOM for single-threaded write"
+       dd if=/dev/zero of=$DIR/$tfile bs=$bs count=1 ||
+               error "write $tfile failed"
+       check_lsom_size $DIR/$tfile $bs
+
+       local num=32
+       local size=$(($num * $bs))
+       local offset=0
+       local i
+
+       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 &
+               local pids[$i]=$!
+               offset=$((offset + $bs))
+       done
+       for (( i=0; i < $num; i++ )); do
+               wait ${pids[$i]}
+       done
+       check_lsom_size $DIR/$tfile $size
+
+       $TRUNCATE $DIR/$tfile 0
+       for ((i = 0; i < $num; i++)); do
+               offset=$((offset - $bs))
+               $MULTIOP $DIR/$tfile Oz${offset}w${bs}c &
+               local pids[$i]=$!
+       done
+       for (( i=0; i < $num; i++ )); do
+               wait ${pids[$i]}
+       done
+       check_lsom_size $DIR/$tfile $size
+
+       # multi-client wirtes
+       num=$(get_node_count ${CLIENTS//,/ })
+       size=$(($num * $bs))
+       offset=0
+       i=0
+
+       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 &
+               local pids[$i]=$!
+               i=$((i + 1))
+               offset=$((offset + $bs))
+       done
+       for (( i=0; i < $num; i++ )); do
+               wait ${pids[$i]}
+       done
+       check_lsom_size $DIR/$tfile $offset
+
+       i=0
+       $TRUNCATE $DIR/$tfile 0
+       for client in ${CLIENTS//,/ }; do
+               offset=$((offset - $bs))
+               do_node $client $MULTIOP $DIR/$tfile Oz${offset}w${bs}c &
+               local pids[$i]=$!
+               i=$((i + 1))
+       done
+       for (( i=0; i < $num; i++ )); do
+               wait ${pids[$i]}
+       done
+       check_lsom_size $DIR/$tfile $size
+
+       # verify truncate
+       echo "Test SOM for truncate"
+       $TRUNCATE $DIR/$tfile 1048576
+       check_lsom_size $DIR/$tfile 1048576
+       $TRUNCATE $DIR/$tfile 1234
+       check_lsom_size $DIR/$tfile 1234
+
+       # verify SOM blocks count
+       echo "Verify SOM block count"
+       $TRUNCATE $DIR/$tfile 0
+       $MULTIOP $DIR/$tfile oO_TRUNC:O_RDWR:w1048576YSc ||
+               error "failed to write file $tfile"
+       check_lsom_data $DIR/$tfile
+}
+run_test 806 "Verify Lazy Size on MDS"
+
+test_807() {
+       [ -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"
+       local cl_user="${CL_USERS[$SINGLEMDS]%% *}"
+       changelog_users $SINGLEMDS | grep -q $cl_user ||
+               error "User $cl_user not found in changelog_users"
+
+       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; rm -f $save" EXIT
+
+       rm -rf $DIR/$tdir || error "rm $tdir failed"
+       mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+       touch $DIR/$tdir/trunc || error "touch $tdir/trunc failed"
+       $TRUNCATE $DIR/$tdir/trunc 1024 || error "truncate $tdir/trunc failed"
+       $TRUNCATE $DIR/$tdir/trunc 1048576 ||
+               error "truncate $tdir/trunc failed"
+
+       local bs=1048576
+       dd if=/dev/zero of=$DIR/$tdir/single_dd bs=$bs count=1 ||
+               error "write $tfile failed"
+
+       # multi-client wirtes
+       local num=$(get_node_count ${CLIENTS//,/ })
+       local offset=0
+       local i=0
+
+       echo "Test SOM for multi-client ($num) writes"
+       touch $DIR/$tfile || error "touch $tfile failed"
+       $TRUNCATE $DIR/$tfile 0
+       for client in ${CLIENTS//,/ }; do
+               do_node $client $MULTIOP $DIR/$tfile Oz${offset}w${bs}c &
+               local pids[$i]=$!
+               i=$((i + 1))
+               offset=$((offset + $bs))
+       done
+       for (( i=0; i < $num; i++ )); do
+               wait ${pids[$i]}
+       done
+
+       sleep 5
+       $LSOM_SYNC -u $cl_user -m $FSNAME-MDT0000 $MOUNT
+       check_lsom_data $DIR/$tdir/trunc
+       check_lsom_data $DIR/$tdir/single_dd
+       check_lsom_data $DIR/$tfile
+
+       rm -rf $DIR/$tdir
+       # Deregistration step
+       changelog_deregister || error "changelog_deregister failed"
+}
+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"
+
 #
 # tests that do cleanup/setup should be run at the end
 #