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.

v1->v2: It don't need to pass @ino in f2fs_submit_merged_write_cond .

Signed-off-by: Zheng Liang <zhenglia...@huawei.com>
--------
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index c46a1d43..60f0599 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, 0, DATA);
+                       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

Reply via email to