Don't need the p_check ... | p_purge as newer ptools will do
[xfstests-dev.git] / tools / auto-qa
index 09b2fec4e5592a5adf99fd056abac8f2cfd61be7..89854433598694cc1da802792b815cd85da92830 100755 (executable)
@@ -1,6 +1,6 @@
 #!/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
 
 # automatic qa system. 31/08/00 dxm@sgi.com
 
+# configuration (you could tune this)
+
 _log()
 {
     echo "$*" >&2
     echo "$*" >> $LOG
+    sync
 }
 
 _fail()
 {
     if [ "$started" = "1" ] 
     then
-        echo "auto-qa stopped" | wall
-        started=0
+       echo "auto-qa stopped" | wall
+       started=0
     fi
 
     _log "$*"
@@ -52,9 +55,8 @@ _fail()
     # send special email if a cron'd qa run fails
     case $state
     in
-        cron*)
-            mail -s "xfs qa status report" $ADMINEMAIL \
-                < $LOG 2>&1
+       cron*)
+           mail -s "XFS QA status report" $EMAIL < $LOG 2>&1
        ;;
     esac
 
@@ -62,72 +64,44 @@ _fail()
     exit 1
 }
 
-# configuration (you could tune this)
-
-EXTRA="-xfs-qa"
-VERSION="2.4.1"
-BOOT="/boot"
-SOAK_PASSES="-1"
-SOAK_STRESS="10000"
-SOAK_PROC="3"
+_get_kernel_version()
+{
+    [ -x "$KWORKAREA" ] || return
+    [ -r "$KWORKAREA/Makefile" ] \
+       || _fail "can't read kernel makefile $KWORKAREA/Makefile"
+
+    eval `awk '
+       BEGIN { FS = "[ \t=]+" }
+       /^VERSION =/ { a=$2 }
+       /^PATCHLEVEL =/ { b=$2 }
+       /^SUBLEVEL =/ { c=$2 }
+       /^EXTRAVERSION =/ { d=$2 }
+       END { 
+           print "VERSION=" a "." b "." c d " ; SVERSION=" a "." b "." c
+       }
+   ' < $KWORKAREA/Makefile`
+}
 
 # this should be constant
 
 ROOT="$HOME/qa"
 HOST=`hostname -s`
 if [ ! -z "$CVSROOT" ]; then
-    WORKAREA="$ROOT/linux-2.4-xfs"
+    export WORKAREA="$ROOT/xfs-cmds"
 else
-    [ -z "$WORKAREA" ] && WORKAREA="$ROOT/linux-xfs"
+    [ -z "$WORKAREA" ] && export WORKAREA="$ROOT/xfs-cmds"
 fi
-export WORKAREA
+
 
 export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin/ptools:/usr/local/bin"
 STATE=$ROOT/qa.state
-QADIR="$WORKAREA/cmd/xfstests"
+QADIR="$WORKAREA/xfstests"
 SUDO="su -c"
-IMAGE="$BOOT/vmlinuz-$VERSION$EXTRA"
-SYSTEMMAP="$BOOT/System.map-$VERSION$EXTRA"
 CONFIG="$ROOT/$HOST.config"
-MODULES="/lib/modules/$VERSION$EXTRA"
-COMMON_CONFIG="$WORKAREA/cmd/xfstests/common.config"
+COMMON_CONFIG="$WORKAREA/xfstests/common.config"
 SH="/bin/sh"
 LOG="$ROOT/qa.log"
 
-# need to add auto-qa hosts here
-
-case $HOST
-in
-    fuzzy)
-        EMAIL="dxm@larry"
-        ADMINEMAIL="dxm@larry"
-        MODULAR=1
-        ;;
-    bruce)
-        EMAIL="dxm@larry"
-        ADMINEMAIL="dxm@larry"
-        MODULAR=1
-        ;;
-    sagan)
-        EMAIL="dxm@larry"
-        ADMINEMAIL="dxm@larry"
-        MODULAR=0
-        ;;
-    troppo)
-       EMAIL="nathans@larry"
-       ADMINEMAIL="nathans@larry"
-       MODULAR=0
-       ;;
-    goldfish)
-       EMAIL="nathans@larry"
-       ADMINEMAIL="nathans@larry"
-       MODULAR=1
-       ;;
-    *)
-        _fail "auto-qa: no configuration information for host '$HOST'"
-        ;;
-esac
-
 # do some cleanup on exit
 
 _cleanup()
