[libvirt] [PATCH libvirt 6/8] storage: learn to create qcow2 with preallocation

Christophe Fergeau cfergeau at redhat.com
Wed May 16 10:45:32 UTC 2012


On Wed, May 16, 2012 at 12:55:13AM +0200, Marc-André Lureau wrote:
> Use preallocation mode specified in volume XML format when running
> qemu-img.
> ---
>  src/storage/storage_backend.c |   70 +++++++++++++++++++++++++++++++++++------
>  1 file changed, 60 insertions(+), 10 deletions(-)
> 
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index caac2f8..8b31823 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -645,6 +645,38 @@ cleanup:
>      return ret;
>  }
>  
> +static char *
> +virStorageQemuImgOptionsStr(virStorageVolDefPtr vol)
> +{
> +    virBuffer buf = VIR_BUFFER_INITIALIZER;
> +    bool do_encryption = (vol->target.encryption != NULL);
> +    const char *backingType = vol->backingStore.path ?
> +        virStorageFileFormatTypeToString(vol->backingStore.format) : NULL;
> +    bool comma = false;
> +    const char *preallocation = vol->preallocation != VIR_STORAGE_PREALLOCATION_NONE ?
> +        virStoragePreallocationModeTypeToString(vol->preallocation) : NULL;
> +
> +    if (backingType) {
> +        virBufferAddLit(&buf, "backing_fmt=");
> +        virBufferAdd(&buf, backingType, -1);
> +        comma = true;
> +    }
> +
> +    if (do_encryption) {
> +        virBufferAdd(&buf, comma ? "," : "", -1);
> +        virBufferAddLit(&buf, "encryption=on");
> +        comma = true;
> +    }
> +
> +    if (preallocation) {
> +        virBufferAdd(&buf, comma ? "," : "", -1);
> +        virBufferAddLit(&buf, "preallocation=");
> +        virBufferAdd(&buf, preallocation, -1);
> +        comma = true;
> +    }
> +
> +    return virBufferContentAndReset(&buf);
> +}
>  
>  static int
>  virStorageBackendCreateQemuImg(virConnectPtr conn,
> @@ -658,7 +690,9 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
>      int imgformat = -1;
>      virCommandPtr cmd = NULL;
>      bool do_encryption = (vol->target.encryption != NULL);
> +    bool with_preallocation = (vol->preallocation != VIR_STORAGE_PREALLOCATION_NONE);
>      unsigned long long int size_arg;
> +    char *options;
>  
>      virCheckFlags(0, -1);
>  
> @@ -689,6 +723,12 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
>          return -1;
>      }
>  
> +    if (vol->target.format != VIR_STORAGE_FILE_QCOW2 && with_preallocation) {
> +        virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> +                              _("Preallocation is only available with qcow2"));

This is not an internal error since it's caused by user xml input. The rest
of the code seems to be using VIR_ERR_CONFIG_UNSUPPORTED in similar cases.

ACK with that fixed.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120516/6e2f2627/attachment-0001.sig>


More information about the libvir-list mailing list