On Mon, Jan 22, 2024 at 10:56 AM Johannes Thumshirn <johannes.thumshirn@xxxxxxx> wrote: > > Add a test writing a file of 60% the drive size on a zoned btrfs and then > overwriting the file again. > > On fast drives this will cause premature ENOSPC because the reclaim > process isn't triggered fast enough. > > The kernel patch for this issue is: > btrfs: zoned: wake up cleaner sooner if needed > > Signed-off-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx> > --- > tests/btrfs/310 | 54 +++++++++++++++++++++++++++++++++++++++++++++ > tests/btrfs/310.out | 2 ++ > 2 files changed, 56 insertions(+) > create mode 100755 tests/btrfs/310 > create mode 100644 tests/btrfs/310.out > > diff --git a/tests/btrfs/310 b/tests/btrfs/310 > new file mode 100755 > index 000000000000..6f6f5542f73f > --- /dev/null > +++ b/tests/btrfs/310 > @@ -0,0 +1,54 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Western Digital Corporation. All Rights Reserved. > +# > +# FS QA Test 310 > +# > +# Write a single file with 60% disk size to a zoned btrfs and then overwrite > +# it again. On kernels without the fix this results in ENOSPC. > +# > +# This issue is fixed by the following kernel patch: > +# btrfs: zoned: wake up cleaner sooner if needed > + > +. ./common/preamble > +_begin_fstest auto enospc rw zone Why the rw group? The test only exercises writes. Also the enospc group, I think it's meant to exercise cases that are expected to hit ENOSPC. Here we want to verify that we don't hit ENOSPC (or any other error). Thanks. > + > +# real QA test starts here > + > +_supported_fs btrfs > +_require_scratch > +_require_zoned_device "$SCRATCH_DEV" > + > +devsize=$(cat /sys/block/$(_short_dev $SCRATCH_DEV)/size) > +devsize=$(expr $devsize \* 512) > +filesize=$(expr $devsize \* 60 / 100) > + > +fio_config=$tmp.fio > + > +# Override the default cleanup function. > +_cleanup() > +{ > + rm -f $tmp.* > +} > + > +cat >$fio_config <<EOF > +[test] > +filename=$SCRATCH_MNT/test > +readwrite=write > +loops=2 > +filesize=$filesize > +EOF > + > +_require_fio $fio_config > + > +_scratch_mkfs >/dev/null 2>&1 > +_scratch_mount > + > +$FIO_PROG $fio_config >> $seqres.full > + > +_scratch_unmount > + > +echo "Silence is golden" > +# success, all done > +status=0 > +exit > diff --git a/tests/btrfs/310.out b/tests/btrfs/310.out > new file mode 100644 > index 000000000000..7b9eaf78a07a > --- /dev/null > +++ b/tests/btrfs/310.out > @@ -0,0 +1,2 @@ > +QA output created by 310 > +Silence is golden > -- > 2.43.0 > >