@@ -136,8 +110,8 @@ _cleanup()
     umount $TEST_DEV &> /dev/null
     if [ "$started" = 1 ]
     then
-        echo "auto-qa stopped" | wall
-        started=0
+       echo "auto-qa stopped" | wall
+       started=0
     fi
 }
 status=1
@@ -168,20 +142,20 @@ _change_state()
     
     case $state
     in
-        *-*)
-            case $new
-            in
-                *-*)
-                    _set_state $new
-                    ;;
-                *)
-                    _set_state `echo $state | sed "s/-.*$/-$new/"`
-                    ;;
-            esac
-            ;;
-        *)
-            _set_state $new
-            ;;
+       *-*)
+           case $new
+           in
+               *-*)
+                   _set_state $new
+                   ;;
+               *)
+                   _set_state `echo $state | sed "s/-.*$/-$new/"`
+                   ;;
+           esac
+           ;;
+       *)
+           _set_state $new
+           ;;
     esac
 }
 
@@ -192,13 +166,13 @@ _sudo()
 
 _restart()
 {
-    exec $ROOT/su -c "shutdown -r 2 \"auto-qa rebooting\" &" < /dev/null
+    exec $ROOT/su -c "(shutdown -r now \"auto-qa rebooting\" )&" < /dev/null
 }
 
 _update_autoqa_file()
 {
     SELF="$ROOT/auto-qa"
-    SELF_UPDATE="cmd/xfstests/tools/auto-qa"
+    SELF_UPDATE="xfstests/tools/auto-qa"
     if [ -z "$CVSROOT" ]; then
            cmd="p_tupdate $SELF_UPDATE"
     else
@@ -210,29 +184,86 @@ _update_autoqa_file()
 _update_workarea()
 {
     if [ -z "$CVSROOT" ]; then
-       _log "        *** p_tupdate"
-       cd $WORKAREA 
-       p_tupdate 2>&1 \
-                       || _fail "            !!! p_tupdate failed"
-
-       _log "        *** p_check/p_purge"
-       cd $WORKAREA 
-       p_check -s | p_purge -yiu 2>&1 \
-                       || _fail "            !!! p_check/p_purge failed"
-
-       _log "        *** non-trunk files"
-       cd $WORKAREA 
-       p_list -c 2>&1 \
-                       || _fail "            !!! p_list failed"
+       _log "  *** p_tupdate"
+       cd "$1"
+       WORKAREA="$1" p_tupdate 2>&1 \
+                       || _fail "          !!! p_tupdate failed"
+
+       _log "  *** non-trunk files"
+       cd "$1"
+       WORKAREA="$1" p_list -c 2>&1 \
+                       || _fail "          !!! p_list failed"
     else
-       _log "        *** cvs update"
-       cd $WORKAREA
+       _log "  *** cvs update"
+       cd "$1"
        cvs -z3 update -d
     fi
 }
-            
 
-_log "*** linux-xfs QA (`date`)"
+_test_mkfs_xfs()
+{
+    TEST_OPTIONS=""
+    [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ] && \
+        TEST_OPTIONS="$TEST_OPTIONS -rrtdev=$TEST_RTDEV"
+    [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_LOGDEV" ] && \
+        TEST_OPTIONS="$TEST_OPTIONS -llogdev=$TEST_LOGDEV"
+    _sudo /sbin/mkfs.xfs -f $TEST_OPTIONS $MKFS_OPTIONS $* $TEST_DEV
+    mkfs_status=$?
+    if [ "$USE_BIG_LOOPFS" = yes ]; then
+        [ -z "$RETAIN_AG_BYTES" ] && RETAIN_AG_BYTES=0
+        _sudo $QADIR/tools/ag-wipe -q -r $RETAIN_AG_BYTES $TEST_DEV
+    fi
+    return $mkfs_status
+}
+
+_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"
+    _sudo mount -t xfs $TEST_OPTIONS $* $TEST_DEV $TEST_DIR
+}
+
+_i386_install()
+{
+    _sudo cp -f "$KWORKAREA/arch/i386/boot/bzImage" "$IMAGE" 2>&1 \
+               || _fail "          !!! install kernel failed"
+    _sudo cp -f "$KWORKAREA/System.map" "$SYSTEMMAP" 2>&1 \
+               || _fail "          !!! install kernel failed"
+    if [ -z "$KMODULES" -o "$KMODULES" = yes ]; then
+       _sudo make EXTRAVERSION=-$EXTRA modules_install 2>&1 \
+               || _fail "          !!! install modules failed"
+    fi
+
+    if [ -z "$KINSTALL" -o "$KINSTALL" = lilo ]; then
+       _log "  *** reinit lilo"
+       _sudo /sbin/lilo 2>&1 \
+               || _fail "          !!! reinit lilo failed"
+    fi
+}
+
+_i386_restart()
+{
+    if [ -z "$KINSTALL" -o "$KINSTALL" = lilo ]; then
+       _sudo /sbin/lilo -R $EXTRA $KERNEL_OPTIONS 2>&1 \
+               || _fail "          !!! lilo failed"
+    fi
+}
+
+_ia64_install()
+{
+    echo not yet implemented
+}
+
+_ia64_restart()
+{
+    echo not yet implemented
+}
+
+
+_log "*** XFS QA (`date`)"
 
 _get_state
 
@@ -240,23 +271,23 @@ _get_state
 case $1
 in
     cron-init)
