]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Refactor tray_status handling
authorPeter Krempa <pkrempa@redhat.com>
Thu, 5 Feb 2026 13:31:41 +0000 (14:31 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 12 Feb 2026 15:45:34 +0000 (16:45 +0100)
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>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_domain.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_process.c
src/qemu/qemu_process.h
tests/qemumonitorjsontest.c

index 2a881a82853ab3b13e447dcb897c5b26b9370a84..d4f6c256cd20396743922b1abaa685487f610563 100644 (file)
@@ -355,8 +355,7 @@ struct _qemuDomainVcpuPrivate {
 
 
 struct qemuDomainDiskInfo {
-    bool tray;
-    bool tray_open;
+    virDomainDiskTray tray_status;
     virDomainDiskErrorCode io_status;
 };
 
index 50e0497385f3b0728cc906ef5425e8e21fb9c313..971e8dd63fcfd39580625e387a797f89c9abfc8c 100644 (file)
@@ -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"))) {
index 21421985899852231bd0e2eb8ea8738f981cafd5..0b78d45ef6b4a3a0807c0fdf928138ab56240618 100644 (file)
@@ -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)
index 201b3ebb6305e07238b96ab416f18cb3828c050a..df63cac9b85eed7ca84c0d1b5c6eec28fa7b967b 100644 (file)
@@ -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,
index 9c9b3397add1cce6e4f1fd2e8135dd53ba0e939f..c10faa6a6f30e1babf90dedf46e89ff6b5530028 100644 (file)
@@ -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",