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
next prev parent 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).