Whamcloud - gitweb
LU-5499 tests: keep /sbin/mount.lustre until cleanup
[fs/lustre-release.git] / lustre / tests / test-framework.sh
index 95b4c1b..db1990e 100755 (executable)
@@ -10,7 +10,6 @@ export EJOURNAL=${EJOURNAL:-""}
 export REFORMAT=${REFORMAT:-""}
 export WRITECONF=${WRITECONF:-""}
 export VERBOSE=${VERBOSE:-false}
-export CATASTROPHE=${CATASTROPHE:-/proc/sys/lnet/catastrophe}
 export GSS=false
 export GSS_KRB5=false
 export GSS_PIPEFS=false
@@ -540,15 +539,27 @@ load_modules_local() {
        $LCTL modules > $OGDB/ogdb-$HOSTNAME
 
        # 'mount' doesn't look in $PATH, just sbin
-       local MOUNT_LUSTRE=$LUSTRE/utils/mount.lustre
-       if [ -f $MOUNT_LUSTRE ]; then
-               if grep -qe "/sbin/mount\.lustre " /proc/mounts; then
-                       cmp $MOUNT_LUSTRE /sbin/mount.lustre ||
-                               umount /sbin/mount.lustre
+       local mount_lustre=$LUSTRE/utils/mount.lustre
+       if [ -f $mount_lustre ]; then
+               local sbin_mount=/sbin/mount.lustre
+               if grep -qe "$sbin_mount " /proc/mounts; then
+                       cmp $mount_lustre $sbin_mount || umount $sbin_mount
                fi
-               if ! grep -qe "/sbin/mount\.lustre " /proc/mounts; then
-                       [ ! -f /sbin/mount.lustre ] && touch /sbin/mount.lustre
-                       mount --bind $MOUNT_LUSTRE /sbin/mount.lustre
+               if ! grep -qe "$sbin_mount " /proc/mounts; then
+                       [ ! -f "$sbin_mount" ] && touch "$sbin_mount"
+                       if [ ! -s "$sbin_mount" -a -w "$sbin_mount" ]; then
+                               cat <<- EOF > "$sbin_mount"
+                               #!/bin/sh
+                               #STUB MARK
+                               echo "This $sbin_mount just a mountpoint." 1>&2
+                               echo "It is never supposed to be run." 1>&2
+                               logger -p emerg -- "using stub $sbin_mount $@"
+                               exit 1
+                               EOF
+                               chmod a+x $sbin_mount
+                       fi
+                       mount --bind $mount_lustre $sbin_mount ||
+                               error "can't bind $mount_lustre to $sbin_mount"
                fi
        fi
 }
@@ -594,16 +605,17 @@ unload_modules() {
                fi
        fi
 
-    if grep -qe "/sbin/mount\.lustre" /proc/mounts; then
-        umount /sbin/mount.lustre || true
-        [ -w /sbin/mount.lustre -a ! -s /sbin/mount.lustre ] && \
-            rm -f /sbin/mount.lustre || true
-    fi
+       local sbin_mount=/sbin/mount.lustre
+       if grep -qe "$sbin_mount " /proc/mounts; then
+               umount $sbin_mount || true
+               [ -s $sbin_mount ] && ! grep -q "STUB MARK" $sbin_mount ||
+                       rm -f $sbin_mount
+       fi
 
-    check_mem_leak || return 254
+       check_mem_leak || return 254
 
-    echo "modules unloaded."
-    return 0
+       echo "modules unloaded."
+       return 0
 }
 
 fs_log_size() {
@@ -719,7 +731,8 @@ init_gss() {
         fi
 
         if [ -n "$LGSS_KEYRING_DEBUG" ]; then
-            echo $LGSS_KEYRING_DEBUG > /proc/fs/lustre/sptlrpc/gss/lgss_keyring/debug_level
+               lctl set_param -n \
+                   sptlrpc.gss.lgss_keyring.debug_level=$LGSS_KEYRING_DEBUG
         fi
     fi
 }
@@ -1947,8 +1960,12 @@ stop_client_loads() {
 
 # verify that lustre actually cleaned up properly
 cleanup_check() {
-       [ -f "$CATASTROPHE" ] && [[ $(< $CATASTROPHE) -ne 0 ]] &&
-               error "LBUG/LASSERT detected"
+       VAR=$(lctl get_param -n catastrophe 2>&1)
+       if [ $? = 0 ] ; then
+               if [ $VAR != 0 ]; then
+                       error "LBUG/LASSERT detected"
+               fi
+       fi
        BUSY=$(dmesg | grep -i destruct || true)
        if [ -n "$BUSY" ]; then
                echo "$BUSY" 1>&2
@@ -4114,10 +4131,6 @@ check_and_cleanup_lustre() {
                cleanupall -f || error "cleanup failed"
                unset I_MOUNTED
        fi
-
-       if grep -qe "/sbin/mount\.lustre " /proc/mounts; then
-               umount /sbin/mount.lustre
-       fi
 }
 
 #######
@@ -4368,13 +4381,26 @@ drop_ldlm_cancel() {
        return $RC
 }
 
-drop_bl_callback() {
+drop_bl_callback_once() {
+       rc=0
+       do_facet client lctl set_param ldlm.namespaces.*.early_lock_cancel=0
 #define OBD_FAIL_LDLM_BL_CALLBACK_NET                  0x305
-       RC=0
        do_facet client lctl set_param fail_loc=0x80000305
-       do_facet client "$@" || RC=$?
+       do_facet client "$@" || rc=$?
        do_facet client lctl set_param fail_loc=0
-       return $RC
+       do_facet client lctl set_param ldlm.namespaces.*.early_lock_cancel=1
+       return $rc
+}
+
+drop_bl_callback() {
+       rc=0
+       do_facet client lctl set_param ldlm.namespaces.*.early_lock_cancel=0
+#define OBD_FAIL_LDLM_BL_CALLBACK_NET                  0x305
+       do_facet client lctl set_param fail_loc=0x305
+       do_facet client "$@" || rc=$?
+       do_facet client lctl set_param fail_loc=0
+       do_facet client lctl set_param ldlm.namespaces.*.early_lock_cancel=1
+       return $rc
 }
 
 drop_ldlm_reply() {
@@ -4415,10 +4441,31 @@ set_nodes_failloc () {
 
 cancel_lru_locks() {
     $LCTL mark "cancel_lru_locks $1 start"
-    for d in `lctl get_param -N ldlm.namespaces.*.lru_size | egrep -i $1`; do
-        $LCTL set_param -n $d=clear
-    done
-    $LCTL get_param ldlm.namespaces.*.lock_unused_count | egrep -i $1 | grep -v '=0'
+
+    if [ $1 != "MGC" ]; then
+       for d in $(lctl get_param -N ldlm.namespaces.*.lru_size |
+                egrep -i $1); do
+           $LCTL set_param -n $d=clear
+       done
+       $LCTL get_param ldlm.namespaces.*.lock_unused_count | egrep -i $1 |
+               grep -v '=0'
+    else
+       for d in $(find \
+               /{proc,sys}/fs/lustre/ldlm/namespaces/*$1*/lru_size \
+               2> /dev/null); do
+           echo "clear" > $d
+       done
+
+       for d in $(find \
+               /{proc,sys}/fs/lustre/ldlm/namespaces/*$1*/lock_unused_count \
+               2> /dev/null); do
+           if [ $(cat $d) != 0 ]; then
+               echo "ldlm.namespaces.$(echo "$d" |
+                       cut -f 7 -d'/').lock_unused_count=$(cat $d)"
+           fi
+       done
+    fi
+
     $LCTL mark "cancel_lru_locks $1 stop"
 }
 
@@ -5500,14 +5547,17 @@ restore_lustre_params() {
 
 check_catastrophe() {
        local rnodes=${1:-$(comma_list $(remote_nodes_list))}
-       local C=$CATASTROPHE
-       [ -f $C ] && [ $(cat $C) -ne 0 ] && return 1
+       VAR=$(lctl get_param -n catastrophe 2>&1)
+       if [ $? = 0 ] ; then
+               if [ $VAR != 0 ]; then
+                       return 1
+               fi
+       fi
 
        [ -z "$rnodes" ] && return 0
 
        local data
-       data=$(do_nodes "$rnodes" "rc=\\\$([ -f $C ] &&
-               echo \\\$(< $C) || echo 0);
+       data=$(do_nodes "$rnodes" "rc=\\\$(lctl get_param -n catastrophe);
                if [ \\\$rc -ne 0 ]; then echo \\\$(hostname): \\\$rc; fi
                exit \\\$rc")
        local rc=$?