Message ID | 20241023081602.3806579-1-chao@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [f2fs-dev,v2,1/2] f2fs/006: add testcase to check out-of-space case | expand |
On Wed, Oct 23, 2024 at 04:16:01PM +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, resulting in > panic. > > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Signed-off-by: Chao Yu <chao@kernel.org> > --- > v2: > - add _fixed_by_kernel_commit() > - use _scratch_mkfs_sized() rather than formating size-specified > loop device > - code cleanup > tests/f2fs/006 | 38 ++++++++++++++++++++++++++++++++++++++ > tests/f2fs/006.out | 6 ++++++ > 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..63d00018 > --- /dev/null > +++ b/tests/f2fs/006 > @@ -0,0 +1,38 @@ > +#! /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, resulting in > +# panic. > +# > +. ./common/preamble > +_begin_fstest auto quick > + > +_fixed_by_kernel_commit xxxxxxxxxxxx \ > + "f2fs: fix to account dirty data in __get_secs_required()" > + > +testfile=$SCRATCH_MNT/testfile > + > +_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 > + > +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null > + > +# it may run out of free space of f2fs and hang kernel > +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync > +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync What kind of failure should be printed at here if test on unfixed kernel? I got: # diff -u /root/git/xfstests/tests/f2fs/006.out /root/git/xfstests/results//default/f2fs/006.out.bad|less --- /root/git/xfstests/tests/f2fs/006.out 2024-10-25 11:33:54.693883281 +0800 +++ /root/git/xfstests/results//default/f2fs/006.out.bad 2024-10-25 11:34:55.907252401 +0800 @@ -1,6 +1,6 @@ QA output created by 006 50+0 records in 50+0 records out -dd: error writing '/mnt/scratch_f2fs/testfile': No space left on device -3+0 records in -2+0 records out +dd: fsync failed for '/mnt/scratch/testfile': Input/output error +50+0 records in +50+0 records out Does that mean the bug is reproduced? > + > +_scratch_remount checkpoint=enable > + > +status=0 > +exit > diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out > new file mode 100644 > index 00000000..0d7b3910 > --- /dev/null > +++ b/tests/f2fs/006.out > @@ -0,0 +1,6 @@ > +QA output created by 006 > +50+0 records in > +50+0 records out > +dd: error writing '/mnt/scratch_f2fs/testfile': No space left on device The "/mnt/scratch_f2fs" should be SCRATCH_MNT, please use _filter_scratch() by importing common/filter. > +3+0 records in > +2+0 records out > -- > 2.40.1 >
On 2024/10/25 11:44, Zorro Lang wrote: > On Wed, Oct 23, 2024 at 04:16:01PM +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, resulting in >> panic. >> >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >> Signed-off-by: Chao Yu <chao@kernel.org> >> --- >> v2: >> - add _fixed_by_kernel_commit() >> - use _scratch_mkfs_sized() rather than formating size-specified >> loop device >> - code cleanup >> tests/f2fs/006 | 38 ++++++++++++++++++++++++++++++++++++++ >> tests/f2fs/006.out | 6 ++++++ >> 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..63d00018 >> --- /dev/null >> +++ b/tests/f2fs/006 >> @@ -0,0 +1,38 @@ >> +#! /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, resulting in >> +# panic. >> +# >> +. ./common/preamble >> +_begin_fstest auto quick >> + >> +_fixed_by_kernel_commit xxxxxxxxxxxx \ >> + "f2fs: fix to account dirty data in __get_secs_required()" >> + >> +testfile=$SCRATCH_MNT/testfile >> + >> +_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 >> + >> +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null >> + >> +# it may run out of free space of f2fs and hang kernel >> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync >> +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync > > What kind of failure should be printed at here if test on unfixed kernel? It will panic kernel w/o fix, can you please check dmesg? > I got: > > # diff -u /root/git/xfstests/tests/f2fs/006.out /root/git/xfstests/results//default/f2fs/006.out.bad|less > --- /root/git/xfstests/tests/f2fs/006.out 2024-10-25 11:33:54.693883281 +0800 > +++ /root/git/xfstests/results//default/f2fs/006.out.bad 2024-10-25 11:34:55.907252401 +0800 > @@ -1,6 +1,6 @@ > QA output created by 006 > 50+0 records in > 50+0 records out > -dd: error writing '/mnt/scratch_f2fs/testfile': No space left on device > -3+0 records in > -2+0 records out > +dd: fsync failed for '/mnt/scratch/testfile': Input/output error > +50+0 records in > +50+0 records out > > Does that mean the bug is reproduced? > >> + >> +_scratch_remount checkpoint=enable >> + >> +status=0 >> +exit >> diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out >> new file mode 100644 >> index 00000000..0d7b3910 >> --- /dev/null >> +++ b/tests/f2fs/006.out >> @@ -0,0 +1,6 @@ >> +QA output created by 006 >> +50+0 records in >> +50+0 records out >> +dd: error writing '/mnt/scratch_f2fs/testfile': No space left on device > > The "/mnt/scratch_f2fs" should be SCRATCH_MNT, please use _filter_scratch() > by importing common/filter. Correct, let me fix this. Thanks, > >> +3+0 records in >> +2+0 records out >> -- >> 2.40.1 >> >
diff --git a/tests/f2fs/006 b/tests/f2fs/006 new file mode 100755 index 00000000..63d00018 --- /dev/null +++ b/tests/f2fs/006 @@ -0,0 +1,38 @@ +#! /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, resulting in +# panic. +# +. ./common/preamble +_begin_fstest auto quick + +_fixed_by_kernel_commit xxxxxxxxxxxx \ + "f2fs: fix to account dirty data in __get_secs_required()" + +testfile=$SCRATCH_MNT/testfile + +_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 + +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null + +# it may run out of free space of f2fs and hang kernel +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync + +_scratch_remount checkpoint=enable + +status=0 +exit diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out new file mode 100644 index 00000000..0d7b3910 --- /dev/null +++ b/tests/f2fs/006.out @@ -0,0 +1,6 @@ +QA output created by 006 +50+0 records in +50+0 records out +dd: error writing '/mnt/scratch_f2fs/testfile': No space left on device +3+0 records in +2+0 records out
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, resulting in panic. Cc: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Chao Yu <chao@kernel.org> --- v2: - add _fixed_by_kernel_commit() - use _scratch_mkfs_sized() rather than formating size-specified loop device - code cleanup tests/f2fs/006 | 38 ++++++++++++++++++++++++++++++++++++++ tests/f2fs/006.out | 6 ++++++ 2 files changed, 44 insertions(+) create mode 100755 tests/f2fs/006 create mode 100644 tests/f2fs/006.out