On 09/25/2014 06:06 AM, Peter Krempa wrote:
The current block stats code matched up the disk name with the
actual
stats by the order in the data returned from qemu. This unfortunately
isn't right as qemu may return the disks in any order. Fix this by
returning a hash of stats and index them by the disk alias.
---
src/qemu/qemu_driver.c | 44 ++++++++---------
src/qemu/qemu_monitor.c | 14 ++----
src/qemu/qemu_monitor.h | 6 +--
src/qemu/qemu_monitor_json.c | 112 ++++++++++++++++++++-----------------------
src/qemu/qemu_monitor_json.h | 4 +-
5 files changed, 82 insertions(+), 98 deletions(-)
@@ -1749,56 +1750,62 @@ int
qemuMonitorJSONGetBlockStatsInfo(qemuMonitorPtr mon,
if (flush_total_times)
*flush_total_times = -1;
- if (qemuMonitorJSONGetAllBlockStatsInfo(mon, dev_name, &stats, 1) != 1)
+ if (qemuMonitorJSONGetAllBlockStatsInfo(mon, &blockstats) < 0)
goto cleanup;
- *rd_req = stats.rd_req;
- *rd_bytes = stats.rd_bytes;
- *wr_req = stats.wr_req;
- *wr_bytes = stats.wr_bytes;
+ if (!(stats = virHashLookup(blockstats, dev_name))) {
Maybe slightly less efficient (we now malloc stats for all members, only
to throw away everything but the one we want), but I can live with it.
ACK; worth having in 1.2.9
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org