QA updates
[xfstests-dev.git] / common.rc
index 3681454f44b921e610743e76d5dc810b91ea29fe..2dc706d888f77c714468d89be9783bc56ad8df4b 100644 (file)
--- a/common.rc
+++ b/common.rc
@@ -1,7 +1,7 @@
 ##/bin/sh
 
 #
-# Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
 # 
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of version 2 of the GNU General Public License as
@@ -45,23 +45,10 @@ umask 022
 # awk
 AWK_PROG=awk
 
-# ps
-PS_HAVE_BSD=false
-PS_ALL_FLAGS=-efw
-
-# host os
-PLATFORM=linux
-
 # extra parameters for fsstress
-FSSTRESS_AVOID="-f resvsp=0 -f unresvsp=0"
-
-# env variables for mem checking
-#EF_PROTECT_FREE=1 # efence
-#export EF_PROTECT_FREE
-# Not used because we get weird errors of form:
-# ElectricFence Exiting: mmap() failed: Cannot allocate memory
+FSSTRESS_AVOID=
 
-export AWK_PROG PS_HAVE_BSD PS_ALL_FLAGS PLATFORM
+export AWK_PROG FSSTRESS_AVOID
 
 # we override mount and mkfs.xfs so we can specify extra options
 
@@ -84,9 +71,78 @@ mount()
     esac
 }
 
-mkfs_xfs()
+_test_mount()
+{
+    TEST_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ] && \
+        TEST_OPTIONS="$TEST_OPTIONS -ortdev=$TEST_RTDEV"
+    [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_LOGDEV" ] && \
+        TEST_OPTIONS="$TEST_OPTIONS -ologdev=$TEST_LOGDEV"
+    mount -t xfs $TEST_OPTIONS $MOUNT_OPTIONS $* $TEST_DEV $TEST_DIR
+}
+
+_scratch_mount_options()
+{
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -ortdev=$SCRATCH_RTDEV"
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -ologdev=$SCRATCH_LOGDEV"
+    echo $SCRATCH_OPTIONS $MOUNT_OPTIONS $* $SCRATCH_DEV $SCRATCH_MNT
+}
+
+_scratch_mount()
+{
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -ortdev=$SCRATCH_RTDEV"
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -ologdev=$SCRATCH_LOGDEV"
+    mount -t xfs $SCRATCH_OPTIONS $MOUNT_OPTIONS $* $SCRATCH_DEV $SCRATCH_MNT
+}
+
+_scratch_mkfs_options()
+{
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -rrtdev=$SCRATCH_RTDEV"
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -llogdev=$SCRATCH_LOGDEV"
+    echo $SCRATCH_OPTIONS $MKFS_OPTIONS $* $SCRATCH_DEV
+}
+
+_scratch_mkfs_xfs()
+{
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -rrtdev=$SCRATCH_RTDEV"
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="$SCRATCH_OPTIONS -llogdev=$SCRATCH_LOGDEV"
+    /sbin/mkfs.xfs -f $SCRATCH_OPTIONS $MKFS_OPTIONS $* $SCRATCH_DEV
+}
+
+_scratch_xfs_db_options()
+{
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="-l$SCRATCH_LOGDEV"
+    echo $SCRATCH_OPTIONS $* $SCRATCH_DEV
+}
+
+_scratch_xfs_logprint()
+{
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="-l$SCRATCH_LOGDEV"
+    /usr/sbin/xfs_logprint $SCRATCH_OPTIONS $* $SCRATCH_DEV
+}
+
+_scratch_xfs_repair()
 {
-    /sbin/mkfs.xfs -f $* $MKFS_OPTIONS
+    SCRATCH_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_OPTIONS="-l$SCRATCH_LOGDEV"
+    /sbin/xfs_repair $SCRATCH_OPTIONS $* $SCRATCH_DEV
 }
 
 _get_pids_by_name()
@@ -375,10 +431,11 @@ _require_scratch()
 # 
 _require_logdev()
 {
-    if [ -z "$SCRATCH_LOGDEV" -o ! -b "$SCRATCH_LOGDEV" ]
-    then
+    [ -z "$SCRATCH_LOGDEV" -o ! -b "$SCRATCH_LOGDEV" ] && \
         _notrun "This test requires a valid \$SCRATCH_LOGDEV" 
-    fi
+    [ "$USE_EXTERNAL" != yes ] && \
+        _notrun "This test requires USE_EXTERNAL to be enabled"
+
     # ensure its not mounted
     umount $SCRATCH_LOGDEV 2>/dev/null
 }
@@ -387,7 +444,7 @@ _require_logdev()
 # 
 _require_loop()
 {
-    modprobe loop
+    modprobe loop >/dev/null 2>&1
     if grep loop /proc/devices >/dev/null 2>&1
     then
        :
@@ -470,7 +527,7 @@ _remount()
 
 }
 
-# run xfs_check on a FS. 
+# run xfs_check and friends on a FS. 
 #
 # if the filesystem is mounted, it's either remounted ro before being
 # checked or it's unmounted and then remounted
@@ -478,15 +535,19 @@ _remount()
 
 USE_REMOUNT=0
 
-_check_fs()
+_check_filesystem()
 {
-    if [ $# -ne 1 ]
+    if [ $# -ne 1 -a $# -ne 2 ]
     then
-       echo "Usage: _check_fs device" 1>&2
+       echo "Usage: _check_fs device [logdevice]" 1>&2
        exit 1
     fi
     
     device=$1
+    if [ $# -eq 2 -a "$2" != "" ]; then
+               extra_log_options="-l$2"
+        extra_mount_options="-ologdev=$2"
+    fi
     type=`_fs_type $device`
     ok=1
     
@@ -503,7 +564,8 @@ _check_fs()
         fi
     fi
 
-    xfs_logprint -t $device 2>&1 | tee $tmp.fs_check | grep -q "<CLEAN>"
+    /usr/sbin/xfs_logprint -t $device $extra_log_options 2>&1 \
+                | tee $tmp.fs_check | grep -q "<CLEAN>"
     if [ $? -ne 0 ]
     then
         echo "_check_fs: filesystem on $device has dirty log (see $seq.full)"
@@ -515,9 +577,8 @@ _check_fs()
         
         ok=0
     fi
-        
-    
-    xfs_check $device 2>&1 | _fix_malloc >$tmp.fs_check 
+
+    /usr/sbin/xfs_check $device 2>&1 | _fix_malloc >$tmp.fs_check 
     if [ -s $tmp.fs_check ]
     then
         echo "_check_fs: filesystem on $device is inconsistent (c) (see $seq.full)"
@@ -530,7 +591,7 @@ _check_fs()
         ok=0
     fi
     
-    if ! xfs_repair -n $device >$tmp.fs_check 2>&1
+    if ! /sbin/xfs_repair -n $device $extra_log_options >$tmp.fs_check 2>&1
     then
         echo "_check_fs: filesystem on $device is inconsistent (r) (see $seq.full)"
         
@@ -548,14 +609,12 @@ _check_fs()
         echo "*** mount output ***"                             >>$seq.full
         mount                                                   >>$seq.full
         echo "*** end mount output"                             >>$seq.full
-    fi
-    
-    if [ "$type" = "xfs" ]
+    elif [ "$type" = "xfs" ]
     then
         # mounted... 
         if [ $USE_REMOUNT -eq 0 ]
         then
-            if ! mount -t xfs $device $mountpoint
+            if ! mount -t xfs $extra_mount_options $device $mountpoint
             then
                 echo "!!! failed to remount $device on $mountpoint"
                 ok=0
@@ -569,6 +628,22 @@ _check_fs()
     return 0    
 }
 
+_check_test_fs()
+{
+    TEST_LOG=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_LOGDEV" ] && \
+        TEST_LOG="$TEST_LOGDEV"
+    _check_filesystem $TEST_DEV $TEST_LOG
+}
+
+_check_scratch_fs()
+{
+    SCRATCH_LOG=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+        SCRATCH_LOG="$SCRATCH_LOGDEV"
+    _check_filesystem $SCRATCH_DEV $SCRATCH_LOG
+}
+
 ################################################################################
 
 [ -d /usr/bsd ] && PATH=$PATH:/usr/bsd
@@ -589,10 +664,15 @@ then
     if [ -z "`_fs_type $TEST_DEV`" ]
     then
         # $TEST_DEV is not mounted
-        if ! mount -t xfs $TEST_DEV $TEST_DIR
+        if ! _test_mount
         then
-            echo "common.rc: could not mount $TEST_DEV on $TEST_DIR"
-            exit 1
+            echo "common.rc: retrying test device mount with external set"
+            [ "$USE_EXTERNAL" != "yes" ] && USE_EXTERNAL=yes
+            if ! _test_mount
+            then
+                echo "common.rc: could not mount $TEST_DEV on $TEST_DIR"
+                exit 1
+            fi
         fi
     fi