struct qemuDomainDiskInfo {
- bool tray;
- bool tray_open;
+ virDomainDiskTray tray_status;
virDomainDiskErrorCode io_status;
};
for (i = 0; i < virJSONValueArraySize(devices); i++) {
virJSONValue *dev;
- struct qemuDomainDiskInfo info = { .io_status = VIR_DOMAIN_DISK_ERROR_NONE };
+ struct qemuDomainDiskInfo info = {
+ .tray_status = VIR_DOMAIN_DISK_TRAY_NONE,
+ .io_status = VIR_DOMAIN_DISK_ERROR_NONE
+ };
const char *thisdev;
const char *status;
const char *qdev;
+ bool tray_open;
if (!(dev = qemuMonitorJSONGetBlockDev(devices, i)))
return -1;
}
/* 'tray_open' is present only if the device has a tray */
- if (virJSONValueObjectGetBoolean(dev, "tray_open", &info.tray_open) == 0)
- info.tray = true;
+ if (virJSONValueObjectGetBoolean(dev, "tray_open", &tray_open) == 0) {
+ if (tray_open)
+ info.tray_status = VIR_DOMAIN_DISK_TRAY_OPEN;
+ else
+ info.tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
+ }
/* Missing io-status indicates no error */
if ((status = virJSONValueObjectGetString(dev, "io-status"))) {
qemuDomainDiskPrivate *diskpriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
struct qemuDomainDiskInfo *info;
const char *entryname = disk->info.alias;
- virDomainDiskTray old_tray_status = disk->tray_status;
if (diskpriv->qomName)
entryname = diskpriv->qomName;
if (!(info = virHashLookup(table, entryname)))
continue;
- qemuProcessRefreshDiskProps(disk, info);
-
- if (old_tray_status != VIR_DOMAIN_DISK_TRAY_NONE &&
- disk->tray_status != VIR_DOMAIN_DISK_TRAY_NONE &&
- old_tray_status != disk->tray_status) {
+ if (disk->tray_status != VIR_DOMAIN_DISK_TRAY_NONE &&
+ info->tray_status != VIR_DOMAIN_DISK_TRAY_NONE &&
+ disk->tray_status != info->tray_status) {
virDomainEventTrayChangeReason reason = VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN;
virObjectEvent *event;
- if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_CLOSED)
+ if (info->tray_status == VIR_DOMAIN_DISK_TRAY_CLOSED)
reason = VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE;
event = virDomainEventTrayChangeNewFromObj(vm, disk->info.alias, reason);
virObjectEventStateQueue(driver->domainEventState, event);
}
+
+ disk->tray_status = info->tray_status;
}
return 0;
}
-void
-qemuProcessRefreshDiskProps(virDomainDiskDef *disk,
- struct qemuDomainDiskInfo *info)
-{
- if (info->tray) {
- if (info->tray_open)
- disk->tray_status = VIR_DOMAIN_DISK_TRAY_OPEN;
- else
- disk->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
- }
-}
-
-
static int
qemuProcessRefreshCPUMigratability(virDomainObj *vm,
virDomainAsyncJob asyncJob)
void qemuProcessCleanupMigrationJob(virQEMUDriver *driver,
virDomainObj *vm);
-void qemuProcessRefreshDiskProps(virDomainDiskDef *disk,
- struct qemuDomainDiskInfo *info);
-
int qemuProcessSetupEmulator(virDomainObj *vm);
void qemuProcessHandleNbdkitExit(qemuNbdkitProcess *nbdkit,
static void
testQemuMonitorJSONGetBlockInfoPrint(const struct qemuDomainDiskInfo *d)
{
- VIR_TEST_VERBOSE("tray: %d, tray_open: %d, io_status: %d",
- d->tray, d->tray_open, d->io_status);
+ VIR_TEST_VERBOSE("tray_status: %d, io_status: %d",
+ d->tray_status, d->io_status);
}
info = g_new0(struct qemuDomainDiskInfo, 1);
- info->tray = true;
+ info->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
if (virHashAddEntry(expectedBlockDevices, "ide0-1-0", info) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
info = g_new0(struct qemuDomainDiskInfo, 1);
- info->tray = true;
+ info->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
if (virHashAddEntry(expectedBlockDevices, "ide0-1-1", info) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",