public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: Qu Wenruo <wqu@suse.com>,
	linux-btrfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH] fstests: btrfs/020: use device pool to avoid busy TEST_DEV
Date: Tue, 13 May 2025 17:24:33 +0800	[thread overview]
Message-ID: <5364767a-e1a2-4fbf-93f8-b85d35d04da2@oracle.com> (raw)
In-Reply-To: <20250509053709.100446-1-wqu@suse.com>

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


      reply	other threads:[~2025-05-13  9:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 message]

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=5364767a-e1a2-4fbf-93f8-b85d35d04da2@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=wqu@suse.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox