public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] xfs: add a test for number of open zones on conventional devices
@ 2026-03-31 15:23 Christoph Hellwig
  2026-03-31 19:40 ` Damien Le Moal
  2026-03-31 21:18 ` Zorro Lang
  0 siblings, 2 replies; 8+ messages in thread
From: Christoph Hellwig @ 2026-03-31 15:23 UTC (permalink / raw)
  To: zlang; +Cc: djwong, dlemoal, hans.holmberg, fstests, linux-xfs

Test that mounts of zoned file systems on conventional devices don't
create more open zones than allowed when the last blocks in one or more
zones have been invalidated.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---

 - delete odd files
 - fix the sysfs attr check to be on the scratch and not the test fs

 tests/xfs/4201     | 66 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/4201.out |  1 +
 2 files changed, 67 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..150978a9deda
--- /dev/null
+++ b/tests/xfs/4201
@@ -0,0 +1,66 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2026 Christoph Hellwig.
+#
+# FS QA Test No. 4201
+#
+# Test that mounts of zoned file systems on conventional devices don't create
+# more open zones than allowed when the last blocks in one or more zones have
+# been invalidated.
+#
+
+. ./common/preamble
+_begin_fstest auto quick zone
+
+_require_scratch
+_require_odirect
+_require_non_zoned_device $SCRATCH_DEV
+_require_non_zoned_device $SCRATCH_RTDEV
+
+open_zones=5
+blocks=65536
+bsize=4096
+
+zone_size_mib=$((blocks * bsize / 1024 / 1024))
+file_size_mib=$((zone_size_mib / 2))
+nr_files=$((open_zones * 3 - 1))
+
+echo "zone size: $zone_size_mib" >>$seqres.full
+echo "file size: $file_size_mib" >>$seqres.full
+echo "nr files: $nr_files" >>$seqres.full
+
+_scratch_mkfs -b size=${bsize} -r zoned=1,rgsize=${blocks}b \
+	> "$seqres.full" 2>&1
+_scratch_mount -o max_open_zones=${open_zones}
+
+_has_fs_sysfs_attr $SCRATCH_DEV zoned/nr_open_zones || \
+	_notrun "This test requires /sys/fs/${FSTYP}/$SCRATCH_DEV/zoned/nr_open_zones"
+
+for i in $(seq 1 $nr_files); do
+	dd if=/dev/zero of=$SCRATCH_MNT/$i bs=1M count=$file_size_mib \
+		 oflag=direct > /dev/null 2>&1
+done
+
+# delete odd numbered files as they should be at the end of the zones
+for ((i = 0; i < $nr_files; i = $((i + 2)))); do
+	rm $SCRATCH_MNT/$((i + 1))
+done
+
+_scratch_unmount
+_scratch_mount -o max_open_zones=${open_zones}
+
+max_open=$(_get_fs_sysfs_attr $SCRATCH_DEV zoned/max_open_zones)
+nr_open=$(_get_fs_sysfs_attr $SCRATCH_DEV zoned/nr_open_zones)
+
+if [ ${max_open} -ne $((open_zones - 1)) ]; then
+	_fail "Test needs adjustments for multiple open GC zones"
+fi
+
+if [ ${nr_open} -gt ${max_open} ]; then
+	_fail "Too many open zones: $nr_open/$max_open"
+fi
+
+_scratch_unmount
+
+status=0
+exit
diff --git a/tests/xfs/4201.out b/tests/xfs/4201.out
new file mode 100644
index 000000000000..32e395dd4d6d
--- /dev/null
+++ b/tests/xfs/4201.out
@@ -0,0 +1 @@
+QA output created by 4201
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-03-31 15:23 [PATCH v2] xfs: add a test for number of open zones on conventional devices Christoph Hellwig
@ 2026-03-31 19:40 ` Damien Le Moal
  2026-03-31 21:18 ` Zorro Lang
  1 sibling, 0 replies; 8+ messages in thread
From: Damien Le Moal @ 2026-03-31 19:40 UTC (permalink / raw)
  To: Christoph Hellwig, zlang; +Cc: djwong, hans.holmberg, fstests, linux-xfs

On 4/1/26 00:23, Christoph Hellwig wrote:
> Test that mounts of zoned file systems on conventional devices don't
> create more open zones than allowed when the last blocks in one or more
> zones have been invalidated.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks good to me.

Reviewed-by: Damien Le Moal <dlemoal@kernel.org>

-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-03-31 15:23 [PATCH v2] xfs: add a test for number of open zones on conventional devices Christoph Hellwig
  2026-03-31 19:40 ` Damien Le Moal
@ 2026-03-31 21:18 ` Zorro Lang
  2026-04-01  6:18   ` Christoph Hellwig
  1 sibling, 1 reply; 8+ messages in thread
From: Zorro Lang @ 2026-03-31 21:18 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: zlang, djwong, dlemoal, hans.holmberg, fstests, linux-xfs

On Tue, Mar 31, 2026 at 05:23:20PM +0200, Christoph Hellwig wrote:
> Test that mounts of zoned file systems on conventional devices don't
> create more open zones than allowed when the last blocks in one or more
> zones have been invalidated.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> 
>  - delete odd files
>  - fix the sysfs attr check to be on the scratch and not the test fs
> 
>  tests/xfs/4201     | 66 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/4201.out |  1 +
>  2 files changed, 67 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..150978a9deda
> --- /dev/null
> +++ b/tests/xfs/4201
> @@ -0,0 +1,66 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2026 Christoph Hellwig.
> +#
> +# FS QA Test No. 4201
> +#
> +# Test that mounts of zoned file systems on conventional devices don't create
> +# more open zones than allowed when the last blocks in one or more zones have
> +# been invalidated.
> +#
> +
> +. ./common/preamble
> +_begin_fstest auto quick zone
> +
> +_require_scratch
> +_require_odirect
> +_require_non_zoned_device $SCRATCH_DEV
> +_require_non_zoned_device $SCRATCH_RTDEV
> +
> +open_zones=5
> +blocks=65536
> +bsize=4096
> +
> +zone_size_mib=$((blocks * bsize / 1024 / 1024))
> +file_size_mib=$((zone_size_mib / 2))
> +nr_files=$((open_zones * 3 - 1))
> +
> +echo "zone size: $zone_size_mib" >>$seqres.full
> +echo "file size: $file_size_mib" >>$seqres.full
> +echo "nr files: $nr_files" >>$seqres.full
> +
> +_scratch_mkfs -b size=${bsize} -r zoned=1,rgsize=${blocks}b \
> +	> "$seqres.full" 2>&1

I usually tack on "|| _fail 'mkfs failed'" after _scratch_mount if it's
using extra options. That way, we'll know for sure if the mkfs actually
failed.

> +_scratch_mount -o max_open_zones=${open_zones}
> +
> +_has_fs_sysfs_attr $SCRATCH_DEV zoned/nr_open_zones || \
> +	_notrun "This test requires /sys/fs/${FSTYP}/$SCRATCH_DEV/zoned/nr_open_zones"

Can this be replaced with "_require_fs_sysfs_attr" ? _require_fs_sysfs_attr also can
help to get the real path to the sysfs directory for the fs on a device.

Thanks,
Zorro

> +
> +for i in $(seq 1 $nr_files); do
> +	dd if=/dev/zero of=$SCRATCH_MNT/$i bs=1M count=$file_size_mib \
> +		 oflag=direct > /dev/null 2>&1
> +done
> +
> +# delete odd numbered files as they should be at the end of the zones
> +for ((i = 0; i < $nr_files; i = $((i + 2)))); do
> +	rm $SCRATCH_MNT/$((i + 1))
> +done
> +
> +_scratch_unmount
> +_scratch_mount -o max_open_zones=${open_zones}
> +
> +max_open=$(_get_fs_sysfs_attr $SCRATCH_DEV zoned/max_open_zones)
> +nr_open=$(_get_fs_sysfs_attr $SCRATCH_DEV zoned/nr_open_zones)
> +
> +if [ ${max_open} -ne $((open_zones - 1)) ]; then
> +	_fail "Test needs adjustments for multiple open GC zones"
> +fi
> +
> +if [ ${nr_open} -gt ${max_open} ]; then
> +	_fail "Too many open zones: $nr_open/$max_open"
> +fi
> +
> +_scratch_unmount

Is this line part of the test?

Thanks,
Zorro

> +
> +status=0
> +exit
> diff --git a/tests/xfs/4201.out b/tests/xfs/4201.out
> new file mode 100644
> index 000000000000..32e395dd4d6d
> --- /dev/null
> +++ b/tests/xfs/4201.out
> @@ -0,0 +1 @@
> +QA output created by 4201
> -- 
> 2.47.3
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-03-31 21:18 ` Zorro Lang
@ 2026-04-01  6:18   ` Christoph Hellwig
  2026-04-01  7:59     ` Zorro Lang
  0 siblings, 1 reply; 8+ messages in thread
