mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-30 01:43:23 +00:00
storage: introduce btrfsCloneFile() for COW copy
Add a wrapper for BTRFS_IOC_CLONE ioctl. Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> Signed-off-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
55ea7be7d9
commit
466b29c8c3
@ -2175,6 +2175,13 @@ fi
|
|||||||
AM_CONDITIONAL([WITH_HYPERV], [test "$with_hyperv" = "yes"])
|
AM_CONDITIONAL([WITH_HYPERV], [test "$with_hyperv" = "yes"])
|
||||||
|
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl check for kernel headers required by btrfs ioctl
|
||||||
|
dnl
|
||||||
|
if test "$with_linux" = "yes"; then
|
||||||
|
AC_CHECK_HEADERS([linux/btrfs.h])
|
||||||
|
fi
|
||||||
|
|
||||||
dnl Allow perl/python overrides
|
dnl Allow perl/python overrides
|
||||||
AC_PATH_PROGS([PYTHON], [python2 python])
|
AC_PATH_PROGS([PYTHON], [python2 python])
|
||||||
AC_PATH_PROG([PERL], [perl])
|
AC_PATH_PROG([PERL], [perl])
|
||||||
|
@ -46,6 +46,10 @@
|
|||||||
# include <selinux/selinux.h>
|
# include <selinux/selinux.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_LINUX_BTRFS_H
|
||||||
|
# include <linux/btrfs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "datatypes.h"
|
#include "datatypes.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
#include "viralloc.h"
|
#include "viralloc.h"
|
||||||
@ -156,6 +160,26 @@ enum {
|
|||||||
#define READ_BLOCK_SIZE_DEFAULT (1024 * 1024)
|
#define READ_BLOCK_SIZE_DEFAULT (1024 * 1024)
|
||||||
#define WRITE_BLOCK_SIZE_DEFAULT (4 * 1024)
|
#define WRITE_BLOCK_SIZE_DEFAULT (4 * 1024)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform the O(1) btrfs clone operation, if possible.
|
||||||
|
* Upon success, return 0. Otherwise, return -1 and set errno.
|
||||||
|
*/
|
||||||
|
#if HAVE_LINUX_BTRFS_H
|
||||||
|
static inline int
|
||||||
|
btrfsCloneFile(int dest_fd, int src_fd)
|
||||||
|
{
|
||||||
|
return ioctl(dest_fd, BTRFS_IOC_CLONE, src_fd);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline int
|
||||||
|
btrfsCloneFile(int dest_fd ATTRIBUTE_UNUSED,
|
||||||
|
int src_fd ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int ATTRIBUTE_NONNULL(2)
|
static int ATTRIBUTE_NONNULL(2)
|
||||||
virStorageBackendCopyToFD(virStorageVolDefPtr vol,
|
virStorageBackendCopyToFD(virStorageVolDefPtr vol,
|
||||||
virStorageVolDefPtr inputvol,
|
virStorageVolDefPtr inputvol,
|
||||||
|
Loading…
Reference in New Issue
Block a user