All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] btrfs/254: test cleaning up of the stale device
@ 2021-12-10 18:14 Anand Jain
  2021-12-19 14:02 ` Eryu Guan
  0 siblings, 1 reply; 6+ messages in thread
From: Anand Jain @ 2021-12-10 18:14 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, josef

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>
---
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
+}
+
+# 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


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

end of thread, other threads:[~2022-01-05  4:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.