public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] fstests: btrfs/020: use device pool to avoid busy TEST_DEV
@ 2025-05-13 23:03 Qu Wenruo
  2025-05-14  0:12 ` Anand Jain
  0 siblings, 1 reply; 2+ messages in thread
From: Qu Wenruo @ 2025-05-13 23:03 UTC (permalink / raw)
  To: linux-btrfs, fstests

[BUG]
There is an internal report about btrfs/020 failure, the 020.full looks
like this:

  ERROR: ioctl(DEV_REPLACE_START) failed on "/opt/test/020.5968.mnt": Read-only file system

  Performing full device TRIM /dev/loop8 (256.00MiB) ...
  _check_btrfs_filesystem: filesystem on /dev/loop0 is inconsistent
  *** fsck.btrfs output ***
  ERROR: /dev/loop0 is currently mounted, use --force if you really intend to check the filesystem
  Opening filesystem to check...
  *** end fsck.btrfs output
  *** mount output ***
  [...]
  /dev/loop0 on /opt/test type btrfs (rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)
  *** end mount output

[CAUSE]
Unfortunately I can not reproduce the situation here, but it looks like
by somehow we didn't unmount the TEST_DEV before checking it.

This may or may not be caused by the fact we're using loop back devices
on TEST_MNT.

[FIX]
For this particluar test case, we really do not need to use TEST_MNT and
create complex loopback devices.

We can just ask for 3 devices from the device pool, use 2 for the raid1
fs, and then use the spare one for dev replace.

This should greately simplify the test case setup and cleanup, thus
avoid the above busy TEST_DEV and false test failure.

Furthermore use the golden output to match the error message, and since
we're here also handle a bug in btrfs-progs where the error message is
incorrectly split into two lines.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
Changelog:
v2:
- Use golden output to match the error
- Add a filter to filter out the unexpected new line
  Btrfs-progs will also get a fix for the incorrect line break.
---
 tests/btrfs/020     | 47 +++++++++++++++------------------------------
 tests/btrfs/020.out |  2 +-
 2 files changed, 17 insertions(+), 32 deletions(-)

diff --git a/tests/btrfs/020 b/tests/btrfs/020
index 7e5c6fd7..3b5f9f2f 100755
--- a/tests/btrfs/020
+++ b/tests/btrfs/020
@@ -12,44 +12,29 @@
 . ./common/preamble
 _begin_fstest auto quick replace volume
 
-# Override the default cleanup function.
-_cleanup()
-{
-	cd /
-	rm -f $tmp.*
-	$UMOUNT_PROG $loop_mnt
-	_destroy_loop_device $loop_dev1
-	losetup -d $loop_dev2 >/dev/null 2>&1
-	_destroy_loop_device $loop_dev3
-	rm -rf $loop_mnt
-	rm -f $fs_img1 $fs_img2 $fs_img3
-}
-
 . ./common/filter
 
-_require_test
-_require_loop
+_require_scratch_dev_pool 3
 
-echo "Silence is golden"
+_fixed_by_kernel_commit bbb651e469d9 \
+	"Btrfs: don't allow the replace procedure on read only filesystems"
 
-loop_mnt=$TEST_DIR/$seq.$$.mnt
-fs_img1=$TEST_DIR/$seq.$$.img1
-fs_img2=$TEST_DIR/$seq.$$.img2
-fs_img3=$TEST_DIR/$seq.$$.img3
-mkdir $loop_mnt
-$XFS_IO_PROG -f -c "truncate 256m" $fs_img1 >>$seqres.full 2>&1
-$XFS_IO_PROG -f -c "truncate 256m" $fs_img2 >>$seqres.full 2>&1
-$XFS_IO_PROG -f -c "truncate 256m" $fs_img3 >>$seqres.full 2>&1
+_scratch_dev_pool_get 2
+_spare_dev_get
 
-loop_dev1=`_create_loop_device $fs_img1`
-loop_dev2=`_create_loop_device $fs_img2`
-loop_dev3=`_create_loop_device $fs_img3`
+_scratch_pool_mkfs -m raid1 -d raid1 >> $seqres.full 2>&1
+_scratch_mount -o ro
 
-_mkfs_dev -m raid1 -d raid1 $loop_dev1 $loop_dev2 >>$seqres.full 2>&1
-_mount -o ro $loop_dev1 $loop_mnt
+# The replace is expected to fail.
+#
+# There is an unexpected newline at the middle of the error message, filter it out
+# to handle older progs (unexpected new line) and newer ones (new line removed).
+$BTRFS_UTIL_PROG replace start -B 2 $SPARE_DEV $SCRATCH_MNT 2>&1 >> $seqres.full | \
+	sed -e "/^$/d" | _filter_scratch
 
-$BTRFS_UTIL_PROG replace start -B 2 $loop_dev3 $loop_mnt >>$seqres.full 2>&1 && \
-_fail "FAIL: Device replaced on RO btrfs"
+_scratch_unmount
+_spare_dev_put
+_scratch_dev_pool_put
 
 status=0
 exit
diff --git a/tests/btrfs/020.out b/tests/btrfs/020.out
index 20d7944e..a3ede235 100644
--- a/tests/btrfs/020.out
+++ b/tests/btrfs/020.out
@@ -1,2 +1,2 @@
 QA output created by 020
-Silence is golden
+ERROR: ioctl(DEV_REPLACE_START) failed on "SCRATCH_MNT": Read-only file system
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] fstests: btrfs/020: use device pool to avoid busy TEST_DEV
  2025-05-13 23:03 [PATCH v2] fstests: btrfs/020: use device pool to avoid busy TEST_DEV Qu Wenruo
@ 2025-05-14  0:12 ` Anand Jain
  0 siblings, 0 replies; 2+ messages in thread
From: Anand Jain @ 2025-05-14  0:12 UTC (permalink / raw)
  To: Qu Wenruo, linux-btrfs, fstests


> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> Changelog:
> v2:
> - Use golden output to match the error
> - Add a filter to filter out the unexpected new line
>    Btrfs-progs will also get a fix for the incorrect line break.

Tested for backward compatibility with and without the btrfs-progs patch.

Reviewed-by: Anand Jain <anand.jain@oracle.com>

Thanks, Anand

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-05-14  0:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-13 23:03 [PATCH v2] fstests: btrfs/020: use device pool to avoid busy TEST_DEV Qu Wenruo
2025-05-14  0:12 ` Anand Jain

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox