From 5e24a36e0db2ca24ead536e4313813651d3f9cfc Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 10 Oct 2017 08:23:12 +0200 Subject: [PATCH] qemu: command: Separate wrapping of disk backend props to 'file' object The file object is needed when formatting the command line, but it makes nesting of the objects less easy for use with blockdev. Separate the wrapping into the 'file' object into a helper used specifically for disk sources in the old code path. --- src/qemu/qemu_block.c | 14 +++----------- src/qemu/qemu_command.c | 27 ++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 544b4893b4..254075b2c4 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -572,7 +572,6 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src) { int actualType = virStorageSourceGetActualType(src); virJSONValuePtr fileprops = NULL; - virJSONValuePtr ret = NULL; switch ((virStorageType) actualType) { case VIR_STORAGE_TYPE_BLOCK: @@ -587,12 +586,12 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src) switch ((virStorageNetProtocol) src->protocol) { case VIR_STORAGE_NET_PROTOCOL_GLUSTER: if (!(fileprops = qemuBlockStorageSourceGetGlusterProps(src))) - goto cleanup; + return NULL; break; case VIR_STORAGE_NET_PROTOCOL_VXHS: if (!(fileprops = qemuBlockStorageSourceGetVxHSProps(src))) - goto cleanup; + return NULL; break; case VIR_STORAGE_NET_PROTOCOL_NBD: @@ -612,12 +611,5 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src) break; } - if (virJSONValueObjectCreate(&ret, "a:file", fileprops, NULL) < 0) - goto cleanup; - - fileprops = NULL; - - cleanup: - virJSONValueFree(fileprops); - return ret; + return fileprops; } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f68b82d083..f943e38705 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1370,6 +1370,31 @@ qemuDiskSourceNeedsProps(virStorageSourcePtr src) } +/** + * qemuDiskSourceGetProps: + * @src: disk source struct + * + * Returns the disk source struct wrapped so that it can be used as disk source + * directly by converting it from json. + */ +static virJSONValuePtr +qemuDiskSourceGetProps(virStorageSourcePtr src) +{ + virJSONValuePtr props; + virJSONValuePtr ret; + + if (!(props = qemuBlockStorageSourceGetBackendProps(src))) + return NULL; + + if (virJSONValueObjectCreate(&ret, "a:file", props, NULL) < 0) { + virJSONValueFree(props); + return NULL; + } + + return ret; +} + + static int qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, virQEMUDriverConfigPtr cfg, @@ -1385,7 +1410,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, int ret = -1; if (qemuDiskSourceNeedsProps(disk->src) && - !(srcprops = qemuBlockStorageSourceGetBackendProps(disk->src))) + !(srcprops = qemuDiskSourceGetProps(disk->src))) goto cleanup; if (!srcprops &&