]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: command: Separate wrapping of disk backend props to 'file' object
authorPeter Krempa <pkrempa@redhat.com>
Tue, 10 Oct 2017 06:23:12 +0000 (08:23 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 18 Oct 2017 07:43:49 +0000 (09:43 +0200)
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
src/qemu/qemu_command.c

index 544b4893b40cee1631075b11e5b91cda35170635..254075b2c4e0f8519490dfad9a34e093137eb53f 100644 (file)
@@ -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;
 }
index f68b82d08325ed8695a54df2df79ac2607b9a60d..f943e3870596c8b5fffa5ce41b0a591c776010cb 100644 (file)
@@ -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 &&