diff options
| author | Al Viro <[email protected]> | 2025-02-25 18:21:14 +0000 |
|---|---|---|
| committer | Al Viro <[email protected]> | 2025-06-08 21:47:23 +0000 |
| commit | 5e317d23f6c6c4b59d84e228a2271228e81cc797 (patch) | |
| tree | 8417b124d13fad314b927eec15bfdf851b6bce1b | |
| parent | Linux 6.16-rc1 (diff) | |
| download | kernel-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.c | 4 |
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; } |