From: Christoph Hellwig @ 2026-04-01  6:18 UTC (permalink / raw)
  To: Zorro Lang
  Cc: Christoph Hellwig, zlang, djwong, dlemoal, hans.holmberg, fstests,
	linux-xfs

On Wed, Apr 01, 2026 at 05:18:07AM +0800, Zorro Lang wrote:
> > +
> > +_scratch_mkfs -b size=${bsize} -r zoned=1,rgsize=${blocks}b \
> > +	> "$seqres.full" 2>&1
> 
> I usually tack on "|| _fail 'mkfs failed'" after _scratch_mount if it's
> using extra options. That way, we'll know for sure if the mkfs actually
> failed.

Yes, that is useful here, especially if we want to support older kernels
before the zoned device support or !CONFIG_XFS_RT kernels.

> > +_has_fs_sysfs_attr $SCRATCH_DEV zoned/nr_open_zones || \
> > +	_notrun "This test requires /sys/fs/${FSTYP}/$SCRATCH_DEV/zoned/nr_open_zones"
> 
> Can this be replaced with "_require_fs_sysfs_attr" ? _require_fs_sysfs_attr also can
> help to get the real path to the sysfs directory for the fs on a device.

No, this must happen on the scratch file system where we force the
zoned allocator, as the attribute only exists for those.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-04-01  6:18   ` Christoph Hellwig
@ 2026-04-01  7:59     ` Zorro Lang
  2026-04-01 14:06       ` Christoph Hellwig
  0 siblings, 1 reply; 8+ messages in thread
From: Zorro Lang @ 2026-04-01  7:59 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: zlang, djwong, dlemoal, hans.holmberg, fstests, linux-xfs

On Wed, Apr 01, 2026 at 08:18:28AM +0200, Christoph Hellwig wrote:
> On Wed, Apr 01, 2026 at 05:18:07AM +0800, Zorro Lang wrote:
> > > +
> > > +_scratch_mkfs -b size=${bsize} -r zoned=1,rgsize=${blocks}b \
> > > +	> "$seqres.full" 2>&1
> > 
> > I usually tack on "|| _fail 'mkfs failed'" after _scratch_mount if it's
> > using extra options. That way, we'll know for sure if the mkfs actually
> > failed.
> 
> Yes, that is useful here, especially if we want to support older kernels
> before the zoned device support or !CONFIG_XFS_RT kernels.

Oh, if so, we might need _require_realtime. But that's still not enough to
check mkfs.xfs and mount.xfs on old system (then notrun), we might need
more _require_* helpers for this test. What do you think?

Thanks,
Zorro

> 
> > > +_has_fs_sysfs_attr $SCRATCH_DEV zoned/nr_open_zones || \
> > > +	_notrun "This test requires /sys/fs/${FSTYP}/$SCRATCH_DEV/zoned/nr_open_zones"
> > 
> > Can this be replaced with "_require_fs_sysfs_attr" ? _require_fs_sysfs_attr also can
> > help to get the real path to the sysfs directory for the fs on a device.
> 
> No, this must happen on the scratch file system where we force the
> zoned allocator, as the attribute only exists for those.
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-04-01  7:59     ` Zorro Lang
@ 2026-04-01 14:06       ` Christoph Hellwig
  2026-04-06 17:05         ` Zorro Lang
  0 siblings, 1 reply; 8+ messages in thread
From: Christoph Hellwig @ 2026-04-01 14:06 UTC (permalink / raw)
  To: Zorro Lang
  Cc: Christoph Hellwig, zlang, djwong, dlemoal, hans.holmberg, fstests,
	linux-xfs

