summaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2017-08-31 16:54:51 -0700
committerJaegeuk Kim <jaegeuk@kernel.org>2017-09-05 10:50:11 -0700
commitee605234996627c4fe874ea580e36211fb2bf6d5 (patch)
treeb017014fe96396be4ed4a0d8aed4359238a429f4 /fs/f2fs
parenta298d57f960255d8618b86f403dee305d3c8a29c (diff)
downloadop-kernel-dev-ee605234996627c4fe874ea580e36211fb2bf6d5.zip
op-kernel-dev-ee605234996627c4fe874ea580e36211fb2bf6d5.tar.gz
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>
Diffstat (limited to 'fs/f2fs')
-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 b4c401d..c33b05a 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 388a002..fca8783 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1187,9 +1187,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);
}
OpenPOWER on IntegriCloud