misc: tag all tests that examine crash recovery in a loop
[xfstests-dev.git] / tests / generic / 388
index 3729aa5..9cd737e 100755 (executable)
@@ -1,4 +1,7 @@
 #! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2016 Red Hat, Inc.  All Rights Reserved.
+#
 # FS QA Test No. 388
 #
 # Test XFS log recovery ordering on v5 superblock filesystems. XFS had a problem
 # Ensure that log recovery does not recover stale modifications and cause
 # spurious corruption reports and/or mount failures.
 #
-#-----------------------------------------------------------------------
-# Copyright (c) 2016 Red Hat, Inc.  All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms 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.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#-----------------------------------------------------------------------
-#
-
-seq=`basename $0`
-seqres=$RESULT_DIR/$seq
-echo "QA output created by $seq"
-
-here=`pwd`
-tmp=/tmp/$$
-status=1       # failure is the default!
-trap "_cleanup; exit \$status" 0 1 2 3 15
+. ./common/preamble
+_begin_fstest shutdown auto log metadata recoveryloop
 
+# Override the default cleanup function.
 _cleanup()
 {
        cd /
@@ -46,32 +26,30 @@ _cleanup()
        _scratch_unmount > /dev/null 2>&1
 }
 
-# get standard environment, filters and checks
-. ./common/rc
+# Import common functions.
 
 # Modify as appropriate.
 _supported_fs generic
-_supported_os Linux
 
 _require_scratch
+_require_local_device $SCRATCH_DEV
 _require_scratch_shutdown
 _require_command "$KILLALL_PROG" "killall"
 
-rm -f $seqres.full
-
 echo "Silence is golden."
 
 _scratch_mkfs >> $seqres.full 2>&1
-_scratch_mount || _fail "mount failed"
+_require_metadata_journaling $SCRATCH_DEV
+_scratch_mount
 
-for i in $(seq 1 50); do
+for i in $(seq 1 $((50 * TIME_FACTOR)) ); do
        ($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p 4 >> $seqres.full &) \
                > /dev/null 2>&1
 
        # purposely include 0 second sleeps to test shutdown immediately after
        # recovery
        sleep $((RANDOM % 3))
-       ./src/godown $SCRATCH_MNT
+       _scratch_shutdown
 
        ps -e | grep fsstress > /dev/null 2>&1
        while [ $? -eq 0 ]; do
@@ -80,8 +58,14 @@ for i in $(seq 1 50); do
                ps -e | grep fsstress > /dev/null 2>&1
        done
 
-       # quit if mount fails so we don't shutdown the host fs
-       _scratch_cycle_mount || _fail "cycle mount failed"
+       # Toggle between rw and ro mounts for recovery. Quit if any mount
+       # attempt fails so we don't shutdown the host fs.
+       if [ $((RANDOM % 2)) -eq 0 ]; then
+               _scratch_cycle_mount || _fail "cycle mount failed"
+       else
+               _scratch_cycle_mount "ro" || _fail "cycle ro mount failed"
+               _scratch_cycle_mount || _fail "cycle rw mount failed"
+       fi
 done
 
 # success, all done