diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2026-05-04 07:32:43 +0300 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2026-06-05 07:34:55 +0300 |
| commit | 87e801e1678342fc23b1eb92c0eecedf5dca79cb (patch) | |
| tree | 4623115c5a98f7e823d1eca47751a48b69995588 | |
| parent | 1a967a7ec70ff951716e84739f79b6e167ac1e0b (diff) | |
| download | linux-87e801e1678342fc23b1eb92c0eecedf5dca79cb.tar.xz | |
find_acceptable_alias(): skip NORCU aliases with zero refcount
similar to d_find_any_alias() situation
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/exportfs/expfs.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c index fbd45e7ae706..eafd99507afe 100644 --- a/fs/exportfs/expfs.c +++ b/fs/exportfs/expfs.c @@ -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; } |
