On 20/10/2021 21:53, Josef Bacik wrote:
On Wed, Oct 20, 2021 at 03:16:44PM +0800, Anand Jain wrote:
If there is a missing seed device in a sprout, the btrfs filesystem usage
command fails, which is fixed by the following patches:
btrfs: sysfs add devinfo/fsid to retrieve fsid from the device
btrfs-progs: read fsid from the sysfs in device_is_seed
Test if it works now after these patches in the kernel and in the
btrfs-progs respectively.
Suggested-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx>
Shouldn't this use
as well? I wish there was a way to detect that btrfs-progs had support for
reading it but I suppose this is a good enough gate. Maybe add a
_require_btrfs_sysfs_fsid ?
The problem is about the nonexistence of the sysfs interface to read
fsid. Adding it will fail to reproduce the problem.
So if there is no sysfs interface, then btrfs-progs will fail back to
the read-sb method, which shall expose it to fail.
---
tests/btrfs/249 | 67 +++++++++++++++++++++++++++++++++++++++++++++
tests/btrfs/249.out | 2 ++
2 files changed, 69 insertions(+)
create mode 100755 tests/btrfs/249
create mode 100644 tests/btrfs/249.out
diff --git a/tests/btrfs/249 b/tests/btrfs/249
new file mode 100755
index 000000000000..f8f2f07052c6
--- /dev/null
+++ b/tests/btrfs/249
@@ -0,0 +1,67 @@
+#! /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 249
+#
+# Validate if the command 'btrfs filesystem usage' works with missing seed
+# device
+# Steps:
+# Create a degraded raid1 seed device
+# Create a sprout filesystem (an rw device on top of a seed device)
+# Dump 'btrfs filesystem usage', check it didn't fail
+#
+# Tests btrfs-progs bug fixed by the kernel patch and a btrfs-prog patch
+# btrfs: sysfs add devinfo/fsid to retrieve fsid from the device
+# btrfs-progs: read fsid from the sysfs in device_is_seed
+
+. ./common/preamble
+_begin_fstest auto quick seed volume
+
+# Import common functions.
+# . ./common/filter
+
+# real QA test starts here
+
+# Modify as appropriate.
+_supported_fs btrfs
+_require_scratch_dev_pool 3
+_require_command "$WIPEFS_PROG" wipefs
+_require_btrfs_forget_or_module_loadable
Need
_require_btrfs_sysfs_fsid
here I think.
As above.
+
+_scratch_dev_pool_get 2
+# use the scratch devices as seed devices
+seed_dev1=$(echo $SCRATCH_DEV_POOL | $AWK_PROG '{ print $1 }')
+seed_dev2=$(echo $SCRATCH_DEV_POOL | $AWK_PROG '{ print $2 }')
+
+# use the spare device as a sprout device
+_spare_dev_get
+sprout_dev=$SPARE_DEV
+
+# create raid1 seed filesystem
+_scratch_pool_mkfs "-draid1 -mraid1" >> $seqres.full 2>&1
+$BTRFS_TUNE_PROG -S 1 $seed_dev1
+$WIPEFS_PROG -a $seed_dev1 >> $seqres.full 2>&1
+_btrfs_forget_or_module_reload
+_mount -o degraded $seed_dev2 $SCRATCH_MNT >> $seqres.full 2>&1
+
+# create a sprout device
+$BTRFS_UTIL_PROG device add -f $SPARE_DEV $SCRATCH_MNT >> $seqres.full 2>&1
+
+# dump filesystem usage if it fails error goes to the bad.out file
+$BTRFS_UTIL_PROG filesystem usage $SCRATCH_MNT >> $seqres.full
+# also check for the error code
+ret=$?
+if [ $ret != 0 ]; then
+ _fail "FAILED: btrfs filesystem usage, ret $ret"
Can you add "check your btrfs-progs version" here or something? In case I'm an
idiot and forget to update btrfs-progs on the overnight xfstests boxes? Thanks,
Sure.
Thanks, Anand
Josef