Whamcloud - gitweb
LU-743 conf-sanity: test_46a failure
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index f5aea1a..e9193ea 100644 (file)
@@ -16,6 +16,12 @@ ONLY=${ONLY:-"$*"}
 ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
+if [ "$FAILURE_MODE" = "HARD" ]; then
+       CONFIG_EXCEPTIONS="24a " && \
+       echo "Except the tests: $CONFIG_EXCEPTIONS for FAILURE_MODE=$FAILURE_MODE, bug 23573" && \
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT $CONFIG_EXCEPTIONS"
+fi
+
 SRCDIR=`dirname $0`
 PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
 
@@ -33,11 +39,26 @@ MDSSIZE=200000
 OSTSIZE=200000
 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
 
+if ! combined_mgs_mds; then
+    # bug number for skipped test:    23954
+    ALWAYS_EXCEPT="$ALWAYS_EXCEPT       24b"
+fi
+
 # STORED_MDSSIZE is used in test_18
 if [ -n "$MDSSIZE" ]; then
     STORED_MDSSIZE=$MDSSIZE
 fi
 
+# pass "-E lazy_itable_init" to mke2fs to speed up the formatting time
+for facet in MGS MDS OST; do
+    opts=${facet}_MKFS_OPTS
+    if [[ ${!opts} != *lazy_itable_init* ]]; then
+        eval SAVED_${facet}_MKFS_OPTS=\"${!opts}\"
+        eval ${facet}_MKFS_OPTS=\"${!opts} \
+--mkfsoptions='\\\"-E lazy_itable_init\\\"'\"
+    fi
+done
+
 init_logging
 
 #
@@ -60,14 +81,16 @@ writeconf1() {
        stop ${facet} -f
        rm -f ${facet}active
        # who knows if/where $TUNEFS is installed?  Better reformat if it fails...
-       do_facet ${facet} "$TUNEFS --writeconf $dev" ||
+       do_facet ${facet} "$TUNEFS --quiet --writeconf $dev" ||
                { echo "tunefs failed, reformatting instead" && reformat_and_config && return 1; }
        return 0
 }
 
 writeconf() {
-       # if writeconf failed, we reformatted
-       writeconf1 mds $MDSDEV || return 0
+       # we need ldiskfs
+       load_modules
+       # if writeconf fails anywhere, we reformat everything
+       writeconf1 mds `mdsdevname 1` || return 0
        writeconf1 ost1 `ostdevname 1` || return 0
        writeconf1 ost2 `ostdevname 2` || return 0
 }
