diff options
| author | Jaegeuk Kim <jaegeuk@kernel.org> | 2017-08-31 16:54:51 -0700 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-10-04 15:35:24 +0200 |
| commit | 59e016bc297f4bd67aadf38993e8cdee0799a1aa (patch) | |
| tree | 1fc75e45a99a3c2a83b0360146bbf9ce8a678a00 | |
| parent | e6e54703fc0f0d59fd9c3888da7840c1030f5f0b (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.c | 3 | ||||
| -rw-r--r-- | fs/f2fs/node.c | 2 |
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); } |
