From: Al Viro Date: Tue, 25 Feb 2025 18:21:14 +0000 (-0500) Subject: d_set_mounted(): we don't need to bump seqcount component of rename_lock X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e317d23f6c6c4b59d84e228a2271228e81cc797;p=thirdparty%2Flinux.git 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 --- diff --git a/fs/dcache.c b/fs/dcache.c index 03d58b2d4fa34..3c3cfb345233e 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; }