All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: fstests@vger.kernel.org
Subject: [PATCH 04/40] fstests: per-test dmflakey instances
Date: Wed, 27 Nov 2024 15:51:34 +1100	[thread overview]
Message-ID: <20241127045403.3665299-5-david@fromorbit.com> (raw)
In-Reply-To: <20241127045403.3665299-1-david@fromorbit.com>

From: Dave Chinner <dchinner@redhat.com>

We can't run two tests that use dmflakey at the same time because
the device name is the same. hence they interfere with each other.
Given dmflakey devices their own per-test names to avoid this
problem.

Also, drop_and_remount is about to fail the fs during unmount, so
ensure the filesystem is going to fail the IO during unmount rather
than retrying forever.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 common/dmflakey | 56 ++++++++++++++++++++++++++++---------------------
 1 file changed, 32 insertions(+), 24 deletions(-)

diff --git a/common/dmflakey b/common/dmflakey
index 52da3b100..75a0a67c8 100644
--- a/common/dmflakey
+++ b/common/dmflakey
@@ -8,15 +8,19 @@ FLAKEY_ALLOW_WRITES=0
 FLAKEY_DROP_WRITES=1
 FLAKEY_ERROR_WRITES=2
 
+export FLAKEY_NAME="flakey-test.$seq"
+export FLAKEY_RTNAME="flakey-rttest.$seq"
+export FLAKEY_LOGNAME="flakey-logtest.$seq"
+
 _init_flakey()
 {
 	# Scratch device
 	local BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
-	FLAKEY_DEV=/dev/mapper/flakey-test
+	export FLAKEY_DEV="/dev/mapper/$FLAKEY_NAME"
 	FLAKEY_TABLE="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 180 0"
 	FLAKEY_TABLE_DROP="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 0 180 1 drop_writes"
 	FLAKEY_TABLE_ERROR="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 0 180 1 error_writes"
-	_dmsetup_create flakey-test --table "$FLAKEY_TABLE" || \
+	_dmsetup_create $FLAKEY_NAME --table "$FLAKEY_TABLE" || \
 		_fatal "failed to create flakey device"
 
 	# Realtime device
@@ -25,7 +29,7 @@ _init_flakey()
 			# Set up the device switch
 			local backing_dev="$SCRATCH_RTDEV"
 			export NON_FLAKEY_RTDEV="$SCRATCH_RTDEV"
-			SCRATCH_RTDEV=/dev/mapper/flakey-rttest
+			SCRATCH_RTDEV=/dev/mapper/$FLAKEY_RTNAME
 		else
 			# Already set up; recreate tables
 			local backing_dev="$NON_FLAKEY_RTDEV"
@@ -34,7 +38,7 @@ _init_flakey()
 		FLAKEY_RTTABLE="0 $BLK_DEV_SIZE flakey $backing_dev 0 180 0"
 		FLAKEY_RTTABLE_DROP="0 $BLK_DEV_SIZE flakey $backing_dev 0 0 180 1 drop_writes"
 		FLAKEY_RTTABLE_ERROR="0 $BLK_DEV_SIZE flakey $backing_dev 0 0 180 1 error_writes"
-		_dmsetup_create flakey-rttest --table "$FLAKEY_RTTABLE" || \
+		_dmsetup_create $FLAKEY_RTNAME --table "$FLAKEY_RTTABLE" || \
 			_fatal "failed to create flakey rt device"
 	fi
 
@@ -44,7 +48,7 @@ _init_flakey()
 			# Set up the device switch
 			local backing_dev="$SCRATCH_LOGDEV"
 			export NON_FLAKEY_LOGDEV="$SCRATCH_LOGDEV"
-			SCRATCH_LOGDEV=/dev/mapper/flakey-logtest
+			SCRATCH_LOGDEV=/dev/mapper/$FLAKEY_LOGNAME
 		else
 			# Already set up; recreate tables
 			local backing_dev="$NON_FLAKEY_LOGDEV"
@@ -53,7 +57,7 @@ _init_flakey()
 		FLAKEY_LOGTABLE="0 $BLK_DEV_SIZE flakey $backing_dev 0 180 0"
 		FLAKEY_LOGTABLE_DROP="0 $BLK_DEV_SIZE flakey $backing_dev 0 0 180 1 drop_writes"
 		FLAKEY_LOGTABLE_ERROR="0 $BLK_DEV_SIZE flakey $backing_dev 0 0 180 1 error_writes"
-		_dmsetup_create flakey-logtest --table "$FLAKEY_LOGTABLE" || \
+		_dmsetup_create $FLAKEY_LOGNAME --table "$FLAKEY_LOGTABLE" || \
 			_fatal "failed to create flakey log device"
 	fi
 }