-        case $state
-        in
-            *done)
-                ;;
-            *)
-                _fail "    !!! cron-init while not in \"*done\" state"
-                ;;
-        esac
-        ;;
+       case $state
+       in
+           *done)
+               ;;
+           *)
+               _fail "    !!! cron-init while not in \"*done\" state"
+               ;;
+       esac
+       ;;
     cron-restarted)
-        # we don't auto restart after reboot, but cron the restart
-        # to happen a bit later - it's much easier and safer that way
-        if [ $state != "cron-restarted" ]
-        then
-            _fail "    !!! cron-restarted while not in \"cron-restarted\" state"
-        fi
-        ;;
+       # we don't auto restart after reboot, but cron the restart
+       # to happen a bit later - it's much easier and safer that way
+       if [ "$state" != "cron-restarted" ]
+       then
+           _fail "    !!! cron-restarted while not in \"cron-restarted\" state"
+       fi
+       ;;
 esac
 
 if [ "$1" != "" ]
@@ -264,11 +295,16 @@ then
     _set_state $1
 fi
 
-[ $UID -eq 0 ]          && _fail "    !!! QA most be run as a normal user"
-[ -d $ROOT ]            || _fail "    !!! QA root \"$ROOT\" not found"
-[ -d $WORKAREA ]        || _fail "    !!! QA workarea \"$WORKAREA\" not found"
-[ -r $CONFIG ]          || _fail "    !!! Can't read config file $CONFIG"
-. $COMMON_CONFIG       || _fail "    !!! Couldn't source $COMMON_CONFIG"
+[ "$UID" -eq 0 ]       && _fail "    !!! QA most be run as a normal user"
+[ -d "$ROOT" ]         || _fail "    !!! QA root \"$ROOT\" not found"
+[ -d "$WORKAREA" ]     || _fail "    !!! QA workarea \"$WORKAREA\" not found"
+[ -r "$CONFIG" ]       || _fail "    !!! Can't read config file $CONFIG"
+. "$COMMON_CONFIG"     || _fail "    !!! Couldn't source $COMMON_CONFIG"
+
+_get_kernel_version
+IMAGE="$BOOT/vmlinuz-$EXTRA"
+SYSTEMMAP="$BOOT/System.map-$VERSION-$EXTRA"
+MODULES="/lib/modules/$SVERSION"
 
 cd $ROOT
 
