[PATCH 0/8] qemu: Report proper stats when a backup job is running

Patch 1 fixes the bug this series is about, patch 2 fixes same thing in the bulk stats. Patches 3-6 remove some pointless cleanup sections and patches 7-8 remove the 'backingChain' argument as we always want to fetch all stats. Peter Krempa (8): qemuDomainBlocksStatsGather: Always fetch stats for the full backing chain qemuDomainGetStatsBlock: Always fetch stats for the full backing chain qemuMonitorJSONBlockStatsUpdateCapacity: Refactor cleanup qemuMonitorJSONBlockStatsUpdateCapacityOne: Refactor cleanup qemuDomainGetStatsBlock: Refactor cleanup qemuMonitorJSONQueryBlockstats: Refactor cleanup qemuMonitorGetAllBlockStatsInfo: Remove 'backingChain' argument qemuMonitorBlockStatsUpdateCapacity: Remove 'backingChain' argument src/qemu/qemu_driver.c | 31 ++++++------- src/qemu/qemu_migration_cookie.c | 2 +- src/qemu/qemu_monitor.c | 20 +++------ src/qemu/qemu_monitor.h | 6 +-- src/qemu/qemu_monitor_json.c | 74 +++++++++++--------------------- src/qemu/qemu_monitor_json.h | 6 +-- tests/qemumonitorjsontest.c | 2 +- 7 files changed, 48 insertions(+), 93 deletions(-) -- 2.31.1

In certain cases such as when running a backup blockjob qemu installs a filter node between the frontend and the top node of the backend of the disk. The stats gathering code didn't instruct the monitor code to fetch the stats for all the layers, so since the top layer now doesn't have stats we were reporting wrong stats such as allocation. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2015281 Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b9cc8f8379..34da87e330 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10051,13 +10051,13 @@ qemuDomainBlocksStatsGather(virQEMUDriver *driver, } qemuDomainObjEnterMonitor(driver, vm); - nstats = qemuMonitorGetAllBlockStatsInfo(priv->mon, &blockstats, false); + nstats = qemuMonitorGetAllBlockStatsInfo(priv->mon, &blockstats, true); if (capacity && nstats >= 0) { if (blockdev) rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, blockstats); else - rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, blockstats, false); + rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, blockstats, true); } if (qemuDomainObjExitMonitor(driver, vm) < 0 || nstats < 0 || rc < 0) -- 2.31.1

Similarly to the fix to 'qemuDomainBlocksStatsGather' we should be always fetching the full backing chain so that we can avoid any automatic filter notes which would prevent us from fetching the stats for the correct nodename. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 34da87e330..b46ee01d31 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18478,14 +18478,14 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver, if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) { qemuDomainObjEnterMonitor(driver, dom); - rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats, visitBacking); + rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats, true); if (rc >= 0) { if (blockdev) rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, stats); else ignore_value(qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, - visitBacking)); + true)); } if (fetchnodedata) -- 2.31.1

Use automatic memory clearing for the temporary variable and remove the cleanup section. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor_json.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 579d986e02..af6e918e06 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2660,9 +2660,8 @@ qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, GHashTable *stats, bool backingChain) { - int ret = -1; size_t i; - virJSONValue *devices; + g_autoptr(virJSONValue) devices = NULL; if (!(devices = qemuMonitorJSONQueryBlock(mon))) return -1; @@ -2674,10 +2673,10 @@ qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, const char *dev_name; if (!(dev = qemuMonitorJSONGetBlockDev(devices, i))) - goto cleanup; + return -1; if (!(dev_name = qemuMonitorJSONGetBlockDevDevice(dev))) - goto cleanup; + return -1; /* drive may be empty */ if (!(inserted = virJSONValueObjectGetObject(dev, "inserted")) || @@ -2687,14 +2686,10 @@ qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, if (qemuMonitorJSONBlockStatsUpdateCapacityOne(image, dev_name, 0, stats, backingChain) < 0) - goto cleanup; + return -1; } - ret = 0; - - cleanup: - virJSONValueFree(devices); - return ret; + return 0; } -- 2.31.1

Use automatic memory clearing for the temporary variable and remove the cleanup section. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor_json.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index af6e918e06..e4f4dba79a 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2631,13 +2631,12 @@ qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValue *image, GHashTable *stats, bool backingChain) { - int ret = -1; - char *entry_name = qemuDomainStorageAlias(dev_name, depth); + g_autofree char *entry_name = qemuDomainStorageAlias(dev_name, depth); virJSONValue *backing; if (qemuMonitorJSONBlockStatsUpdateCapacityData(image, entry_name, stats, NULL) < 0) - goto cleanup; + return -1; if (backingChain && (backing = virJSONValueObjectGetObject(image, "backing-image")) && @@ -2646,12 +2645,9 @@ qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValue *image, depth + 1, stats, true) < 0) - goto cleanup; + return -1; - ret = 0; - cleanup: - VIR_FREE(entry_name); - return ret; + return 0; } -- 2.31.1

