From 2c6b8cb507062286bab6da9428adff5ab88b4ebf Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 11 Nov 2021 11:20:29 +0100 Subject: [PATCH] qemu: prefer .requiredCaps for VIR_DOMAIN_STATS_IOTHREAD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since f29d7c3e698 we have an option for checking capabilities required for given type of statistics upfront, instead of the callback. Switch qemuDomainGetStatsIOThread() callback to the new style. This will now error out properly if user requests IOTHREAD stats forcibly (via VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS flag) but QEMU doesn't support IOThreads. Previously, this was silently ignored. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/qemu/qemu_driver.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d3430557f0..f12a5aef11 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18513,7 +18513,6 @@ qemuDomainGetStatsIOThread(virQEMUDriver *driver, virTypedParamList *params, unsigned int privflags) { - qemuDomainObjPrivate *priv = dom->privateData; size_t i; qemuMonitorIOThreadInfo **iothreads = NULL; int niothreads = 0; @@ -18522,9 +18521,6 @@ qemuDomainGetStatsIOThread(virQEMUDriver *driver, if (!HAVE_JOB(privflags) || !virDomainObjIsActive(dom)) return 0; - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) - return 0; - if (qemuDomainGetIOThreadsMon(driver, dom, &iothreads, &niothreads) < 0) return -1; @@ -18665,6 +18661,12 @@ struct qemuDomainGetStatsWorker { virQEMUCapsFlags *requiredCaps; }; + +static virQEMUCapsFlags queryIOThreadRequired[] = { + QEMU_CAPS_OBJECT_IOTHREAD, + QEMU_CAPS_LAST +}; + static virQEMUCapsFlags queryDirtyRateRequired[] = { QEMU_CAPS_QUERY_DIRTY_RATE, QEMU_CAPS_LAST @@ -18678,7 +18680,7 @@ static struct qemuDomainGetStatsWorker qemuDomainGetStatsWorkers[] = { { qemuDomainGetStatsInterface, VIR_DOMAIN_STATS_INTERFACE, false, NULL }, { qemuDomainGetStatsBlock, VIR_DOMAIN_STATS_BLOCK, true, NULL }, { qemuDomainGetStatsPerf, VIR_DOMAIN_STATS_PERF, false, NULL }, - { qemuDomainGetStatsIOThread, VIR_DOMAIN_STATS_IOTHREAD, true, NULL }, + { qemuDomainGetStatsIOThread, VIR_DOMAIN_STATS_IOTHREAD, true, queryIOThreadRequired }, { qemuDomainGetStatsMemory, VIR_DOMAIN_STATS_MEMORY, false, NULL }, { qemuDomainGetStatsDirtyRate, VIR_DOMAIN_STATS_DIRTYRATE, true, queryDirtyRateRequired }, { NULL, 0, false, NULL }