From 8ed874b39b3c330bbcdff434e08995dbb4467285 Mon Sep 17 00:00:00 2001 From: Julio Faracco Date: Fri, 6 Jul 2018 10:43:01 -0300 Subject: [PATCH] storage: Rename btrfsCloneFile to support other filesystems. This commit renames and adds other macros to support aother filesystems when a reflink is performed. After that, XFS filesystems (and others) with reflink support will be able to clone. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1565004 Signed-off-by: Julio Faracco Signed-off-by: Michal Privoznik --- src/storage/storage_util.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c index a701a75702..da99043e0a 100644 --- a/src/storage/storage_util.c +++ b/src/storage/storage_util.c @@ -48,6 +48,12 @@ #if HAVE_LINUX_BTRFS_H # include +# define REFLINK_IOC_CLONE BTRFS_IOC_CLONE +#elif HAVE_XFS_XFS_H +# include +# define REFLINK_IOC_CLONE XFS_IOC_CLONE +#elif defined(FICLONE) +# define REFLINK_IOC_CLONE FICLONE #endif #include "datatypes.h" @@ -80,22 +86,23 @@ VIR_LOG_INIT("storage.storage_util"); * Perform the O(1) btrfs clone operation, if possible. * Upon success, return 0. Otherwise, return -1 and set errno. */ -#if HAVE_LINUX_BTRFS_H +#ifdef REFLINK_IOC_CLONE static inline int -btrfsCloneFile(int dest_fd, int src_fd) +reflinkCloneFile(int dest_fd, int src_fd) { - return ioctl(dest_fd, BTRFS_IOC_CLONE, src_fd); + return ioctl(dest_fd, REFLINK_IOC_CLONE, src_fd); } #else static inline int -btrfsCloneFile(int dest_fd ATTRIBUTE_UNUSED, - int src_fd ATTRIBUTE_UNUSED) +reflinkCloneFile(int dest_fd ATTRIBUTE_UNUSED, + int src_fd ATTRIBUTE_UNUSED) { errno = ENOTSUP; return -1; } #endif + static int ATTRIBUTE_NONNULL(2) virStorageBackendCopyToFD(virStorageVolDefPtr vol, virStorageVolDefPtr inputvol, @@ -142,7 +149,7 @@ virStorageBackendCopyToFD(virStorageVolDefPtr vol, } if (reflink_copy) { - if (btrfsCloneFile(fd, inputfd) < 0) { + if (reflinkCloneFile(fd, inputfd) < 0) { ret = -errno; virReportSystemError(errno, _("failed to clone files from '%s'"),