@@ -280,266 +316,268 @@ do
     _get_state
 
     _log "    *** state $state start (`date`)"
-    _log "        (user=$USER, host=$HOST)"
+    _log "     (user=$USER, host=$HOST)"
     new_state=""
 
     case $state
     in
-        *init)
-            echo "" > $ROOT/qa.log
-            echo "" > $ROOT/qa.full
-            _log "******************************************"
-            _log "QA init (`date`)"
-            _log "******************************************"
-
-            _change_state "inited"
-            _update_autoqa_file
-            ;;
-            
-        *inited)
-            _log "        *** QA initialized"
-            new_state="update"
-            ;;
-        
-        *update)
-            _update_workarea
-            new_state="clean"
-            ;;
-
-        *clean)
-            # we need to configure or else we might fail to clean
-            for pkg in attr acl xfsprogs xfsdump xfstests
+       *init)
+           echo "" > $ROOT/qa.log
+           echo "" > $ROOT/qa.full
+           _log "******************************************************"
+           _log "QA init $VERSION (`date`)"
+           _log "******************************************************"
+           _log "--- kernel ($IMAGE)"
+           [ -z "$KMODULES" -o "$KMODULES" = yes ] && \
+               _log "--- modules ($MODULES)"
+
+           _change_state "inited"
+           _update_autoqa_file
+           ;;
+           
+       *inited)
+           _log "      *** QA initialized"
+           new_state="update"
+           ;;
+       
+       *update)
+           _update_workarea "$KWORKAREA"
+           _update_workarea "$WORKAREA"
+           new_state="cleantools"
+           ;;
+
+       *cleantools)
+           # we need to configure or else we might fail to clean
+           for pkg in attr acl xfsprogs dmapi xfsdump xfstests
+           do
+               [ -d $WORKAREA/$pkg ] || continue
+               cd $WORKAREA/$pkg
+               _log "  *** clean $pkg tools"
+               make realclean 2>&1 \
+                       || _fail "          !!! clean $pkg failed"
+           done
+           new_state="buildtools"
+           ;;
+
+       *buildtools)
+           _log "      *** build and install tools"
+           for pkg in attr acl xfsprogs dmapi xfsdump xfstests 
            do
