On Thu, Feb 16, 2023 at 12:11:39PM +0000, Filipe Manana wrote: > On Wed, Feb 15, 2023 at 11:37 PM Boris Burkov <boris@xxxxxx> wrote: > > > > Add a new test which checks that size classes in freshly loaded block > > groups after a cycle mount match size classes before going down > > > > Depends on the kernel patch: > > btrfs: add size class stats to sysfs > > > > Signed-off-by: Boris Burkov <boris@xxxxxx> > > --- > > Changelog: > > v6: > > Actually include changes for v5 in the commit. > > v5: > > Instead of using _fixed_by_kernel_commit, use require_fs_sysfs to handle > > the needed sysfs file. The test is skipped on kernels without the file > > and runs correctly on new ones. > > v4: > > Fix dumb typo in _fixed_by_kernel_commit (left out leading underscore > > copy+pasting). Re-tested happy and sad case... > > > > v3: > > Re-add fixed_by_kernel_commit, but for the stats patch which is > > required, but not a fix in the strictest sense. > > > > v2: > > Drop the fixed_by_kernel_commit since the fix is not out past the btrfs > > development tree, so the fix is getting rolled in to the original broken > > commit. Modified the commit message to note the dependency on the new > > sysfs counters. > > > > > > tests/btrfs/283 | 50 +++++++++++++++++++++++++++++++++++++++++++++ > > tests/btrfs/283.out | 2 ++ > > 2 files changed, 52 insertions(+) > > create mode 100755 tests/btrfs/283 > > create mode 100644 tests/btrfs/283.out > > > > diff --git a/tests/btrfs/283 b/tests/btrfs/283 > > new file mode 100755 > > index 00000000..2c26b41e > > --- /dev/null > > +++ b/tests/btrfs/283 > > @@ -0,0 +1,50 @@ > > +#! /bin/bash > > +# SPDX-License-Identifier: GPL-2.0 > > +# Copyright (c) 2023 Meta Platforms, Inc. All Rights Reserved. > > +# > > +# FS QA Test 283 > > +# > > +# Test that mounting a btrfs filesystem properly loads block group size classes. > > +# > > +. ./common/preamble > > +_begin_fstest auto quick mount > > I'm still curious why the 'mount' group, and I've asked for that before. > > We aren't testing a new mount option, so it feels weird for me. Agree, the "mount" group looks not make sense. The btrfs/283 has been taken in v2023.02.05. So please make a rebase. The "fixed_by_kernel_commit xxxx" part has been added and removed several times, does this case need it or not? Or maybe you want a _wants_kernel_commit (just ask for sure) ? Others look good to me. Thanks, Zorro > > Otherwise, it looks fine now. Thanks. > > > + > > +sysfs_size_classes() { > > + local uuid="$(findmnt -n -o UUID "$SCRATCH_MNT")" > > + cat "/sys/fs/btrfs/$uuid/allocation/data/size_classes" > > +} > > + > > +_supported_fs btrfs > > +_require_scratch > > +_require_btrfs_fs_sysfs > > +_require_fs_sysfs allocation/data/size_classes > > + > > +f="$SCRATCH_MNT/f" > > +small=$((16 * 1024)) > > +medium=$((1024 * 1024)) > > +large=$((16 * 1024 * 1024)) > > + > > +_scratch_mkfs >/dev/null > > +_scratch_mount > > +# Write files with extents in each size class > > +$XFS_IO_PROG -fc "pwrite -q 0 $small" $f.small > > +$XFS_IO_PROG -fc "pwrite -q 0 $medium" $f.medium > > +$XFS_IO_PROG -fc "pwrite -q 0 $large" $f.large > > +# Sync to force the extent allocation > > +sync > > +pre=$(sysfs_size_classes) > > + > > +# cycle mount to drop the block group cache > > +_scratch_cycle_mount > > + > > +# Another write causes us to actually load the block groups > > +$XFS_IO_PROG -fc "pwrite -q 0 $large" $f.large.2 > > +sync > > + > > +post=$(sysfs_size_classes) > > +diff <(echo $pre) <(echo $post) > > + > > +echo "Silence is golden" > > +# success, all done > > +status=0 > > +exit > > diff --git a/tests/btrfs/283.out b/tests/btrfs/283.out > > new file mode 100644 > > index 00000000..efb2c583 > > --- /dev/null > > +++ b/tests/btrfs/283.out > > @@ -0,0 +1,2 @@ > > +QA output created by 283 > > +Silence is golden > > -- > > 2.39.1 > > >