To allow matching the node names gathered via 'query-named-block-nodes'
we need to query and then use the top level nodes from 'query-block'.
Add the data to the structure returned by qemuMonitorGetBlockInfo.
---
src/qemu/qemu_domain.h | 1 +
src/qemu/qemu_monitor.c | 12 +++++++++++-
src/qemu/qemu_monitor_json.c | 8 +++++++-
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 3a7afdf45..0cbea95fc 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -356,6 +356,7 @@ struct qemuDomainDiskInfo {
bool tray_open;
bool empty;
int io_status;
+ char *nodename;
};
typedef struct _qemuDomainHostdevPrivate qemuDomainHostdevPrivate;
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 36b8b5ea4..d958f6390 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -2148,6 +2148,16 @@ qemuMonitorBlockIOStatusToError(const char *status)
}
+static void
+qemuDomainDiskInfoFree(void *value, const void *name ATTRIBUTE_UNUSED)
+{
+ struct qemuDomainDiskInfo *info = value;
+
+ VIR_FREE(info->nodename);
+ VIR_FREE(info);
+}
+
+
virHashTablePtr
qemuMonitorGetBlockInfo(qemuMonitorPtr mon)
{
@@ -2156,7 +2166,7 @@ qemuMonitorGetBlockInfo(qemuMonitorPtr mon)
QEMU_CHECK_MONITOR_NULL(mon);
- if (!(table = virHashCreate(32, virHashValueFree)))
+ if (!(table = virHashCreate(32, qemuDomainDiskInfoFree)))
return NULL;
if (mon->json)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 141d56b3d..75af5cb93 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -1868,9 +1868,11 @@ int qemuMonitorJSONGetBlockInfo(qemuMonitorPtr mon,
for (i = 0; i < virJSONValueArraySize(devices); i++) {
virJSONValuePtr dev;
+ virJSONValuePtr image;
struct qemuDomainDiskInfo *info;
const char *thisdev;
const char *status;
+ const char *nodename;
if (!(dev = qemuMonitorJSONGetBlockDev(devices, i)))
goto cleanup;
@@ -1907,8 +1909,12 @@ int qemuMonitorJSONGetBlockInfo(qemuMonitorPtr mon,
info->tray = true;
/* presence of 'inserted' notifies that a medium is in the device */
- if (!virJSONValueObjectGetObject(dev, "inserted"))
+ if ((image = virJSONValueObjectGetObject(dev, "inserted"))) {
+ if ((nodename = virJSONValueObjectGetString(image, "node-name")))
+ ignore_value(VIR_STRDUP(info->nodename, nodename));
+ } else {
info->empty = true;
+ }
/* Missing io-status indicates no error */
if ((status = virJSONValueObjectGetString(dev, "io-status"))) {
--
2.12.0