This patch introduce a regression test to check whether f2fs handles dirty inode correctly when checkpoint is disabled in a corner case, it may hang umount before the bug is fixed. Cc: Qi Han <hanqi@xxxxxxxx> Signed-off-by: Chao Yu <chao@xxxxxxxxxx> --- tests/f2fs/005 | 59 ++++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/005.out | 1 + 2 files changed, 60 insertions(+) create mode 100755 tests/f2fs/005 create mode 100644 tests/f2fs/005.out diff --git a/tests/f2fs/005 b/tests/f2fs/005 new file mode 100755 index 00000000..4faf1bb9 --- /dev/null +++ b/tests/f2fs/005 @@ -0,0 +1,59 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Oppo. All Rights Reserved. +# +# FS QA Test No. f2fs/005 +# +# This is a regression test to check whether f2fs handles dirty +# inode correctly when checkpoint is disabled, it may hang umount +# before the bug is fixed. +# +. ./common/preamble +_begin_fstest auto quick + +_cleanup() +{ + rm -f $img + rmdir $mnt + _scratch_unmount >> $seqres.full + cd / + rm -r -f $tmp.* +} + +_require_scratch +_scratch_mkfs >> $seqres.full +_scratch_mount >> $seqres.full + +img=$SCRATCH_MNT/f2fs.img +mnt=$SCRATCH_MNT/f2fs.mnt +testfile=$mnt/testfile +tmpfile=$mnt/tmpfile +tmpdir=$mnt/tmpdir + +mkdir $mnt +dd if=/dev/zero of=$img bs=1M count=50 2>/dev/null +$MKFS_F2FS_PROG -f $img >/dev/null 2>&1 +sync + +# use mode=lfs to let f2fs always triggers OPU +mount -t $FSTYP -o loop,mode=lfs,checkpoint=disable:10%,noinline_dentry $img $mnt + +dd if=/dev/zero of=$testfile bs=1M count=5 2>/dev/null +mkdir $tmpdir +touch $tmpfile +sync + +# it dirties tmpdir inode by updating ctime, +# but it doesn't moving the inode to gdirty_list. +mv $tmpfile $tmpdir + +# it runs out of free segment +dd if=/dev/zero of=$testfile bs=1M count=5 conv=notrunc conv=fsync 2>/dev/null + +mount -o remount,checkpoint=enable $mnt + +# it may hang umount if tmpdir is still dirty during evict() +umount $mnt + +status=0 +exit diff --git a/tests/f2fs/005.out b/tests/f2fs/005.out new file mode 100644 index 00000000..caa3c880 --- /dev/null +++ b/tests/f2fs/005.out @@ -0,0 +1 @@ +QA output created by 005 -- 2.40.1