diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ad66f6ae7249b6117db6043d6a768b8c04e08505..b1ed9d6d6e5e5a8da4f2e428b2359e03267f06a0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -11021,13 +11021,9 @@ qemuDomainBlockResize(virDomainPtr dom, static int -qemuDomainBlockStatsGatherTotals(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *opaque) +qemuDomainBlockStatsGatherTotals(qemuBlockStatsPtr data, + qemuBlockStatsPtr total) { - qemuBlockStatsPtr data = payload; - qemuBlockStatsPtr total = opaque; - #define QEMU_BLOCK_STAT_TOTAL(NAME) \ if (data->NAME > 0) \ total->NAME += data->NAME @@ -11068,6 +11064,7 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver, virDomainDiskDefPtr disk; virHashTablePtr blockstats = NULL; qemuBlockStatsPtr stats; + size_t i; int nstats; const char *entryname = NULL; int ret = -1; @@ -11109,7 +11106,21 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver, **retstats = *stats; } else { - virHashForEach(blockstats, qemuDomainBlockStatsGatherTotals, *retstats); + for (i = 0; i < vm->def->ndisks; i++) { + disk = vm->def->disks[i]; + entryname = disk->info.alias; + + if (!entryname) + continue; + + if (!(stats = virHashLookup(blockstats, entryname))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("cannot find statistics for device '%s'"), entryname); + goto cleanup; + } + + qemuDomainBlockStatsGatherTotals(stats, *retstats); + } } ret = nstats;