> -----Original Message----- > From: Ján Tomko [mailto:jtomko@xxxxxxxxxx] > Sent: Tuesday, January 27, 2015 8:46 PM > To: Chen, Hanxiao/陈 晗霄; libvir-list@xxxxxxxxxx > Subject: Re: [PATCHv2 1/2] storage: introduce btrfsCloneFile() for COW > copy > > On 01/23/2015 11:22 AM, Chen Hanxiao wrote: > > Signed-off-by: Chen Hanxiao <chenhanxiao@xxxxxxxxxxxxxx> > > --- > > configure.ac | 12 ++++++++++++ > > src/storage/storage_backend.c | 24 ++++++++++++++++++++++++ > > 2 files changed, 36 insertions(+) > > > > diff --git a/configure.ac b/configure.ac > > index f370475..2498389 100644 > > --- a/configure.ac > > +++ b/configure.ac > > @@ -2175,6 +2175,18 @@ fi > > 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 > > > + have_btrfs=no > > + AC_CHECK_HEADER([linux/btrfs.h],[have_btrfs=yes]) > > + if test "${have_btrfs}" = yes; then > > + AC_DEFINE([HAVE_BTRFS_IOC_CLONE], 1, > > + [whether have btrfs CoW clone ioctl]) > > This macro name is misleading (it does not check for clone, just for btrfs.h). > > Doing just: > AC_CHECK_HEADERS([linux/btrfs.h]) > will define HAVE_LINUX_BTRFS_H > > > + fi > > +fi > > + > > dnl Allow perl/python overrides > > AC_PATH_PROGS([PYTHON], [python2 python]) > > AC_PATH_PROG([PERL], [perl]) > > diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c > > index b990a82..d2a664b 100644 > > --- a/src/storage/storage_backend.c > > +++ b/src/storage/storage_backend.c > > @@ -46,6 +46,10 @@ > > # include <selinux/selinux.h> > > #endif > > > > +#if HAVE_BTRFS_IOC_CLONE > > +# include <linux/btrfs.h> > > +#endif > > + > > #include "datatypes.h" > > #include "virerror.h" > > #include "viralloc.h" > > @@ -156,6 +160,26 @@ enum { > > #define READ_BLOCK_SIZE_DEFAULT (1024 * 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 defined(HAVE_BTRFS_IOC_CLONE) > > #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) > > virStorageBackendCopyToFD(virStorageVolDefPtr vol, > > virStorageVolDefPtr inputvol, > > > > ACK > > I simplified the configure check and pushed the patch. > Thanks for your kindly help. Regards, - Chen -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list