From b222ce3075bce17836e7c193c4fee18380ff7793 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 3 Aug 2018 15:30:13 +0200 Subject: [PATCH] qemu: Explicitly find disks for stats totals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rather than totalling every entry from 'query-block' for stats provided by qemuDomainBlocksStatsGather total only stats for known disks. This will allow to return data for nodenames and qdevs in the same hash so that we can use them with -blockdev. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_driver.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ad66f6ae72..b1ed9d6d6e 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;