From: Peter Krempa <pkrempa@redhat.com>
Modify the monitor code to directly return values from 'virDomainDiskTray'
enum instead of two bools.
This allows simplification of the other code:
- qemuProcessRefreshDiskProps just assigns the value, thus can be deleted
- old_tray_status is no longer needed as we can directly access the
disk status instead and assign later
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
src/qemu/qemu_domain.h | 3 +--
src/qemu/qemu_monitor_json.c | 14 +++++++++++---
src/qemu/qemu_process.c | 26 ++++++--------------------
src/qemu/qemu_process.h | 3 ---
tests/qemumonitorjsontest.c | 8 ++++----
5 files changed, 22 insertions(+), 32 deletions(-)
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 2a881a8285..d4f6c256cd 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -355,8 +355,7 @@ struct _qemuDomainVcpuPrivate {
struct qemuDomainDiskInfo {
- bool tray;
- bool tray_open;
+ virDomainDiskTray tray_status;
virDomainDiskErrorCode io_status;
};
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 50e0497385..971e8dd63f 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -2347,10 +2347,14 @@ qemuMonitorJSONGetBlockInfo(qemuMonitor *mon,
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;
@@ -2371,8 +2375,12 @@ qemuMonitorJSONGetBlockInfo(qemuMonitor *mon,
}
/* '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"))) {
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 2142198589..0b78d45ef6 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -8661,7 +8661,6 @@ qemuProcessRefreshDisks(virDomainObj *vm,
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;
@@ -8669,20 +8668,20 @@ qemuProcessRefreshDisks(virDomainObj *vm,
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;
@@ -9587,19 +9586,6 @@ qemuProcessAutoDestroy(virDomainObj *dom,
}
-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)
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index 201b3ebb63..df63cac9b8 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -257,9 +257,6 @@ bool qemuProcessRebootAllowed(const virDomainDef *def);
void qemuProcessCleanupMigrationJob(virQEMUDriver *driver,
virDomainObj *vm);
-void qemuProcessRefreshDiskProps(virDomainDiskDef *disk,
- struct qemuDomainDiskInfo *info);
-
int qemuProcessSetupEmulator(virDomainObj *vm);
void qemuProcessHandleNbdkitExit(qemuNbdkitProcess *nbdkit,
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index 9c9b3397ad..c10faa6a6f 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -1353,8 +1353,8 @@ testQemuMonitorJSONqemuMonitorJSONGetBalloonInfo(const void *opaque)
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);
}
@@ -1403,7 +1403,7 @@ testQemuMonitorJSONqemuMonitorJSONGetBlockInfo(const void *opaque)
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",
@@ -1413,7 +1413,7 @@ testQemuMonitorJSONqemuMonitorJSONGetBlockInfo(const void *opaque)
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",
--
2.53.0