Re: [PATCH 2/2] xfs: test that a grown RT section can be filled
Hans Holmberg <[email protected]>
| Newsgroups | org.kernel.vger.fstests,org.kernel.vger.linux-xfs |
|---|---|
| Message-ID | <[email protected]> |
On 09/06/2026 10:12, Christoph Hellwig wrote: > This reproduces issues with zoned growfs. > > Signed-off-by: Christoph Hellwig <[email protected]> Great! Reviewed-by: Hans Holmberg <[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