[PATCH 02/31] qemu: block: Refactor logic in qemuBlockStorageSourceGetBlockdevProps

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Restructure the conditions so that we can use virJSONValueObjectAdd with
a clearer logic for backing store control.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_block.c | 46 ++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 22 deletions(-)

diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 7e870baa2f..9b6d901e8c 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -1309,39 +1309,41 @@ qemuBlockStorageSourceGetBlockdevProps(virStorageSource *src,
                                        virStorageSource *backingStore)
 {
     g_autoptr(virJSONValue) props = NULL;
+    const char *backingFormatterStr = NULL;
+    const char *backingNodename = NULL;
     const char *storagenode = src->nodestorage;

     if (qemuBlockStorageSourceNeedsStorageSliceLayer(src))
         storagenode = src->sliceStorage->nodename;

-    if (!(props = qemuBlockStorageSourceGetBlockdevFormatProps(src)))
-        return NULL;
-
-    if (virJSONValueObjectAppendString(props, "file", storagenode) < 0)
+    if (virStorageSourceIsBacking(backingStore) &&
+        src->format < VIR_STORAGE_FILE_BACKING) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("storage format '%1$s' does not support backing store"),
+                       virStorageFileFormatTypeToString(src->format));
         return NULL;
+    }

-    if (backingStore) {
-        if (src->format >= VIR_STORAGE_FILE_BACKING) {
-            if (virStorageSourceIsBacking(backingStore)) {
-                if (virJSONValueObjectAppendString(props, "backing",
-                                                   backingStore->nodeformat) < 0)
-                    return NULL;
-            } else {
-                /* chain is terminated, indicate that no detection should happen
-                 * in qemu */
-                if (virJSONValueObjectAppendNull(props, "backing") < 0)
-                    return NULL;
-            }
+    if (backingStore &&
+        src->format >= VIR_STORAGE_FILE_BACKING) {
+        if (virStorageSourceIsBacking(backingStore)) {
+            backingFormatterStr = "s:backing";
+            backingNodename = backingStore->nodeformat;
         } else {
-            if (virStorageSourceIsBacking(backingStore)) {
-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                               _("storage format '%1$s' does not support backing store"),
-                               virStorageFileFormatTypeToString(src->format));
-                return NULL;
-            }
+            /* chain is terminated, indicate that no detection should happen in qemu */
+            backingFormatterStr = "n:backing";
         }
     }

+    if (!(props = qemuBlockStorageSourceGetBlockdevFormatProps(src)))
+        return NULL;
+
+    if (virJSONValueObjectAdd(&props,
+                              "s:file", storagenode,
+                              backingFormatterStr, backingNodename,
+                              NULL) < 0)
+        return 0;
+
     return g_steal_pointer(&props);
 }

-- 
2.41.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux