[PATCH 2/2] xfs: test that a grown RT section can be filled

Christoph Hellwig <[email protected]>
Newsgroups org.kernel.vger.fstests,org.kernel.vger.linux-xfs
Message-ID <[email protected]>
This reproduces issues with zoned growfs.

Signed-off-by: Christoph Hellwig <[email protected]>
---
 tests/xfs/4201     | 58 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/4201.out |  3 +++
 2 files changed, 61 insertions(+)
 create mode 100755 tests/xfs/4201
 create mode 100644 tests/xfs/4201.out

diff --git a/tests/xfs/4201 b/tests/xfs/4201
new file mode 100755
index 000000000000..1f1c8e7eb140
--- /dev/null
+++ b/tests/xfs/4201
@@ -0,0 +1,58 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Christoph Hellwig.
+#
+# FS QA Test No. 4201
+#
+# Test that the entire device capacity can be used after resizing a realtime
+# device.
+#
+. ./common/preamble
+_begin_fstest auto quick realtime growfs zone
+
+. ./common/filter
+. ./common/zoned
+
+_require_scratch
+_require_external_realtime_device
+
+minrtdevsize=$((5 * 1024 * 1024)) #kB
+rtdevsize=`_get_device_size $SCRATCH_RTDEV`
+if [ $rtdevsize -lt $minrtdevsize ]; then
+	_notrun "SCRATCH_RTDEV device too small, $rtdevsize < $minrtdevsize"
+fi
+
+_scratch_mkfs -r size=1g  >> $seqres.full 2>&1
+rblocks=`_scratch_xfs_get_sb_field rblocks`
+
+_scratch_mount
+_xfs_force_bdev realtime $SCRATCH_MNT
+free_zones_pre=$(_xfs_get_mountstat $SCRATCH_MNT "free zones:")
+
+echo "Growing file system"
+$XFS_GROWFS_PROG $SCRATCH_MNT -R $((2 * rblocks)) >> $seqres.full 2>&1 || \
+	_fail "growfs failed"
+
+# For zoned file systems, check that the growfs did increase the available free
+# zones.  This avoids a hang on unfixed kernels when filling later.
+free_zones_post=$(_xfs_get_mountstat $SCRATCH_MNT "free zones:")
+if _has_fs_sysfs_attr $SCRATCH_DEV "zoned/max_open_zones"; then
+	if [ "$free_zones_pre" == "$free_zones_post" ]; then
+		_fail "growfs did not increase free zones"
+	fi
+fi
+
+echo "Filling grown file system"
+writesize_mb=32
+dd if=/dev/zero of=$SCRATCH_MNT/fill bs=${writesize_mb}M oflag=direct \
+	>> $seqres.full 2>&1
+
+blocksize=$(_get_block_size $SCRATCH_MNT)
+free_blocks=$(stat -f $SCRATCH_MNT -c '%f')
+
+# check that we really mostly filled the file system
+_within_tolerance "free space after fill" \
+	$free_blocks $((writesize_mb * 1024 * 1024 / blocksize)) 100%
+
+status=0
+exit
diff --git a/tests/xfs/4201.out b/tests/xfs/4201.out
new file mode 100644
index 000000000000..2e7ac4019f3f
--- /dev/null
+++ b/tests/xfs/4201.out
@@ -0,0 +1,3 @@
+QA output created by 4201
+Growing file system
+Filling grown file system
-- 
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.