[libvirt] [PATCH 2/2] storage: try to perform btrfs COW copy if possible
Chen, Hanxiao
chenhanxiao at cn.fujitsu.com
Mon Jan 19 08:20:52 UTC 2015
> -----Original Message-----
> From: Ján Tomko [mailto:jtomko at redhat.com]
> Sent: Friday, January 16, 2015 10:22 PM
> To: Chen, Hanxiao/陈 晗霄; libvir-list at redhat.com
> Subject: Re: [libvirt] [PATCH 2/2] storage: try to perform btrfs COW copy if possible
>
> On 01/13/2015 09:18 AM, Chen Hanxiao wrote:
> > We don't take advantage of clone of btrfs.
> >
> > So
> > a)try to do a btrfs lightweight copy
> >
> > b)fall back to a standard copy
> > if COW copy not supported.
> >
> > Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
> > ---
> > include/libvirt/libvirt-storage.h | 1 +
> > src/storage/storage_backend.c | 39
> ++++++++++++++++++++++++++++++++-------
> > src/storage/storage_backend_fs.c | 8 ++++++--
> > src/storage/storage_driver.c | 4 +++-
> > 4 files changed, 42 insertions(+), 10 deletions(-)
> >
> > diff --git a/include/libvirt/libvirt-storage.h
> b/include/libvirt/libvirt-storage.h
> > index 1f3087b..4ae42e1 100644
> > --- a/include/libvirt/libvirt-storage.h
> > +++ b/include/libvirt/libvirt-storage.h
> > @@ -306,6 +306,7 @@ const char* virStorageVolGetKey
> (virStorageVolPtr vol);
> >
> > typedef enum {
> > VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA = 1 << 0,
> > + VIR_STORAGE_VOL_CREATE_REFLINK = 1 << 1,
>
> There should be some human-readable commentary after the flag, that will be
> shown on our API reference page:
> http://libvirt.org/html/libvirt-libvirt-storage.html#virStorageVolCreateFlags
>
Will do.
> > } virStorageVolCreateFlags;
> >
> > virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr
> pool,
> > diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> > index 5ce3566..838398e 100644
> > --- a/src/storage/storage_backend.c
> > +++ b/src/storage/storage_backend.c
> > @@ -187,7 +187,8 @@ virStorageBackendCopyToFD(virStorageVolDefPtr vol,
> > virStorageVolDefPtr inputvol,
> > int fd,
> > unsigned long long *total,
> > - bool want_sparse)
> > + bool want_sparse,
> > + bool reflink_copy)
> > {
> > int inputfd = -1;
> > int amtread = -1;
> > @@ -226,6 +227,15 @@ virStorageBackendCopyToFD(virStorageVolDefPtr vol,
> > goto cleanup;
> > }
> >
> > + if (reflink_copy) {
> > + if (btrfsCloneFile(fd, inputfd) == -1) {
> > + VIR_DEBUG("btrfs clone not supported, try another way.");
>
> If reflink copy is unsupported, I think we should just error out, as a full
> copy won't be as fast / occupy as little space.
>
> Also, this would fall back even on other errors.
>
That's a better solution, will be changed in v2.
Thanks,
- Chen
> The rest looks good to me.
>
> Jan
More information about the libvir-list
mailing list