On Thu, Aug 21, 2025 at 04:18:34PM -0400, Josef Bacik wrote: > These two helpers are always used under the RCU and don't appear to mind > if the inode state changes in between time of check and time of use. > Update them to use the i_count refcount instead of I_WILL_FREE or > I_FREEING. > > Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx> > --- > fs/inode.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/fs/inode.c b/fs/inode.c > index 893ac902268b..63ccd32fa221 100644 > --- a/fs/inode.c > +++ b/fs/inode.c > @@ -1839,7 +1839,7 @@ struct inode *find_inode_rcu(struct super_block *sb, unsigned long hashval, > > hlist_for_each_entry_rcu(inode, head, i_hash) { > if (inode->i_sb == sb && > - !(READ_ONCE(inode->i_state) & (I_FREEING | I_WILL_FREE)) && > + refcount_read(&inode->i_count) > 0 && No direct i_count access, otherwise another nice change. Not having to look at these terribly named flags anymore is wonderful. > test(inode, data)) > return inode; > } > @@ -1878,8 +1878,8 @@ struct inode *find_inode_by_ino_rcu(struct super_block *sb, > hlist_for_each_entry_rcu(inode, head, i_hash) { > if (inode->i_ino == ino && > inode->i_sb == sb && > - !(READ_ONCE(inode->i_state) & (I_FREEING | I_WILL_FREE))) > - return inode; > + refcount_read(&inode->i_count) > 0) > + return inode; > } > return NULL; > } > -- > 2.49.0 >