]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
convert cifs_ioctl_copychunk()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 23 Jul 2024 05:05:06 +0000 (01:05 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Nov 2024 06:28:07 +0000 (01:28 -0500)
fdput() moved past mnt_drop_file_write(); harmless, if somewhat cringeworthy.
Reordering could be avoided either by adding an explicit scope or by making
mnt_drop_file_write() called via __cleanup.

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/smb/client/ioctl.c

index 2ce193609d8b23c60238712020fdc871e3201a49..56439da4f1194dc7c963cc010154cd6df72d2921 100644 (file)
@@ -72,7 +72,6 @@ static long cifs_ioctl_copychunk(unsigned int xid, struct file *dst_file,
                        unsigned long srcfd)
 {
        int rc;
-       struct fd src_file;
        struct inode *src_inode;
 
        cifs_dbg(FYI, "ioctl copychunk range\n");
@@ -89,8 +88,8 @@ static long cifs_ioctl_copychunk(unsigned int xid, struct file *dst_file,
                return rc;
        }
 
-       src_file = fdget(srcfd);
-       if (!fd_file(src_file)) {
+       CLASS(fd, src_file)(srcfd);
+       if (fd_empty(src_file)) {
                rc = -EBADF;
                goto out_drop_write;
        }
@@ -98,20 +97,18 @@ static long cifs_ioctl_copychunk(unsigned int xid, struct file *dst_file,
        if (fd_file(src_file)->f_op->unlocked_ioctl != cifs_ioctl) {
                rc = -EBADF;
                cifs_dbg(VFS, "src file seems to be from a different filesystem type\n");
-               goto out_fput;
+               goto out_drop_write;
        }
 
        src_inode = file_inode(fd_file(src_file));
        rc = -EINVAL;
        if (S_ISDIR(src_inode->i_mode))
-               goto out_fput;
+               goto out_drop_write;
 
        rc = cifs_file_copychunk_range(xid, fd_file(src_file), 0, dst_file, 0,
                                        src_inode->i_size, 0);
        if (rc > 0)
                rc = 0;
-out_fput:
-       fdput(src_file);
 out_drop_write:
        mnt_drop_write_file(dst_file);
        return rc;