[libvirt] [PATCHv1 12/13] Rework qemu-img command generation for inactive external snapshots
Peter Krempa
pkrempa at redhat.com
Mon Apr 13 07:14:40 UTC 2015
On Fri, Apr 10, 2015 at 14:59:04 +0200, Ján Tomko wrote:
> Reuse the code from storage backend.
>
> This also fixes the backing_fmd typo by removing it.
> ---
> src/qemu/qemu_driver.c | 46 ++++++++++---------------------------------
> src/storage/storage_backend.c | 2 +-
> 2 files changed, 11 insertions(+), 37 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 4f14546..3ea42f2 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -13468,7 +13468,6 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
> size_t i;
> virDomainSnapshotDiskDefPtr snapdisk;
> virDomainDiskDefPtr defdisk;
> - virCommandPtr cmd = NULL;
> const char *qemuImgPath;
> virBitmapPtr created = NULL;
> virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> @@ -13489,48 +13488,25 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
> if (snapdisk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
> continue;
>
> - if (!snapdisk->src->format)
> - snapdisk->src->format = VIR_STORAGE_FILE_QCOW2;
> -
> - /* creates cmd line args: qemu-img create -f qcow2 -o */
> - if (!(cmd = virCommandNewArgList(qemuImgPath,
> - "create",
> - "-f",
> - virStorageFileFormatTypeToString(snapdisk->src->format),
> - "-o",
> - NULL)))
> + if (defdisk->src->format == VIR_STORAGE_FILE_NONE &&
> + !cfg->allowDiskFormatProbing) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("unknown image format of '%s' and "
> + "format probing is disabled"),
> + defdisk->src->path);
> goto cleanup;
> -
> - if (defdisk->src->format > 0) {
> - /* adds cmd line arg: backing_file=/path/to/backing/file,backing_fmd=format */
> - virCommandAddArgFormat(cmd, "backing_file=%s,backing_fmt=%s",
> - defdisk->src->path,
> - virStorageFileFormatTypeToString(defdisk->src->format));
> - } else {
> - if (!cfg->allowDiskFormatProbing) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("unknown image format of '%s' and "
> - "format probing is disabled"),
> - defdisk->src->path);
> - goto cleanup;
> - }
> -
> - /* adds cmd line arg: backing_file=/path/to/backing/file */
> - virCommandAddArgFormat(cmd, "backing_file=%s", defdisk->src->path);
> }
>
> - /* adds cmd line args: /path/to/target/file */
> - virCommandAddArg(cmd, snapdisk->src->path);
> + if (!snapdisk->src->format)
> + snapdisk->src->format = VIR_STORAGE_FILE_QCOW2;
>
> /* If the target does not exist, we're going to create it possibly */
> if (!virFileExists(snapdisk->src->path))
> ignore_value(virBitmapSetBit(created, i));
>
> - if (virCommandRun(cmd, NULL) < 0)
> + if (virStorageFileCreateWithFormat(snapdisk->src, snapdisk->src->path,
> + defdisk->src, qemuImgPath) < 0)
This part will need adjusting after my review to the previous patch.
> goto cleanup;
> -
> - virCommandFree(cmd);
> - cmd = NULL;
> }
>
> /* update disk definitions */
> @@ -13554,8 +13530,6 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
> ret = 0;
>
> cleanup:
> - virCommandFree(cmd);
> -
> /* unlink images if creation has failed */
> if (ret < 0 && created) {
> ssize_t bit = -1;
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index 9ffbc6e..ec8b7b5 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -819,7 +819,7 @@ virStorageBackendCreateQemuImgOpts(char **opts,
> {
> virBuffer buf = VIR_BUFFER_INITIALIZER;
>
> - if (info.backingPath)
> + if (info.backingPath && info.backingFormat)
In retrospect I think we should forbid snapshots without specifying the
format so that we don't create even more broken configurations.
> virBufferAsprintf(&buf, "backing_fmt=%s,",
> virStorageFileFormatTypeToString(info.backingFormat));
> if (info.encryption)
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150413/c6e4fcc4/attachment-0001.sig>
More information about the libvir-list
mailing list