io_uring: use files_lookup_fd_locked()
authorChristian Brauner <brauner@kernel.org>
Tue, 10 Oct 2023 08:23:26 +0000 (10:23 +0200)
committerChristian Brauner <brauner@kernel.org>
Thu, 19 Oct 2023 09:02:49 +0000 (11:02 +0200)
While valid we don't need to open-code rcu dereferences if we're
acquiring file_lock anyway.

Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://lore.kernel.org/r/20231010030615.GO800259@ZenIV
Signed-off-by: Christian Brauner <brauner@kernel.org>
io_uring/openclose.c

index e3fae26e025ddafada10394ee1780cd257d35ae8..fb73adb890674b6bbc36fc042b349517bc887c3f 100644 (file)
@@ -220,7 +220,6 @@ int io_close(struct io_kiocb *req, unsigned int issue_flags)
 {
        struct files_struct *files = current->files;
        struct io_close *close = io_kiocb_to_cmd(req, struct io_close);
-       struct fdtable *fdt;
        struct file *file;
        int ret = -EBADF;
 
@@ -230,13 +229,7 @@ int io_close(struct io_kiocb *req, unsigned int issue_flags)
        }
 
        spin_lock(&files->file_lock);
-       fdt = files_fdtable(files);
-       if (close->fd >= fdt->max_fds) {
-               spin_unlock(&files->file_lock);
-               goto err;
-       }
-       file = rcu_dereference_protected(fdt->fd[close->fd],
-                       lockdep_is_held(&files->file_lock));
+       file = files_lookup_fd_locked(files, close->fd);
        if (!file || io_is_uring_fops(file)) {
                spin_unlock(&files->file_lock);
                goto err;