mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
qemu: monitor: Handle TRAY_MOVED event correctly with -blockdev
Add handling of the 'id' field in the event which corresponds to the QDEV id of the device. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
2e648c1f70
commit
d322a83674
@ -1460,13 +1460,14 @@ qemuMonitorEmitGraphics(qemuMonitorPtr mon,
|
||||
int
|
||||
qemuMonitorEmitTrayChange(qemuMonitorPtr mon,
|
||||
const char *devAlias,
|
||||
const char *devid,
|
||||
int reason)
|
||||
{
|
||||
int ret = -1;
|
||||
VIR_DEBUG("mon=%p", mon);
|
||||
|
||||
QEMU_MONITOR_CALLBACK(mon, ret, domainTrayChange, mon->vm,
|
||||
devAlias, reason);
|
||||
devAlias, devid, reason);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -181,6 +181,7 @@ typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
|
||||
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
|
||||
virDomainObjPtr vm,
|
||||
const char *devAlias,
|
||||
const char *devid,
|
||||
int reason,
|
||||
void *opaque);
|
||||
typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon,
|
||||
@ -397,6 +398,7 @@ int qemuMonitorEmitGraphics(qemuMonitorPtr mon,
|
||||
const char *saslUsername);
|
||||
int qemuMonitorEmitTrayChange(qemuMonitorPtr mon,
|
||||
const char *devAlias,
|
||||
const char *devid,
|
||||
int reason);
|
||||
int qemuMonitorEmitPMWakeup(qemuMonitorPtr mon);
|
||||
int qemuMonitorEmitPMSuspend(qemuMonitorPtr mon);
|
||||
|
@ -1031,11 +1031,16 @@ static void
|
||||
qemuMonitorJSONHandleTrayChange(qemuMonitorPtr mon,
|
||||
virJSONValuePtr data)
|
||||
{
|
||||
const char *devAlias = NULL;
|
||||
const char *devAlias = virJSONValueObjectGetString(data, "device");
|
||||
const char *devid = virJSONValueObjectGetString(data, "id");
|
||||
bool trayOpened;
|
||||
int reason;
|
||||
|
||||
if ((devAlias = virJSONValueObjectGetString(data, "device")) == NULL) {
|
||||
/* drive alias is always reported but empty for -blockdev */
|
||||
if (*devAlias == '\0')
|
||||
devAlias = NULL;
|
||||
|
||||
if (!devAlias && !devid) {
|
||||
VIR_WARN("missing device in tray change event");
|
||||
return;
|
||||
}
|
||||
@ -1050,7 +1055,7 @@ qemuMonitorJSONHandleTrayChange(qemuMonitorPtr mon,
|
||||
else
|
||||
reason = VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE;
|
||||
|
||||
qemuMonitorEmitTrayChange(mon, devAlias, reason);
|
||||
qemuMonitorEmitTrayChange(mon, devAlias, devid, reason);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1061,6 +1061,7 @@ static int
|
||||
qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
|
||||
virDomainObjPtr vm,
|
||||
const char *devAlias,
|
||||
const char *devid,
|
||||
int reason,
|
||||
void *opaque)
|
||||
{
|
||||
@ -1070,7 +1071,7 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
virObjectLock(vm);
|
||||
disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, devAlias, NULL);
|
||||
disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, devAlias, devid);
|
||||
|
||||
if (disk) {
|
||||
event = virDomainEventTrayChangeNewFromObj(vm, disk->info.alias, reason);
|
||||
|
Loading…
x
Reference in New Issue
Block a user