qemu: monitor: Extract the top level format node when querying disks

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.
This commit is contained in:
Peter Krempa 2017-02-23 19:36:52 +01:00
parent b0aa088fad
commit 2780bcd9f8
3 changed files with 19 additions and 2 deletions

View File

@ -364,6 +364,7 @@ struct qemuDomainDiskInfo {
bool tray_open;
bool empty;
int io_status;
char *nodename;
};
typedef struct _qemuDomainHostdevPrivate qemuDomainHostdevPrivate;

View File

@ -2173,6 +2173,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)
{
@ -2181,7 +2191,7 @@ qemuMonitorGetBlockInfo(qemuMonitorPtr mon)
QEMU_CHECK_MONITOR_NULL(mon);
if (!(table = virHashCreate(32, virHashValueFree)))
if (!(table = virHashCreate(32, qemuDomainDiskInfoFree)))
return NULL;
if (mon->json)

View File

@ -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"))) {