From 150efa34087dcf27bb39262b3843a3d972e25568 Mon Sep 17 00:00:00 2001 From: Boris Burkov Date: Thu, 16 Feb 2023 07:47:18 -0800 Subject: [PATCH] btrfs: test block group size class loading logic 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 Reviewed-by: Filipe Manana Signed-off-by: Zorro Lang --- tests/btrfs/285 | 50 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/285.out | 2 ++ 2 files changed, 52 insertions(+) create mode 100755 tests/btrfs/285 create mode 100644 tests/btrfs/285.out diff --git a/tests/btrfs/285 b/tests/btrfs/285 new file mode 100755 index 00000000..56cdad51 --- /dev/null +++ b/tests/btrfs/285 @@ -0,0 +1,50 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2023 Meta Platforms, Inc. All Rights Reserved. +# +# FS QA Test No. 285 +# +# Test that mounting a btrfs filesystem properly loads block group size classes. +# +. ./common/preamble +_begin_fstest auto quick + +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/285.out b/tests/btrfs/285.out new file mode 100644 index 00000000..ab12da9a --- /dev/null +++ b/tests/btrfs/285.out @@ -0,0 +1,2 @@ +QA output created by 285 +Silence is golden -- 2.39.5