Hi Yunlei, On 2017/8/26 12:15, Yunlei He wrote: > The loop reason is DIRTY IMETA always equal to 1: > > Thread A: > -write_checkpoint > -block_operations > -f2fs_sync_inode_meta > -igrab <--- here igrab return NULL > > Thread B: > -f2fs_evict_inode > -remove_inode_page > -truncate_xattr_node > -__get_node_page > -read_node_page <---- here return -ENOENT > > This patch walk around this cause.
It needs to figure out root cause that why xattr node entry is invalid. How about this modification: diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index b4c401d..62de5f7 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -497,7 +497,7 @@ void f2fs_evict_inode(struct inode *inode) f2fs_lock_op(sbi); err = remove_inode_page(inode); f2fs_unlock_op(sbi); - if (err == -ENOENT) + if (err == -ENOENT && is_bad_inode(inode)) err = 0; } Thanks > > Signed-off-by: Yunlei He <heyun...@huawei.com> > --- > fs/f2fs/node.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 2654c91..ec7a0e0 > 100644 > --- a/fs/f2fs/node.c > +++ b/fs/f2fs/node.c > @@ -973,8 +973,9 @@ int truncate_xattr_node(struct inode *inode, struct page > *page) > return 0; > > npage = get_node_page(sbi, nid); > - if (IS_ERR(npage)) > + if (IS_ERR(npage) && PTR_ERR(npage) != -ENOENT) { > return PTR_ERR(npage); > + } > > f2fs_i_xnid_write(inode, 0); > > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel