Re: [PATCH 1/3] xfs: add a test that zoned file systems with rump RTG can't be mounted

Darrick J. Wong
2025-12-15T19:33:46Z

On Mon, Dec 15, 2025 at 10:50:27AM +0100, Christoph Hellwig wrote:
> Garbage collection assumes all zones contain the full amount of blocks.
> Mkfs already ensures this happens, but the kernel mount code did not
> verify this. Instead such a file system would eventually fail scrub.
>
> Add a test to verify the new superblock verifier check.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> tests/xfs/651 | 30 ++++++++++++++++++++++++++++++
> tests/xfs/651.out | 2 ++
> 2 files changed, 32 insertions(+)
> create mode 100755 tests/xfs/651
> create mode 100644 tests/xfs/651.out
>
> diff --git a/tests/xfs/651 b/tests/xfs/651
> new file mode 100755
> index 000000000000..1fa9627098f6
> --- /dev/null
> +++ b/tests/xfs/651
> @@ -0,0 +1,30 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2025 Christoph Hellwig.
> +#
> +# FS QA Test No. 651
> +#
> +# Test that the sb verifier rejects zoned file system with rump RTGs.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick zone
> +
> +. ./common/zoned
> +
> +_require_scratch_nocheck
> +
> +_scratch_mkfs > /dev/null 2>&1
> +blocks=$(_scratch_xfs_db -c 'sb 0' -c 'print rblocks' | awk '{print $3}')
> +blocks=$((blocks - 4096))
> +_scratch_xfs_db -x -c 'sb 0' -c "write -d rblocks $blocks" > /dev/null 2>&1
> +_scratch_xfs_db -x -c 'sb 0' -c "write -d rextents $blocks" > /dev/null 2>&1

You could put both of the write commands in the same invocation, e.g.

_scratch_xfs_db -x \
-c 'sb 0' \
-c "write -d rblocks $blocks" \
-c "write -d rextents $blocks" > /dev/null 2>&1

For a little bit lower runtime.

> +
> +if _try_scratch_mount >/dev/null 2>&1; then
> + # for non-zoned file systems this can succeed just fine
> + _require_xfs_scratch_non_zoned

The logic in this test looks fine to me, but I wonder: have you (or
anyone else) gone to Debian 13 and noticed this:

# mount /dev/sda /mnt
# mount /dev/sda /mnt
# grep /mnt /proc/mounts
/dev/sda /mnt xfs rw,relatime,inode64,logbufs=8,logbsize=32k,noquota 0 0
/dev/sda /mnt xfs rw,relatime,inode64,logbufs=8,logbsize=32k,noquota 0 0

It looks like util-linux switched to the new fsopen mount API between
Debian 12 and 13, and whereas the old mount(8) would fail if the fs was
already mounted, the new one just creates two mounts, which both then
must be unmounted. So now I'm hunting around for unbalanced
mount/unmount pairs in fstests. :(

Anyhow the test looks fine, so
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> +fi
> +
> +echo "Can't mount rump RTG file system (good)"
> +
> +status=0
> +exit
> diff --git a/tests/xfs/651.out b/tests/xfs/651.out
> new file mode 100644
> index 000000000000..5d491b1894ea
> --- /dev/null
> +++ b/tests/xfs/651.out
> @@ -0,0 +1,2 @@
> +QA output created by 651
> +Can't mount rump RTG file system (good)
> --
> 2.47.3
>
>