On 2017/9/2 1:25, Jaegeuk Kim wrote: > 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. > > Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> Reviewed-by: Chao Yu <yuchao0@xxxxxxxxxx> > --- > fs/f2fs/inode.c | 3 ++- > 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 b4c401d456e7..c33b05aec1a1 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 388a00262a5f..fca87835a1da 100644 > --- a/fs/f2fs/node.c > +++ b/fs/f2fs/node.c > @@ -1187,9 +1187,9 @@ static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid, > 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); > } >