On Mon, Mar 24, 2025 at 4:54 AM Chao Yu via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net> wrote: > > w/ below testcase, it will cause inconsistence in between SIT and SSA. > > create_null_blk 512 2 1024 1024 > mkfs.f2fs -m /dev/nullb0 > mount /dev/nullb0 /mnt/f2fs/ > touch /mnt/f2fs/file > f2fs_io pinfile set /mnt/f2fs/file > fallocate -l 4GiB /mnt/f2fs/file > > F2FS-fs (nullb0): Inconsistent segment (0) type [1, 0] in SSA and SIT > CPU: 5 UID: 0 PID: 2398 Comm: fallocate Tainted: G O > 6.13.0-rc1 #84 > Tainted: [O]=OOT_MODULE > Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 > Call Trace: > <TASK> > dump_stack_lvl+0xb3/0xd0 > dump_stack+0x14/0x20 > f2fs_handle_critical_error+0x18c/0x220 [f2fs] > f2fs_stop_checkpoint+0x38/0x50 [f2fs] > do_garbage_collect+0x674/0x6e0 [f2fs] > f2fs_gc_range+0x12b/0x230 [f2fs] > f2fs_allocate_pinning_section+0x5c/0x150 [f2fs] > f2fs_expand_inode_data+0x1cc/0x3c0 [f2fs] > f2fs_fallocate+0x3c3/0x410 [f2fs] > vfs_fallocate+0x15f/0x4b0 > __x64_sys_fallocate+0x4a/0x80 > x64_sys_call+0x15e8/0x1b80 > do_syscall_64+0x68/0x130 > entry_SYSCALL_64_after_hwframe+0x67/0x6f > RIP: 0033:0x7f9dba5197ca > F2FS-fs (nullb0): Stopped filesystem due to reason: 4 > > The reason is f2fs_gc_range() may try to migrate block in curseg, however, > its SSA block is not uptodate due to the last summary block data in still > in cache of curseg. > > In this patch, we add a condition in f2fs_gc_range() to check whether > section is opened or not, and skip block migration for opened section. > > Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices") > Cc: Daeho Jeong <daehoje...@google.com> > Signed-off-by: Chao Yu <c...@kernel.org> > --- > fs/f2fs/gc.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c > index 2b8f9239bede..8b5a55b72264 100644 > --- a/fs/f2fs/gc.c > +++ b/fs/f2fs/gc.c > @@ -2066,6 +2066,9 @@ int f2fs_gc_range(struct f2fs_sb_info *sbi, > .iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS), > }; > > + if (IS_CURSEC(sbi, GET_SEC_FROM_SEG(sbi, segno))) > + continue; > + > do_garbage_collect(sbi, segno, &gc_list, FG_GC, true, false); > put_gc_inode(&gc_list); > > -- > 2.48.1 > >
Reviewed-by: Daeho Jeong <daehoje...@google.com> Thanks. > > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel