mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 22:55:23 +00:00
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:
parent
e043ecc82d
commit
5d213b34de
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user