diff options
author | Qu Wenruo <wqu@suse.com> | 2023-01-13 15:06:53 +0800 |
---|---|---|
committer | Zorro Lang <zlang@kernel.org> | 2023-07-23 12:56:47 +0800 |
commit | 8de535c53887bb49adae74a1b2e83e77d7e8457d (patch) | |
tree | 3d2142be8082e59cb174d9f3deeccd8b73fd2d6e | |
parent | 9b84d93f225f4ffbb61030ac39ef89ee459e64b1 (diff) | |
download | xfstests-dev-8de535c53887bb49adae74a1b2e83e77d7e8457d.tar.gz |
btrfs: add a test case to verify that per-fs features directory gets updated
Although btrfs has a per-fs feature directory, it's not properly
refreshed after new features are enabled.
We had some attempts to do that properly, like commit 14e46e04958d
("btrfs: synchronize incompat feature bits with sysfs files").
But unfortunately that commit get later reverted as some call sites is
not safe to update sysfs files.
Now we have a new commit b7625f461da6 ("btrfs: sysfs: update fs features
directory asynchronously") to properly refresh that per-fs features
directory.
So it's time to add a test case for it. The test case itself is pretty
straightforward:
- Make a very basic 3 disks btrfs
Only using the very basic profiles (DUP/SINGLE) so that even older
mkfs.btrfs can support.
- Make sure per-fs features directory doesn't contain "raid1c34" file
- Balance the metadata to RAID1C3 profile
- Verify the per-fs features directory contains "raid1c34" feature file
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
[ Update commit log. Remove commented code. Add _fixed_by_kernel_commit.
Check mkfs status. Add sync. ]
Signed-off-by: Anand Jain <anand.jain@oracle.com>
-rwxr-xr-x | tests/btrfs/296 | 66 | ||||
-rw-r--r-- | tests/btrfs/296.out | 2 |
2 files changed, 68 insertions, 0 deletions
diff --git a/tests/btrfs/296 b/tests/btrfs/296 new file mode 100755 index 0000000000..27f48e7541 --- /dev/null +++ b/tests/btrfs/296 @@ -0,0 +1,66 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 SUSE Linux Products GmbH. All Rights Reserved. +# +# FS QA Test No. 296 +# +# Make sure that per-fs features sysfs interface get properly updated +# when a new feature is added. +# +. ./common/preamble +_begin_fstest auto quick balance + +# real QA test starts here +_supported_fs btrfs +_require_scratch_dev_pool 3 +_fixed_by_kernel_commit b7625f461da6 \ + "btrfs: sysfs: update fs features directory asynchronously" + +# We need the global features support +_require_btrfs_fs_sysfs + +global_features="/sys/fs/btrfs/features" +# Make sure we have support RAID1C34 first +if [ ! -f "${global_features}/raid1c34" ]; then + _notrun "no RAID1C34 support" +fi + +_scratch_dev_pool_get 3 + +# Go the very basic profile first, so that even older progs can support it. +_scratch_pool_mkfs -m dup -d single >> $seqres.full 2>&1 + +_scratch_mount +uuid="$(findmnt -n -o UUID "$SCRATCH_MNT")" +per_fs_features="/sys/fs/btrfs/${uuid}/features" + +# First we need per-fs features directory +if [ ! -d "${per_fs_features}" ]; then + _notrun "no per-fs features sysfs directory" +fi + +# Make sure the per-fs features doesn't include raid1c34 +if [ -f "${per_fs_features}/raid1c34" ]; then + _fail "raid1c34 feature found unexpectedly" +fi + +# Balance to RAID1C3 +$BTRFS_UTIL_PROG balance start -mconvert=raid1c3 "$SCRATCH_MNT" >> $seqres.full + +# Sync before checking for sysfs update during cleaner_kthread(). +sync + +# Check if the per-fs features directory contains raid1c34 now +# Make sure the per-fs features doesn't include raid1c34 +if [ ! -f "${per_fs_features}/raid1c34" ]; then + _fail "raid1c34 feature not found" +fi + +echo "Silence is golden" + +_scratch_unmount +_scratch_dev_pool_put + +# success, all done +status=0 +exit diff --git a/tests/btrfs/296.out b/tests/btrfs/296.out new file mode 100644 index 0000000000..7f92a474c3 --- /dev/null +++ b/tests/btrfs/296.out @@ -0,0 +1,2 @@ +QA output created by 296 +Silence is golden |