[libvirt] [PATCH 7/9] qemu: monitor: Split out code to gather data from 'query-block'

Peter Krempa pkrempa at redhat.com
Wed Jul 18 15:22:08 UTC 2018


Extract the code for future reuse.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_monitor_json.c | 43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 37a4e59189..81043e2af5 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -2423,39 +2423,50 @@ qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,


 static int
-qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValuePtr image,
-                                           const char *dev_name,
-                                           int depth,
-                                           virHashTablePtr stats,
-                                           bool backingChain)
+qemuMonitorJSONBlockStatsUpdateCapacityData(virJSONValuePtr image,
+                                            const char *name,
+                                            virHashTablePtr stats)
 {
     qemuBlockStatsPtr bstats;
-    int ret = -1;
-    char *entry_name = qemuDomainStorageAlias(dev_name, depth);
-    virJSONValuePtr backing;

-    if (!(bstats = virHashLookup(stats, entry_name))) {
+    if (!(bstats = virHashLookup(stats, name))) {
         if (VIR_ALLOC(bstats) < 0)
-            goto cleanup;
+            return -1;

-        if (virHashAddEntry(stats, entry_name, bstats) < 0) {
+        if (virHashAddEntry(stats, name, bstats) < 0) {
             VIR_FREE(bstats);
-            goto cleanup;
+            return -1;
         }
     }

-    /* After this point, we ignore failures; the stats were
-     * zero-initialized when created which is a sane fallback.  */
-    ret = 0;
+    /* failures can be ignored after this point */
     if (virJSONValueObjectGetNumberUlong(image, "virtual-size",
                                          &bstats->capacity) < 0)
-        goto cleanup;
+        return 0;

     /* if actual-size is missing, image is not thin provisioned */
     if (virJSONValueObjectGetNumberUlong(image, "actual-size",
                                          &bstats->physical) < 0)
         bstats->physical = bstats->capacity;

+    return 0;
+}
+
+
+static int
+qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValuePtr image,
+                                           const char *dev_name,
+                                           int depth,
+                                           virHashTablePtr stats,
+                                           bool backingChain)
+{
+    int ret = -1;
+    char *entry_name = qemuDomainStorageAlias(dev_name, depth);
+    virJSONValuePtr backing;
+
+    if (qemuMonitorJSONBlockStatsUpdateCapacityData(image, entry_name, stats) < 0)
+        goto cleanup;
+
     if (backingChain &&
         (backing = virJSONValueObjectGetObject(image, "backing-image"))) {
         ret = qemuMonitorJSONBlockStatsUpdateCapacityOne(backing,
-- 
2.16.2




More information about the libvir-list mailing list