* [PATCH] fstests: btrfs/020: use device pool to avoid busy TEST_DEV
@ 2025-05-09 5:37 Qu Wenruo
2025-05-13 9:24 ` Anand Jain
0 siblings, 1 reply; 2+ messages in thread
From: Qu Wenruo @ 2025-05-09 5:37 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.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
tests/btrfs/020 | 51 +++++++++++++++++--------------------------------
1 file changed, 17 insertions(+), 34 deletions(-)
diff --git a/tests/btrfs/020 b/tests/btrfs/020
index 7e5c6fd7..8c05196b 100755
--- a/tests/btrfs/020
+++ b/tests/btrfs/020
@@ -12,44 +12,27 @@
. ./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
+
+_fixed_by_kernel_commit bbb651e469d9 \
+ "Btrfs: don't allow the replace procedure on read only filesystems"
+
+_scratch_dev_pool_get 2
+_spare_dev_get
+
+_scratch_pool_mkfs -m raid1 -d raid1 >> $seqres.full 2>&1
+_scratch_mount -o ro
+
+$BTRFS_UTIL_PROG replace start -B 2 $SPARE_DEV $SCRATCH_MNT >> $seqres.full 2>&1 && \
+ echo "FAIL: Device replaced on RO btrfs"
+
+_scratch_unmount
+_spare_dev_put
+_scratch_dev_pool_put
echo "Silence is golden"
-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
-
-loop_dev1=`_create_loop_device $fs_img1`
-loop_dev2=`_create_loop_device $fs_img2`
-loop_dev3=`_create_loop_device $fs_img3`
-
-_mkfs_dev -m raid1 -d raid1 $loop_dev1 $loop_dev2 >>$seqres.full 2>&1
-_mount -o ro $loop_dev1 $loop_mnt
-
-$BTRFS_UTIL_PROG replace start -B 2 $loop_dev3 $loop_mnt >>$seqres.full 2>&1 && \
-_fail "FAIL: Device replaced on RO btrfs"
-
status=0
exit
--
2.47.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] fstests: btrfs/020: use device pool to avoid busy TEST_DEV
2025-05-09 5:37 [PATCH] fstests: btrfs/020: use device pool to avoid busy TEST_DEV Qu Wenruo
@ 2025-05-13 9:24 ` Anand Jain
0 siblings, 0 replies; 2+ messages in thread
From: Anand Jain @ 2025-05-13 9:24 UTC (permalink / raw)
To: Qu Wenruo, linux-btrfs, fstests
On 9/5/25 13:37, Qu Wenruo wrote:
> [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.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> tests/btrfs/020 | 51 +++++++++++++++++--------------------------------
> 1 file changed, 17 insertions(+), 34 deletions(-)
>
> diff --git a/tests/btrfs/020 b/tests/btrfs/020
> index 7e5c6fd7..8c05196b 100755
> --- a/tests/btrfs/020
> +++ b/tests/btrfs/020
> @@ -12,44 +12,27 @@
> . ./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
> +
> +_fixed_by_kernel_commit bbb651e469d9 \
> + "Btrfs: don't allow the replace procedure on read only filesystems"
> +
> +_scratch_dev_pool_get 2
> +_spare_dev_get
> +
> +_scratch_pool_mkfs -m raid1 -d raid1 >> $seqres.full 2>&1
> +_scratch_mount -o ro
> +
> +$BTRFS_UTIL_PROG replace start -B 2 $SPARE_DEV $SCRATCH_MNT >> $seqres.full 2>&1 && \
> + echo "FAIL: Device replaced on RO btrfs"
Please check for failure using golden output.
$BTRFS_UTIL_PROG replace start -B 2 $SPARE_DEV $SCRATCH_MNT >>
$seqres.full | _filter_scratch
And in the golden output 020.out:
ERROR: ioctl(DEV_REPLACE_START) failed on "SCRATCH_MNT": Read-only file
system
Otherwise, looks good.
Thanks, Anand
> + echo "FAIL: Device replaced on RO btrfs"
> +
> +_scratch_unmount
> +_spare_dev_put
> +_scratch_dev_pool_put
>
> echo "Silence is golden"
>
> -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
> -
> -loop_dev1=`_create_loop_device $fs_img1`
> -loop_dev2=`_create_loop_device $fs_img2`
> -loop_dev3=`_create_loop_device $fs_img3`
> -
> -_mkfs_dev -m raid1 -d raid1 $loop_dev1 $loop_dev2 >>$seqres.full 2>&1
> -_mount -o ro $loop_dev1 $loop_mnt
> -
> -$BTRFS_UTIL_PROG replace start -B 2 $loop_dev3 $loop_mnt >>$seqres.full 2>&1 && \
> -_fail "FAIL: Device replaced on RO btrfs"
> -
> status=0
> exit
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-05-13 9:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-09 5:37 [PATCH] fstests: btrfs/020: use device pool to avoid busy TEST_DEV Qu Wenruo
2025-05-13 9:24 ` Anand Jain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox