On 2019/1/22 22:01, zhengliang wrote: > The following race could lead to data block override node segment by mistake. > > Task A | Task B | Task C | Task D > ======= | ======== |========== | ========= > open file | | | > white file | | | > submit bio | | | > wait io complete | | | > | remove file | | > ........ | iput_final | | > | | sync | > | | do checkpoint | > | | data segment free | > | | | create file1 > | | | allocate node > segment(if it is the same segment freed by Task C) > f2fs_write_end_io | | | > > > So we need to guarantee io complete before truncate inode > in f2fs_drop_inode. > > Signed-off-by: Zheng Liang <zhenglia...@huawei.com> > -------- > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > index c46a1d43..becbd10 100644 > --- a/fs/f2fs/super.c > +++ b/fs/f2fs/super.c > @@ -915,6 +915,10 @@ static int f2fs_drop_inode(struct inode *inode) > sb_start_intwrite(inode->i_sb); > f2fs_i_size_write(inode, 0); > > + f2fs_submit_merged_write_cond(F2FS_I_SB(inode), > + inode, NULL, inode->i_ino, DATA);
@ino in f2fs_submit_merged_write_cond is used for node page check, here, we don't need to pass it. Thanks, > + truncate_inode_pages_final(inode->i_mapping); > + > if (F2FS_HAS_BLOCKS(inode)) > f2fs_truncate(inode); > > > . > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel