]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
find_acceptable_alias(): skip NORCU aliases with zero refcount
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 4 May 2026 04:32:43 +0000 (00:32 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 5 Jun 2026 04:34:55 +0000 (00:34 -0400)
similar to d_find_any_alias() situation

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/exportfs/expfs.c

index fbd45e7ae706b7c7ac2c3409240ee6e79cc44645..eafd99507afee49f5d5a5d219dde7d2fb02c225f 100644 (file)
@@ -53,10 +53,10 @@ find_acceptable_alias(struct dentry *result,
        inode = result->d_inode;
        spin_lock(&inode->i_lock);
        for_each_alias(dentry, inode) {
-               dget(dentry);
+               if (!dget_alias_ilocked(dentry))
+                       continue;
                spin_unlock(&inode->i_lock);
-               if (toput)
-                       dput(toput);
+               dput(toput);
                if (dentry != result && acceptable(context, dentry)) {
                        dput(result);
                        return dentry;
@@ -66,8 +66,7 @@ find_acceptable_alias(struct dentry *result,
        }
        spin_unlock(&inode->i_lock);
 
-       if (toput)
-               dput(toput);
+       dput(toput);
        return NULL;
 }