From 5d213b34de442490c66ee54b17d15e68cfeb2174 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 2 Sep 2016 08:38:19 +0200 Subject: [PATCH] qemuDomainGetBlockJobInfo: Move info translation into separate func 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 --- src/qemu/qemu_driver.c | 46 +++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index dda82d3cb2..6b3a35540a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -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; }