fs: rely on ->iterate_shared to determine f_pos locking
authorChristian Brauner <brauner@kernel.org>
Sun, 6 Aug 2023 12:49:35 +0000 (14:49 +0200)
committerChristian Brauner <brauner@kernel.org>
Sun, 6 Aug 2023 13:08:36 +0000 (15:08 +0200)
Now that we removed ->iterate we don't need to check for either
->iterate or ->iterate_shared in file_needs_f_pos_lock(). Simply check
for ->iterate_shared instead. This will tell us whether we need to
unconditionally take the lock. Not just does it allow us to avoid
checking f_inode's mode it also actually clearly shows that we're
locking because of readdir.

Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/file.c

index dbca26e..3fd003a 100644 (file)
--- a/fs/file.c
+++ b/fs/file.c
@@ -1049,7 +1049,7 @@ unsigned long __fdget_raw(unsigned int fd)
 static inline bool file_needs_f_pos_lock(struct file *file)
 {
        return (file->f_mode & FMODE_ATOMIC_POS) &&
-               (file_count(file) > 1 || S_ISDIR(file_inode(file)->i_mode));
+               (file_count(file) > 1 || file->f_op->iterate_shared);
 }
 
 unsigned long __fdget_pos(unsigned int fd)