diff mbox

xfs_io: Improvements to copy_range return code handling

Message ID 20161208184447.23020-1-Anna.Schumaker@Netapp.com (mailing list archive)
State Accepted
Headers show

Commit Message

Schumaker, Anna Dec. 8, 2016, 6:44 p.m. UTC
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>
---
 io/copy_file_range.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/io/copy_file_range.c b/io/copy_file_range.c
index eddc634..161bdcf 100644
--- a/io/copy_file_range.c
+++ b/io/copy_file_range.c
@@ -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) {
+			fprintf(stderr, _("copy_range: %s\n"), strerror(errno));
 			return errno;
+		} else if (ret == 0)
+			break;
 		len -= ret;
 	} while (len > 0);