On Tue, Aug 26, 2025 at 11:39:39AM -0400, Josef Bacik wrote: > We can use the reference count to see if the inode is live. > > Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx> > --- > 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; Using this to drop a comment that I mentioned to you. I think we should have an iterator for this because we have the exact same pattern in so many places it's annoying.