linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eryu Guan <guan@eryu.me>
To: Anand Jain <anand.jain@oracle.com>
Cc: fstests@vger.kernel.org, linux-btrfs@vger.kernel.org,
	josef@toxicpanda.com
Subject: Re: [PATCH v2] btrfs/254: test cleaning up of the stale device
Date: Sun, 19 Dec 2021 22:02:30 +0800	[thread overview]
Message-ID: <Yb87dkizAxoqC+1c@desktop> (raw)
In-Reply-To: <61c0bd3a345d8cb64f1117da58c63c2cd08a8a2c.1639156699.git.anand.jain@oracle.com>

On Sat, Dec 11, 2021 at 02:14:41AM +0800, Anand Jain wrote:
> Recreating a new filesystem or adding a device to a mounted the filesystem
> should remove the device entries under its previous fsid even when
> confused with different device paths to the same device.
> 
> Fixed by the kernel patch (in the ml):
>   btrfs: harden identification of the stale device
> 
> Signed-off-by: Anand Jain <anand.jain@oracle.com>

I was testing with v5.16-rc2 kernel, which should not contain the kernel
fix, but test still passed for me, I was testing with three loop devices
as SCRATCH_DEV_POOL, and all default mkfs & mount options

SECTION       -- btrfs                         
RECREATING    -- btrfs on /dev/mapper/testvg-lv1                                                                                         
FSTYP         -- btrfs
PLATFORM      -- Linux/x86_64 fedoravm 5.16.0-rc2 #22 SMP PREEMPT Mon Nov 29 00:54:26 CST 2021
MKFS_OPTIONS  -- /dev/loop0                    
MOUNT_OPTIONS -- /dev/loop0 /mnt/scratch                      
                                                                    
btrfs/254 5s ...  5s
Ran: btrfs/254                                         
Passed all 1 tests

Anything wrong with my setup?

And if tested with lv devices as SCRATCH_DEV_POOL

SCRATCH_DEV_POOL="/dev/mapper/testvg-lv2 /dev/mapper/testvg-lv3 /dev/mapper/testvg-lv4 /dev/mapper/testvg-lv5 /dev/mapper/testvg-lv6"

I got the following test failure

 QA output created by 254
+ERROR: cannot unregister device '/dev/mapper/254-test': No such file or directory
 Label: none  uuid: <UUID>
        Total devices <NUM> FS bytes used <SIZE>
        devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV

Maybe we should use _require_scratch_nolvm as well?

> ---
> v2: Add kernel patch title in the test case
>     Redirect device add output to /dev/null (avoids tirm message)
>     Use the lv path for mkfs and the dm path for the device add
>      so that now path used in udev scan should match with what
>      we already have in the kernel memory.
> 
> -       _mkfs_dev $uuid -draid1 -mraid1 $dmdev $scratch_dev2
> +       _mkfs_dev $uuid -draid1 -mraid1 $lvdev $scratch_dev2
>  
>         # Add device should free the device under $uuid in the kernel.
> -       $BTRFS_UTIL_PROG device add -f $lvdev $seq_mnt > /dev/null 2>&1
> +       $BTRFS_UTIL_PROG device add -f $dmdev $seq_mnt > /dev/null 2>&1
> 
> 
>  tests/btrfs/254     | 113 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/btrfs/254.out |   6 +++
>  2 files changed, 119 insertions(+)
>  create mode 100755 tests/btrfs/254
>  create mode 100644 tests/btrfs/254.out
> 
> diff --git a/tests/btrfs/254 b/tests/btrfs/254
> new file mode 100755
> index 000000000000..b70b9d165897
> --- /dev/null
> +++ b/tests/btrfs/254
> @@ -0,0 +1,113 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2021 Anand Jain. All Rights Reserved.
> +# Copyright (c) 2021 Oracle. All Rights Reserved.
> +#
> +# FS QA Test No. 254
> +#
> +# Test if the kernel can free the stale device entries.
> +#
> +# Tests bug fixed by the kernel patch:
> +#	btrfs: harden identification of the stale device
> +#
> +. ./common/preamble
> +_begin_fstest auto quick
> +
> +# Override the default cleanup function.
> +node=$seq-test
> +cleanup_dmdev()
> +{
> +	_dmsetup_remove $node
> +}
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	rm -rf $seq_mnt > /dev/null 2>&1
> +	cleanup_dmdev

Should wipefs in cleanup as well, otherwise test fails with non-unique
UUID

