On Wed, Oct 23, 2024 at 12:39:30PM +0200, Christoph Hellwig wrote: > These fail for various non-default configs like DAX, alwayscow and > small block sizes. Shouldn't we selectively _notrun these tests for configurations where speculative/delayed allocations don't work? I had started on a helper to try to detect the situations where the tests cannot ever pass, but never quite finished it: diff --git a/common/xfs b/common/xfs index 557017c716e32c..5cb2c102e2c04f 100644 --- a/common/xfs +++ b/common/xfs @@ -2238,3 +2238,34 @@ _scratch_xfs_scrubbed() { $XFS_SCRUBBED_PROG "${scrubbed_args[@]}" "$@" $SCRATCH_MNT } + +# Will this filesystem create speculative post-EOF preallocations for a file? +_require_speculative_prealloc() +{ + local file="$1" + local tries + local overage + + # Now that we have background garbage collection processes that can be + # triggered by low space/quota conditions, it's possible that we won't + # succeed in creating a speculative preallocation on the first try. + for ((tries = 0; tries < 5; tries++)); do + rm -f $file + + # a few file extending open-write-close cycles should be enough + # to trigger the fs to retain preallocation. write 256k in 32k + # intervals to be sure + for i in $(seq 0 32768 262144); do + $XFS_IO_PROG -f -c "pwrite $i 32k" $file >> $seqres.full + + # Do we have more blocks allocated than what we've + # written so far? + overage="$(stat -c '%b * %B - %s' $file | bc)" + test "$overage" -gt 0 && return 0 + done + done + + _notrun "Warning: No speculative preallocation for $file after " \ + "$tries iterations." \ + "Check use of the allocsize= mount option." +} --D > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > tests/xfs/629 | 2 +- > tests/xfs/630 | 2 +- > tests/xfs/631 | 2 +- > tests/xfs/632 | 2 +- > 4 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/tests/xfs/629 b/tests/xfs/629 > index 58beedc03a8b..e2f5af085b5f 100755 > --- a/tests/xfs/629 > +++ b/tests/xfs/629 > @@ -8,7 +8,7 @@ > # > > . ./common/preamble > -_begin_fstest auto quick prealloc rw > +_begin_fstest prealloc rw > > . ./common/filter > > diff --git a/tests/xfs/630 b/tests/xfs/630 > index 939d8a4ac37f..df7ca60111d6 100755 > --- a/tests/xfs/630 > +++ b/tests/xfs/630 > @@ -8,7 +8,7 @@ > # > > . ./common/preamble > -_begin_fstest auto quick prealloc rw > +_begin_fstest prealloc rw > > . ./common/filter > > diff --git a/tests/xfs/631 b/tests/xfs/631 > index 55a74297918a..1e50bc033f7c 100755 > --- a/tests/xfs/631 > +++ b/tests/xfs/631 > @@ -8,7 +8,7 @@ > # > > . ./common/preamble > -_begin_fstest auto quick prealloc rw > +_begin_fstest prealloc rw > > . ./common/filter > > diff --git a/tests/xfs/632 b/tests/xfs/632 > index 61041d45a706..3b1c61fdc129 100755 > --- a/tests/xfs/632 > +++ b/tests/xfs/632 > @@ -9,7 +9,7 @@ > # > > . ./common/preamble > -_begin_fstest auto prealloc rw > +_begin_fstest prealloc rw > > . ./common/filter > > -- > 2.45.2 > >