new file mode 100755
@@ -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
+_fixed_by_kernel_commit XXXXXXXX "btrfs: fix size class loading logic"
+
+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
+
+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
new file mode 100644
@@ -0,0 +1,2 @@
+QA output created by 283
+Silence is golden
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: fix size class loading logic Signed-off-by: Boris Burkov <boris@bur.io> --- 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