Use automatic memory clearing for the temporary variables and remove the cleanup section. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b46ee01d31..822fd99ae2 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18461,11 +18461,10 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver, unsigned int privflags) { size_t i; - int ret = -1; int rc; - GHashTable *stats = NULL; - GHashTable *nodestats = NULL; - virJSONValue *nodedata = NULL; + g_autoptr(GHashTable) stats = NULL; + g_autoptr(GHashTable) nodestats = NULL; + g_autoptr(virJSONValue) nodedata = NULL; qemuDomainObjPrivate *priv = dom->privateData; g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV); @@ -18492,7 +18491,7 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver, nodedata = qemuMonitorQueryNamedBlockNodes(priv->mon); if (qemuDomainObjExitMonitor(driver, dom) < 0) - goto cleanup; + return -1; /* failure to retrieve stats is fine at this point */ if (rc < 0 || (fetchnodedata && !nodedata)) @@ -18501,31 +18500,26 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver, if (nodedata && !(nodestats = qemuBlockGetNodeData(nodedata))) - goto cleanup; + return -1; /* When listing backing chains, it's easier to fix up the count * after the iteration than it is to iterate twice; but we still * want count listed first. */ count_index = params->npar; if (virTypedParamListAddUInt(params, 0, "block.count") < 0) - goto cleanup; + return -1; for (i = 0; i < dom->def->ndisks; i++) { if (qemuDomainGetStatsBlockExportDisk(dom->def->disks[i], stats, nodestats, params, &visited, visitBacking, driver, cfg, dom, blockdev) < 0) - goto cleanup; + return -1; } params->par[count_index].value.ui = visited; - ret = 0; - cleanup: - virHashFree(stats); - virHashFree(nodestats); - virJSONValueFree(nodedata); - return ret; + return 0; } -- 2.31.1

Use automatic memory clearing and remove the cleanup label. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor_json.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index e4f4dba79a..6cf36d2518 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2520,25 +2520,19 @@ qemuMonitorJSONGetOneBlockStatsInfo(virJSONValue *dev, virJSONValue * qemuMonitorJSONQueryBlockstats(qemuMonitor *mon) { - virJSONValue *cmd; - virJSONValue *reply = NULL; - virJSONValue *ret = NULL; + g_autoptr(virJSONValue) cmd = NULL; + g_autoptr(virJSONValue) reply = NULL; if (!(cmd = qemuMonitorJSONMakeCommand("query-blockstats", NULL))) return NULL; if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) - goto cleanup; + return NULL; if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0) - goto cleanup; - - ret = virJSONValueObjectStealArray(reply, "return"); + return NULL; - cleanup: - virJSONValueFree(cmd); - virJSONValueFree(reply); - return ret; + return virJSONValueObjectStealArray(reply, "return"); } -- 2.31.1

