#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved.
#
-# Copyright (c) 2000-2002 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
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like. Any license provided herein, whether implied or
-# otherwise, applies only to this software file. Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
-# Mountain View, CA 94043, or:
-#
-# http://www.sgi.com
-#
-# For further information regarding this notice, see:
-#
-# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
-#
-
# automatic qa system. 31/08/00 dxm@sgi.com
-
-# configuration (you could tune this)
+#
+# Usage: auto_qa start-state [stop-state]
+# Do auto_qa from start-state up to stop-state inclusive
+# or if no stop-state given then do it until reach "done" state.
+#
_log()
{
case $state
in
cron*)
- mail -s "XFS QA status report" $EMAIL \
- < $LOG 2>&1
+ mail -s "XFS QA status report" $EMAIL < $LOG 2>&1
;;
esac
_get_kernel_version()
{
- [ -x "$WORKAREA" ] \
- || _fail "can't access workarea $WORKAREA"
- [ -r "$WORKAREA/linux/Makefile" ] \
- || _fail "can't read makefile $WORKAREA/linux/Makefile"
+ [ -x "$KWORKAREA" ] || return
+ [ -r "$KWORKAREA/Makefile" ] \
+ || _fail "can't read kernel makefile $KWORKAREA/Makefile"
eval `awk '
BEGIN { FS = "[ \t=]+" }
END {
print "VERSION=" a "." b "." c d " ; SVERSION=" a "." b "." c
}
- ' < $WORKAREA/linux/Makefile`
+ ' < $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"
CONFIG="$ROOT/$HOST.config"
-COMMON_CONFIG="$WORKAREA/cmd/xfstests/common.config"
+COMMON_CONFIG="$QADIR/common/config"
SH="/bin/sh"
LOG="$ROOT/qa.log"
_change_state()
{
new=$1
+
+ # if have state XXXX-state then preserve XXXX-newstate
case $state
in
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"
- if [ -z "$CVSROOT" ]; then
- cmd="p_tupdate $SELF_UPDATE"
- else
- cmd="cvs -z3 update $SELF_UPDATE"
- fi
- exec $SH -c "cd $WORKAREA ; $cmd; chmod +x $SELF_UPDATE ; exec $SELF"
-}
-
_update_workarea()
{
if [ -z "$CVSROOT" ]; then
_log " *** p_tupdate"
- cd $WORKAREA
- p_tupdate 2>&1 \
+ cd "$1"
+ WORKAREA="$1" 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 \
+ cd "$1"
+ WORKAREA="$1" p_list -c 2>&1 \
|| _fail " !!! p_list failed"
else
_log " *** cvs update"
- cd $WORKAREA
+ cd "$1"
cvs -z3 update -d
fi
}
TEST_OPTIONS="$TEST_OPTIONS -llogdev=$TEST_LOGDEV"
_sudo /sbin/mkfs.xfs -f $TEST_OPTIONS $MKFS_OPTIONS $* $TEST_DEV
mkfs_status=$?
- [ "$USE_BIG_LOOPFS" = yes ] && \
- _sudo $QADIR/tools/ag-wipe -c $TEST_DEV >/dev/null
+ 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_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
+ _sudo mount -t xfs $TEST_OPTIONS $MOUNT_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
+}
-_log "*** linux-xfs QA (`date`)"
+_ia64_install()
+{
+ echo not yet implemented
+}
+
+_ia64_restart()
+{
+ echo not yet implemented
+}
+
+_check_kernel()
+{
+ [ -d "$KWORKAREA" ] || _fail " !!! QA kernel workarea \"$KWORKAREA\" not found"
+ [ -r "$CONFIG" ] || _fail " !!! Can't read config file $CONFIG"
+}
+
+
+_log "*** XFS QA (`date`)"
_get_state
;;
esac
-if [ "$1" != "" ]
-then
- _set_state $1
-fi
+[ -n "$1" ] && _set_state $1
+[ -n "$2" ] && stop_state=$2
[ "$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"
+cd $QADIR
. "$COMMON_CONFIG" || _fail " !!! Couldn't source $COMMON_CONFIG"
_get_kernel_version
-IMAGE="$BOOT/vmlinuz$EXTRA"
-SYSTEMMAP="$BOOT/System.map-$VERSION$EXTRA"
+IMAGE="$BOOT/vmlinuz-$EXTRA"
+SYSTEMMAP="$BOOT/System.map-$VERSION-$EXTRA"
MODULES="/lib/modules/$SVERSION"
cd $ROOT
_log " (user=$USER, host=$HOST)"
new_state=""
+ start_state=$state
+
case $state
in
*init)
_log "******************************************************"
_log "QA init $VERSION (`date`)"
_log "******************************************************"
- _log "--- kernel ($IMAGE)"
- _log "--- modules ($MODULES)"
-
- _change_state "inited"
- _update_autoqa_file
- ;;
-
- *inited)
- _log " *** QA initialized"
- new_state="update"
+ new_state="updatetools"
;;
- *update)
- _update_workarea
- new_state="clean"
+ *updatetools)
+ _update_workarea "$WORKAREA"
+ new_state="cleantools"
;;
- *clean)
+ *cleantools)
# we need to configure or else we might fail to clean
- for pkg in attr acl xfsprogs dmapi xfsdump xfstests
+ for pkg in attr acl xfsprogs xfsdump xfstests
do
- cd $WORKAREA/cmd/$pkg
+ [ -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 xfsdump xfstests
+ do
+ [ -d $WORKAREA/$pkg ] || continue
+ cd $WORKAREA/$pkg
+
+ 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="updatekernel"
+ ;;
- _log " *** clean linux"
- cd $WORKAREA/linux
+ *updatekernel)
+ _check_kernel
+ _update_workarea "$KWORKAREA"
+ new_state="cleankernel"
+ ;;
+
+ *cleankernel)
+ _check_kernel
+ _log " *** clean kernel"
+ cd "$KWORKAREA"
make mrproper 2>&1 \
- || _fail " !!! clean linux failed"
+ || _fail " !!! clean kernel failed"
_log " *** install configuration file"
- cp -f $CONFIG $WORKAREA/linux/.config 2>&1 \
+ cp -f $CONFIG "$KWORKAREA/.config" 2>&1 \
|| _fail " !!! failed to install config"
_log " *** remove version file"
;;
*reconfig)
-
+ _check_kernel
_log " *** reconfig kernel"
- _change_state "clean" ; # we better start from scratch if this fails
+ # we better start from scratch if this fails
+ _change_state "cleankernel"
- cd $WORKAREA/linux
+ 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 \
+ make EXTRAVERSION=-$EXTRA oldconfig 2>&1 \
|| _fail " !!! reconfig oldconfig failed"
- make EXTRAVERSION=$EXTRA dep 2>&1 \
+ make EXTRAVERSION=-$EXTRA dep 2>&1 \
|| _fail " !!! reconfig dep failed"
- new_state="buildtools"
- ;;
-
- *buildtools)
- _log " *** build and install tools"
- for pkg in attr acl xfsprogs dmapi xfsdump xfstests
- do
- cd $WORKAREA/cmd/$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="buildkernel"
;;
-
+
*buildkernel)
+ _check_kernel
_log " *** build kernel"
-
- _change_state "clean" ; # we better start from scratch if this fails
-
- cd $WORKAREA/linux
- make -j4 EXTRAVERSION=$EXTRA bzImage modules 2>&1 \
- || _fail " !!! build bzImage/modules failed"
+ _log " --- kernel ($IMAGE)"
+ [ -z "$KMODULES" -o "$KMODULES" = yes ] && \
+ _log " --- modules ($MODULES)"
+
+ _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)
+ _check_kernel
_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"
+ cd "$KWORKAREA"
+ case `uname -m`
+ in
+ i386|i686) _i386_install ;;
+ ia64) _ia64_install ;;
+ esac
+
new_state="restart"
;;
*restart)
_log " *** select qa kernel"
- _sudo /sbin/lilo -R linux-xfs-qa $KERNEL_OPTIONS 2>&1 \
- || _fail " !!! lilo failed"
-
+ case `uname -m`
+ in
+ i386|i686) _i386_restart ;;
+ ia64) _ia64_restart ;;
+ esac
+
_log " *** prepare to restart"
_change_state "restarted"
;;
*check)
- uname=`uname -ar`
+ uname=`uname -a`
_log " *** uname $uname"
- _log " *** kernel"
- ls -l /boot/*$EXTRA* 2>&1
- _log " *** kernel modules"
- [ -d /lib/modules/$SVERSION$EXTRA/kernel/fs/xfs ] && \
- ls -l /lib/modules/$SVERSION$EXTRA/kernel/fs/xfs/*
-
- if [ "$MODULAR" -eq 0 ]
- then
+
+ if [ "$MODULAR" -eq 0 ]; then
new_state="reset"
else
new_state="probe"
*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"
*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"
;;
*done)
- _log "*** QA run complete"
+ _log "*** requested QA state transitions complete"
_success
;;
_log " *** state $state done (`date`)"
[ "$new_state" = "" ] && _fail " !!! no new state set"
+
+ if [ -n "$stop_state" ]
+ then
+ # remove hyphen prefixes
+ s1=`echo $start_state | sed 's/.*-//'`
+ s2=`echo $stop_state | sed 's/.*-//'`
+
+ if [ $s1 = $s2 ]
+ then
+ # we have been requested to stop here and not go on
+ new_state="done"
+ fi
+ fi
+
_change_state $new_state
done