]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuDomainGetBlockJobInfo: Move info translation into separate func
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 2 Sep 2016 06:38:19 +0000 (08:38 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 14 Sep 2016 10:44:42 +0000 (12:44 +0200)
Even though we merely just pass to users whatever qemu provided
on the monitor, we still do some translation. For instance we
turn bytes into mebibytes, or fix job type if needed. However, in
the future there is more fixing to be done so this code deserves
its own function.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_driver.c

index dda82d3cb275a8a4e2cd9b00085e5b79d57fe49b..6b3a35540ab435be3559cabf804169e6c7502db1 100644 (file)
@@ -16309,6 +16309,34 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
 }
 
 
+static int
+qemuBlockJobInfoTranslate(qemuMonitorBlockJobInfoPtr rawInfo,
+                          virDomainBlockJobInfoPtr info,
+                          virDomainDiskDefPtr disk,
+                          bool reportBytes)
+{
+    info->cur = rawInfo->cur;
+    info->end = rawInfo->end;
+
+    info->type = rawInfo->type;
+    if (info->type == VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT &&
+        disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT)
+        info->type = disk->mirrorJob;
+
+    if (rawInfo->bandwidth && !reportBytes)
+        rawInfo->bandwidth = VIR_DIV_UP(rawInfo->bandwidth, 1024 * 1024);
+    info->bandwidth = rawInfo->bandwidth;
+    if (info->bandwidth != rawInfo->bandwidth) {
+        virReportError(VIR_ERR_OVERFLOW,
+                       _("bandwidth %llu cannot be represented in result"),
+                       rawInfo->bandwidth);
+        return -1;
+    }
+
+    return 0;
+}
+
+
 static int
 qemuDomainGetBlockJobInfo(virDomainPtr dom,
                           const char *path,
@@ -16356,22 +16384,8 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom,
     if (ret <= 0)
         goto endjob;
 
-    info->cur = rawInfo.cur;
-    info->end = rawInfo.end;
-
-    info->type = rawInfo.type;
-    if (info->type == VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT &&
-        disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT)
-        info->type = disk->mirrorJob;
-
-    if (rawInfo.bandwidth &&
-        !(flags & VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES))
-        rawInfo.bandwidth = VIR_DIV_UP(rawInfo.bandwidth, 1024 * 1024);
-    info->bandwidth = rawInfo.bandwidth;
-    if (info->bandwidth != rawInfo.bandwidth) {
-        virReportError(VIR_ERR_OVERFLOW,
-                       _("bandwidth %llu cannot be represented in result"),
-                       rawInfo.bandwidth);
+    if (qemuBlockJobInfoTranslate(&rawInfo, info, disk,
+                                  flags & VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES) < 0) {
         ret = -1;
         goto endjob;
     }