From 50edca1331298bfcb2622e8fe588d493aff9ab68 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 15 Jun 2018 14:55:19 +0200 Subject: [PATCH] qemu: monitor: Add the 'query-nodes' argument for query-blockstats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 'query-blockstats' command does not return statistics for the explicitly named nodes unless the new argument is specified. Add infrastrucuture that will allow us to use the new approach if desired. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_block.c | 2 +- src/qemu/qemu_monitor.c | 8 ++++++-- src/qemu/qemu_monitor.h | 3 ++- src/qemu/qemu_monitor_json.c | 9 ++++++--- src/qemu/qemu_monitor_json.h | 3 ++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 509b0a5210..66e6301210 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -358,7 +358,7 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver, return -1; data = qemuMonitorQueryNamedBlockNodes(qemuDomainGetMonitor(vm)); - blockstats = qemuMonitorQueryBlockstats(qemuDomainGetMonitor(vm)); + blockstats = qemuMonitorQueryBlockstats(qemuDomainGetMonitor(vm), false); if (qemuDomainObjExitMonitor(driver, vm) < 0 || !data || !blockstats) goto cleanup; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 45cd51e43f..2f3097ca94 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2243,15 +2243,19 @@ qemuMonitorGetBlockInfo(qemuMonitorPtr mon) /** * qemuMonitorQueryBlockstats: * @mon: monitor object + * @nodenames: include backing chain nodes with explicitly specified name * * Returns data from a call to 'query-blockstats'. */ virJSONValuePtr -qemuMonitorQueryBlockstats(qemuMonitorPtr mon) +qemuMonitorQueryBlockstats(qemuMonitorPtr mon, + bool nodenames) { QEMU_CHECK_MONITOR_NULL(mon); - return qemuMonitorJSONQueryBlockstats(mon); + VIR_DEBUG("nodenames: %d", nodenames); + + return qemuMonitorJSONQueryBlockstats(mon, nodenames); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index b8e3ca2ce1..2fa8d5b51d 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -563,7 +563,8 @@ int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon, int qemuMonitorBlockIOStatusToError(const char *status); virHashTablePtr qemuMonitorGetBlockInfo(qemuMonitorPtr mon); -virJSONValuePtr qemuMonitorQueryBlockstats(qemuMonitorPtr mon); +virJSONValuePtr qemuMonitorQueryBlockstats(qemuMonitorPtr mon, + bool nodenames); typedef struct _qemuBlockStats qemuBlockStats; typedef qemuBlockStats *qemuBlockStatsPtr; diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index d9f4f4a207..804339824b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2350,13 +2350,16 @@ qemuMonitorJSONGetOneBlockStatsInfo(virJSONValuePtr dev, virJSONValuePtr -qemuMonitorJSONQueryBlockstats(qemuMonitorPtr mon) +qemuMonitorJSONQueryBlockstats(qemuMonitorPtr mon, + bool nodenames) { virJSONValuePtr cmd; virJSONValuePtr reply = NULL; virJSONValuePtr ret = NULL; - if (!(cmd = qemuMonitorJSONMakeCommand("query-blockstats", NULL))) + if (!(cmd = qemuMonitorJSONMakeCommand("query-blockstats", + "B:query-nodes", nodenames, + NULL))) return NULL; if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) @@ -2385,7 +2388,7 @@ qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon, size_t i; virJSONValuePtr devices; - if (!(devices = qemuMonitorJSONQueryBlockstats(mon))) + if (!(devices = qemuMonitorJSONQueryBlockstats(mon, false))) return -1; for (i = 0; i < virJSONValueArraySize(devices); i++) { diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 0458d81c0d..2408ab0c5b 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -86,7 +86,8 @@ int qemuMonitorJSONSetMemoryStatsPeriod(qemuMonitorPtr mon, int qemuMonitorJSONGetBlockInfo(qemuMonitorPtr mon, virHashTablePtr table); -virJSONValuePtr qemuMonitorJSONQueryBlockstats(qemuMonitorPtr mon); +virJSONValuePtr qemuMonitorJSONQueryBlockstats(qemuMonitorPtr mon, + bool nodenames); int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon, virHashTablePtr hash, bool backingChain); -- GitLab