]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Don't request nested entries in qemuBlockGetNamedNodeData
authorPeter Krempa <pkrempa@redhat.com>
Tue, 21 Jan 2020 15:51:40 +0000 (16:51 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 4 Mar 2020 13:39:24 +0000 (14:39 +0100)
Use the 'flat' flag for 'query-named-block-nodes' if qemu supports
QEMU_CAPS_QMP_QUERY_NAMED_BLOCK_NODES_FLAT in qemuBlockGetNamedNodeData.

We don't need the data so plumb in whether qemu supports the
'flat' output.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_block.c
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h

index 5bd5c955a4813b41d18c29f4fd582fdc39801660..152c73f1bfbfcb5e80bb1fdf2250f141be9de96f 100644 (file)
@@ -2768,11 +2768,13 @@ qemuBlockGetNamedNodeData(virDomainObjPtr vm,
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virQEMUDriverPtr driver = priv->driver;
     g_autoptr(virHashTable) blockNamedNodeData = NULL;
+    bool supports_flat = virQEMUCapsGet(priv->qemuCaps,
+                                        QEMU_CAPS_QMP_QUERY_NAMED_BLOCK_NODES_FLAT);
 
     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
         return NULL;
 
-    blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
+    blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon, supports_flat);
 
     if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
         return NULL;
index 6a543a3093189f715cb6fa0d97be4a7f14906f28..c2a61ec58795da0323c859a3572ce7fa501fe1fe 100644 (file)
@@ -2199,17 +2199,20 @@ qemuMonitorBlockStatsUpdateCapacityBlockdev(qemuMonitorPtr mon,
 /**
  * qemuMonitorBlockGetNamedNodeData:
  * @mon: monitor object
+ * @supports_flat: don't query data for backing store
  *
  * Uses 'query-named-block-nodes' to retrieve information about individual
  * storage nodes and returns them in a hash table of qemuBlockNamedNodeDataPtrs
  * filled with the data. The hash table keys are node names.
  */
 virHashTablePtr
-qemuMonitorBlockGetNamedNodeData(qemuMonitorPtr mon)
+qemuMonitorBlockGetNamedNodeData(qemuMonitorPtr mon,
+                                 bool supports_flat)
 {
     QEMU_CHECK_MONITOR_NULL(mon);
+    VIR_DEBUG("supports_flat=%d", supports_flat);
 
-    return qemuMonitorJSONBlockGetNamedNodeData(mon);
+    return qemuMonitorJSONBlockGetNamedNodeData(mon, supports_flat);
 }
 
 
index fb09f6606fba80c63e57da543996394e5eeeecdb..4e06447ffa06e2046d4cca0fa08baf4a96a6198d 100644 (file)
@@ -698,7 +698,8 @@ struct _qemuBlockNamedNodeData {
 };
 
 virHashTablePtr
-qemuMonitorBlockGetNamedNodeData(qemuMonitorPtr mon);
+qemuMonitorBlockGetNamedNodeData(qemuMonitorPtr mon,
+                                 bool supports_flat);
 
 int qemuMonitorBlockResize(qemuMonitorPtr mon,
                            const char *device,
index 5ae8d783ee3833ef5736da823c45f6220cb15637..451e1afef5dffc14e5758d6692bb2e7912caf668 100644 (file)
@@ -3014,11 +3014,12 @@ qemuMonitorJSONBlockGetNamedNodeDataJSON(virJSONValuePtr nodes)
 
 
 virHashTablePtr
-qemuMonitorJSONBlockGetNamedNodeData(qemuMonitorPtr mon)
+qemuMonitorJSONBlockGetNamedNodeData(qemuMonitorPtr mon,
+                                     bool supports_flat)
 {
     g_autoptr(virJSONValue) nodes = NULL;
 
-    if (!(nodes = qemuMonitorJSONQueryNamedBlockNodes(mon, false)))
+    if (!(nodes = qemuMonitorJSONQueryNamedBlockNodes(mon, supports_flat)))
         return NULL;
 
     return qemuMonitorJSONBlockGetNamedNodeDataJSON(nodes);
index 71aaa471e1af4629c37948bcdb4c3cff64a9b705..ed48600b82126177e0b5b6396477636b1951656e 100644 (file)
@@ -91,7 +91,8 @@ virHashTablePtr
 qemuMonitorJSONBlockGetNamedNodeDataJSON(virJSONValuePtr nodes);
 
 virHashTablePtr
-qemuMonitorJSONBlockGetNamedNodeData(qemuMonitorPtr mon);
+qemuMonitorJSONBlockGetNamedNodeData(qemuMonitorPtr mon,
+                                     bool supports_flat);
 
 int qemuMonitorJSONBlockResize(qemuMonitorPtr mon,
                                const char *device,