]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainGetBlockJobInfo: Use qemuMonitorGetAllBlockJobInfo
authorPeter Krempa <pkrempa@redhat.com>
Fri, 4 Dec 2020 15:08:00 +0000 (16:08 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 7 Dec 2020 09:15:00 +0000 (10:15 +0100)
Replace qemuMonitorGetBlockJobInfo by qemuMonitorGetAllBlockJobInfo and
hash table lookup. This basically open-codes qemuMonitorGetBlockJobInfo,
but it will be removed in next patch.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_driver.c

index b82f7e249a3e0750739806057fed4945307b1955..e2fde6c76fc21b3a6a54e30410995f23c9f23776 100644 (file)
@@ -14695,8 +14695,9 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom,
     virDomainObjPtr vm;
     virDomainDiskDefPtr disk;
     int ret = -1;
-    qemuMonitorBlockJobInfo rawInfo;
+    qemuMonitorBlockJobInfoPtr rawInfo;
     g_autoptr(qemuBlockJobData) job = NULL;
+    g_autoptr(GHashTable) blockjobstats = NULL;
 
     virCheckFlags(VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES, -1);
 
@@ -14722,18 +14723,21 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom,
     }
 
     qemuDomainObjEnterMonitor(driver, vm);
-    ret = qemuMonitorGetBlockJobInfo(qemuDomainGetMonitor(vm), job->name, &rawInfo);
-    if (qemuDomainObjExitMonitor(driver, vm) < 0)
-        ret = -1;
-    if (ret <= 0)
+    blockjobstats = qemuMonitorGetAllBlockJobInfo(qemuDomainGetMonitor(vm), true);
+    if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockjobstats)
         goto endjob;
 
-    if (qemuBlockJobInfoTranslate(&rawInfo, info, disk,
-                                  flags & VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES) < 0) {
-        ret = -1;
+    if (!(rawInfo = g_hash_table_lookup(blockjobstats, job->name))) {
+        ret = 0;
         goto endjob;
     }
 
+    if (qemuBlockJobInfoTranslate(rawInfo, info, disk,
+                                  flags & VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES) < 0)
+        goto endjob;
+
+    ret = 1;
+
  endjob:
     qemuDomainObjEndJob(driver, vm);