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 <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2016-09-02 08:38:19 +02:00
parent e043ecc82d
commit 5d213b34de

View 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 static int
qemuDomainGetBlockJobInfo(virDomainPtr dom, qemuDomainGetBlockJobInfo(virDomainPtr dom,
const char *path, const char *path,
@ -16356,22 +16384,8 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom,
if (ret <= 0) if (ret <= 0)
goto endjob; goto endjob;
info->cur = rawInfo.cur; if (qemuBlockJobInfoTranslate(&rawInfo, info, disk,
info->end = rawInfo.end; flags & VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES) < 0) {
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);
ret = -1; ret = -1;
goto endjob; goto endjob;
} }