Re: [PATCH v3 14/28] fdget(), trivial conversions

Francesco Lavra
2024-11-11T17:22:26Z

On Sat, 2024-11-02 at 05:08 +0000, Al Viro wrote:
> fdget() is the first thing done in scope, all matching fdput() are
> immediately followed by leaving the scope.
>
> Reviewed-by: Christian Brauner <brauner@kernel.org>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
>  arch/powerpc/kvm/book3s_64_vio.c           | 21 +++---------
>  arch/powerpc/kvm/powerpc.c                 | 24 ++++---------
>  arch/powerpc/platforms/cell/spu_syscalls.c |  6 ++--
>  arch/x86/kernel/cpu/sgx/main.c             | 10 ++----
>  arch/x86/kvm/svm/sev.c                     | 39 ++++++++------------
> --
>  drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c  | 23 ++++---------
>  drivers/gpu/drm/drm_syncobj.c              |  9 ++---
>  drivers/media/rc/lirc_dev.c                | 13 +++-----
>  fs/btrfs/ioctl.c                           |  5 ++-
>  fs/eventfd.c                               |  9 ++---
>  fs/eventpoll.c                             | 23 ++++---------
>  fs/fhandle.c                               |  5 ++-
>  fs/ioctl.c                                 | 23 +++++--------
>  fs/kernel_read_file.c                      | 12 +++----
>  fs/notify/fanotify/fanotify_user.c         | 15 +++------
>  fs/notify/inotify/inotify_user.c           | 17 +++-------
>  fs/open.c                                  | 36 +++++++++-----------
>  fs/read_write.c                            | 28 +++++-----------
>  fs/signalfd.c                              |  9 ++---
>  fs/sync.c                                  | 29 ++++++----------
>  io_uring/sqpoll.c                          | 29 +++++-----------
>  kernel/events/core.c                       | 14 +++-----
>  kernel/nsproxy.c                           |  5 ++-
>  kernel/pid.c                               |  7 ++--
>  kernel/sys.c                               | 15 +++------
>  kernel/watch_queue.c                       |  6 ++--
>  mm/fadvise.c                               | 10 ++----
>  mm/readahead.c                             | 17 +++-------
>  net/core/net_namespace.c                   | 10 +++---
>  security/landlock/syscalls.c               | 26 +++++----------
>  virt/kvm/vfio.c                            |  8 ++---
>  31 files changed, 164 insertions(+), 339 deletions(-)

[...]

> diff --git a/fs/read_write.c b/fs/read_write.c
> index ef3ee3725714..5e3df2d39283 100644
> --- a/fs/read_write.c
> +++ b/fs/read_write.c
> @@ -1663,36 +1663,32 @@ SYSCALL_DEFINE6(copy_file_range, int, fd_in,
> loff_t __user *, off_in,
>  {
>         loff_t pos_in;
>         loff_t pos_out;
> -       struct fd f_in;
> -       struct fd f_out;
>         ssize_t ret = -EBADF;

This initialization is no longer needed.

>
> -       f_in = fdget(fd_in);
> -       if (!fd_file(f_in))
> -               goto out2;
> +       CLASS(fd, f_in)(fd_in);
> +       if (fd_empty(f_in))
> +               return -EBADF;
>
> -       f_out = fdget(fd_out);
> -       if (!fd_file(f_out))
> -               goto out1;
> +       CLASS(fd, f_out)(fd_out);
> +       if (fd_empty(f_out))
> +               return -EBADF;
>
> -       ret = -EFAULT;
>         if (off_in) {
>                 if (copy_from_user(&pos_in, off_in, sizeof(loff_t)))
> -                       goto out;
> +                       return -EFAULT;
>         } else {
>                 pos_in = fd_file(f_in)->f_pos;
>         }
>
>         if (off_out) {
>                 if (copy_from_user(&pos_out, off_out,
> sizeof(loff_t)))
> -                       goto out;
> +                       return -EFAULT;
>         } else {
>                 pos_out = fd_file(f_out)->f_pos;
>         }
>
> -       ret = -EINVAL;
>         if (flags != 0)
> -               goto out;
> +               return -EINVAL;
>
>         ret = vfs_copy_file_range(fd_file(f_in), pos_in,
> fd_file(f_out), pos_out, len,
>                                   flags);