On Wed, Mar 09, 2011 at 10:12:53PM +0800, Osier Yang wrote: > qemu-img silently disable "-e", so we can't use it for volume > encryption anymore, change it into "-o encryption=on" if qemu > supports "-o" option. > --- > src/storage/storage_backend.c | 47 +++++++++++++++++++++++++++++++++------- > 1 files changed, 38 insertions(+), 9 deletions(-) > > diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c > index 2eede74..ec122a9 100644 > --- a/src/storage/storage_backend.c > +++ b/src/storage/storage_backend.c > @@ -637,6 +637,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, > int ret = -1; > char *size = NULL; > char *create_tool; > + int imgformat = -1; > > const char *type = virStorageFileFormatTypeToString(vol->target.format); > const char *backingType = vol->backingStore.path ? > @@ -741,6 +742,10 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, > return -1; > } > > + imgformat = virStorageBackendQEMUImgBackingFormat(create_tool); > + if (imgformat < 0) > + goto cleanup; > + > if (inputvol) { > const char *imgargv[] = { > create_tool, > @@ -750,8 +755,19 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, > inputPath, > vol->target.path, > NULL, > + NULL, > + NULL > }; > > + if (vol->target.encryption != NULL) { > + if (imgformat == QEMU_IMG_BACKING_FORMAT_FLAG) { > + imgargv[8] = "-o"; > + imgargv[9] = "encryption=on"; > + } else { > + imgargv[8] = "-e"; > + } > + } > + > ret = virStorageBackendCreateExecCommand(pool, vol, imgargv); > } else if (vol->backingStore.path) { > const char *imgargv[] = { > @@ -766,11 +782,8 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, > NULL, > NULL > }; > - int imgformat = virStorageBackendQEMUImgBackingFormat(create_tool); > - char *optflag = NULL; > - if (imgformat < 0) > - goto cleanup; > > + char *optflag = NULL; > switch (imgformat) { > case QEMU_IMG_BACKING_FORMAT_FLAG: > imgargv[6] = "-F"; > @@ -786,13 +799,21 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, > virReportOOMError(); > goto cleanup; > } > + > + if (vol->target.encryption != NULL) { > + char *tmp = NULL; > + if (virAsprintf(&tmp, "%s,%s", optflag, "encryption=on") < 0) { > + virReportOOMError(); > + goto cleanup; > + } > + VIR_FREE(optflag); > + optflag = tmp; > + } > + > imgargv[6] = "-o"; > imgargv[7] = optflag; > imgargv[8] = vol->target.path; > imgargv[9] = size; > - if (vol->target.encryption != NULL) > - imgargv[10] = "-e"; > - break; > > default: > VIR_INFO("Unable to set backing store format for %s with %s", > @@ -814,10 +835,18 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, > vol->target.path, > size, > NULL, > + NULL, > NULL > }; > - if (vol->target.encryption != NULL) > - imgargv[6] = "-e"; > + > + if (vol->target.encryption != NULL) { > + if (imgformat == QEMU_IMG_BACKING_FORMAT_FLAG) { > + imgargv[6] = "-o"; > + imgargv[7] = "encryption=on"; > + } else { > + imgargv[6] = "-e"; > + } > + } > > ret = virStorageBackendCreateExecCommand(pool, vol, imgargv); > } ACK, looks better now Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list