-                cd $WORKAREA/cmd/$pkg
-                _log "        *** clean $pkg tools"
-                make realclean 2>&1 \
-                        || _fail "            !!! clean $pkg failed"
-            done
-
-            _log "        *** clean quota tools"
-            cd $WORKAREA/cmd/quota
-            ( rm -f configure ; autoconf ; sh configure ; make clean ) 2>&1 \
-                        || _fail "            !!! clean quota failed"
-
-            _log "        *** clean linux"
-            cd $WORKAREA/linux
-            make mrproper 2>&1 \
-                        || _fail "            !!! clean linux failed"
-
-            _log "        *** install configuration file"
-            cp -f $CONFIG $WORKAREA/linux/.config 2>&1 \
-                        || _fail "            !!! failed to install config"
-            
-            _log "        *** remove version file"
-            rm -f include/linux/version.h 2>&1 \
-                        || _fail "            !!! failed to clean version"
-
-            new_state="reconfig"
-            ;;
-            
-        *reconfig)
-        
-            _log "        *** reconfig kernel"
-            
-            _change_state "clean" ; # we better start from scratch if this fails
-            
-            cd $WORKAREA/linux
-            # we want to use default options for any new config options.
-            echo -e "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" | \
-                make EXTRAVERSION=$EXTRA oldconfig 2>&1 \
-                        || _fail "            !!! reconfig oldconfig failed"
-            make EXTRAVERSION=$EXTRA dep 2>&1 \
-                        || _fail "            !!! reconfig dep failed"
-
-            new_state="build"
-            ;;
-            
-        *build)
-            _log "        *** build kernel"
-            
-            _change_state "clean" ; # we better start from scratch if this fails
-            
-            cd $WORKAREA/linux
-            make -j2 EXTRAVERSION=$EXTRA bzImage 2>&1 \
-                        || _fail "            !!! build bzImage failed"
-            make -j2 EXTRAVERSION=$EXTRA modules 2>&1 \
-                        || _fail "            !!! build modules failed"
-                                    
-            _log "        *** build and install tools"
-            for pkg in attr acl xfsprogs xfsdump xfstests 
-            do
-                cd $WORKAREA/cmd/$pkg
-
-                # use e-fence - but this will only take effect on configure
-                export MALLOCLIB=/usr/lib/libefence.a
-                make configure 2>&1 \
-                        || _fail "            !!! configure $pkg failed"
-                make default 2>&1 \
-                        || _fail "            !!! build $pkg failed"
-
-                _sudo make install install-dev 2>&1 \
-                        || _fail "            !!! install $pkg failed"
-            done
-
-            _log "        *** build and install quota tools"
-            cd $WORKAREA/cmd/quota
-            rm -f configure
-            
-            # use e-fence - but this will only take effect on configure
-            export MALLOCLIB=/usr/lib/libefence.a
-            ( autoconf ; sh configure --prefix=/usr; make all ) 2>&1 \
-                        || _fail "            !!! build quota failed"
-            _sudo make install 2>&1 \
-                        || _fail "            !!! install quota failed"
-
-            new_state="install"
-            ;;
-            
-        *install)
-            _log "        *** blat old modules"
-            
-            _sudo rm -rf $MODULES
-            
-            _log "        *** install kernel"
-            cd $WORKAREA/linux
-            _sudo cp -f $WORKAREA/linux/arch/i386/boot/bzImage $IMAGE 2>&1 \
-                        || _fail "            !!! install kernel failed"
-            _sudo cp -f $WORKAREA/linux/System.map $SYSTEMMAP 2>&1 \
-                        || _fail "            !!! install kernel failed"
-            _sudo make EXTRAVERSION=$EXTRA modules_install 2>&1 \
-                        || _fail "            !!! install modules failed"
-
-            _log "        *** reinit lilo"
-            _sudo /sbin/lilo 2>&1 \
-                        || _fail "            !!! reinit lilo failed"
-            new_state="restart"
-            ;;
-            
-        *restart)
-            _log "            *** select qa kernel"
-            _sudo /sbin/lilo -R linux-xfs-qa 2>&1 \
-                        || _fail "            !!! lilo failed"
-            
-            _log "            *** prepare to restart"
-            _change_state "restarted"
-            
-            _log "            *** restarting"
+               [ -d $WORKAREA/$pkg ] || continue
+               cd $WORKAREA/$pkg
+
+               # use e-fence - but this will only take effect on configure
+               make configure 2>&1 \
+                       || _fail "          !!! configure $pkg failed"
+               make default 2>&1 \
+                       || _fail "          !!! build $pkg failed"
+
+               _sudo make install install-dev 2>&1 \
+                       || _fail "          !!! install $pkg failed"
+
+               # attr and acl now have install-lib targets as well
+               [ "$pkg" = "attr" -o "$pkg" = "acl" ] || continue
+               _sudo make install-lib 2>&1 \
+                       || _fail "          !!! install $pkg failed"
+           done
+
+           new_state="cleankernel"
+           ;;
+
+       *cleankernel)
+           _log "      *** clean kernel"
+           cd "$KWORKAREA"
+           make mrproper 2>&1 \
+                       || _fail "          !!! clean kernel failed"
+
+           _log "      *** install configuration file"
+           cp -f $CONFIG "$KWORKAREA/.config" 2>&1 \
+                       || _fail "          !!! failed to install config"
+           
+           _log "      *** remove version file"
+           rm -f include/linux/version.h 2>&1 \
+                       || _fail "          !!! failed to clean version"
+
+           new_state="reconfig"
+           ;;
+           
+       *reconfig)
+       
+           _log "      *** reconfig kernel"
+           
+           # we better start from scratch if this fails
+           _change_state "cleankernel"
+           
+           cd "$KWORKAREA"
+           # we want to use default options for any new config options.
+           echo -e "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" | \
+               make EXTRAVERSION=-$EXTRA oldconfig 2>&1 \
+                       || _fail "          !!! reconfig oldconfig failed"
+           make EXTRAVERSION=-$EXTRA dep 2>&1 \
+                       || _fail "          !!! reconfig dep failed"
+
+           new_state="buildkernel"
+           ;;
+           
+       *buildkernel)
+           _log "      *** build kernel"
+           
+           _change_state "cleankernel" ; # we better start from scratch if this fails
+           
+           cd "$KWORKAREA"
+           [ -z "$KTARGET" ] && KTARGET=bzImage
+           [ -z "$KMODULES" -o "$KMODULES" = yes ] && \
+               KTARGET="$KTARGET modules"
+           make -j4 EXTRAVERSION=-$EXTRA $KTARGET 2>&1 \
+                       || _fail "          !!! build $KTARGET failed"
+           new_state="install"
+           ;;
+
+       *install)
+           _log "      *** blat old modules"
+           _sudo rm -rf $MODULES
+           
+           _log "      *** install kernel"
+           cd "$KWORKAREA"
+           case `uname -m`
+           in
+               i386|i686)      _i386_install ;;
+               ia64)           _ia64_install ;;
+           esac
+
+           if [ -z "$KRESTART" -o "$KRESTART" = yes ]; then
+               new_state="restart"
+           else
+               new_state="done"
+           fi
+           ;;
+           
+       *restart)
+           _log "          *** select qa kernel"
+           case `uname -m`
+           in
+               i386|i686)      _i386_restart ;;
+               ia64)           _ia64_restart ;;
+           esac
+
+           _log "          *** prepare to restart"
+           _change_state "restarted"
+           
+           _log "          *** restarting"
 
            _restart # doesn't return
