]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
convert vfs_dedupe_file_range().
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 23 Jul 2024 05:28:31 +0000 (01:28 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Nov 2024 06:28:07 +0000 (01:28 -0500)
fdput() is followed by checking fatal_signal_pending() (and aborting
the loop in such case).  fdput() is transposable with that check.
Yes, it'll probably end up with slightly fatter code (call after the
check has returned false + call on the almost never taken out-of-line path
instead of one call before the check), but it's not worth bothering with
explicit extra scope there (or dragging the check into the loop condition,
for that matter).

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

index 017d0d1ea6c9a137c28b16f196a247ddb32ab82d..26afbbbfb10c2ece89ff65f7c78a2fa319574fa2 100644 (file)
@@ -536,7 +536,7 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
        }
 
        for (i = 0, info = same->info; i < count; i++, info++) {
-               struct fd dst_fd = fdget(info->dest_fd);
+               CLASS(fd, dst_fd)(info->dest_fd);
 
                if (fd_empty(dst_fd)) {
                        info->status = -EBADF;
@@ -545,7 +545,7 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
 
                if (info->reserved) {
                        info->status = -EINVAL;
-                       goto next_fdput;
+                       goto next_loop;
                }
 
                deduped = vfs_dedupe_file_range_one(file, off, fd_file(dst_fd),
@@ -558,8 +558,6 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
                else
                        info->bytes_deduped = len;
 
-next_fdput:
-               fdput(dst_fd);
 next_loop:
                if (fatal_signal_pending(current))
                        break;