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