All (proper) callers pass true so we can remove the argument. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 4 ++-- src/qemu/qemu_monitor.c | 13 ++++--------- src/qemu/qemu_monitor.h | 3 +-- src/qemu/qemu_monitor_json.c | 15 +++++---------- src/qemu/qemu_monitor_json.h | 3 +-- tests/qemumonitorjsontest.c | 2 +- 6 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 822fd99ae2..587a673efc 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10051,7 +10051,7 @@ qemuDomainBlocksStatsGather(virQEMUDriver *driver, } qemuDomainObjEnterMonitor(driver, vm); - nstats = qemuMonitorGetAllBlockStatsInfo(priv->mon, &blockstats, true); + nstats = qemuMonitorGetAllBlockStatsInfo(priv->mon, &blockstats); if (capacity && nstats >= 0) { if (blockdev) @@ -18477,7 +18477,7 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver, if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) { qemuDomainObjEnterMonitor(driver, dom); - rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats, true); + rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats); if (rc >= 0) { if (blockdev) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index e8accaf2b0..166f7958f0 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2056,27 +2056,22 @@ qemuMonitorQueryBlockstats(qemuMonitor *mon) * qemuMonitorGetAllBlockStatsInfo: * @mon: monitor object * @ret_stats: pointer that is filled with a hash table containing the stats - * @backingChain: recurse into the backing chain of devices * - * Creates a hash table in @ret_stats with block stats of all devices. In case - * @backingChain is true @ret_stats will additionally contain stats for - * backing chain members of block devices. + * Creates a hash table in @ret_stats with block stats of all devices and the + * backing chains for the block devices. * * Returns < 0 on error, count of supported block stats fields on success. */ int qemuMonitorGetAllBlockStatsInfo(qemuMonitor *mon, - GHashTable **ret_stats, - bool backingChain) + GHashTable **ret_stats) { int ret; g_autoptr(GHashTable) stats = virHashNew(g_free); - VIR_DEBUG("ret_stats=%p, backing=%d", ret_stats, backingChain); - QEMU_CHECK_MONITOR(mon); - ret = qemuMonitorJSONGetAllBlockStatsInfo(mon, stats, backingChain); + ret = qemuMonitorJSONGetAllBlockStatsInfo(mon, stats); if (ret < 0) return -1; diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 52ff34d316..e28d45cc4a 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -738,8 +738,7 @@ struct _qemuBlockStats { }; int qemuMonitorGetAllBlockStatsInfo(qemuMonitor *mon, - GHashTable **ret_stats, - bool backingChain) + GHashTable **ret_stats) ATTRIBUTE_NONNULL(2); int qemuMonitorBlockStatsUpdateCapacity(qemuMonitor *mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 6cf36d2518..af673b5ba6 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2469,8 +2469,7 @@ static int qemuMonitorJSONGetOneBlockStatsInfo(virJSONValue *dev, const char *dev_name, int depth, - GHashTable *hash, - bool backingChain) + GHashTable *hash) { g_autofree qemuBlockStats *bstats = NULL; int nstats = 0; @@ -2507,10 +2506,8 @@ qemuMonitorJSONGetOneBlockStatsInfo(virJSONValue *dev, qemuMonitorJSONAddOneBlockStatsInfo(bstats, nodename, hash) < 0) return -1; - if (backingChain && - (backing = virJSONValueObjectGetObject(dev, "backing")) && - qemuMonitorJSONGetOneBlockStatsInfo(backing, dev_name, depth + 1, - hash, true) < 0) + if ((backing = virJSONValueObjectGetObject(dev, "backing")) && + qemuMonitorJSONGetOneBlockStatsInfo(backing, dev_name, depth + 1, hash) < 0) return -1; return nstats; @@ -2538,8 +2535,7 @@ qemuMonitorJSONQueryBlockstats(qemuMonitor *mon) int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon, - GHashTable *hash, - bool backingChain) + GHashTable *hash) { int nstats = 0; int rc; @@ -2570,8 +2566,7 @@ qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon, if (*dev_name == '\0') dev_name = NULL; - rc = qemuMonitorJSONGetOneBlockStatsInfo(dev, dev_name, 0, hash, - backingChain); + rc = qemuMonitorJSONGetOneBlockStatsInfo(dev, dev_name, 0, hash); if (rc < 0) return -1; diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index c841de0a03..c60f079d06 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -77,8 +77,7 @@ int qemuMonitorJSONGetBlockInfo(qemuMonitor *mon, virJSONValue *qemuMonitorJSONQueryBlockstats(qemuMonitor *mon); int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon, - GHashTable *hash, - bool backingChain); + GHashTable *hash); int qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, GHashTable *stats, bool backingChain); diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 30a19d27e8..e5ba39cd2f 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -1657,7 +1657,7 @@ testQemuMonitorJSONqemuMonitorJSONGetAllBlockStatsInfo(const void *opaque) CHECK0FULL(wr_highest_offset_valid, WR_HIGHEST_OFFSET_VALID, "%d", "%d") if (qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorTestGetMonitor(test), - blockstats, false) < 0) + blockstats) < 0) return -1; if (!blockstats) { -- 2.31.1

Always fetch the stats for all backing chain members. Callers from qemu_driver.c already always passed 'true' and the caller from the migration code won't mind when we fetch all stats. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 5 ++--- src/qemu/qemu_migration_cookie.c | 2 +- src/qemu/qemu_monitor.c | 7 ++----- src/qemu/qemu_monitor.h | 3 +-- src/qemu/qemu_monitor_json.c | 16 +++++----------- src/qemu/qemu_monitor_json.h | 3 +-- 6 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 587a673efc..6997dc7dea 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10057,7 +10057,7 @@ qemuDomainBlocksStatsGather(virQEMUDriver *driver, if (blockdev) rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, blockstats); else - rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, blockstats, true); + rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, blockstats); } if (qemuDomainObjExitMonitor(driver, vm) < 0 || nstats < 0 || rc < 0) @@ -18483,8 +18483,7 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver, if (blockdev) rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, stats); else - ignore_value(qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, - true)); + ignore_value(qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats)); } if (fetchnodedata) diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c index c7b010f0a0..cc4cc39b32 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -495,7 +495,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookie *mig, if (blockdev) rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, stats); else - rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false); + rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats); if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) return -1; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 166f7958f0..9af9d3cf63 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2084,14 +2084,11 @@ qemuMonitorGetAllBlockStatsInfo(qemuMonitor *mon, /* Updates "stats" to fill virtual and physical size of the image */ int qemuMonitorBlockStatsUpdateCapacity(qemuMonitor *mon, - GHashTable *stats, - bool backingChain) + GHashTable *stats) { - VIR_DEBUG("stats=%p, backing=%d", stats, backingChain); - QEMU_CHECK_MONITOR(mon); - return qemuMonitorJSONBlockStatsUpdateCapacity(mon, stats, backingChain); + return qemuMonitorJSONBlockStatsUpdateCapacity(mon, stats); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index e28d45cc4a..f452d0d306 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -742,8 +742,7 @@ int qemuMonitorGetAllBlockStatsInfo(qemuMonitor *mon, ATTRIBUTE_NONNULL(2); int qemuMonitorBlockStatsUpdateCapacity(qemuMonitor *mon, - GHashTable *stats, - bool backingChain) + GHashTable *stats) ATTRIBUTE_NONNULL(2); int qemuMonitorBlockStatsUpdateCapacityBlockdev(qemuMonitor *mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index af673b5ba6..7bf3a9981b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2617,8 +2617,7 @@ static int qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValue *image, const char *dev_name, int depth, - GHashTable *stats, - bool backingChain) + GHashTable *stats) { g_autofree char *entry_name = qemuDomainStorageAlias(dev_name, depth); virJSONValue *backing; @@ -2627,13 +2626,11 @@ qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValue *image, stats, NULL) < 0) return -1; - if (backingChain && - (backing = virJSONValueObjectGetObject(image, "backing-image")) && + if ((backing = virJSONValueObjectGetObject(image, "backing-image")) && qemuMonitorJSONBlockStatsUpdateCapacityOne(backing, dev_name, depth + 1, - stats, - true) < 0) + stats) < 0) return -1; return 0; @@ -2642,8 +2639,7 @@ qemuMonitorJSONBlockStatsUpdateCapacityOne(virJSONValue *image, int qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, - GHashTable *stats, - bool backingChain) + GHashTable *stats) { size_t i; g_autoptr(virJSONValue) devices = NULL; @@ -2668,9 +2664,7 @@ qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, !(image = virJSONValueObjectGetObject(inserted, "image"))) continue; - if (qemuMonitorJSONBlockStatsUpdateCapacityOne(image, dev_name, 0, - stats, - backingChain) < 0) + if (qemuMonitorJSONBlockStatsUpdateCapacityOne(image, dev_name, 0, stats) < 0) return -1; } diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index c60f079d06..f9e01e5bf5 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -79,8 +79,7 @@ virJSONValue *qemuMonitorJSONQueryBlockstats(qemuMonitor *mon); int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon, GHashTable *hash); int qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon, - GHashTable *stats, - bool backingChain); + GHashTable *stats); int qemuMonitorJSONBlockStatsUpdateCapacityBlockdev(qemuMonitor *mon, GHashTable *stats); -- 2.31.1

On 10/19/21 4:43 PM, Peter Krempa wrote:
Patch 1 fixes the bug this series is about, patch 2 fixes same thing in the bulk stats. Patches 3-6 remove some pointless cleanup sections and patches 7-8 remove the 'backingChain' argument as we always want to fetch all stats.
Peter Krempa (8): qemuDomainBlocksStatsGather: Always fetch stats for the full backing chain qemuDomainGetStatsBlock: Always fetch stats for the full backing chain qemuMonitorJSONBlockStatsUpdateCapacity: Refactor cleanup qemuMonitorJSONBlockStatsUpdateCapacityOne: Refactor cleanup qemuDomainGetStatsBlock: Refactor cleanup qemuMonitorJSONQueryBlockstats: Refactor cleanup qemuMonitorGetAllBlockStatsInfo: Remove 'backingChain' argument qemuMonitorBlockStatsUpdateCapacity: Remove 'backingChain' argument
src/qemu/qemu_driver.c | 31 ++++++------- src/qemu/qemu_migration_cookie.c | 2 +- src/qemu/qemu_monitor.c | 20 +++------ src/qemu/qemu_monitor.h | 6 +-- src/qemu/qemu_monitor_json.c | 74 +++++++++++--------------------- src/qemu/qemu_monitor_json.h | 6 +-- tests/qemumonitorjsontest.c | 2 +- 7 files changed, 48 insertions(+), 93 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Michal
participants (2)
-
Michal Prívozník
-
Peter Krempa