mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
qemu: driver: Allow using blockdev with qemuDomainBlocksStatsGather
Use the 'qdev' instead of the disk alias to lookup the stats and transfer the capacity from the appropriate node name so that the function works with -blockdev. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
49510e4191
commit
6d736e292c
@ -11061,11 +11061,13 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver,
|
||||
qemuBlockStatsPtr *retstats)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
virDomainDiskDefPtr disk;
|
||||
bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virHashTablePtr blockstats = NULL;
|
||||
qemuBlockStatsPtr stats;
|
||||
size_t i;
|
||||
int nstats;
|
||||
int rc = 0;
|
||||
const char *entryname = NULL;
|
||||
int ret = -1;
|
||||
|
||||
@ -11075,6 +11077,9 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (blockdev) {
|
||||
entryname = QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName;
|
||||
} else {
|
||||
if (!disk->info.alias) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("missing disk device alias name for %s"), disk->dst);
|
||||
@ -11083,15 +11088,19 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver,
|
||||
|
||||
entryname = disk->info.alias;
|
||||
}
|
||||
}
|
||||
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
nstats = qemuMonitorGetAllBlockStatsInfo(priv->mon, &blockstats, false);
|
||||
|
||||
if (capacity && nstats >= 0 &&
|
||||
qemuMonitorBlockStatsUpdateCapacity(priv->mon, blockstats, false) < 0)
|
||||
nstats = -1;
|
||||
if (capacity && nstats >= 0) {
|
||||
if (blockdev)
|
||||
rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, blockstats);
|
||||
else
|
||||
rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, blockstats, false);
|
||||
}
|
||||
|
||||
if (qemuDomainObjExitMonitor(driver, vm) < 0 || nstats < 0)
|
||||
if (qemuDomainObjExitMonitor(driver, vm) < 0 || nstats < 0 || rc < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (VIR_ALLOC(*retstats) < 0)
|
||||
@ -11104,12 +11113,29 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (blockdev) {
|
||||
/* capacity are reported only per node-name so we need to transfer them */
|
||||
qemuBlockStatsPtr capstats;
|
||||
|
||||
if (disk && disk->src &&
|
||||
(capstats = virHashLookup(blockstats, disk->src->nodeformat))) {
|
||||
(*retstats)->capacity = capstats->capacity;
|
||||
(*retstats)->physical = capstats->physical;
|
||||
(*retstats)->wr_highest_offset = capstats->wr_highest_offset;
|
||||
(*retstats)->wr_highest_offset_valid = capstats->wr_highest_offset_valid;
|
||||
(*retstats)->write_threshold = capstats->write_threshold;
|
||||
}
|
||||
}
|
||||
|
||||
**retstats = *stats;
|
||||
} else {
|
||||
for (i = 0; i < vm->def->ndisks; i++) {
|
||||
disk = vm->def->disks[i];
|
||||
entryname = disk->info.alias;
|
||||
|
||||
if (blockdev)
|
||||
entryname = QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName;
|
||||
|
||||
if (!entryname)
|
||||
continue;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user