]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_io: Improvements to copy_range return code handling
authorAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 12 Jan 2017 20:12:40 +0000 (14:12 -0600)
committerEric Sandeen <sandeen@redhat.com>
Thu, 12 Jan 2017 20:12:40 +0000 (14:12 -0600)
If copy_file_range() returns 0, then that means no data was copied.  We
should break out of the loop in this case to prevent looping
indefinitely.

Additionally, if an error is returned by copy_file_range() then we need
to print out the string form to be used by error checking tests in
xfstests.

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
io/copy_file_range.c

index 88203e967df4e63bbecb1c5928848d050c54564b..249c64907514a606d147368e999f87f442f23c98 100644 (file)
@@ -49,8 +49,11 @@ copy_file_range(int fd, loff_t *src, loff_t *dst, size_t len)
 
        do {
                ret = syscall(__NR_copy_file_range, fd, src, file->fd, dst, len, 0);
-               if (ret == -1)
+               if (ret == -1) {
+                       perror("copy_range");
                        return errno;
+               } else if (ret == 0)
+                       break;
                len -= ret;
        } while (len > 0);