fs: don't needlessly acquire f_lock
authorChristian Brauner <brauner@kernel.org>
Fri, 7 Feb 2025 14:10:33 +0000 (15:10 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 21 Feb 2025 09:25:32 +0000 (10:25 +0100)
commitda06e3c5179467f9ef7caffb512ef111a70afde1
treeef35a14c19b2d3f2d364d1ef5b9740e1208c187c
parent1bb772565f327291b0a463b125c7646dc45ae8b4
fs: don't needlessly acquire f_lock

Before 2011 there was no meaningful synchronization between
read/readdir/write/seek. Only in commit
ef3d0fd27e90 ("vfs: do (nearly) lockless generic_file_llseek")
synchronization was added for SEEK_CUR by taking f_lock around
vfs_setpos().

Then in 2014 full synchronization between read/readdir/write/seek was
added in commit 9c225f2655e3 ("vfs: atomic f_pos accesses as per POSIX")
by introducing f_pos_lock for regular files with FMODE_ATOMIC_POS and
for directories. At that point taking f_lock became unnecessary for such
files.

So only acquire f_lock for SEEK_CUR if this isn't a file that would have
acquired f_pos_lock if necessary.

Link: https://lore.kernel.org/r/20250207-daten-mahlzeit-99d2079864fb@brauner
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/file.c
fs/internal.h
fs/read_write.c