On Wed, Apr 01, 2026 at 03:59:52PM +0800, Zorro Lang wrote:
> > > > +_scratch_mkfs -b size=${bsize} -r zoned=1,rgsize=${blocks}b \
> > > > +	> "$seqres.full" 2>&1
> > > 
> > > I usually tack on "|| _fail 'mkfs failed'" after _scratch_mount if it's
> > > using extra options. That way, we'll know for sure if the mkfs actually
> > > failed.
> > 
> > Yes, that is useful here, especially if we want to support older kernels
> > before the zoned device support or !CONFIG_XFS_RT kernels.
> 
> Oh, if so, we might need _require_realtime. But that's still not enough to
> check mkfs.xfs and mount.xfs on old system (then notrun), we might need
> more _require_* helpers for this test. What do you think?


I think _notrun if mkfs or the initial mount fails might be easier and
better here.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-04-01 14:06       ` Christoph Hellwig
@ 2026-04-06 17:05         ` Zorro Lang
  2026-04-07  6:27           ` Christoph Hellwig
  0 siblings, 1 reply; 8+ messages in thread
From: Zorro Lang @ 2026-04-06 17:05 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: zlang, djwong, dlemoal, hans.holmberg, fstests, linux-xfs

On Wed, Apr 01, 2026 at 04:06:46PM +0200, Christoph Hellwig wrote:
> On Wed, Apr 01, 2026 at 03:59:52PM +0800, Zorro Lang wrote:
> > > > > +_scratch_mkfs -b size=${bsize} -r zoned=1,rgsize=${blocks}b \
> > > > > +	> "$seqres.full" 2>&1
> > > > 
> > > > I usually tack on "|| _fail 'mkfs failed'" after _scratch_mount if it's
> > > > using extra options. That way, we'll know for sure if the mkfs actually
> > > > failed.
> > > 
> > > Yes, that is useful here, especially if we want to support older kernels
> > > before the zoned device support or !CONFIG_XFS_RT kernels.
> > 
> > Oh, if so, we might need _require_realtime. But that's still not enough to
> > check mkfs.xfs and mount.xfs on old system (then notrun), we might need
> > more _require_* helpers for this test. What do you think?
> 
> 
> I think _notrun if mkfs or the initial mount fails might be easier and
> better here.

How about a _require_xfs_mkfs_zoned ?

And about `_scratch_mount -o max_open_zones=${open_zones}`, if max_open_zones
mount option isn't supported, _scratch_mount will fail directly. So how about

  _try_scratch_mount -o max_open_zones=${open_zones} || \
          _notrun "max_open_zones option is not supported"

Or we can have a helper for that, as xfs/642~644 and xfs/668 also need that.

Thanks,
Zorro

> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] xfs: add a test for number of open zones on conventional devices
  2026-04-06 17:05         ` Zorro Lang
@ 2026-04-07  6:27           ` Christoph Hellwig
  0 siblings, 0 replies; 8+ messages in thread
From: Christoph Hellwig @ 2026-04-07  6:27 UTC (permalink / raw)
  To: Zorro Lang
  Cc: Christoph Hellwig, zlang, djwong, dlemoal, hans.holmberg, fstests,
	linux-xfs

On Tue, Apr 07, 2026 at 01:05:28AM +0800, Zorro Lang wrote:
> > 
> > I think _notrun if mkfs or the initial mount fails might be easier and
> > better here.
> 
> How about a _require_xfs_mkfs_zoned ?
> 
> And about `_scratch_mount -o max_open_zones=${open_zones}`, if max_open_zones
> mount option isn't supported, _scratch_mount will fail directly. So how about
> 
>   _try_scratch_mount -o max_open_zones=${open_zones} || \
>           _notrun "max_open_zones option is not supported"
> 
> Or we can have a helper for that, as xfs/642~644 and xfs/668 also need that.

I'll take a look.  max_open_zones is always supported for zoned xfs
file systems - the notrun is intended to cover the case where the kernel
can't mount zoned file systems - either because it is too old, or because
XFS_RT is not enabled.


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-04-07  6:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-31 15:23 [PATCH v2] xfs: add a test for number of open zones on conventional devices Christoph Hellwig
2026-03-31 19:40 ` Damien Le Moal
2026-03-31 21:18 ` Zorro Lang
2026-04-01  6:18   ` Christoph Hellwig
2026-04-01  7:59     ` Zorro Lang
2026-04-01 14:06       ` Christoph Hellwig
2026-04-06 17:05         ` Zorro Lang
2026-04-07  6:27           ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox