We can use the reference count to see if the inode is live. Signed-off-by: Josef Bacik --- fs/quota/dquot.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index df4a9b348769..90e69653c261 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -1030,14 +1030,16 @@ static int add_dquot_ref(struct super_block *sb, int type) 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_FREEING|I_WILL_FREE|I_NEW)) || + if ((inode->i_state & I_NEW) || !atomic_read(&inode->i_writecount) || !dqinit_needed(inode, type)) { spin_unlock(&inode->i_lock); continue; } - __iget(inode); spin_unlock(&inode->i_lock); + + if (!igrab(inode)) + continue; spin_unlock(&sb->s_inode_list_lock); #ifdef CONFIG_QUOTA_DEBUG -- 2.49.0