Re: [PATCH v4] fstests: test premature ENOSPC in zoned garbage collection

Zorro Lang <[email protected]>
Newsgroups org.kernel.vger.fstests,org.kernel.vger.linux-btrfs
Message-ID <aeElJgmNBUflJ_Ut@zlang-mailbox>
On Wed, Apr 15, 2026 at 12:40:15PM +0200, Johannes Thumshirn wrote:
> 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


I'll move above lines further down, specifically after the _require_scratch_size
call, when I merge this patch. Others make sense to me.

Reviewed-by: Zorro Lang <[email protected]>

> +
> +_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
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.