-Label: none  uuid: <UUID>                                                                                                                                                                                                                                                        
-       Total devices <NUM> FS bytes used <SIZE>                                                                                                                                                                                                                                  
-       devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV
-       *** Some devices missing                                                                                                         
+ERROR: non-unique UUID: 12345678-1234-1234-1234-123456789abc
+btrfs-progs v5.4 
+See http://btrfs.wiki.kernel.org for more information.

Thanks,
Eryu

> +}
> +
> +# Import common functions.
> +. ./common/filter
> +. ./common/filter.btrfs
> +
> +# real QA test starts here
> +_supported_fs btrfs
> +_require_scratch_dev_pool 3
> +_require_block_device $SCRATCH_DEV
> +_require_dm_target linear
> +_require_btrfs_forget_or_module_loadable
> +_require_scratch_nocheck
> +_require_command "$WIPEFS_PROG" wipefs
> +
> +_scratch_dev_pool_get 3
> +
> +setup_dmdev()
> +{
> +	# Some small size.
> +	size=$((1024 * 1024 * 1024))
> +	size_in_sector=$((size / 512))
> +
> +	table="0 $size_in_sector linear $SCRATCH_DEV 0"
> +	_dmsetup_create $node --table "$table" || \
> +		_fail "setup dm device failed"
> +}
> +
> +# Use a known it is much easier to debug.
> +uuid="--uuid 12345678-1234-1234-1234-123456789abc"
> +lvdev=/dev/mapper/$node
> +
> +seq_mnt=$TEST_DIR/$seq.mnt
> +mkdir -p $seq_mnt
> +
> +test_forget()
> +{
> +	setup_dmdev
> +	dmdev=$(realpath $lvdev)
> +
> +	_mkfs_dev $uuid $dmdev
> +
> +	# Check if we can un-scan using the mapper device path.
> +	$BTRFS_UTIL_PROG device scan --forget $lvdev
> +
> +	# Cleanup
> +	$WIPEFS_PROG -a $lvdev > /dev/null 2>&1
> +	$BTRFS_UTIL_PROG device scan --forget
> +
> +	cleanup_dmdev
> +}
> +
> +test_add_device()
> +{
> +	setup_dmdev
> +	dmdev=$(realpath $lvdev)
> +	scratch_dev2=$(echo $SCRATCH_DEV_POOL | awk '{print $2}')
> +	scratch_dev3=$(echo $SCRATCH_DEV_POOL | awk '{print $3}')
> +
> +	_mkfs_dev $scratch_dev3
> +	_mount $scratch_dev3 $seq_mnt
> +
> +	_mkfs_dev $uuid -draid1 -mraid1 $lvdev $scratch_dev2
> +
> +	# Add device should free the device under $uuid in the kernel.
> +	$BTRFS_UTIL_PROG device add -f $dmdev $seq_mnt > /dev/null 2>&1
> +
> +	_mount -o degraded $scratch_dev2 $SCRATCH_MNT
> +
> +	# Check if the missing device is shown.
> +	$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT | \
> +					_filter_btrfs_filesystem_show
> +
> +	$UMOUNT_PROG $seq_mnt
> +	_scratch_unmount
> +	cleanup_dmdev
> +}
> +
> +test_forget
> +test_add_device
> +
> +_scratch_dev_pool_put
> +
> +status=0
> +exit
> diff --git a/tests/btrfs/254.out b/tests/btrfs/254.out
> new file mode 100644
> index 000000000000..20819cf5140c
> --- /dev/null
> +++ b/tests/btrfs/254.out
> @@ -0,0 +1,6 @@
> +QA output created by 254
> +Label: none  uuid: <UUID>
> +	Total devices <NUM> FS bytes used <SIZE>
> +	devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV
> +	*** Some devices missing
> +
> -- 
> 2.27.0

  reply	other threads:[~2021-12-19 14:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-10 18:14 [PATCH v2] btrfs/254: test cleaning up of the stale device Anand Jain
2021-12-19 14:02 ` Eryu Guan [this message]
2021-12-20 11:06   ` Anand Jain
2022-01-04 11:25     ` Anand Jain
2022-01-04 16:03       ` Eryu Guan
2022-01-05  4:19         ` Anand Jain

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=Yb87dkizAxoqC+1c@desktop \
    --to=guan@eryu.me \
    --cc=anand.jain@oracle.com \
    --cc=fstests@vger.kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=linux-btrfs@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).