@@ -74,15 +78,15 @@ _cleanup_flakey()
 {
 	# If dmsetup load fails then we need to make sure to do resume here
 	# otherwise the umount will hang
-	test -n "$NON_FLAKEY_LOGDEV" && $DMSETUP_PROG resume flakey-logtest &> /dev/null
-	test -n "$NON_FLAKEY_RTDEV" && $DMSETUP_PROG resume flakey-rttest &> /dev/null
+	test -n "$NON_FLAKEY_LOGDEV" && $DMSETUP_PROG resume $FLAKEY_LOGNAME &> /dev/null
+	test -n "$NON_FLAKEY_RTDEV" && $DMSETUP_PROG resume $FLAKEY_RTNAME &> /dev/null
 	$DMSETUP_PROG resume flakey-test > /dev/null 2>&1
 
 	$UMOUNT_PROG $SCRATCH_MNT > /dev/null 2>&1
 
-	_dmsetup_remove flakey-test
-	test -n "$NON_FLAKEY_LOGDEV" && _dmsetup_remove flakey-logtest
-	test -n "$NON_FLAKEY_RTDEV" && _dmsetup_remove flakey-rttest
+	_dmsetup_remove $FLAKEY_NAME
+	test -n "$NON_FLAKEY_LOGDEV" && _dmsetup_remove $FLAKEY_LOGNAME
+	test -n "$NON_FLAKEY_RTDEV" && _dmsetup_remove $FLAKEY_RTNAME
 
 	if [ -n "$NON_FLAKEY_LOGDEV" ]; then
 		SCRATCH_LOGDEV="$NON_FLAKEY_LOGDEV"
@@ -125,54 +129,58 @@ _load_flakey_table()
 	# Suspend the scratch device before the log and realtime devices so
 	# that the kernel can freeze and flush the filesystem if the caller
 	# wanted a freeze.
-	$DMSETUP_PROG suspend $suspend_opt flakey-test
-	[ $? -ne 0 ] && _fatal "failed to suspend flakey-test"
+	$DMSETUP_PROG suspend $suspend_opt $FLAKEY_NAME
+	[ $? -ne 0 ] && _fatal "failed to suspend $FLAKEY_NAME"
 
 	if [ -n "$NON_FLAKEY_RTDEV" ]; then
-		$DMSETUP_PROG suspend $suspend_opt flakey-rttest
+		$DMSETUP_PROG suspend $suspend_opt $FLAKEY_RTNAME
 		[ $? -ne 0 ] && _fatal "failed to suspend flakey-rttest"
 	fi
 
 	if [ -n "$NON_FLAKEY_LOGDEV" ]; then
-		$DMSETUP_PROG suspend $suspend_opt flakey-logtest
+		$DMSETUP_PROG suspend $suspend_opt $FLAKEY_LOGNAME
 		[ $? -ne 0 ] && _fatal "failed to suspend flakey-logtest"
 	fi
 
 	# There may be multiple dm targets in the table, and these dm targets
 	# will be joined by the newline ("\n"). Option --table can not cope with
 	# the multiple-targets case, so get them by reading from standard input.
-	echo -e "$table" | $DMSETUP_PROG load flakey-test
-	[ $? -ne 0 ] && _fatal "failed to load table into flakey-test"
+	echo -e "$table" | $DMSETUP_PROG load $FLAKEY_NAME
+	[ $? -ne 0 ] && _fatal "failed to load table into $FLAKEY_NAME"
 
 	if [ -n "$NON_FLAKEY_RTDEV" ]; then
-		echo -e "$rttable" | $DMSETUP_PROG load flakey-rttest
+		echo -e "$rttable" | $DMSETUP_PROG load $FLAKEY_RTNAME
 		[ $? -ne 0 ] && _fatal "failed to load table into flakey-rttest"
 	fi
 
 	if [ -n "$NON_FLAKEY_LOGDEV" ]; then
-		echo -e "$logtable" | $DMSETUP_PROG load flakey-logtest
+		echo -e "$logtable" | $DMSETUP_PROG load $FLAKEY_LOGNAME
 		[ $? -ne 0 ] && _fatal "failed to load table into flakey-logtest"
 	fi
 
 	# Resume devices in the opposite order that we suspended them.
 	if [ -n "$NON_FLAKEY_LOGDEV" ]; then
-		$DMSETUP_PROG resume flakey-logtest
+		$DMSETUP_PROG resume $FLAKEY_LOGNAME
 		[ $? -ne 0 ] && _fatal  "failed to resume flakey-logtest"
 	fi
 
 	if [ -n "$NON_FLAKEY_RTDEV" ]; then
-		$DMSETUP_PROG resume flakey-rttest
+		$DMSETUP_PROG resume $FLAKEY_RTNAME
 		[ $? -ne 0 ] && _fatal  "failed to resume flakey-rttest"
 	fi
 
-	$DMSETUP_PROG resume flakey-test
-	[ $? -ne 0 ] && _fatal  "failed to resume flakey-test"
+	$DMSETUP_PROG resume $FLAKEY_NAME
+	[ $? -ne 0 ] && _fatal  "failed to resume $FLAKEY_NAME"
 }
 
 # Silently drop all writes and unmount/remount to simulate a crash/power
 # failure.
 _flakey_drop_and_remount()
 {
+	# If the full environment is set up, configure ourselves for shutdown
+	type _prepare_for_eio_shutdown &>/dev/null && \
+		_prepare_for_eio_shutdown $FLAKEY_DEV
+
 	_load_flakey_table $FLAKEY_DROP_WRITES
 	_unmount_flakey
 
@@ -188,7 +196,7 @@ _require_flakey_with_error_writes()
 {
 	local SIZE
 	local TABLE
-	local NAME=flakey-test
+	local NAME=$FLAKEY_NAME
 
 	_require_dm_target flakey
 
-- 
2.45.2


  parent reply	other threads:[~2024-11-27  4:54 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-27  4:51 [RFC PATCH 00/40] fstests: concurrent test execution Dave Chinner
2024-11-27  4:51 ` [PATCH 01/40] xfs/448: get rid of assert-on-failure Dave Chinner
2024-11-27  4:51 ` [PATCH 02/40] fstests: cleanup fsstress process management Dave Chinner
2024-11-29  4:03   ` Zorro Lang
2024-12-04 17:57   ` Zorro Lang
2024-12-05  4:42     ` Dave Chinner
2024-12-05  9:57       ` Zorro Lang
2024-12-04 18:04   ` Zorro Lang
2024-12-05  4:55     ` Dave Chinner
2024-12-05 10:05       ` Zorro Lang
2024-11-27  4:51 ` [PATCH 03/40] fuzzy: don't use killall Dave Chinner
2024-11-27  4:51 ` Dave Chinner [this message]
2024-11-27  4:51 ` [PATCH 05/40] fstests: per-test dmerror instances Dave Chinner
2024-11-27  4:51 ` [PATCH 06/40] fstests: per-test dmhuge instances Dave Chinner
2024-11-27  4:51 ` [PATCH 07/40] fstests: per-test dmthin instances Dave Chinner
2024-11-27  4:51 ` [PATCH 08/40] fstests: per-test dmdust instances Dave Chinner
2024-11-27  4:51 ` [PATCH 09/40] fstests: per-test dmdelay instances Dave Chinner
2024-11-27  4:51 ` [PATCH 10/40] fstests: fix DM device creation/removal vs udev races Dave Chinner
2024-11-27  4:51 ` [PATCH 11/40] fstests: use syncfs rather than sync Dave Chinner
2024-11-27  4:51 ` [PATCH 12/40] fstests: clean up mount and unmount operations Dave Chinner
2024-11-27  4:51 ` [PATCH 13/40] fstests: clean up loop device instantiation Dave Chinner
2024-12-01 12:31   ` Zorro Lang
2024-12-01 12:50   ` Zorro Lang
2024-12-07 12:44   ` Zorro Lang
2024-12-07 18:59     ` Zorro Lang
2024-12-07 19:51       ` Zorro Lang
2024-11-27  4:51 ` [PATCH 14/40] fstests: xfs/227 is really slow Dave Chinner
2024-11-27  4:51 ` [PATCH 15/40] fstests: mark tests that are unreliable when run in parallel Dave Chinner
2024-11-27  4:51 ` [PATCH 16/40] fstests: use udevadm wait in preference to settle Dave Chinner
2024-11-29 17:10   ` Darrick J. Wong
2024-11-29 22:33     ` Dave Chinner
2024-11-30  2:34       ` Zorro Lang
2024-11-27  4:51 ` [PATCH 17/40] xfs/442: rescale load so it's not exponential Dave Chinner
2024-11-27  4:51 ` [PATCH 18/40] xfs/176: fix broken setup code Dave Chinner
2024-11-27  4:51 ` [PATCH 19/40] xfs/177: remove unused slab object count location checks Dave Chinner
2024-11-27  4:51 ` [PATCH 20/40] fstests: remove uses of killall where possible Dave Chinner
2024-11-27  4:51 ` [PATCH 21/40] generic/127: reduce runtime Dave Chinner
2024-11-27  4:51 ` [PATCH 22/40] quota: system project quota files need to be shared Dave Chinner
2024-11-27  4:51 ` [PATCH 23/40] dmesg: reduce noise from other tests Dave Chinner
2024-11-27  4:51 ` [PATCH 24/40] fstests: stop using /tmp directly Dave Chinner
2024-11-27  4:51 ` [PATCH 25/40] fstests: scale some tests for high CPU count sanity Dave Chinner
2024-11-29  3:34   ` Zorro Lang
2024-11-27  4:51 ` [PATCH 26/40] generic/310: cleanup killing background processes Dave Chinner
2024-11-27  4:51 ` [PATCH 27/40] filter: handle mount errors from CONFIG_BLK_DEV_WRITE_MOUNTED=y Dave Chinner
2024-11-27  4:51 ` [PATCH 28/40] filters: add a filter that accepts EIO instead of other errors Dave Chinner
2024-11-27  4:51 ` [PATCH 29/40] generic/085: general cleanup for reliability and debugging Dave Chinner
2024-11-27  4:52 ` [PATCH 30/40] fstests: don't use directory stacks Dave Chinner
2024-12-01 12:10   ` Zorro Lang
2024-12-01 21:37     ` Dave Chinner
2024-11-27  4:52 ` [PATCH 31/40] fstests: clean up a couple of dm-flakey tests Dave Chinner
2024-11-27  4:52 ` [PATCH 32/40] fstests: clean up termination of various tests Dave Chinner
2024-11-27  4:52 ` [PATCH 33/40] vfstests: some tests require the testdir to be shared Dave Chinner
2024-11-27  4:52 ` [PATCH 34/40] xfs/629: single extent files should be within tolerance Dave Chinner
2024-11-27  4:52 ` [PATCH 35/40] xfs/076: fix broken mkfs filtering Dave Chinner
2024-11-27  4:52 ` [PATCH 36/40] fstests: capture some failures to seqres.full Dave Chinner
2024-11-27  4:52 ` [PATCH 37/40] fstests: always use fail-at-unmount semantics for XFS Dave Chinner
2024-11-27  4:52 ` [PATCH 38/40] generic/062: don't leave debug files in $here on failure Dave Chinner
2024-11-27  4:52 ` [PATCH 39/40] fstests: quota grace periods unreliable under load Dave Chinner
2024-11-27  4:52 ` [PATCH 40/40] fstests: check-parallel Dave Chinner
2024-11-29  4:22 ` [RFC PATCH 00/40] fstests: concurrent test execution Zorro Lang
2024-12-07  0:09   ` Darrick J. Wong
2024-12-07  9:38     ` Zorro Lang
2024-12-08  0:02     ` Dave Chinner
2024-12-08  6:15       ` Zorro Lang
2024-12-10  0:55         ` Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241127045403.3665299-5-david@fromorbit.com \
    --to=david@fromorbit.com \
    --cc=fstests@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.