@@ -92,7 +115,7 @@ reformat_and_config() {
 
 start_mgs () {
        echo "start mgs"
-       start mgs $MGSDEV $mgs_MOUNT_OPTS
+       start mgs $MGSDEV $MGS_MOUNT_OPTS
 }
 
 start_mds() {
@@ -117,6 +140,12 @@ stop_mds() {
        stop $SINGLEMDS -f  || return 97
 }
 
+stop_mgs() {
+       echo "stop mgs service on `facet_active_host mgs`"
+       # These tests all use non-failover stop
+       stop mgs -f  || return 97
+}
+
 start_ost() {
        echo "start ost1 service on `facet_active_host ost1`"
        start ost1 `ostdevname 1` $OST_MOUNT_OPTS $@ || return 95
@@ -146,12 +175,10 @@ mount_client() {
 }
 
 remount_client() {
-       local SAVEMOUNTOPT=$MOUNTOPT
-       MOUNTOPT="remount,$1"
+       local mountopt="-o remount,$1"
        local MOUNTPATH=$2
        echo "remount '$1' lustre on ${MOUNTPATH}....."
-       zconf_mount `hostname`  $MOUNTPATH  || return 96
-       MOUNTOPT=$SAVEMOUNTOPT
+       zconf_mount `hostname`  $MOUNTPATH "$mountopt"  || return 96
 }
 
 umount_client() {
@@ -173,6 +200,7 @@ setup() {
        start_mds || error "MDT start failed"
        start_ost || error "OST start failed"
        mount_client $MOUNT || error "client start failed"
+       client_up || error "client_up failed"
 }
 
 setup_noconfig() {
@@ -185,14 +213,20 @@ setup_noconfig() {
        mount_client $MOUNT
 }
 
+unload_modules_conf () {
+       if combined_mgs_mds || ! local_mode; then
+               unload_modules || return 1
+       fi
+}
+
 cleanup_nocli() {
        stop_ost || return 202
        stop_mds || return 201
-       unload_modules || return 203
+       unload_modules_conf || return 203
 }
 
 cleanup() {
-       umount_client $MOUNT || return 200
+       umount_client $MOUNT || return 200
        cleanup_nocli || return $?
 }
 
@@ -293,7 +327,7 @@ test_5a() { # was test_5
        # cleanup may return an error from the failed
        # disconnects; for now I'll consider this successful
        # if all the modules have unloaded.
-       umount -d $MOUNT &
+       umount -d $MOUNT &
        UMOUNT_PID=$!
        sleep 6
        echo "killing umount"
@@ -324,7 +358,7 @@ test_5a() { # was test_5
        while [ "$WAIT" -ne "$MAX_WAIT" ]; do
                sleep $sleep
                grep -q $MOUNT" " /etc/mtab || break
-               echo "Waiting /etc/mtab updated ... "
+               echo "Waiting /etc/mtab updated ... "
                WAIT=$(( WAIT + sleep))
        done
        [ "$WAIT" -eq "$MAX_WAIT" ] && error "/etc/mtab is not updated in $WAIT secs"
@@ -332,60 +366,132 @@ test_5a() {      # was test_5
 }
 run_test 5a "force cleanup mds, then cleanup"
 
+cleanup_5b () {
+       trap 0
+       start_mgs
+}
+
 test_5b() {
+       grep " $MOUNT " /etc/mtab && \
+               error false "unexpected entry in mtab before mount" && return 10
+
+       local rc=0
        start_ost
+       if ! combined_mgs_mds ; then
+               trap cleanup_5b EXIT ERR
+               start_mds
+               stop mgs
+       fi
+
        [ -d $MOUNT ] || mkdir -p $MOUNT
-       grep " $MOUNT " /etc/mtab && echo "test 5b: mtab before mount" && return 10
-       mount_client $MOUNT && return 1
-       grep " $MOUNT " /etc/mtab && echo "test 5b: mtab after failed mount" && return 11
+       mount_client $MOUNT && rc=1
+       grep " $MOUNT " /etc/mtab && \
+               error "$MOUNT entry in mtab after failed mount" && rc=11
        umount_client $MOUNT
        # stop_mds is a no-op here, and should not fail
-       cleanup_nocli || return $?
-       return 0
+       cleanup_nocli || rc=$?
+       if ! combined_mgs_mds ; then
+               cleanup_5b
+       fi
+       return $rc
 }
-run_test 5b "mds down, cleanup after failed mount (bug 2712) (should return errs)"
+run_test 5b "Try to start a client with no MGS (should return errs)"
 
 test_5c() {
+       grep " $MOUNT " /etc/mtab && \
+               error false "unexpected entry in mtab before mount" && return 10
+
+       local rc=0
        start_mds
        start_ost
        [ -d $MOUNT ] || mkdir -p $MOUNT
-       grep " $MOUNT " /etc/mtab && echo "test 5c: mtab before mount" && return 10
        local oldfs="${FSNAME}"
        FSNAME="wrong.${FSNAME}"
        mount_client $MOUNT || :
        FSNAME=${oldfs}
-       grep " $MOUNT " /etc/mtab && echo "test 5c: mtab after failed mount" && return 11
+       grep " $MOUNT " /etc/mtab && \
+               error "$MOUNT entry in mtab after failed mount" && rc=11
        umount_client $MOUNT
-       cleanup_nocli  || return $?
+       cleanup_nocli  || rc=$?
+       return $rc
 }
 run_test 5c "cleanup after failed mount (bug 2712) (should return errs)"
 
 test_5d() {
+       grep " $MOUNT " /etc/mtab && \
+               error false "unexpected entry in mtab before mount" && return 10
+
+       local rc=0
        start_ost
        start_mds
        stop_ost -f
-       grep " $MOUNT " /etc/mtab && echo "test 5d: mtab before mount" && return 10
-       mount_client $MOUNT || return 1
-       cleanup  || return $?
-       grep " $MOUNT " /etc/mtab && echo "test 5d: mtab after unmount" && return 11
-       return 0
+       mount_client $MOUNT || rc=1
+       cleanup  || rc=$?
+       grep " $MOUNT " /etc/mtab && \
+               error "$MOUNT entry in mtab after unmount" && rc=11
+       return $rc
 }
 run_test 5d "mount with ost down"
 
 test_5e() {
+       grep " $MOUNT " /etc/mtab && \
+               error false "unexpected entry in mtab before mount" && return 10
+
+       local rc=0
        start_mds
        start_ost
 
 #define OBD_FAIL_PTLRPC_DELAY_SEND       0x506
        do_facet client "lctl set_param fail_loc=0x80000506"
-       grep " $MOUNT " /etc/mtab && echo "test 5e: mtab before mount" && return 10
        mount_client $MOUNT || echo "mount failed (not fatal)"
-       cleanup  || return $?
-       grep " $MOUNT " /etc/mtab && echo "test 5e: mtab after unmount" && return 11
-       return 0
+       cleanup  || rc=$?
+       grep " $MOUNT " /etc/mtab && \
+               error "$MOUNT entry in mtab after unmount" && rc=11
+       return $rc
 }
 run_test 5e "delayed connect, don't crash (bug 10268)"
 
+test_5f() {
+       if combined_mgs_mds ; then
+               skip "combined mgs and mds"
+               return 0
+       fi
+
+       grep " $MOUNT " /etc/mtab && \
+               error false "unexpected entry in mtab before mount" && return 10
+
+       local rc=0
+       start_ost
+       [ -d $MOUNT ] || mkdir -p $MOUNT
+       mount_client $MOUNT &
+       local pid=$!
+       echo client_mount pid is $pid
+
+       sleep 5
+
+       if ! ps -f -p $pid >/dev/null; then
+               wait $pid
+               rc=$?
+               grep " $MOUNT " /etc/mtab && echo "test 5f: mtab after mount"
+               error "mount returns $rc, expected to hang"
+               rc=11
+               cleanup || rc=$?
+               return $rc
+       fi
+
+       # start mds
+       start_mds
+
+       # mount should succeed after start mds
+       wait $pid
+       rc=$?
+       [ $rc -eq 0 ] || error "mount returned $rc"
+       grep " $MOUNT " /etc/mtab && echo "test 5f: mtab after mount"
+       cleanup || return $?
+       return $rc
+}
+run_test 5f "mds down, cleanup after failed mount (bug 2712)"
+
 test_6() {
        setup
        manual_umount_client
@@ -437,6 +543,21 @@ test_9() {
 }
 run_test 9 "test ptldebug and subsystem for mkfs"
 
+is_blkdev () {
+        local facet=$1
+        local dev=$2
+        local size=${3:-""}
+
+        local rc=0
+        do_facet $facet "test -b $dev" || rc=1
+        if [[ "$size" ]]; then
+                local in=$(do_facet $facet "dd if=$dev of=/dev/null bs=1k count=1 skip=$size 2>&1" |\
+                        awk '($3 == "in") { print $1 }')
+                [[ $in  = "1+0" ]] || rc=1
+        fi
+        return $rc
+}
+
 #
 # Test 16 was to "verify that lustre will correct the mode of OBJECTS".
 # But with new MDS stack we don't care about the mode of local objects
@@ -444,21 +565,24 @@ run_test 9 "test ptldebug and subsystem for mkfs"
 #
 
 test_17() {
-        local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
+        setup
+        check_mount || return 41
+        cleanup || return $?
 
-        if [ ! -e "$MDSDEV" ]; then
-            echo "no $MDSDEV existing, so mount Lustre to create one"
-           setup
-            check_mount || return 41
-            cleanup || return $?
+        echo "Remove mds config log"
+        if ! combined_mgs_mds ; then
+                stop mgs
         fi
 
-        echo "Remove mds config log"
-        do_facet $SINGLEMDS "$DEBUGFS -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
+        do_facet mgs "$DEBUGFS -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MGSDEV || return \$?" || return $?
+
+        if ! combined_mgs_mds ; then
+                start_mgs
+        fi
 
         start_ost
-       start_mds && return 42
-       reformat_and_config
+        start_mds && return 42
+        reformat_and_config
 }
 run_test 17 "Verify failed mds_postsetup won't fail assertion (2936) (should return errs)"
 
@@ -480,17 +604,18 @@ test_18() {
                 log "use STORED_MDSSIZE=$STORED_MDSSIZE"
 
         # check if the block device is large enough
-        [ -z "$OK" -a -b $MDSDEV ] && \
-                [ "$(dd if=$MDSDEV of=/dev/null bs=1k count=1 skip=$MIN 2>&1 |
-                     awk '($3 == "in") { print $1 }')" = "1+0" ] && OK=1 && \
+        [ -z "$OK" ] && $(is_blkdev $SINGLEMDS $MDSDEV $MIN) && OK=1 &&
                 myMDSSIZE=$MIN && log "use device $MDSDEV with MIN=$MIN"
 
         # check if a loopback device has enough space for fs metadata (5%)
-        [ -z "$OK" ] && [ -f $MDSDEV -o ! -e $MDSDEV ] &&
-                SPACE=$(df -P $(dirname $MDSDEV) |
-                        awk '($1 != "Filesystem") {print $4}') &&
-                [ $SPACE -gt $((MIN / 20)) ] && OK=1 && myMDSSIZE=$MIN && \
+
+        if [ -z "$OK" ]; then
+                local SPACE=$(do_facet $SINGLEMDS "[ -f $MDSDEV -o ! -e $MDSDEV ] && df -P \\\$(dirname $MDSDEV)" |
+                        awk '($1 != "Filesystem") {print $4}')
+                ! [ -z "$SPACE" ]  &&  [ $SPACE -gt $((MIN / 20)) ] && \
+                        OK=1 && myMDSSIZE=$MIN && \
                         log "use file $MDSDEV with MIN=$MIN"
+        fi
 
         [ -z "$OK" ] && skip_env "$MDSDEV too small for ${MIN}kB MDS" && return
 
@@ -498,15 +623,21 @@ test_18() {
         echo "mount mds with large journal..."
         local OLD_MDS_MKFS_OPTS=$MDS_MKFS_OPTS
 
-        MDS_MKFS_OPTS="--mgs --mdt --fsname=$FSNAME --device-size=$myMDSSIZE --param sys.timeout=$TIMEOUT $MDSOPT"
+        local opts="--mdt --fsname=$FSNAME --device-size=$myMDSSIZE --param sys.timeout=$TIMEOUT $MDSOPT"
+
+        if combined_mgs_mds ; then
+            MDS_MKFS_OPTS="--mgs $opts"
+        else
+            MDS_MKFS_OPTS="--mgsnode=$MGSNID $opts"
+        fi
 
         reformat_and_config
         echo "mount lustre system..."
-       setup
+        setup
         check_mount || return 41
 
         echo "check journal size..."
-        local FOUNDSIZE=`do_facet mds "$DEBUGFS -c -R 'stat <8>' $MDSDEV" | awk '/Size: / { print $NF; exit;}'`
+        local FOUNDSIZE=$(do_facet $SINGLEMDS "$DEBUGFS -c -R 'stat <8>' $MDSDEV" | awk '/Size: / { print $NF; exit;}')
         if [ $FOUNDSIZE -gt $((32 * 1024 * 1024)) ]; then
                 log "Success: mkfs creates large journals. Size: $((FOUNDSIZE >> 20))M"
         else
@@ -584,6 +715,30 @@ test_21c() {
 }
 run_test 21c "start mds between two osts, stop mds last"
 
+test_21d() {
+        if combined_mgs_mds ; then
+                skip "need separate mgs device" && return 0
+        fi
+        stopall
+
+        reformat
+
+        start_mgs
+        start_ost
+        start_ost2
+        start_mds
+        wait_osc_import_state mds ost2 FULL
+
+        stop_ost
+        stop_ost2
+        stop_mds
+        stop_mgs
+        #writeconf to remove all ost2 traces for subsequent tests
+        writeconf
+        start_mgs
+}
+run_test 21d "start mgs then ost and then mds"
+
 test_22() {
        start_mds
 
@@ -610,6 +765,8 @@ test_22() {
                sleep $((TIMEOUT + TIMEOUT + TIMEOUT))
        fi
        mount_client $MOUNT
+        wait_osc_import_state mds ost FULL
+        wait_osc_import_state client ost FULL
        check_mount || return 41
        pass
 
@@ -623,10 +780,10 @@ test_23a() {      # was test_23
        stop $SINGLEMDS
        # force down client so that recovering mds waits for reconnect
        local running=$(grep -c $MOUNT /proc/mounts) || true
-       if [ $running -ne 0 ]; then
-               echo "Stopping client $MOUNT (opts: -f)"
-               umount -f $MOUNT
-       fi
+       if [ $running -ne 0 ]; then
+               echo "Stopping client $MOUNT (opts: -f)"
+               umount -f $MOUNT
+       fi
 
        # enter recovery on mds
        start_mds
@@ -638,10 +795,12 @@ test_23a() {      # was test_23
        echo mount pid is ${MOUNT_PID}, mount.lustre pid is ${MOUNT_LUSTRE_PID}
        ps --ppid $MOUNT_PID
        ps --ppid $MOUNT_LUSTRE_PID
-       # FIXME why o why can't I kill these? Manual "ctrl-c" works...
-       kill -TERM $MOUNT_LUSTRE_PID
        echo "waiting for mount to finish"
        ps -ef | grep mount
+       # "ctrl-c" sends SIGINT but it usually (in script) does not work on child process
+       # SIGTERM works but it does not spread to offspring processses
+       kill -s TERM $MOUNT_PID
+       kill -s TERM $MOUNT_LUSTRE_PID
        # we can not wait $MOUNT_PID because it is not a child of this shell
        local PID1
        local PID2
@@ -695,18 +854,15 @@ cleanup_24a() {
 }
 
 test_24a() {
-       #set up fs1
-       gen_config
-
-       #set up fs2
        local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
 
-       [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST
        if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ]; then
-               do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+               is_blkdev $SINGLEMDS $MDSDEV && \
                skip_env "mixed loopback and real device not working" && return
        fi
 
+       [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST
+
        local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
        local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
 
@@ -737,7 +893,7 @@ test_24a() {
        facet_failover fs2mds
        facet_failover fs2ost
        df
-       umount_client $MOUNT
+       umount_client $MOUNT
        # the MDS must remain up until last MDT
        stop_mds
        MDS=$(do_facet $SINGLEMDS "lctl get_param -n devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1)
@@ -751,7 +907,9 @@ test_24b() {
        local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
 
        if [ -z "$fs2mds_DEV" ]; then
-               do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+               local dev=${SINGLEMDS}_dev
+               local MDSDEV=${!dev}
+               is_blkdev $SINGLEMDS $MDSDEV && \
                skip_env "mixed loopback and real device not working" && return
        fi
 
@@ -781,9 +939,9 @@ test_26() {
     do_facet $SINGLEMDS "lctl set_param fail_loc=0x80000135"
     start_mds && echo MDS started && return 1
     lctl get_param -n devices
-    DEVS=$(lctl get_param -n devices | wc -l)
+    DEVS=$(lctl get_param -n devices | egrep -v MG | wc -l)
     [ $DEVS -gt 0 ] && return 2
-    unload_modules || return 203
+    unload_modules_conf || return $?
 }
 run_test 26 "MDT startup failure cleans LOV (should return errs)"
 
@@ -827,16 +985,16 @@ test_27b() {
 }
 run_test 27b "Reacquire MGS lock after failover"
 
-test_28a() {
+test_28() {
         setup
        TEST="lctl get_param -n llite.$FSNAME-*.max_read_ahead_whole_mb"
-       PARAM="llite.$FSNAME.max_read_ahead_whole_mb"
+       PARAM="$FSNAME.llite.max_read_ahead_whole_mb"
        ORIG=$($TEST)
        FINAL=$(($ORIG + 1))
        set_and_check client "$TEST" "$PARAM" $FINAL || return 3
        FINAL=$(($FINAL + 1))
        set_and_check client "$TEST" "$PARAM" $FINAL || return 4
-       umount_client $MOUNT || return 200
+       umount_client $MOUNT || return 200
        mount_client $MOUNT
        RESULT=$($TEST)
        if [ $RESULT -ne $FINAL ]; then
@@ -848,58 +1006,22 @@ test_28a() {
        set_and_check client "$TEST" "$PARAM" $ORIG || return 5
        cleanup
 }
-run_test 28a "permanent parameter setting"
-
-check_28b() {
-       local NODE=$1
-       shift
-       set_and_check $NODE "$LCTL get_param -n $1*.$2 | head -1" "$1.$2" "$3" || \
-               error "conf_param $1.$2 failed"
-}
-
-test_28b() {
-       setup > /dev/null
-       # should error
-       do_facet mgs "$LCTL conf_param foo=1 2>/dev/null" && \
-               error "Bad format should fail"
-       do_facet mgs "$LCTL conf_param osc.notanfs-OST0000.active=0 2>/dev/null" && \
-               error "Setting on unknown fs should fail"
-       do_facet mgs "$LCTL conf_param osc.$FSNAME-OST00000.active=0 2>/dev/null" && \
-               error "Bad target name should fail"
-       # should succeed
-       check_28b mds mdt.$FSNAME-MDT0000 capa_timeout 1500
-       check_28b mds mdt.$FSNAME-MDT* identity_expire 150
-       check_28b mds mdd.$FSNAME-MDT0000 atime_diff 15
-       check_28b mds mdd.$FSNAME-MDT* sync_permission 0
-       check_28b ost1 obdfilter.$FSNAME-OST0000 client_cache_seconds 15
-       check_28b ost1 obdfilter.$FSNAME-OST* client_cache_count 15
-       check_28b mds lov.$FSNAME-MDT0000 qos_maxage "15 Sec"
-       check_28b mds lov.$FSNAME-MDT0000 qos_prio_free "15%"
-       check_28b client mdc.$FSNAME-MDT0000 max_rpcs_in_flight 15
-       check_28b client osc.$FSNAME-OST0000 active 0
-       check_28b client osc.$FSNAME-OST0000 active 1
-       check_28b client osc.$FSNAME-OST0000 max_dirty_mb 15
-       check_28b client llite.$FSNAME max_read_ahead_mb 15
-       set_and_check client "$LCTL get_param -n at_max" "sys.$FSNAME.at_max" 1500 || \
-               error "conf_param sys.fsname.at_max failed"
-       cleanup > /dev/null
-}
-run_test 28b "permanent parameter setting, set_param syntax"
+run_test 28 "permanent parameter setting"
 
 test_29() {
        [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2, skipping" && return
-       setup > /dev/null 2>&1
+        setup > /dev/null 2>&1
        start_ost2
        sleep 10
 
-       local PARAM="osc.$FSNAME-OST0001.active"
-       local PROC_ACT="osc.$FSNAME-OST0001-osc-[^M]*.active"
-       local PROC_UUID="osc.$FSNAME-OST0001-osc-[^M]*.ost_server_uuid"
+       local PARAM="$FSNAME-OST0001.osc.active"
+        local PROC_ACT="osc.$FSNAME-OST0001-osc-[^M]*.active"
+        local PROC_UUID="osc.$FSNAME-OST0001-osc-[^M]*.ost_server_uuid"
 
-       ACTV=$(lctl get_param -n $PROC_ACT)
+        ACTV=$(lctl get_param -n $PROC_ACT)
        DEAC=$((1 - $ACTV))
        set_and_check client "lctl get_param -n $PROC_ACT" "$PARAM" $DEAC || return 2
-       # also check ost_server_uuid status
+        # also check ost_server_uuid status
        RESULT=$(lctl get_param -n $PROC_UUID | grep DEACTIV)
        if [ -z "$RESULT" ]; then
            echo "Live client not deactivated: $(lctl get_param -n $PROC_UUID)"
@@ -930,8 +1052,11 @@ test_29() {
            echo "Waiting $(($MAX - $WAIT)) secs for MDT deactivated"
        done
 
+        # quotacheck should not fail immediately after deactivate
+       [ -n "$ENABLE_QUOTA" ] && { $LFS quotacheck -ug $MOUNT || error "quotacheck has failed" ; }
+
         # test new client starts deactivated
-       umount_client $MOUNT || return 200
+       umount_client $MOUNT || return 200
        mount_client $MOUNT
        RESULT=$(lctl get_param -n $PROC_UUID | grep DEACTIV | grep NEW)
        if [ -z "$RESULT" ]; then
@@ -941,10 +1066,13 @@ test_29() {
            echo "New client success: got $RESULT"
        fi
 
+        # quotacheck should not fail after umount/mount operation
+       [ -n "$ENABLE_QUOTA" ] && { $LFS quotacheck -ug $MOUNT || error "quotacheck has failed" ; }
+
        # make sure it reactivates
        set_and_check client "lctl get_param -n $PROC_ACT" "$PARAM" $ACTV || return 6
 
-       umount_client $MOUNT
+       umount_client $MOUNT
        stop_ost2
        cleanup_nocli
        #writeconf to remove all ost2 traces for subsequent tests
@@ -960,16 +1088,16 @@ test_30a() {
        ORIG=$($TEST)
        LIST=(1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5)
        for i in ${LIST[@]}; do
-           set_and_check client "$TEST" "llite.$FSNAME.max_read_ahead_whole_mb" $i || return 3
+           set_and_check client "$TEST" "$FSNAME.llite.max_read_ahead_whole_mb" $i || return 3
        done
        # make sure client restart still works
-       umount_client $MOUNT
+       umount_client $MOUNT
        mount_client $MOUNT || return 4
        [ "$($TEST)" -ne "$i" ] && error "Param didn't stick across restart $($TEST) != $i"
        pass
 
        echo Erase parameter setting
-       do_facet mgs "$LCTL conf_param -d llite.$FSNAME.max_read_ahead_whole_mb" || return 6
+       do_facet mgs "$LCTL conf_param -d $FSNAME.llite.max_read_ahead_whole_mb" || return 6
        umount_client $MOUNT
        mount_client $MOUNT || return 6
        FINAL=$($TEST)
@@ -994,13 +1122,13 @@ test_30b() {
        echo "Using fake nid $NEW"
 
        TEST="$LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids | sed -n 's/.*\($NEW\).*/\1/p'"
-       set_and_check client "$TEST" "osc.$FSNAME-OST0000.failover.node" $NEW || error "didn't add failover nid $NEW"
+       set_and_check client "$TEST" "$FSNAME-OST0000.failover.node" $NEW || error "didn't add failover nid $NEW"
        NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids)
        echo $NIDS
        NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 1))
        echo "should have 2 failover nids: $NIDCOUNT"
        [ $NIDCOUNT -eq 2 ] || error "Failover nid not added"
-       do_facet mgs "$LCTL conf_param -d osc.$FSNAME-OST0000.failover.node" || error "conf_param delete failed"
+       do_facet mgs "$LCTL conf_param -d $FSNAME-OST0000.failover.node" || error "conf_param delete failed"
        umount_client $MOUNT
        mount_client $MOUNT || return 3
 
@@ -1061,7 +1189,8 @@ cleanup_32() {
        umount -f $MOUNT || true
        echo "Cleanup local mds ost1 ..."
        cleanup_nocli32
-       unload_modules
+       combined_mgs_mds || start_mgs
+       unload_modules_conf
 }
 
 test_32a() {
@@ -1081,6 +1210,8 @@ test_32a() {
 
        $TUNEFS $tmpdir/mds || error "tunefs failed"
 
+       combined_mgs_mds || stop mgs
+
        # nids are wrong, so client wont work, but server should start
        start32 mds1 $tmpdir/mds "-o loop,exclude=lustre-OST0000" && \
                trap cleanup_32 EXIT INT || return 3
@@ -1117,6 +1248,9 @@ test_32a() {
        # mount a second time to make sure we didnt leave upgrade flag on
        load_modules
        $TUNEFS --dryrun $tmpdir/mds || error "tunefs failed"
+
+       combined_mgs_mds || stop mgs
+
        start32 mds1 $tmpdir/mds "-o loop,exclude=lustre-OST0000" && \
                trap cleanup_32 EXIT INT || return 12
 
@@ -1144,6 +1278,8 @@ test_32b() {
 
        # writeconf will cause servers to register with their current nids
        $TUNEFS --writeconf --fsname=$NEWNAME $tmpdir/mds || error "tunefs failed"
+       combined_mgs_mds || stop mgs
+
        start32 mds1 $tmpdir/mds "-o loop" && \
                trap cleanup_32 EXIT INT || return 3
 
@@ -1205,10 +1341,14 @@ test_33a() { # bug 12333, was test_33
         [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST
 
         if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ]; then
-                do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+                local dev=${SINGLEMDS}_dev
+                local MDSDEV=${!dev}
+                is_blkdev $SINGLEMDS $MDSDEV && \
                 skip_env "mixed loopback and real device not working" && return
         fi
 
+        combined_mgs_mds || mkfs_opts="$mkfs_opts --nomgs"
+
         local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
         local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
         add fs2mds $MDS_MKFS_OPTS --mkfsoptions='\"-J size=8\"' --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
@@ -1216,7 +1356,7 @@ test_33a() { # bug 12333, was test_33
 
         start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT
         start fs2ost $fs2ostdev $OST_MOUNT_OPTS
-        do_facet mgs "$LCTL conf_param sys.$FSNAME2.timeout=200" || rc=1
+        do_facet $SINGLEMDS "$LCTL conf_param $FSNAME2.sys.timeout=200" || rc=1
         mkdir -p $MOUNT2
         mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || rc=2
         echo "ok."
@@ -1258,7 +1398,7 @@ test_34a() {
        sleep 1
         cleanup
 }
-run_test 34a "umount with opened file should fail"
+run_test 34a "umount with opened file should be fail"
 
 
 test_34b() {
@@ -1266,7 +1406,7 @@ test_34b() {
        touch $DIR/$tfile || return 1
        stop_mds --force || return 2
 
-       manual_umount_client --force
+       manual_umount_client --force
        rc=$?
        if [ $rc -ne 0 ]; then
                error "mtab after failed umount - rc $rc"
@@ -1282,7 +1422,7 @@ test_34c() {
        touch $DIR/$tfile || return 1
        stop_ost --force || return 2
 
-       manual_umount_client --force
+       manual_umount_client --force
        rc=$?
        if [ $rc -ne 0 ]; then
                error "mtab after failed umount - rc $rc"
@@ -1302,7 +1442,7 @@ test_35a() { # bug 12459
        log "Set up a fake failnode for the MDS"
        FAKENID="127.0.0.2"
        local device=$(do_facet $SINGLEMDS "lctl get_param -n devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1)
-       do_facet $SINGLEMDS $LCTL conf_param mdc.${device}.failover.node=$FAKENID || return 4
+       do_facet $SINGLEMDS $LCTL conf_param ${device}.failover.node=$FAKENID || return 4
 
        log "Wait for RECONNECT_INTERVAL seconds (10s)"
        sleep 10
@@ -1354,13 +1494,13 @@ test_35b() { # bug 18674
 
        log "Set up a fake failnode for the MDS"
        FAKENID="127.0.0.2"
-       local device=$(do_facet mds "$LCTL get_param -n devices" | \
+       local device=$(do_facet $SINGLEMDS "$LCTL get_param -n devices" | \
                        awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1)
-       do_facet mds "$LCTL conf_param mdc.${device}.failover.node=$FAKENID" || \
+       do_facet $SINGLEMDS "$LCTL conf_param ${device}.failover.node=$FAKENID" || \
                return 1
 
        local at_max_saved=0
-       # adaptive timeouts may prevent seeing the issue 
+       # adaptive timeouts may prevent seeing the issue
        if at_is_enabled; then
                at_max_saved=$(at_max_get mds)
                at_max_set 0 mds client
@@ -1370,7 +1510,7 @@ test_35b() { # bug 18674
 
        log "Injecting EBUSY on MDS"
        # Setting OBD_FAIL_MDS_RESEND=0x136
-       do_facet mds "$LCTL set_param fail_loc=0x80000136" || return 2
+       do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x80000136" || return 2
 
        $LCTL set_param mdc.${FSNAME}*.stats=clear
 
@@ -1379,7 +1519,7 @@ test_35b() { # bug 18674
        stat $MOUNT/$tdir/$tfile
 
        log "Stop injecting EBUSY on MDS"
-       do_facet mds "$LCTL set_param fail_loc=0" || return 3
+       do_facet $SINGLEMDS "$LCTL set_param fail_loc=0" || return 3
        rm -f $MOUNT/$tdir/$tfile
 
        log "done"
@@ -1409,35 +1549,36 @@ test_35b() { # bug 18674
                log "ERROR: The client tried to reconnect to the failover server while the primary was busy" && \
                return 5
 
+       # LU-290
        # When OBD_FAIL_MDS_RESEND is hit, we sleep for 2 * obd_timeout
-        # Reconnects are supposed to be rate limited to one every 5s
+       # Reconnects are supposed to be rate limited to one every 5s
        [ $CONNCNT -gt $((2 * $TIMEOUT / 5 + 1)) ] && \
                log "ERROR: Too many reconnects $CONNCNT" && \
                return 6
 
-        cleanup
+       cleanup
        # remove nid settings
        writeconf
 }
 run_test 35b "Continue reconnection retries, if the active server is busy"
 
 test_36() { # 12743
-        local rc
+        [ $OSTCOUNT -lt 2 ] && skip_env "skipping test for single OST" && return
+
+        [ "$ost_HOST" = "`hostname`" -o "$ost1_HOST" = "`hostname`" ] || \
+               { skip "remote OST" && return 0; }
+
+        local rc=0
         local FSNAME2=test1234
         local fs3ost_HOST=$ost_HOST
         local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
 
         [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST && fs3ost_HOST=$ost1_HOST
-        rc=0
 
         if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" -o -z "$fs3ost_DEV" ]; then
-               do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+               is_blkdev $SINGLEMDS $MDSDEV && \
                skip_env "mixed loopback and real device not working" && return
         fi
-        [ $OSTCOUNT -lt 2 ] && skip_env "skipping test for single OST" && return
-
-       [ "$ost_HOST" = "`hostname`" -o "$ost1_HOST" = "`hostname`" ] || \
-               { skip "remote OST" && return 0; }
 
         local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
         local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
@@ -1490,34 +1631,38 @@ test_36() { # 12743
         stop fs2ost -f || return 201
         stop fs2mds -f || return 202
         rm -rf $MOUNT2 $fs2mdsdev $fs2ostdev $fs3ostdev
-        unload_modules || return 203
+        unload_modules_conf || return 203
         return $rc
 }
 run_test 36 "df report consistency on OSTs with different block size"
 
 test_37() {
-       client_only && skip "client only testing" && return 0
-       LOCAL_MDSDEV="$TMP/mdt.img"
-       SYM_MDSDEV="$TMP/sym_mdt.img"
+       local mntpt=$(facet_mntpt $SINGLEMDS)
+       local mdsdev=$(mdsdevname ${SINGLEMDS//mds/})
+       local mdsdev_sym="$TMP/sym_mdt.img"
+
+       echo "MDS :     $mdsdev"
+       echo "SYMLINK : $mdsdev_sym"
+       do_facet $SINGLEMDS rm -f $mdsdev_sym
+
+       do_facet $SINGLEMDS ln -s $mdsdev $mdsdev_sym
 
-       echo "MDS :     $LOCAL_MDSDEV"
-       echo "SYMLINK : $SYM_MDSDEV"
-       rm -f $LOCAL_MDSDEV
+       echo "mount symlink device - $mdsdev_sym"
 
-       touch $LOCAL_MDSDEV
-       mkfs.lustre --reformat --fsname=lustre --mdt --mgs --device-size=9000 $LOCAL_MDSDEV ||
-               error "mkfs.lustre $LOCAL_MDSDEV failed"
-       ln -s $LOCAL_MDSDEV $SYM_MDSDEV
+       local rc=0
+       mount_op=$(do_facet $SINGLEMDS mount -v -t lustre $MDS_MOUNT_OPTS  $mdsdev_sym $mntpt 2>&1 )
+       rc=${PIPESTATUS[0]}
 
-       echo "mount symlink device - $SYM_MDSDEV"
+       echo mount_op=$mount_op
 
-       mount_op=`mount -v -t lustre -o loop $SYM_MDSDEV ${MOUNT%/*}/mds 2>&1 | grep "unable to set tunable"`
-       umount -d ${MOUNT%/*}/mds
-       rm -f $LOCAL_MDSDEV $SYM_MDSDEV
+       do_facet $SINGLEMDS "umount -d $mntpt && rm -f $mdsdev_sym"
 
-       if [ -n "$mount_op" ]; then
-               error "**** FAIL: set tunables failed for symlink device"
+       if $(echo $mount_op | grep -q "unable to set tunable"); then
+               error "set tunables failed for symlink device"
        fi
+
+       [ $rc -eq 0 ] || error "mount symlink $mdsdev_sym failed! rc=$rc"
+
        return 0
 }
 run_test 37 "verify set tunables works for symlink device"
@@ -1591,13 +1736,15 @@ run_test 39 "leak_finder recognizes both LUSTRE and LNET malloc messages"
 test_40() { # bug 15759
        start_ost
        #define OBD_FAIL_TGT_TOOMANY_THREADS     0x706
-       do_facet $SINGLEMDS "sysctl -w lustre.fail_loc=0x80000706"
+       do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x80000706"
        start_mds
        cleanup
 }
 run_test 40 "race during service thread startup"
 
-test_41() { #bug 14134
+test_41a() { #bug 14134
+        echo $MDS_MOUNT_OPTS | grep "loop" && skip " loop devices does not work with nosvc option" && return
+
         local rc
         local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
 
@@ -1615,15 +1762,42 @@ test_41() { #bug 14134
         stop ost1 -f || return 201
         stop_mds -f || return 202
         stop_mds -f || return 203
-        unload_modules || return 204
+        unload_modules_conf || return 204
         return $rc
 }
-run_test 41 "mount mds with --nosvc and --nomgs"
+run_test 41a "mount mds with --nosvc and --nomgs"
+
+test_41b() {
+        echo $MDS_MOUNT_OPTS | grep "loop" && skip " loop devices does not work with nosvc option" && return
+
+        ! combined_mgs_mds && skip "needs combined mgs device" && return 0
+
+        stopall
+        reformat
+        local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
+
+        start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nosvc -n
+        start_ost
+        start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nomgs,force
+        mkdir -p $MOUNT
+        mount_client $MOUNT || return 1
+        sleep 5
+
+        echo "blah blah" > $MOUNT/$tfile
+        cat $MOUNT/$tfile || return 200
+
+        umount_client $MOUNT
+        stop_ost || return 201
+        stop_mds -f || return 202
+        stop_mds -f || return 203
+
+}
+run_test 41b "mount mds with --nosvc and --nomgs on first mount"
 
 test_42() { #bug 14693
         setup
         check_mount || return 2
-        do_facet mgs $LCTL conf_param llite.$FSNAME.some_wrong_param=10
+        do_facet mgs $LCTL conf_param lustre.llite.some_wrong_param=10
         umount_client $MOUNT
         mount_client $MOUNT || return 1
         cleanup
@@ -1637,11 +1811,11 @@ test_43() {
     chmod ugo+x $DIR || error "chmod 0 failed"
     set_and_check mds                                        \
         "lctl get_param -n mdt.$FSNAME-MDT0000.root_squash"  \
-        "mdt.$FSNAME-MDT*.root_squash"                       \
+        "$FSNAME.mdt.root_squash"                            \
         "0:0"
     set_and_check mds                                        \
        "lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
-       "mdt.$FSNAME-MDT*.nosquash_nids"                      \
+       "$FSNAME.mdt.nosquash_nids"                           \
        "NONE"
 
     #
@@ -1665,7 +1839,7 @@ test_43() {
     #
     set_and_check mds                                        \
        "lctl get_param -n mdt.$FSNAME-MDT0000.root_squash"   \
-       "mdt.$FSNAME-MDT*.root_squash"                        \
+       "$FSNAME.mdt.root_squash"                             \
        "$RUNAS_ID:$RUNAS_ID"
 
     ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-userfile)
@@ -1707,7 +1881,7 @@ test_43() {
     NIDLIST=$(echo $NIDLIST | tr -s ' ' ' ')
     set_and_check mds                                        \
        "lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
-       "mdt.$FSNAME-MDT*.nosquash_nids"                      \
+       "$FSNAME-MDTall.mdt.nosquash_nids"                    \
        "$NIDLIST"
 
     ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-rootfile)
@@ -1740,7 +1914,7 @@ test_44() { # 16317
         check_mount || return 2
         UUID=$($LCTL get_param llite.${FSNAME}*.uuid | cut -d= -f2)
         STATS_FOUND=no
-        UUIDS=$(do_facet mds "$LCTL get_param mdt.${FSNAME}*.exports.*.uuid")
+        UUIDS=$(do_facet $SINGLEMDS "$LCTL get_param mdt.${FSNAME}*.exports.*.uuid")
         for VAL in $UUIDS; do
                 NID=$(echo $VAL | cut -d= -f1)
                 CLUUID=$(echo $VAL | cut -d= -f2)
@@ -1783,7 +1957,7 @@ cleanup_46a() {
                stop ost${count} -f || rc=$?
                let count=count-1
        done    
-       stop_mds || rc=$? 
+       stop_mds || rc=$?
        cleanup_nocli || rc=$?
        #writeconf to remove all ost2 traces for subsequent tests
        writeconf
@@ -1801,7 +1975,7 @@ test_46a() {
        mount_client $MOUNT || return 3
        trap "cleanup_46a $OSTCOUNT" EXIT ERR
 
-       local i 
+       local i
        for (( i=2; i<=$OSTCOUNT; i++ )); do
            start ost$i `ostdevname $i` $OST_MOUNT_OPTS || return $((i+2))
        done
@@ -1809,9 +1983,9 @@ test_46a() {
        # wait until osts in sync
        for (( i=2; i<=$OSTCOUNT; i++ )); do
            wait_osc_import_state mds ost$i FULL
+           wait_osc_import_state client ost$i FULL
        done
 
-
        #second client see all ost's
 
        mount_client $MOUNT2 || return 8
@@ -1919,7 +2093,7 @@ test_49() { # bug 17710
        check_mount || return 1
 
        echo "check ldlm_timout..."
-       LDLM_MDS="`do_facet mds lctl get_param -n ldlm_timeout`"
+       LDLM_MDS="`do_facet $SINGLEMDS lctl get_param -n ldlm_timeout`"
        LDLM_OST1="`do_facet ost1 lctl get_param -n ldlm_timeout`"
        LDLM_CLIENT="`do_facet client lctl get_param -n ldlm_timeout`"
 
@@ -1941,7 +2115,7 @@ test_49() { # bug 17710
        setup_noconfig
        check_mount || return 7
 
-       LDLM_MDS="`do_facet mds lctl get_param -n ldlm_timeout`"
+       LDLM_MDS="`do_facet $SINGLEMDS lctl get_param -n ldlm_timeout`"
        LDLM_OST1="`do_facet ost1 lctl get_param -n ldlm_timeout`"
        LDLM_CLIENT="`do_facet client lctl get_param -n ldlm_timeout`"
 
@@ -2024,9 +2198,11 @@ test_50c() {
         wait_osc_import_state mds ost DISCONN
        lazystatfs $MOUNT || error "lazystatfs failed with one down server"
 
-       umount_client $MOUNT || error "Unable to unmount client"
+       umount_client $MOUNT || error "Unable to unmount client"
        stop_ost2 || error "Unable to stop OST2"
        stop_mds || error "Unable to stop MDS"
+       #writeconf to remove all ost2 traces for subsequent tests
+       writeconf
 }
 run_test 50c "lazystatfs one server down =========================="
 
@@ -2044,9 +2220,11 @@ test_50d() {
        stop_ost || error "Unable to stop OST1"
        lazystatfs $MOUNT || error "lazystatfs failed with one down server"
 
-       umount_client $MOUNT || error "Unable to unmount client"
+       umount_client $MOUNT || error "Unable to unmount client"
        stop_ost2 || error "Unable to stop OST2"
        stop_mds || error "Unable to stop MDS"
+       #writeconf to remove all ost2 traces for subsequent tests
+       writeconf
 }
 run_test 50d "lazystatfs client/server conn race =========================="
 
@@ -2136,6 +2314,8 @@ test_50g() {
        [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2, skipping" && return
        setup
        start_ost2 || error "Unable to start OST2"
+        wait_osc_import_state mds ost2 FULL
+        wait_osc_import_state client ost2 FULL
 
        local PARAM="${FSNAME}-OST0001.osc.active"
 
@@ -2176,6 +2356,8 @@ test_51() {
        wait $pid
        stop_ost2 || return 3
        cleanup
+       #writeconf to remove all ost2 traces for subsequent tests
+       writeconf
 }
 run_test 51 "Verify that mdt_reint handles RMF_MDT_MD correctly when an OST is added"
 
@@ -2244,7 +2426,9 @@ test_52() {
        [ $? -eq 0 ] || { error "Unable to create tdir"; return 4; }
        touch $TMP/modified_first
        [ $? -eq 0 ] || { error "Unable to create temporary file"; return 5; }
-       do_node $ost1node "mkdir -p $ost1tmp && touch $ost1tmp/modified_first"
+       local mtime=$(stat -c %Y $TMP/modified_first)
+       do_node $ost1node "mkdir -p $ost1tmp && touch -m -d @$mtime $ost1tmp/modified_first"
+
        [ $? -eq 0 ] || { error "Unable to create temporary file"; return 6; }
        sleep 1
 
@@ -2335,8 +2519,7 @@ thread_sanity() {
 
         # We need to expand $parampat, but it may match multiple parameters, so
         # we'll pick the first one
-        paramp=$(do_facet $facet "lctl get_param -N ${parampat}.threads_min"|head -1)
-        if [ -z "$paramp" ]; then
+        if ! paramp=$(do_facet $facet "lctl get_param -N ${parampat}.threads_min"|head -1); then
                 error "Couldn't expand ${parampat}.threads_min parameter name"
                 return 22
         fi
@@ -2349,17 +2532,17 @@ thread_sanity() {
         tmax=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
         tstarted=$(do_facet $facet "lctl get_param -n ${paramp}.threads_started" || echo 0)
         lassert 23 "$msg (PDSH problems?)" '(($tstarted && $tmin && $tmax))' || return $?
-        lassert 24 "$msg" '(($tstarted >= $tmin && $tstarted <= tmax ))' || return $?
+        lassert 24 "$msg" '(($tstarted >= $tmin && $tstarted <= $tmax ))' || return $?
 
-        # Check that we can lower min/max
-        do_facet $facet "lctl set_param ${paramp}.threads_min=$((tmin - 1))"
-        do_facet $facet "lctl set_param ${paramp}.threads_max=$((tmax - 10))"
+        # Check that we can change min/max
+        do_facet $facet "lctl set_param ${paramp}.threads_min=$((tmin + 1))"
+        do_facet $facet "lctl set_param ${paramp}.threads_max=$((tmax - 1))"
         tmin2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
         tmax2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
-        lassert 25 "$msg" '(($tmin2 == ($tmin - 1) && $tmax2 == ($tmax -10)))' || return $?
+        lassert 25 "$msg" '(($tmin2 == ($tmin + 1) && $tmax2 == ($tmax -1)))' || return $?
 
         # Check that we can set min/max to the same value
-        do_facet $facet "lctl set_param ${paramp}.threads_min=$tmin"
+        tmin=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
         do_facet $facet "lctl set_param ${paramp}.threads_max=$tmin"
         tmin2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
         tmax2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
@@ -2369,7 +2552,7 @@ thread_sanity() {
         do_facet $facet "lctl set_param ${paramp}.threads_max=$((tmin - 1))"
         tmin2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
         tmax2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
-        lassert 27 "$msg" '(($tmin <= $tmax2))' || return $?
+        lassert 27 "$msg" '(($tmin2 <= $tmax2))' || return $?
 
         # We need to ensure that we get the module options desired; to do this
         # we set LOAD_MODULES_REMOTE=true and we call setmodopts below.
@@ -2410,33 +2593,20 @@ test_53b() {
 }
 run_test 53b "check MDT thread count params"
 
-run_llverfs()
-{
-        local dir=$1
-        local partial_arg=""
-        local size=$(df -B G $dir | tail -1 | awk '{print $2}' | sed 's/G//') # Gb
-
-        # Run in partial (fast) mode if the size
-        # of a partition > 10 GB
-        [ $size -gt 10 ] && partial_arg="-p"
-
-        llverfs $partial_arg $dir
-}
-
 test_54a() {
-    do_rpc_nodes $(facet_host ost1) run_llverdev $(ostdevname 1)
+    do_rpc_nodes $(facet_host ost1) run_llverdev $(ostdevname 1) -p
     [ $? -eq 0 ] || error "llverdev failed!"
     reformat_and_config
 }
-run_test 54a "llverdev"
+run_test 54a "test llverdev and partial verify of device"
 
 test_54b() {
     setup
-    run_llverfs $MOUNT
+    run_llverfs $MOUNT -p
     [ $? -eq 0 ] || error "llverfs failed!"
     cleanup
 }
-run_test 54b "llverfs"
+run_test 54b "test llverfs and partial verify of filesystem"
 
 lov_objid_size()
 {
@@ -2449,7 +2619,7 @@ test_55() {
        local ostdev=$(ostdevname 1)
        local saved_opts=$OST_MKFS_OPTS
 
-       for i in 1023 2048
+       for i in 1023 2048
        do
                OST_MKFS_OPTS="$saved_opts --index $i"
                reformat
@@ -2485,29 +2655,58 @@ test_56() {
        mount_client $MOUNT || error "Unable to mount client"
        echo ok
        $LFS osts
+       [ -n "$ENABLE_QUOTA" ] && { $LFS quotacheck -ug $MOUNT || error "quotacheck has failed" ; }
        stopall
        reformat
 }
 run_test 56 "check big indexes"
 
-test_57() { # bug 22656
-       local NID=$($LCTL list_nids | head -1)
+test_57a() { # bug 22656
+       local NID=$(do_facet ost1 "$LCTL get_param nis" | tail -1 | awk '{print $1}')
        writeconf
        do_facet ost1 "$TUNEFS --failnode=$NID `ostdevname 1`" || error "tunefs failed"
-       if ! combined_mgs_mds ; then
-               start_mgs
-       fi
-       start_mds
+       start_mgsmds
        start_ost && error "OST registration from failnode should fail"
-       stop_mds
        reformat
 }
-run_test 57 "initial registration from failnode should fail (should return errs)"
+run_test 57a "initial registration from failnode should fail (should return errs)"
+
+test_57b() {
+       local NID=$(do_facet ost1 "$LCTL get_param nis" | tail -1 | awk '{print $1}')
+       writeconf
+       do_facet ost1 "$TUNEFS --servicenode=$NID `ostdevname 1`" || error "tunefs failed"
+       start_mgsmds
+       start_ost || error "OST registration from servicenode should not fail"
+       reformat
+}
+run_test 57b "initial registration from servicenode should not fail"
 
 count_osts() {
         do_facet mgs $LCTL get_param mgs.MGS.live.$FSNAME | grep OST | wc -l
 }
 
+test_58() { # bug 22658
+        [ "$FSTYPE" != "ldiskfs" ] && skip "not supported for $FSTYPE" && return
+       setup
+       mkdir -p $DIR/$tdir
+       createmany -o $DIR/$tdir/$tfile-%d 100
+       # make sure that OSTs do not cancel llog cookies before we unmount the MDS
+#define OBD_FAIL_OBD_LOG_CANCEL_NET      0x601
+       do_facet mds "lctl set_param fail_loc=0x601"
+       unlinkmany $DIR/$tdir/$tfile-%d 100
+       stop mds
+       local MNTDIR=$(facet_mntpt mds)
+       # remove all files from the OBJECTS dir
+       do_facet mds "mount -t ldiskfs $MDSDEV $MNTDIR"
+       do_facet mds "find $MNTDIR/OBJECTS -type f -delete"
+       do_facet mds "umount $MNTDIR"
+       # restart MDS with missing llog files
+       start_mds
+       do_facet mds "lctl set_param fail_loc=0"
+       reformat
+}
+run_test 58 "missing llog files must not prevent MDT from mounting"
+
 test_59() {
        start_mgsmds >> /dev/null
        local C1=$(count_osts)
@@ -2535,13 +2734,41 @@ test_59() {
        [ $C4 -eq 2 ] || error "OST2 writeconf should add log"
        stop_ost2 >> /dev/null
        cleanup_nocli >> /dev/null
+       #writeconf to remove all ost2 traces for subsequent tests
+       writeconf
 }
 run_test 59 "writeconf mount option"
 
+test_60() { # LU-471
+       add mds1 $MDS_MKFS_OPTS --mkfsoptions='\" -E stride=64 -O ^uninit_bg\"' --reformat $(mdsdevname 1)
+
+       dump=$(do_facet $SINGLEMDS dumpe2fs $(mdsdevname 1))
+       rc=${PIPESTATUS[0]}
+       [ $rc -eq 0 ] || error "dumpe2fs $(mdsdevname 1) failed"
+
+       # MDT default has dirdata feature
+       echo $dump | grep dirdata > /dev/null || error "dirdata is not set"
+       # we disable uninit_bg feature
+       echo $dump | grep uninit_bg > /dev/null && error "uninit_bg is set"
+       # we set stride extended options
+       echo $dump | grep stride > /dev/null || error "stride is not set"
+       reformat
+}
+run_test 60 "check mkfs.lustre --mkfsoptions -E -O options setting"
 
 if ! combined_mgs_mds ; then
        stop mgs
 fi
+
 cleanup_gss
-equals_msg `basename $0`: test complete
-[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true
+
+# restore the ${facet}_MKFS_OPTS variables
+for facet in MGS MDS OST; do
+    opts=SAVED_${facet}_MKFS_OPTS
+    if [[ -n ${!opts} ]]; then
+        eval ${facet}_MKFS_OPTS=\"${!opts}\"
+    fi
+done
+
+complete $(basename $0) $SECONDS
+exit_status