diff mbox series

[3/3] btrfs/249: test btrfs filesystem usage command on missing seed device

Message ID 599618f8698efc64ef8e25e0cf1d97541927d8ac.1634713680.git.anand.jain@oracle.com (mailing list archive)
State New, archived
Headers show
Series fstests: btrfs validate sysfs fsid and usage | expand

Commit Message

Anand Jain Oct. 20, 2021, 7:16 a.m. UTC
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@toxicpanda.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 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

Comments

Josef Bacik Oct. 20, 2021, 1:53 p.m. UTC | #1
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@toxicpanda.com>
> Signed-off-by: Anand Jain <anand.jain@oracle.com>

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


> ---
>  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.

> +
> +_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,

Josef
Anand Jain Oct. 20, 2021, 2:58 p.m. UTC | #2
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@toxicpanda.com>
>> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> 
> 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
>
Josef Bacik Oct. 20, 2021, 6:44 p.m. UTC | #3
On Wed, Oct 20, 2021 at 10:58:56PM +0800, Anand Jain wrote:
> 
> 
> 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@toxicpanda.com>
> > > Signed-off-by: Anand Jain <anand.jain@oracle.com>
> > 
> > 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.
> 

Sigh sorry, I typed this out and then decided I wanted to comment below, and
forgot to delete this bit.

Yeah sorry I'm thinking about it in terms of the CI testing for us, we'll start
failing this test once its merged without the fix merged, but I guess that's
kinda what we want.  Let's just leave this as it is.  Thanks,

Josef
diff mbox series

Patch

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
+
+_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"
+fi
+
+_scratch_unmount
+_spare_dev_put
+_scratch_dev_pool_put
+
+echo "Silence is golden"
+# success, all done
+status=0
+exit
diff --git a/tests/btrfs/249.out b/tests/btrfs/249.out
new file mode 100644
index 000000000000..b79a5dca8820
--- /dev/null
+++ b/tests/btrfs/249.out
@@ -0,0 +1,2 @@ 
+QA output created by 249
+Silence is golden