fold fs_struct->{lock,seq} into a seqlock
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 2 Jul 2025 05:34:37 +0000 (06:34 +0100)
committerChristian Brauner <brauner@kernel.org>
Tue, 8 Jul 2025 08:25:19 +0000 (10:25 +0200)
commita683a5b2ba23598ad343e5ec10a4ef4077497fc9
treee4c1e89385d3a54da107ee73864e7976ba0d54fd
parent7a5b467e5d1a4b1968b590e3d09d895590a83ff6
fold fs_struct->{lock,seq} into a seqlock

The combination of spinlock_t lock and seqcount_spinlock_t seq
in struct fs_struct is an open-coded seqlock_t (see linux/seqlock_types.h).
Combine and switch to equivalent seqlock_t primitives.  AFAICS,
that does end up with the same sequence of underlying operations in all
cases.
While we are at it, get_fs_pwd() is open-coded verbatim in
get_path_from_fd(); rather than applying conversion to it, replace with
the call of get_fs_pwd() there.  Not worth splitting the commit for that,
IMO...

A bit of historical background - conversion of seqlock_t to
use of seqcount_spinlock_t happened several months after the same
had been done to struct fs_struct; switching fs_struct to seqlock_t
could've been done immediately after that, but it looks like nobody
had gotten around to that until now.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://lore.kernel.org/20250702053437.GC1880847@ZenIV
Acked-by: Ahmed S. Darwish <darwi@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/d_path.c
fs/exec.c
fs/fhandle.c
fs/fs_struct.c
fs/namei.c
include/linux/fs_struct.h
kernel/fork.c