aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <[email protected]>2025-02-25 18:21:14 +0000
committerAl Viro <[email protected]>2025-06-08 21:47:23 +0000
commit5e317d23f6c6c4b59d84e228a2271228e81cc797 (patch)
tree8417b124d13fad314b927eec15bfdf851b6bce1b
parentLinux 6.16-rc1 (diff)
downloadkernel-5e317d23f6c6c4b59d84e228a2271228e81cc797.tar.gz
kernel-5e317d23f6c6c4b59d84e228a2271228e81cc797.zip
d_set_mounted(): we don't need to bump seqcount component of rename_lock
IOW, read_seqlock_excl() is sufficient there; no need to bother with write_seqlock() (forcing all rename_lock readers into retry). That leaves rename_lock taken for write only when we want to change someone's parent or name. Signed-off-by: Al Viro <[email protected]>
-rw-r--r--fs/dcache.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index 03d58b2d4fa3..3c3cfb345233 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1436,7 +1436,7 @@ int d_set_mounted(struct dentry *dentry)
{
struct dentry *p;
int ret = -ENOENT;
- write_seqlock(&rename_lock);
+ read_seqlock_excl(&rename_lock);
for (p = dentry->d_parent; !IS_ROOT(p); p = p->d_parent) {
/* Need exclusion wrt. d_invalidate() */
spin_lock(&p->d_lock);
@@ -1456,7 +1456,7 @@ int d_set_mounted(struct dentry *dentry)
}
spin_unlock(&dentry->d_lock);
out:
- write_sequnlock(&rename_lock);
+ read_sequnlock_excl(&rename_lock);
return ret;
}