aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2017-08-31 16:54:51 -0700
committerMister Oyster <oysterized@gmail.com>2017-10-04 15:35:24 +0200
commit59e016bc297f4bd67aadf38993e8cdee0799a1aa (patch)
tree1fc75e45a99a3c2a83b0360146bbf9ce8a678a00
parente6e54703fc0f0d59fd9c3888da7840c1030f5f0b (diff)
f2fs: don't check inode's checksum if it was dirtied or writebacked
If another thread already made the page dirtied or writebacked, we must avoid to verify checksum. If we got an error, we need to remove its uptodate as well. Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fs/f2fs/inode.c3
-rw-r--r--fs/f2fs/node.c2
2 files changed, 3 insertions, 2 deletions
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 20ed9e8b8..ade5b4eda 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -153,7 +153,8 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page)
struct f2fs_inode *ri;
__u32 provided, calculated;
- if (!f2fs_enable_inode_chksum(sbi, page))
+ if (!f2fs_enable_inode_chksum(sbi, page) ||
+ PageDirty(page) || PageWriteback(page))
return true;
ri = &F2FS_NODE(page)->i;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d1cbddcb1..83c456025 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1199,9 +1199,9 @@ page_hit:
nid, nid_of_node(page), ino_of_node(page),
ofs_of_node(page), cpver_of_node(page),
next_blkaddr_of_node(page));
- ClearPageUptodate(page);
err = -EINVAL;
out_err:
+ ClearPageUptodate(page);
f2fs_put_page(page, 1);
return ERR_PTR(err);
}