-            ;;
-            
-        *restarted)
-            _log "            *** QA reentered after restart"
-            
-            new_state="check"
-            ;;
-          
-        *check)
-            uname=`uname -ar`
-            _log "            *** uname $uname"
-            _log "            *** user tools"
-            ls -l /sbin/*xfs* /usr/sbin/*xfs* 2>&1
-            _log "            *** kernel"
-            ls -l /boot/*$EXTRA*  2>&1
-            _log "            *** kernel modules"
-            ls -l /lib/modules/$VERSION$EXTRA/kernel/fs/pagebuf/* \
-                  /lib/modules/$VERSION$EXTRA/kernel/fs/xfs/*     \
-                  /lib/modules/$VERSION$EXTRA/kernel/fs/xfs/support/* 
-            
-            if [ $MODULAR -eq 0 ]
-            then
-                new_state="reset"
-            else
-                new_state="probe"
-            fi
-            ;;
-            
-        *probe)
-            _log "            *** modules dependencies"
-            
-            _sudo depmod -a  2>&1 \
-                        || _fail "            !!! failed to depmod -a" 
-            
-            _log "            *** unmounting XFS mounts"
-            
-            _sudo umount -a -t xfs 2>&1
-            
-            _log "            *** removing modules"
-            
-            for m in xfsidbg xfs pagebuf kdbm_pg kdbm_vm
-            do
-                _sudo rmmod $m 2> /dev/null
-            done
-            
-            _log "            *** installing modules"
-
+           ;;
+           
+       *restarted)
+           _log "          *** QA reentered after restart"
+           
+           new_state="check"
+           ;;
+         
+       *check)
+           uname=`uname -a`
+           _log "          *** uname $uname"
+
+           if [ "$MODULAR" -eq 0 ]; then
+               new_state="reset"
+           else
+               new_state="probe"
+           fi
+           ;;
+           
+       *probe)
+           _log "          *** modules dependencies"
+           _sudo depmod -a  2>&1 \
+                       || _fail "          !!! failed to depmod -a" 
+           
+           _log "          *** unmounting XFS mounts"
+           _sudo umount -a -t xfs 2>&1
+           
+           _log "          *** removing modules"
+           for m in xfsidbg xfs kdbm_pg kdbm_vm
+           do
+               _sudo rmmod $m 2> /dev/null
+           done
+           
+           _log "          *** installing modules"
            _sudo modprobe xfs 2>&1 \
-                        || _fail "            !!! failed to modprobe xfs"
-
-            new_state="reset"
-            ;;
-            
-        *reset)
-            
-            _log "            *** unmounting TEST_DEV"
-            
-            _sudo umount $TEST_DEV 2>&1
-            
-            _log "            *** unmounting SCRATCH_DEV"
-            
-            _sudo umount $SCRATCH_DEV 2>&1
-            
-            _log "            *** clean TEST_DEV"
-            
-            _sudo mkfs -t xfs -f $TEST_DEV 2>&1 \
-                        || _fail "            !!! failed to mkfs TEST_DEV"
-            
-            _log "            *** mounting TEST_DEV"
-            
-            _sudo mount -t xfs $TEST_DEV $TEST_DIR 2>&1 \
-                        || _fail "            !!! failed to mount"
-                                    
-            new_state="run"
-            ;;
-            
-            
-        soak-run)
-            cd $QADIR
-            
-            _log "            *** run soak test"
-            _sudo ./soak $SOAK_PASSES $SOAK_STRESS $SOAK_PROC\
-                        || _fail "            !!! failed to run soak test"
-
-            new_state="done"
-            ;;
-            
-        *run)
-            cd $QADIR
-            
-            _log "            *** run tests"
-            _sudo ./check -l -g auto 2>&1 | tee $ROOT/qa.out
-            
-            _log ""
-            _log "            *** send status mail"
-            mail -s "xfs qa status report" $EMAIL < $ROOT/qa.out 2>&1
-        
-            new_state="done"
-            ;;
-            
-        *done)
-            _log "*** QA run complete"
-
-            _success
-            ;;
-            
-        *nothing)
-            new_state="done"
-            _log "    *** do nothing"
-            ;;
-            
-        *)
-            _fail "           !!! unknown state $state"
-            ;;
+                       || _fail "          !!! failed to modprobe xfs"
+
+           new_state="reset"
+           ;;
+           
+       *reset)
+           
+           _log "          *** unmounting TEST_DEV"
+           _sudo umount $TEST_DEV 2>&1
+           
+           _log "          *** unmounting SCRATCH_DEV"
+           _sudo umount $SCRATCH_DEV 2>&1
+           
+           _log "          *** clean TEST_DEV"
+           _test_mkfs_xfs 2>&1 \
+                       || _fail "          !!! failed to mkfs TEST_DEV"
+           
+           _log "          *** mounting TEST_DEV"
+           _test_mount 2>&1 \
+                       || _fail "          !!! failed to mount"
+                                   
+           new_state="run"
+           ;;
+           
+       soak-run)
+           cd $QADIR
+           
+           _log "          *** run soak test"
+           _sudo ./soak $SOAK_PASSES $SOAK_STRESS $SOAK_PROC \
+                       || _fail "          !!! failed to run soak test"
+
+           new_state="done"
+           ;;
+           
+       bench-run)
+           cd $QADIR
+           
+           # $BENCHMARK is typically unset, which equates to "all"
+           #
+           _log "          *** run benchmarks"
+           _sudo ./bench $BENCH_PASSES `id -nu && id -ng` $BENCHMARK \
+                       || _fail "          !!! failed to run benchmarks"
+
+           _log ""
+           _log "          *** send results mail"
+           mail -s "XFS QA benchmark results" $EMAIL < $QADIR/bench.out 2>&1
+       
+           new_state="done"
+           ;;
+           
+       *run)
+           cd $QADIR
+           
+           _log "          *** run tests ($CHECK_OPTIONS)"
+           _sudo ./check -l $CHECK_OPTIONS 2>&1 | tee $ROOT/qa.out
+           
+           _log ""
+           _log "          *** send status mail"
+           mail -s "XFS QA status report" $EMAIL < $ROOT/qa.out 2>&1
+       
+           new_state="done"
+           ;;
+           
+       *done)
+           _log "*** QA run complete"
+
+           _success
+           ;;
+           
+       *nothing)
+           new_state="done"
+           _log "    *** do nothing"
+           ;;
+           
+       *)
+           _fail "        !!! unknown state $state"
+           ;;
     esac
 
     _log "    *** state $state done (`date`)"