Whamcloud - gitweb
b=17931
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 8f7d469..9a9b8fa 100644 (file)
@@ -11,8 +11,8 @@ set -e
 
 ONLY=${ONLY:-"$*"}
 
-# bug number for skipped test: 13739 
-HEAD_EXCEPT="                  32a 32b "
+# bug number for skipped test: 13739
+HEAD_EXCEPT="                  32a"
 
 # bug number for skipped test:                                 
 ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $HEAD_EXCEPT"
@@ -37,8 +37,11 @@ MDSSIZE=40000
 OSTSIZE=40000
 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
 
+remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0
+remote_ost_nodsh && skip "remote OST with nodsh" && exit 0
+
 #
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="0 1 2 3 6 7 15 18 24b 25 30 31 32 33 34a "
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="0 1 2 3 6 7 15 18 24b 25 30 31 32 33 34a 45"
 
 assert_DIR
 
@@ -47,19 +50,20 @@ reformat() {
 }
 
 writeconf() {
-    local facet=$SINGLEMDS
-    local dev=${facet}_dev
-    shift
-    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}" || echo "tunefs failed, reformatting instead" && reformat
+       local facet=$SINGLEMDS
+       local dev=${facet}_dev
+       shift
+       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}" || echo "tunefs failed, reformatting instead" && reformat
+
+       gen_config
 }
 
 gen_config() {
-        reformat
-        # The MGS must be started before the OSTs for a new fs, so start
-        # and stop to generate the startup logs. 
+       # The MGS must be started before the OSTs for a new fs, so start
+       # and stop to generate the startup logs. 
        start_mds
        start_ost
        sleep 5
@@ -67,6 +71,11 @@ gen_config() {
        stop_mds
 }
 
+reformat_and_config() {
+       reformat
+       gen_config
+}
+
 start_mds() {
        local facet=$SINGLEMDS
        # we can not use MDSDEV1 here because SINGLEMDS could be set not to mds1 only
@@ -126,8 +135,12 @@ umount_client() {
 }
 
 manual_umount_client(){
+       local rc
+       local FORCE=$1
        echo "manual umount lustre on ${MOUNT}...."
-       do_facet client "umount -d $MOUNT"
+       do_facet client "umount -d ${FORCE} $MOUNT"
+       rc=$?
+       return $rc
 }
 
 setup() {
@@ -136,6 +149,12 @@ setup() {
        mount_client $MOUNT
 }
 
+setup_noconfig() {
+       start_mds
+       start_ost
+       mount_client $MOUNT
+}
+
 cleanup_nocli() {
        stop_mds || return 201
        stop_ost || return 202
@@ -176,11 +195,11 @@ if [ "$ONLY" == "cleanup" ]; then
        exit
 fi
 
-#create single point mountpoint
+init_gss
 
-gen_config
+#create single point mountpoint
 
-init_gss
+reformat_and_config
 
 test_0() {
         setup
@@ -200,7 +219,7 @@ run_test 1 "start up ost twice (should return errors)"
 
 test_2() {
        start_ost
-       start_mds       
+       start_mds
        echo "start mds second time.."
        start_mds
        mount_client $MOUNT
@@ -287,7 +306,7 @@ test_5b() {
        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
-       umount_client $MOUNT    
+       umount_client $MOUNT
        # stop_mds is a no-op here, and should not fail
        cleanup_nocli || return $?
        return 0
@@ -367,7 +386,9 @@ test_9() {
        do_facet ost1 lctl set_param subsystem_debug=\'mds ost\' || return 1
 
         CHECK_PTLDEBUG="`do_facet ost1 lctl get_param -n debug`"
-        if [ "$CHECK_PTLDEBUG" ] && [ "$CHECK_PTLDEBUG" = "trace inode" ];then
+        if [ "$CHECK_PTLDEBUG" ] && { \
+          [ "$CHECK_PTLDEBUG" = "trace inode warning error emerg console" ] ||
+          [ "$CHECK_PTLDEBUG" = "trace inode" ]; }; then   
            echo "lnet.debug success"
         else
            echo "lnet.debug: want 'trace inode', have '$CHECK_PTLDEBUG'"
@@ -411,7 +432,7 @@ test_16() {
         cleanup || return $?
 
         log "read the mode of OBJECTS and check if they has been changed properly"
-        EXPECTEDOBJECTSMODE=`do_facet $SINGLEMDS "debugfs -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
+        EXPECTEDOBJECTSMODE=`do_facet $SINGLEMDS "$DEBUGFS -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
 
         if [ "$EXPECTEDOBJECTSMODE" = "0777" ]; then
                 log "Success:Lustre change the mode of OBJECTS correctly"
@@ -433,11 +454,11 @@ test_17() {
         fi
 
         echo "Remove mds config log"
-        do_facet $SINGLEMDS "debugfs -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
+        do_facet $SINGLEMDS "$DEBUGFS -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
 
         start_ost
        start_mds && return 42
-       gen_config
+       reformat_and_config
 }
 run_test 17 "Verify failed mds_postsetup won't fail assertion (2936) (should return errs)"
 
@@ -480,13 +501,13 @@ test_18() {
 
         MDS_MKFS_OPTS="--mgs --mdt --fsname=$FSNAME --device-size=$myMDSSIZE --param sys.timeout=$TIMEOUT $MDSOPT"
 
-        gen_config
+        reformat_and_config
         echo "mount lustre system..."
        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 mds "$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
@@ -496,7 +517,7 @@ test_18() {
         cleanup || return $?
 
         MDS_MKFS_OPTS=$OLD_MDS_MKFS_OPTS
-        gen_config
+        reformat_and_config
 }
 run_test 18 "check mkfs creates large journals"
 
@@ -556,20 +577,19 @@ test_21c() {
        stop_ost
        stop_ost2
        stop_mds
+       #writeconf to remove all ost2 traces for subsequent tests
+       writeconf
 }
 run_test 21c "start mds between two osts, stop mds last"
 
 test_22() {
-       #reformat to remove all logs
-       reformat
        start_mds
-       echo Client mount before any osts are in the logs
-       mount_client $MOUNT
-       check_mount && return 41
-       pass
 
        echo Client mount with ost in logs, but none running
        start_ost
+       # wait until mds connected to ost and open client connection
+       # ping_interval + 1
+       sleep $((TIMEOUT / 4 + 1))
        stop_ost
        mount_client $MOUNT
        # check_mount will block trying to contact ost
@@ -769,24 +789,9 @@ set_and_check() {
            FINAL=$(($ORIG + 5))
        fi
        echo "Setting $PARAM from $ORIG to $FINAL"
-       do_facet $SINGLEMDS "$LCTL conf_param $PARAM=$FINAL" || error conf_param failed
-       local RESULT
-       local MAX=90
-       local WAIT=0
-       while [ 1 ]; do
-           sleep 5
-           RESULT=$(do_facet $myfacet "$TEST") 
-           if [ $RESULT -eq $FINAL ]; then
-               echo "Updated config after $WAIT sec (got $RESULT)"
-               break
-           fi
-           WAIT=$((WAIT + 5))
-           if [ $WAIT -eq $MAX ]; then
-               echo "Config update not seen: wanted $FINAL got $RESULT"
-               return 3
-           fi
-           echo "Waiting $(($MAX - $WAIT)) secs for config update" 
-       done
+       do_facet $SINGLEMDS "$LCTL conf_param $PARAM='$FINAL'" || error conf_param failed
+
+       wait_update $(facet_host $myfacet) "$TEST" "$FINAL" || error check failed!
 }
 
 test_27a() {
@@ -896,9 +901,6 @@ test_29() {
        cleanup_nocli
        #writeconf to remove all ost2 traces for subsequent tests
        writeconf
-       start_mds
-       start_ost
-       cleanup
 }
 run_test 29 "permanently remove an OST"
 
@@ -927,35 +929,76 @@ test_31() { # bug 10734
 }
 run_test 31 "Connect to non-existent node (shouldn't crash)"
 
+# Use these start32/stop32 fn instead of t-f start/stop fn,
+# for local devices, to skip global facet vars init 
+stop32 () {
+       local facet=$1
+       shift
+       echo "Stopping local ${MOUNT%/*}/${facet} (opts:$@)"
+       umount -d $@ ${MOUNT%/*}/${facet}
+       losetup -a
+}
+
+start32 () {
+       local facet=$1
+       shift
+       local device=$1
+       shift
+       mkdir -p ${MOUNT%/*}/${facet}
+
+       echo "Starting local ${facet}: $@ $device ${MOUNT%/*}/${facet}"
+       mount -t lustre $@ ${device} ${MOUNT%/*}/${facet}
+       RC=$?
+       if [ $RC -ne 0 ]; then
+               echo "mount -t lustre $@ ${device} ${MOUNT%/*}/${facet}"
+               echo "Start of ${device} of local ${facet} failed ${RC}"
+       fi 
+       losetup -a
+       return $RC
+}
+
+cleanup_nocli32 () {
+       stop32 mds1 -f
+       stop32 ost1 -f
+       wait_exit_ST client
+}
+
+cleanup_32() {
+       trap 0
+       echo "Cleanup test_32 umount $MOUNT ..."
+       umount -f $MOUNT || true
+       echo "Cleanup local mds ost1 ..."
+       cleanup_nocli32
+       unload_modules
+}
+
 test_32a() {
-        # XXX - make this run on client-only systems with real hardware on
-        #       the OST and MDT
-        #       there appears to be a lot of assumption here about loopback
-        #       devices
-        # or maybe this test is just totally useless on a client-only system
+       # this test is totally useless on a client-only system
+       [ -n "$CLIENTONLY" -o -n "$CLIENTMODSONLY" ] && skip "client only testing" && return 0
        [ "$NETTYPE" = "tcp" ] || { skip "NETTYPE != tcp" && return 0; }
-       [ "$mds_HOST" = "`hostname`" ] || { skip "remote MDS" && return 0; }
-       [ "$ost_HOST" = "`hostname`" -o "$ost1_HOST" = "`hostname`" ] || \
-               { skip "remote OST" && return 0; }
+       [ -z "$TUNEFS" ] && skip "No tunefs" && return 0
+       local DISK1_8=$LUSTRE/tests/disk1_8.tgz
+       [ ! -r $DISK1_8 ] && skip "Cannot find $DISK1_8" && return 0
 
-        [ -z "$TUNEFS" ] && skip "No tunefs" && return
-       local DISK1_4=$LUSTRE/tests/disk1_4.zip
-       [ ! -r $DISK1_4 ] && skip "Cant find $DISK1_4, skipping" && return
+       mkdir -p $TMP/$tdir
+       tar xjvf $DISK1_8 -C $TMP/$tdir || \
+               { skip "Cannot untar $DISK1_8" && return 0; }
 
-       local tmpdir=$TMP/conf32a
-       unzip -o -j -d $tmpdir $DISK1_4 || { skip "Cant unzip $DISK1_4, skipping" && return ; }
        load_modules
        lctl set_param debug=$PTLDEBUG
 
        $TUNEFS $tmpdir/mds || error "tunefs failed"
+
        # nids are wrong, so client wont work, but server should start
-       start mds $tmpdir/mds "-o loop,exclude=lustre-OST0000" || return 3
-        local UUID=$(lctl get_param -n mdt.lustre-MDT0000.uuid)
+       start32 mds $tmpdir/mds "-o loop,exclude=lustre-OST0000" && \
+               trap cleanup_32 EXIT INT || return 3
+       
+       local UUID=$(lctl get_param -n mds.lustre-MDT0000.uuid)
        echo MDS uuid $UUID
        [ "$UUID" == "mdsA_UUID" ] || error "UUID is wrong: $UUID" 
 
        $TUNEFS --mgsnode=`hostname` $tmpdir/ost1 || error "tunefs failed"
-       start ost1 $tmpdir/ost1 "-o loop" || return 5
+       start32 ost1 $tmpdir/ost1 "-o loop" || return 5
        UUID=$(lctl get_param -n obdfilter.lustre-OST0000.uuid)
        echo OST uuid $UUID
        [ "$UUID" == "ost1_UUID" ] || error "UUID is wrong: $UUID" 
@@ -973,61 +1016,62 @@ test_32a() {
 
        # With a new good MDT failover nid, we should be able to mount a client
        # (but it cant talk to OST)
-        local OLDMOUNTOPT=$MOUNTOPT
-        MOUNTOPT="exclude=lustre-OST0000"
-       mount_client $MOUNT
-        MOUNTOPT=$OLDMOUNTOPT
-       set_and_check client "lctl get_param -n mdc.*.max_rpcs_in_flight" "lustre-MDT0000.mdc.max_rpcs_in_flight" ||
-               return 11
+       local mountopt="-o exclude=lustre-OST0000"
 
-       zconf_umount `hostname` $MOUNT -f
-       cleanup_nocli
-       load_modules
+       local device=`h2$NETTYPE $HOSTNAME`:/lustre
+       echo "Starting local client: $HOSTNAME: $mountopt $device $MOUNT"
+       mount -t lustre $mountopt $device $MOUNT || return 1
+
+       local old=$(lctl get_param -n mdc.*.max_rpcs_in_flight)
+       local new=$((old + 5))
+       lctl conf_param lustre-MDT0000.mdc.max_rpcs_in_flight=$new
+       wait_update $HOSTNAME "lctl get_param -n mdc.*.max_rpcs_in_flight" $new || return 11
 
-        # mount a second time to make sure we didnt leave upgrade flag on
+       cleanup_32
+
+       # mount a second time to make sure we didnt leave upgrade flag on
        load_modules
        $TUNEFS --dryrun $tmpdir/mds || error "tunefs failed"
-       load_modules
-       start mds $tmpdir/mds "-o loop,exclude=lustre-OST0000" || return 12
-       cleanup_nocli
+       start32 mds $tmpdir/mds "-o loop,exclude=lustre-OST0000" && \
+               trap cleanup_32 EXIT INT || return 12
+
+       cleanup_32
 
        rm -rf $tmpdir || true  # true is only for TMP on NFS
 }
-run_test 32a "Upgrade from 1.4 (not live)"
+run_test 32a "Upgrade from 1.8 (not live)"
 
 test_32b() {
-        # XXX - make this run on client-only systems with real hardware on
-        #       the OST and MDT
-        #       there appears to be a lot of assumption here about loopback
-        #       devices
-        # or maybe this test is just totally useless on a client-only system
-        [ "$NETTYPE" = "tcp" ] || { skip "NETTYPE != tcp" && return 0; }
-        [ "$mds_HOST" = "`hostname`" ] || { skip "remote MDS" && return 0; }
-        [ "$ost_HOST" = "`hostname`" -o "$ost1_HOST" = "`hostname`" ] || \
-               { skip "remote OST" && return 0; }
+       # this test is totally useless on a client-only system
+       [ -n "$CLIENTONLY" -o -n "$CLIENTMODSONLY" ] && skip "client only testing" && return 0
+       [ "$NETTYPE" = "tcp" ] || { skip "NETTYPE != tcp" && return 0; }
+       [ -z "$TUNEFS" ] && skip "No tunefs" && return
 
-        [ -z "$TUNEFS" ] && skip "No tunefs" && return
-       local DISK1_4=$LUSTRE/tests/disk1_4.zip
-       [ ! -r $DISK1_4 ] && skip "Cant find $DISK1_4, skipping" && return
+       local DISK1_8=$LUSTRE/tests/disk1_8.tar.bz2
+       [ ! -r $DISK1_8 ] && skip "Cannot find $DISK1_8" && return 0
+       local tmpdir=$TMP/$tdir
+       mkdir -p $tmpdir
+       tar xjvf $DISK1_8 -C $tmpdir || \
+               { skip "Cannot untar $DISK1_8" && return ; }
 
-       local tmpdir=$TMP/conf32b
-       unzip -o -j -d $tmpdir $DISK1_4 || { skip "Cant unzip $DISK1_4, skipping" && return ; }
        load_modules
        lctl set_param debug=$PTLDEBUG
-       NEWNAME=sofia
+       local NEWNAME=lustre
 
        # writeconf will cause servers to register with their current nids
        $TUNEFS --writeconf --fsname=$NEWNAME $tmpdir/mds || error "tunefs failed"
-       start mds $tmpdir/mds "-o loop" || return 3
+       start32 mds1 $tmpdir/mds "-o loop" && \
+               trap cleanup_32 EXIT INT || return 3
+
        local UUID=$(lctl get_param -n mdt.${NEWNAME}-MDT0000.uuid)
        echo MDS uuid $UUID
-       [ "$UUID" == "mdsA_UUID" ] || error "UUID is wrong: $UUID" 
+       [ "$UUID" == "${NEWNAME}-MDT0000_UUID" ] || error "UUID is wrong: $UUID" 
 
-       $TUNEFS --mgsnode=`hostname` --fsname=$NEWNAME --writeconf $tmpdir/ost1 || error "tunefs failed"
-       start ost1 $tmpdir/ost1 "-o loop" || return 5
+       $TUNEFS --mgsnode=`hostname` --writeconf --fsname=$NEWNAME $tmpdir/ost1 || error "tunefs failed"
+       start32 ost1 $tmpdir/ost1 "-o loop" || return 5
        UUID=$(lctl get_param -n obdfilter.${NEWNAME}-OST0000.uuid)
        echo OST uuid $UUID
-       [ "$UUID" == "ost1_UUID" ] || error "UUID is wrong: $UUID"
+       [ "$UUID" == "${NEWNAME}-OST0000_UUID" ] || error "UUID is wrong: $UUID"
 
        echo "OSC changes should succeed:" 
        $LCTL conf_param ${NEWNAME}-OST0000.osc.max_dirty_mb=15 || return 7
@@ -1040,18 +1084,24 @@ test_32b() {
        # MDT and OST should have registered with new nids, so we should have
        # a fully-functioning client
        echo "Check client and old fs contents"
-       OLDFS=$FSNAME
-       FSNAME=$NEWNAME
-       mount_client $MOUNT
-       FSNAME=$OLDFS
-       set_and_check client "lctl get_param -n mdc.*.max_rpcs_in_flight" "${NEWNAME}-MDT0000.mdc.max_rpcs_in_flight" || return 11
-       [ "$(cksum $MOUNT/passwd | cut -d' ' -f 1,2)" == "2479747619 779" ] || return 12  
+
+       local device=`h2$NETTYPE $HOSTNAME`:/$NEWNAME
+       echo "Starting local client: $HOSTNAME: $device $MOUNT"
+       mount -t lustre $device $MOUNT || return 1
+
+       local old=$(lctl get_param -n mdc.*.max_rpcs_in_flight)
+       local new=$((old + 5))
+       lctl conf_param ${NEWNAME}-MDT0000.mdc.max_rpcs_in_flight=$new
+       wait_update $HOSTNAME "lctl get_param -n mdc.*.max_rpcs_in_flight" $new || return 11
+
+       [ "$(cksum $MOUNT/passwd | cut -d' ' -f 1,2)" == "94306271 1478" ] || return 12
        echo "ok."
 
-       cleanup
+       cleanup_32
+
        rm -rf $tmpdir || true  # true is only for TMP on NFS
 }
-run_test 32b "Upgrade from 1.4 with writeconf"
+run_test 32b "Upgrade from 1.8 with writeconf"
 
 test_33a() { # bug 12333, was test_33
         local rc=0
@@ -1065,7 +1115,7 @@ test_33a() { # bug 12333, was test_33
 
         local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
         local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
-        add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
+        add fs2mds $MDS_MKFS_OPTS --mkfsoptions='\"-J size=8\"' --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
         add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --index=8191 --mgsnode=$MGSNID --reformat $fs2ostdev || exit 10
 
         start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT
@@ -1127,7 +1177,7 @@ test_34b() {
        fi
 
        cleanup
-       return 0        
+       return 0
 }
 run_test 34b "force umount with failed mds should be normal"
 
@@ -1143,7 +1193,7 @@ test_34c() {
        fi
 
        cleanup
-       return 0        
+       return 0
 }
 run_test 34c "force umount with failed ost should be normal"
 
@@ -1180,7 +1230,7 @@ test_35() { # bug 12459
        # contact after the connection loss
        $LCTL dk $TMP/lustre-log-$TESTNAME.log
        NEXTCONN=`awk "/${MSG}/ {start = 1;}
-                      /import_select_connection.$device-mdc.* using connection/ {
+                      /import_select_connection.*$device-mdc.* using connection/ {
                                if (start) {
                                        if (\\\$NF ~ /$FAKENID/)
                                                print \\\$NF;
@@ -1312,8 +1362,8 @@ test_38() { # bug 14222
 
        local dev=${SINGLEMDS}_dev
        local MDSDEV=${!dev}
-       do_facet $SINGLEMDS "debugfs -c -R \\\"dump lov_objid $TMP/lov_objid.orig\\\" $MDSDEV"
-       do_facet $SINGLEMDS "debugfs -w -R \\\"rm lov_objid\\\" $MDSDEV"
+       do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.orig\\\" $MDSDEV"
+       do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"rm lov_objid\\\" $MDSDEV"
 
        do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.orig"
        # check create in mds_lov_connect
@@ -1323,17 +1373,17 @@ test_38() { # bug 14222
                [ $V ] && log "verifying $DIR/$tdir/$f"
                diff -q $f $DIR/$tdir/$f || ERROR=y
        done
-       do_facet $SINGLEMDS "debugfs -c -R \\\"dump lov_objid $TMP/lov_objid.new\\\"  $MDSDEV"
+       do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.new\\\"  $MDSDEV"
        do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.new"
-       [ "$ERROR" = "y" ] && error "old and new files are different after connect" || true     
-       
+       [ "$ERROR" = "y" ] && error "old and new files are different after connect" || true
+
        # check it's updates in sync
        umount_client $MOUNT
        stop_mds
 
        do_facet $SINGLEMDS dd if=/dev/zero of=$TMP/lov_objid.clear bs=4096 count=1
-       do_facet $SINGLEMDS "debugfs -w -R \\\"rm lov_objid\\\" $MDSDEV"
-       do_facet $SINGLEMDS "debugfs -w -R \\\"write $TMP/lov_objid.clear lov_objid\\\" $MDSDEV "
+       do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"rm lov_objid\\\" $MDSDEV"
+       do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"write $TMP/lov_objid.clear lov_objid\\\" $MDSDEV "
 
        start_mds
        mount_client $MOUNT
@@ -1341,12 +1391,12 @@ test_38() { # bug 14222
                [ $V ] && log "verifying $DIR/$tdir/$f"
                diff -q $f $DIR/$tdir/$f || ERROR=y
        done
-       do_facet $SINGLEMDS "debugfs -c -R \\\"dump lov_objid $TMP/lov_objid.new1\\\" $MDSDEV"
+       do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.new1\\\" $MDSDEV"
        do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.new1"
        umount_client $MOUNT
        stop_mds
        [ "$ERROR" = "y" ] && error "old and new files are different after sync" || true
-       
+
        log "files compared the same"
        cleanup
 }
@@ -1405,9 +1455,304 @@ test_42() { #bug 14693
 }
 run_test 42 "invalid config param should not prevent client from mounting"
 
+test_43() {
+    [ $UID -ne 0 -o $RUNAS_ID -eq 0 ] && skip "run as root"
+    setup
+    chmod ugo+x $DIR || error "chmod 0 failed"
+    set_and_check mds                                        \
+        "lctl get_param -n mdt.$FSNAME-MDT0000.root_squash"  \
+        "$FSNAME.mdt.root_squash"                            \
+        "0:0"
+    set_and_check mds                                        \
+       "lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
+       "$FSNAME.mdt.nosquash_nids"                           \
+       "NONE"
+
+    #
+    # create set of test files
+    #
+    echo "111" > $DIR/$tfile-userfile || error "write 1 failed"
+    chmod go-rw $DIR/$tfile-userfile  || error "chmod 1 failed"
+    chown $RUNAS_ID.$RUNAS_ID $DIR/$tfile-userfile || error "chown failed"
+
+    echo "222" > $DIR/$tfile-rootfile || error "write 2 failed"
+    chmod go-rw $DIR/$tfile-rootfile  || error "chmod 2 faield"
+
+    mkdir $DIR/$tdir-rootdir -p       || error "mkdir failed"
+    chmod go-rwx $DIR/$tdir-rootdir   || error "chmod 3 failed"
+    touch $DIR/$tdir-rootdir/tfile-1  || error "touch failed"
+
+    #
+    # check root_squash:
+    #   set root squash UID:GID to RUNAS_ID
+    #   root should be able to access only files owned by RUNAS_ID
+    #
+    set_and_check mds                                        \
+       "lctl get_param -n mdt.$FSNAME-MDT0000.root_squash"   \
+       "$FSNAME.mdt.root_squash"                             \
+       "$RUNAS_ID:$RUNAS_ID"
+
+    ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-userfile)
+    dd if=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
+        error "$ST: root read permission is denied"
+    echo "$ST: root read permission is granted - ok"
+
+    echo "444" | \
+    dd conv=notrunc if=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
+        error "$ST: root write permission is denied"
+    echo "$ST: root write permission is granted - ok"
+
+    ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-rootfile)
+    dd if=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null && \
+        error "$ST: root read permission is granted"
+    echo "$ST: root read permission is denied - ok"
+
+    echo "555" | \
+    dd conv=notrunc of=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null && \
+        error "$ST: root write permission is granted"
+    echo "$ST: root write permission is denied - ok"
+
+    ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tdir-rootdir)
+    rm $DIR/$tdir-rootdir/tfile-1 1>/dev/null 2>/dev/null && \
+        error "$ST: root unlink permission is granted"
+    echo "$ST: root unlink permission is denied - ok"
+
+    touch $DIR/tdir-rootdir/tfile-2 1>/dev/null 2>/dev/null && \
+        error "$ST: root create permission is granted"
+    echo "$ST: root create permission is denied - ok"
+
+    #
+    # check nosquash_nids:
+    #   put client's NID into nosquash_nids list,
+    #   root should be able to access root file after that
+    #
+    local NIDLIST=$(lctl list_nids all | tr '\n' ' ')
+    NIDLIST="2@elan $NIDLIST 192.168.0.[2,10]@tcp"
+    NIDLIST=$(echo $NIDLIST | tr -s ' ' ' ')
+    set_and_check mds                                        \
+       "lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
+       "$FSNAME-MDTall.mdt.nosquash_nids"                    \
+       "$NIDLIST"
+
+    ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-rootfile)
+    dd if=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null || \
+        error "$ST: root read permission is denied"
+    echo "$ST: root read permission is granted - ok"
+
+    echo "666" | \
+    dd conv=notrunc of=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null || \
+        error "$ST: root write permission is denied"
+    echo "$ST: root write permission is granted - ok"
+
+    ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tdir-rootdir)
+    rm $DIR/$tdir-rootdir/tfile-1 || \
+        error "$ST: root unlink permission is denied"
+    echo "$ST: root unlink permission is granted - ok"
+    touch $DIR/$tdir-rootdir/tfile-2 || \
+        error "$ST: root create permission is denied"
+    echo "$ST: root create permission is granted - ok"
+
+    return 0
+}
+run_test 43 "check root_squash and nosquash_nids"
+
 umount_client $MOUNT
 cleanup_nocli
-cleanup_gss
 
+test_45() { #17310
+        setup
+        check_mount || return 2
+        stop_mds
+        df -h $MOUNT &
+        log "sleep 60 sec"
+        sleep 60
+#define OBD_FAIL_PTLRPC_LONG_UNLINK   0x50f
+        do_facet client "lctl set_param fail_loc=0x50f"
+        log "sleep 10 sec"
+        sleep 10
+        manual_umount_client --force || return 3
+        do_facet client "lctl set_param fail_loc=0x0"
+        start_mds
+        mount_client $MOUNT || return 4
+        cleanup
+        return 0
+}
+run_test 45 "long unlink handling in ptlrpcd"
+
+test_46a() {
+       OSTCOUNT=6
+       reformat
+       start_mds || return 1
+       #first client should see only one ost
+       start_ost || return 2
+       #start_client
+       mount_client $MOUNT || return 3
+       
+       start_ost2 || return 4
+       start ost3 `ostdevname 3` $OST_MOUNT_OPTS || return 5
+       start ost4 `ostdevname 4` $OST_MOUNT_OPTS || return 6
+       start ost5 `ostdevname 5` $OST_MOUNT_OPTS || return 7
+       # wait until ost2-5 is sync
+       # ping_interval + 1
+       sleep $((TIMEOUT / 4 + 1))
+       #second client see both ost's
+
+       mount_client $MOUNT2 || return 8
+       $LFS setstripe $MOUNT2 -c -1 || return 9
+       $LFS getstripe $MOUNT2 || return 10
+
+       echo "ok" > $MOUNT2/widestripe
+       $LFS getstripe $MOUNT2/widestripe || return 11
+       # fill acl buffer for avoid expand lsm to them
+       awk -F : '{if (FNR < 25) { print "u:"$1":rwx" }}' /etc/passwd | while read acl; do  
+           setfacl -m $acl $MOUNT2/widestripe
+       done
+
+       # will be deadlock
+       stat $MOUNT/widestripe || return 12
+
+       umount_client $MOUNT2 || return 13
+       umount_client $MOUNT || return 14
+       stop ost5 -f || return 20
+       stop ost4 -f || return 21
+       stop ost3 -f || return 22
+       stop_ost2 || return 23
+       stop_ost || return 24
+       stop_mds || return 25
+}
+run_test 46a "handle ost additional - wide striped file"
+
+test_47() { #17674
+       reformat
+       setup_noconfig
+        check_mount || return 2
+        $LCTL set_param ldlm.namespaces.$FSNAME-*-*-*.lru_size=100
+
+        local lru_size=[]
+        local count=0
+        for ns in $($LCTL get_param ldlm.namespaces.$FSNAME-*-*-*.lru_size); do
+            if echo $ns | grep "MDT[[:digit:]]*"; then
+                continue
+            fi
+            lrs=$(echo $ns | sed 's/.*lru_size=//')
+            lru_size[count]=$lrs
+            let count=count+1
+        done
+        facet_failover ost1
+        facet_failover $SINGLEMDS
+        df -h $MOUNT || return 3
+
+        count=0
+        for ns in $($LCTL get_param ldlm.namespaces.$FSNAME-*-*-*.lru_size); do
+            if echo $ns | grep "MDT[[:digit:]]*"; then
+                continue
+            fi
+            lrs=$(echo $ns | sed 's/.*lru_size=//')
+            if ! test "$lrs" -eq "${lru_size[count]}"; then
+                n=$(echo $ns | sed -e 's/ldlm.namespaces.//' -e 's/.lru_size=.*//')
+                error "$n has lost lru_size: $lrs vs. ${lru_size[count]}"
+            fi
+            let count=count+1
+        done
+
+        cleanup
+        return 0
+}
+run_test 47 "server restart does not make client loss lru_resize settings"
+
+cleanup_48() {
+       trap 0
+
+       # reformat after this test is needed - if test will failed
+       # we will have unkillable file at FS
+       reformat_and_config
+}
+
+test_48() { # bug 17636
+       reformat
+       setup_noconfig
+        check_mount || return 2
+
+       $LFS setstripe $MOUNT -c -1 || return 9
+       $LFS getstripe $MOUNT || return 10
+
+       echo "ok" > $MOUNT/widestripe
+       $LFS getstripe $MOUNT/widestripe || return 11
+
+       trap cleanup_48 EXIT ERR
+
+       # fill acl buffer for avoid expand lsm to them
+       getent passwd | awk -F : '{ print "u:"$1":rwx" }' |  while read acl; do
+           setfacl -m $acl $MOUNT/widestripe
+       done
+
+       stat $MOUNT/widestripe || return 12
+
+       cleanup_48
+       return 0
+}
+run_test 48 "too many acls on file"
+
+# check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE
+test_49() { # bug 17710
+       local OLD_MDS_MKFS_OPTS=$MDS_MKFS_OPTS
+       local OLD_OST_MKFS_OPTS=$OST_MKFS_OPTS
+       local LOCAL_TIMEOUT=20
+
+
+       OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$LOCAL_TIMEOUT $MKFSOPT $OSTOPT"
+
+       reformat
+       start_mds
+       start_ost
+       mount_client $MOUNT
+       check_mount || return 1
+
+       echo "check ldlm_timout..."
+       LDLM_MDS="`do_facet mds 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`"
+
+       if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then
+               error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT"
+       fi
+
+       if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT / 3)) ]; then
+               error "LDLM_TIMEOUT($LDLM_MDS) is not correct"
+       fi
+
+       umount_client $MOUNT
+       stop_ost || return 2
+       stop_mds || return 3
+
+       OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$((LOCAL_TIMEOUT - 1)) $MKFSOPT $OSTOPT"
+       
+       reformat
+       start_mds || return 4
+       start_ost || return 5
+       mount_client $MOUNT || return 6
+       check_mount || return 7
+
+       LDLM_MDS="`do_facet mds 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`"
+
+       if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then
+               error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT"
+       fi
+       
+       if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT - 1)) ]; then
+               error "LDLM_TIMEOUT($LDLM_MDS) is not correct"
+       fi
+               
+       cleanup || return $?
+
+       MDS_MKFS_OPTS=$OLD_MDS_MKFS_OPTS
+       OST_MKFS_OPTS=$OLD_OST_MKFS_OPTS
+}
+run_test 49 "check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE"
+
+cleanup_gss
 equals_msg `basename $0`: test complete
-[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG || true
+[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true