Instead of checking I_WILL_FREE|I_FREEING we can simply use inode_tryget() to determine if we have a live inode that can be evicted. Signed-off-by: Josef Bacik --- fs/inode.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/inode.c b/fs/inode.c index a14b3a54c4b5..4e1eeb0c3889 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -983,12 +983,16 @@ void evict_inodes(struct super_block *sb) spin_lock(&sb->s_inode_list_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { spin_lock(&inode->i_lock); - if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) { + if (inode->i_state & I_NEW) { + spin_unlock(&inode->i_lock); + continue; + } + + if (!inode_tryget(inode)) { spin_unlock(&inode->i_lock); continue; } - __iget(inode); inode_lru_list_del(inode); list_add(&inode->i_lru, &dispose); spin_unlock(&inode->i_lock); -- 2.49.0