FS/XFS testing framework
 help / color / mirror / Atom feed
* [PATCH] generic/347: Fix sporadic test failures
@ 2026-07-30 15:18 Jan Kara
  2026-08-03  8:27 ` Zorro Lang
  0 siblings, 1 reply; 4+ messages in thread
From: Jan Kara @ 2026-07-30 15:18 UTC (permalink / raw)
  To: Zorro Lang; +Cc: fstests, Jan Kara

generic/347 was occasionally failing on ext4 in our QA due to ext4
aborting its journal when the filesystem on thinp device was overfilled.
I have tracked the problem down to journal checkpointing failing to
write a metadata block to its final location due to ENOSPC failure from
the thinp device. Modify the test to first preallocate blocks for the
files and remount the filesystem which practically makes sure all
involved metadata blocks were written and so their further modifications
will not fail.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 tests/generic/347 | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tests/generic/347 b/tests/generic/347
index 06df0cf9eddc..56538c160392 100755
--- a/tests/generic/347
+++ b/tests/generic/347
@@ -38,7 +38,17 @@ _setup_thin()
 
 _workout()
 {
-	# Overfill it by a bit
+	# Preallocate space to avoid failure for metadata writeback
+	for I in `seq 1 500`; do
+		$XFS_IO_PROG -f -c "falloc 0 1M" $SCRATCH_MNT/file$I &>/dev/null
+	done
+
+	# Unmount and check the device to make sure all metadata is written
+	_dmthin_check_fs
+	_dmthin_mount
+
+	# Write the data blocks to force thinp space allocation.
+	# Overfill it by a bit.
 	for I in `seq 1 500`; do
 		$XFS_IO_PROG -f -c "pwrite -W 0 1M" $SCRATCH_MNT/file$I &>/dev/null
 	done
-- 
2.51.0


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

* Re: [PATCH] generic/347: Fix sporadic test failures
  2026-07-30 15:18 [PATCH] generic/347: Fix sporadic test failures Jan Kara
@ 2026-08-03  8:27 ` Zorro Lang
  2026-08-03 11:20   ` Jan Kara
  0 siblings, 1 reply; 4+ messages in thread
From: Zorro Lang @ 2026-08-03  8:27 UTC (permalink / raw)
  To: Jan Kara; +Cc: fstests

On Thu, Jul 30, 2026 at 05:18:17PM +0200, Jan Kara wrote:
> generic/347 was occasionally failing on ext4 in our QA due to ext4
> aborting its journal when the filesystem on thinp device was overfilled.
> I have tracked the problem down to journal checkpointing failing to
> write a metadata block to its final location due to ENOSPC failure from
> the thinp device. Modify the test to first preallocate blocks for the
> files and remount the filesystem which practically makes sure all
> involved metadata blocks were written and so their further modifications
> will not fail.
> 
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
>  tests/generic/347 | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/generic/347 b/tests/generic/347
> index 06df0cf9eddc..56538c160392 100755
> --- a/tests/generic/347
> +++ b/tests/generic/347
> @@ -38,7 +38,17 @@ _setup_thin()
>  
>  _workout()
>  {
> -	# Overfill it by a bit
> +	# Preallocate space to avoid failure for metadata writeback
> +	for I in `seq 1 500`; do
> +		$XFS_IO_PROG -f -c "falloc 0 1M" $SCRATCH_MNT/file$I &>/dev/null

Hi Jan,

Thanks for this fix! Adding fallocate introduces an extra dependency via
_require_xfs_io_command "falloc", which will limit some filesystems can
run this test.

Additionally, since the underlying storage is a thinp device, I doubt
`falloc 0 1M` actually triggers physical block allocation on the thin
pool (correct me if I'm wrong). If so, I suspect this 1M * 500 preallocation
might exhaust the 500M BACKING_SIZE prematurely (along with file system
metadata overhead), similar to the pwrite loop below.

Do you think changing it to something smaller, like fallocate 0 64k, would
be better to populate the metadata structures without prematurely running
out of thin pool space?

Thanks,
Zorro

> +	done
> +
> +	# Unmount and check the device to make sure all metadata is written
> +	_dmthin_check_fs
> +	_dmthin_mount
> +
> +	# Write the data blocks to force thinp space allocation.
> +	# Overfill it by a bit.
>  	for I in `seq 1 500`; do
>  		$XFS_IO_PROG -f -c "pwrite -W 0 1M" $SCRATCH_MNT/file$I &>/dev/null
>  	done
> -- 
> 2.51.0
> 

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

* Re: [PATCH] generic/347: Fix sporadic test failures
  2026-08-03  8:27 ` Zorro Lang
@ 2026-08-03 11:20   ` Jan Kara
  2026-08-04 10:12     ` Zorro Lang
  0 siblings, 1 reply; 4+ messages in thread
From: Jan Kara @ 2026-08-03 11:20 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Jan Kara, fstests

Hi Zorro!

