summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2023-04-25 17:14:40 -0700
committerZorro Lang <zlang@kernel.org>2023-05-01 00:05:02 +0800
commit2e361b3da66d3537ec9b78d1b7bd12654a3a1ef8 (patch)
tree76be56a1eb565dc6361b778012d521aa97158dfd
parent3e85dd4fe4236d8ef8dc9f9b542a56dd00d16a17 (diff)
misc: add duration for recovery loop testsv2023.05.01
Make it so that we can run recovery loop tests for an exact number of seconds. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Andrey Albershteyn <aalbersh@redhat.com> Signed-off-by: Zorro Lang <zlang@kernel.org>
-rw-r--r--common/rc34
-rwxr-xr-xtests/generic/0191
-rwxr-xr-xtests/generic/3882
-rwxr-xr-xtests/generic/4752
-rwxr-xr-xtests/generic/4821
-rwxr-xr-xtests/generic/6488
6 files changed, 42 insertions, 6 deletions
diff --git a/common/rc b/common/rc
index ad9179e2..37074371 100644
--- a/common/rc
+++ b/common/rc
@@ -5183,6 +5183,40 @@ _require_unix_perm_checking()
esac
}
+# Decide if a soak test should continue looping. The sole parameter is the
+# number of soak loops that the test wants to run by default. The actual
+# loop iteration number is stored in SOAK_LOOPIDX until the loop completes.
+#
+# If the test runner set a SOAK_DURATION value, this predicate will keep
+# looping until it has run for at least that long.
+_soak_loop_running() {
+ local max_soak_loops="$1"
+
+ test -z "$SOAK_LOOPIDX" && SOAK_LOOPIDX=1
+
+ if [ -n "$SOAK_DURATION" ]; then
+ if [ -z "$SOAK_DEADLINE" ]; then
+ SOAK_DEADLINE="$(( $(date +%s) + SOAK_DURATION))"
+ fi
+
+ local now="$(date +%s)"
+ if [ "$now" -gt "$SOAK_DEADLINE" ]; then
+ unset SOAK_DEADLINE
+ unset SOAK_LOOPIDX
+ return 1
+ fi
+ SOAK_LOOPIDX=$((SOAK_LOOPIDX + 1))
+ return 0
+ fi
+
+ if [ "$SOAK_LOOPIDX" -gt "$max_soak_loops" ]; then
+ unset SOAK_LOOPIDX
+ return 1
+ fi
+ SOAK_LOOPIDX=$((SOAK_LOOPIDX + 1))
+ return 0
+}
+
init_rc
################################################################################
diff --git a/tests/generic/019 b/tests/generic/019
index b68dd90c..b81c1d17 100755
--- a/tests/generic/019
+++ b/tests/generic/019
@@ -30,6 +30,7 @@ _cleanup()
}
RUN_TIME=$((20+10*$TIME_FACTOR))
+test -n "$SOAK_DURATION" && RUN_TIME="$SOAK_DURATION"
NUM_JOBS=$((4*LOAD_FACTOR))
BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
FILE_SIZE=$((BLK_DEV_SIZE * 512))
diff --git a/tests/generic/388 b/tests/generic/388
index 9cd737e8..4a5be669 100755
--- a/tests/generic/388
+++ b/tests/generic/388
@@ -42,7 +42,7 @@ _scratch_mkfs >> $seqres.full 2>&1
_require_metadata_journaling $SCRATCH_DEV
_scratch_mount
-for i in $(seq 1 $((50 * TIME_FACTOR)) ); do
+while _soak_loop_running $((50 * TIME_FACTOR)); do
($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p 4 >> $seqres.full &) \
> /dev/null 2>&1
diff --git a/tests/generic/475 b/tests/generic/475
index c426402e..0cbf5131 100755
--- a/tests/generic/475
+++ b/tests/generic/475
@@ -41,7 +41,7 @@ _require_metadata_journaling $SCRATCH_DEV
_dmerror_init
_dmerror_mount
-for i in $(seq 1 $((50 * TIME_FACTOR)) ); do
+while _soak_loop_running $((50 * TIME_FACTOR)); do
($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p $((LOAD_FACTOR * 4)) >> $seqres.full &) \
> /dev/null 2>&1
diff --git a/tests/generic/482 b/tests/generic/482
index 28c83a23..6d8396d9 100755
--- a/tests/generic/482
+++ b/tests/generic/482
@@ -64,6 +64,7 @@ if [ $nr_cpus -gt 8 ]; then
fi
fsstress_args=$(_scale_fsstress_args -w -d $SCRATCH_MNT -n 512 -p $nr_cpus \
$FSSTRESS_AVOID)
+
devsize=$((1024*1024*200 / 512)) # 200m phys/virt size
csize=$((1024*64 / 512)) # 64k cluster size
lowspace=$((1024*1024 / 512)) # 1m low space threshold
diff --git a/tests/generic/648 b/tests/generic/648
index d7bf5697..3b3544ff 100755
--- a/tests/generic/648
+++ b/tests/generic/648
@@ -74,14 +74,14 @@ snap_loop_fs() {
fsstress=($FSSTRESS_PROG $FSSTRESS_AVOID -d "$loopmnt" -n 999999 -p "$((LOAD_FACTOR * 4))")
-for i in $(seq 1 $((25 * TIME_FACTOR)) ); do
+while _soak_loop_running $((25 * TIME_FACTOR)); do
touch $scratch_aliveflag
snap_loop_fs >> $seqres.full 2>&1 &
if ! _mount $loopimg $loopmnt -o loop; then
rm -f $scratch_aliveflag
_metadump_dev $loopimg $seqres.loop.$i.md
- _fail "iteration $i loopimg mount failed"
+ _fail "iteration $SOAK_LOOPIDX loopimg mount failed"
break
fi
@@ -126,12 +126,12 @@ for i in $(seq 1 $((25 * TIME_FACTOR)) ); do
done
if [ $is_unmounted -ne 0 ];then
cat $tmp.unmount.err
- _fail "iteration $i scratch unmount failed"
+ _fail "iteration $SOAK_LOOPIDX scratch unmount failed"
fi
_dmerror_load_working_table
if ! _dmerror_mount; then
_metadump_dev $DMERROR_DEV $seqres.scratch.$i.md
- _fail "iteration $i scratch mount failed"
+ _fail "iteration $SOAK_LOOPIDX scratch mount failed"
fi
done