On Tue, Oct 29, 2024 at 06:26:43PM +0800, Chao Yu wrote: > This is a regression test to check whether f2fs handles dirty > data correctly when checkpoint is disabled, if lfs mode is on, > it will trigger OPU for all overwritten data, this will cost > free segments, so f2fs must account overwritten data as OPU > data when calculating free space, otherwise, it may run out > of free segments in f2fs' allocation function. If kernel config > CONFIG_F2FS_CHECK_FS is on, it will cause system panic, otherwise, > dd may encounter I/O error. > > Cc: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> > Signed-off-by: Chao Yu <chao@xxxxxxxxxx> > --- > v4: > - check dmesg instead of unstable output from dd This version looks good to me, Reviewed-by: Zorro Lang <zlang@xxxxxxxxxx> > tests/f2fs/006 | 42 ++++++++++++++++++++++++++++++++++++++++++ > tests/f2fs/006.out | 2 ++ > 2 files changed, 44 insertions(+) > create mode 100755 tests/f2fs/006 > create mode 100644 tests/f2fs/006.out > > diff --git a/tests/f2fs/006 b/tests/f2fs/006 > new file mode 100755 > index 00000000..a9c823c1 > --- /dev/null > +++ b/tests/f2fs/006 > @@ -0,0 +1,42 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Oppo. All Rights Reserved. > +# > +# FS QA Test No. f2fs/006 > +# > +# This is a regression test to check whether f2fs handles dirty > +# data correctly when checkpoint is disabled, if lfs mode is on, > +# it will trigger OPU for all overwritten data, this will cost > +# free segments, so f2fs must account overwritten data as OPU > +# data when calculating free space, otherwise, it may run out > +# of free segments in f2fs' allocation function. If kernel config > +# CONFIG_F2FS_CHECK_FS is on, it will cause system panic, otherwise, > +# dd may encounter I/O error. > +# > +. ./common/preamble > +_begin_fstest auto quick > + > +_fixed_by_kernel_commit xxxxxxxxxxxx \ > + "f2fs: fix to account dirty data in __get_secs_required()" > + > +_require_scratch > +_scratch_mkfs_sized $((1024*1024*100)) >> $seqres.full > + > +# use mode=lfs to let f2fs always triggers OPU > +_scratch_mount -o mode=lfs,checkpoint=disable:10%,noinline_dentry >> $seqres.full > + > +testfile=$SCRATCH_MNT/testfile > + > +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null > + > +# The 2nd dd might run out of space, and trigger a kernel warning or > +# hang on unfixed kernel > +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync >>$seqres.full 2>&1 > +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync >>$seqres.full 2>&1 > + > +_scratch_remount checkpoint=enable > + > +echo "Silence is golden" > + > +status=0 > +exit > diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out > new file mode 100644 > index 00000000..675c1b7c > --- /dev/null > +++ b/tests/f2fs/006.out > @@ -0,0 +1,2 @@ > +QA output created by 006 > +Silence is golden > -- > 2.40.1 >