On Mon 03-08-26 16:27:15, Zorro Lang wrote:
> On Thu, Jul 30, 2026 at 05:18:17PM +0200, Jan Kara wrote:
> > generic/347 was occasionally failing on ext4 in our QA due to ext4
> > aborting its journal when the filesystem on thinp device was overfilled.
> > I have tracked the problem down to journal checkpointing failing to
> > write a metadata block to its final location due to ENOSPC failure from
> > the thinp device. Modify the test to first preallocate blocks for the
> > files and remount the filesystem which practically makes sure all
> > involved metadata blocks were written and so their further modifications
> > will not fail.
> > 
> > Signed-off-by: Jan Kara <jack@suse.cz>
> > ---
> >  tests/generic/347 | 12 +++++++++++-
> >  1 file changed, 11 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tests/generic/347 b/tests/generic/347
> > index 06df0cf9eddc..56538c160392 100755
> > --- a/tests/generic/347
> > +++ b/tests/generic/347
> > @@ -38,7 +38,17 @@ _setup_thin()
> >  
> >  _workout()
> >  {
> > -	# Overfill it by a bit
> > +	# Preallocate space to avoid failure for metadata writeback
> > +	for I in `seq 1 500`; do
> > +		$XFS_IO_PROG -f -c "falloc 0 1M" $SCRATCH_MNT/file$I &>/dev/null
> 
> Thanks for this fix! Adding fallocate introduces an extra dependency via
> _require_xfs_io_command "falloc", which will limit some filesystems can
> run this test.

I agree the fix has some downsides. OTOH when I was thinking about it I've
concluded that filesystems where you realistically care about behavior on
thinp storage also do support fallocate. So I don't think this it's a
serious test coverage limitation but it's up for discussion.

> Additionally, since the underlying storage is a thinp device, I doubt
> `falloc 0 1M` actually triggers physical block allocation on the thin
> pool (correct me if I'm wrong). If so, I suspect this 1M * 500 preallocation
> might exhaust the 500M BACKING_SIZE prematurely (along with file system
> metadata overhead), similar to the pwrite loop below.

We do *not* want fallocate to trigger the data block allocation. It will
however modify all the relevant metadata blocks and subsequent unmount will
writeout these modified metadata which forces the physical block allocation
for the metadata which is what we need. Physical space for data blocks is
not reserved from thinp during fallocate so we should not run out of
backing device space during this loop.

								Honza

-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

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

* Re: [PATCH] generic/347: Fix sporadic test failures
  2026-08-03 11:20   ` Jan Kara
@ 2026-08-04 10:12     ` Zorro Lang
  0 siblings, 0 replies; 4+ messages in thread
From: Zorro Lang @ 2026-08-04 10:12 UTC (permalink / raw)
  To: Jan Kara; +Cc: fstests

On Mon, Aug 03, 2026 at 01:20:22PM +0200, Jan Kara wrote:
> Hi Zorro!
> 
> On Mon 03-08-26 16:27:15, Zorro Lang wrote:
> > On Thu, Jul 30, 2026 at 05:18:17PM +0200, Jan Kara wrote:
> > > generic/347 was occasionally failing on ext4 in our QA due to ext4
> > > aborting its journal when the filesystem on thinp device was overfilled.
> > > I have tracked the problem down to journal checkpointing failing to
> > > write a metadata block to its final location due to ENOSPC failure from
> > > the thinp device. Modify the test to first preallocate blocks for the
> > > files and remount the filesystem which practically makes sure all
> > > involved metadata blocks were written and so their further modifications
> > > will not fail.
> > > 
> > > Signed-off-by: Jan Kara <jack@suse.cz>
> > > ---
> > >  tests/generic/347 | 12 +++++++++++-
> > >  1 file changed, 11 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/tests/generic/347 b/tests/generic/347
> > > index 06df0cf9eddc..56538c160392 100755
> > > --- a/tests/generic/347
> > > +++ b/tests/generic/347
> > > @@ -38,7 +38,17 @@ _setup_thin()
> > >  
> > >  _workout()
> > >  {
> > > -	# Overfill it by a bit
> > > +	# Preallocate space to avoid failure for metadata writeback
> > > +	for I in `seq 1 500`; do
> > > +		$XFS_IO_PROG -f -c "falloc 0 1M" $SCRATCH_MNT/file$I &>/dev/null
> > 
> > Thanks for this fix! Adding fallocate introduces an extra dependency via
> > _require_xfs_io_command "falloc", which will limit some filesystems can
> > run this test.
> 
> I agree the fix has some downsides. OTOH when I was thinking about it I've
> concluded that filesystems where you realistically care about behavior on
> thinp storage also do support fallocate. So I don't think this it's a
> serious test coverage limitation but it's up for discussion.

Sure, if we accept this patch, we'll need the _require_xfs_io_command "falloc"
restriction. This is a basic test for filesystems on thinp, let's try to get
more review points, if there are no objections, we can merge it at first.

>
> > Additionally, since the underlying storage is a thinp device, I doubt
> > `falloc 0 1M` actually triggers physical block allocation on the thin
> > pool (correct me if I'm wrong). If so, I suspect this 1M * 500 preallocation
> > might exhaust the 500M BACKING_SIZE prematurely (along with file system
> > metadata overhead), similar to the pwrite loop below.
> 
> We do *not* want fallocate to trigger the data block allocation. It will

Sorry, I previously thought that fallocate would trigger actual physical block
allocation on thinp under certain filesystems or mount options. However,
I just tested it out (including exFAT, and Btrfs with nodatacow/compress=zstd),
and found that none of them actually allocate physical space.

Thanks,
Zorro

> however modify all the relevant metadata blocks and subsequent unmount will
> writeout these modified metadata which forces the physical block allocation
> for the metadata which is what we need. Physical space for data blocks is
> not reserved from thinp during fallocate so we should not run out of
> backing device space during this loop.
> 
> 								Honza
> 
> -- 
> Jan Kara <jack@suse.com>
> SUSE Labs, CR

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

end of thread, other threads:[~2026-08-04 10:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-30 15:18 [PATCH] generic/347: Fix sporadic test failures Jan Kara
2026-08-03  8:27 ` Zorro Lang
2026-08-03 11:20   ` Jan Kara
2026-08-04 10:12     ` Zorro Lang

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