[PATCH v4] fstests: test premature ENOSPC in zoned garbage collection
Johannes Thumshirn <[email protected]>
| Newsgroups | org.kernel.vger.fstests,org.kernel.vger.linux-btrfs |
|---|---|
| Message-ID | <[email protected]> |
This test stresses garbage collection in zoned file systems by constantly overwriting the same file. It is inspired by a reproducer for a btrfs bugifx. Signed-off-by: Johannes Thumshirn <[email protected]> --- Changes to v3: - Distinguish between SCRATCH_DEV and SCRATCH_RTDEV so both BTRFS and XFS work - Fix typo Link to v3: https://lore.kernel.org/r/[email protected] tests/generic/999 | 53 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/999.out | 2 ++ 2 files changed, 55 insertions(+) create mode 100755 tests/generic/999 create mode 100644 tests/generic/999.out diff --git a/tests/generic/999 b/tests/generic/999 new file mode 100755 index 000000000000..d3b38b676d37 --- /dev/null +++ b/tests/generic/999 @@ -0,0 +1,53 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2026 Western Digital Corporation. All Rights Reserved. +# +# FS QA Test 999 +# +# This test stresses garbage collection in zoned file systems by constantly +# overwriting the same file. It is inspired by a reproducer for a btrfs bugfix. + +. ./common/preamble +_begin_fstest auto quick zone + +. ./common/filter + + +if [ -b "$SCRATCH_RTDEV" ]; then + zoned_dev=$SCRATCH_RTDEV +else + zoned_dev=$SCRATCH_DEV +fi + +_require_scratch_size $((16 * 1024 * 1024)) +_require_zoned_device "$zoned_dev" +_require_command "$BLKZONE_PROG" blkzone + +# This test requires specific data space usage, skip if we have compression +# enabled. +_require_no_compress + +_fixed_by_fs_commit btrfs 7bcb04de982f \ + "btrfs: zoned: cap delayed refs metadata reservation to avoid overcommit" +_fixed_by_fs_commit btrfs 258e46a6385c \ + "btrfs: zoned: move partially zone_unusable block groups to reclaim list" +_fixed_by_fs_commit btrfs e2a7fd22378f \ + "btrfs: zoned: add zone reclaim flush state for DATA space_info" + +_scratch_mkfs_sized $((16 * 1024 * 1024 * 1024)) &>>$seqres.full +_scratch_mount + +# Overwrite the data "number of seq zones" times, this is arbitrarily chosen +# but triggers the original bug reliably +loops=$($BLKZONE_PROG report $zoned_dev | grep -c "SEQ_WRITE_REQUIRED") + +for (( i = 0; i < $loops; i++ )); do + dd if=/dev/zero of=$SCRATCH_MNT/test bs=1M count=1024 status=none + if [ $? -ne 0 ]; then + _fail "Failed writing on iteration $i" + fi +done + +echo "Silence is golden" +# success, all done +_exit 0 diff --git a/tests/generic/999.out b/tests/generic/999.out new file mode 100644 index 000000000000..3b276ca804fc --- /dev/null +++ b/tests/generic/999.out @@ -0,0 +1,2 @@ +QA output created by 999 +Silence is golden -- 2.53.0