f2fs: fix to let checkpoint guarantee atomic page persistence
authorChao Yu <yuchao0@huawei.com>
Tue, 8 May 2018 06:06:03 +0000 (14:06 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 31 May 2018 18:31:50 +0000 (11:31 -0700)
1. thread A: commit_inmem_pages submit data into block layer, but
haven't waited it writeback.
2. thread A: commit_inmem_pages update related node.
3. thread B: do checkpoint, flush all nodes to disk.
4. SPOR

Then, atomic file becomes corrupted since nodes is flushed before data.

This patch fixes to treat atomic page as checkpoint guaranteed one,
then in checkpoint, we can make sure all atomic page can be writebacked
with metadata of atomic file.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c

index 72287fa2489cc0e54c0fed9e9c862dcb3b5c4fc0..01135cc3a29270899bba7ceb74c784f0d0e13518 100644 (file)
@@ -48,6 +48,8 @@ static bool __is_cp_guaranteed(struct page *page)
        if (inode->i_ino == F2FS_META_INO(sbi) ||
                        inode->i_ino ==  F2FS_NODE_INO(sbi) ||
                        S_ISDIR(inode->i_mode) ||
+                       (S_ISREG(inode->i_mode) &&
+                       is_inode_flag_set(inode, FI_ATOMIC_FILE)) ||
                        is_cold_data(page))
                return true;
        return false;