f2fs: fix to data block override node segment by mistake
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 <zhengliang6@huawei.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
04c71ef5d9
commit
b339a10ec6
1 changed files with 4 additions and 0 deletions
|
@ -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, 0, DATA);
|
||||
truncate_inode_pages_final(inode->i_mapping);
|
||||
|
||||
if (F2FS_HAS_BLOCKS(inode))
|
||||
f2fs_truncate(inode);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue