From: Peter Krempa <[email protected]>

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 <[email protected]>
---
 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

Reply via email to