[libvirt] [PATCH 10/10] qemu: hotplug: Make qemuHotplugWaitForTrayEject reusable

Peter Krempa pkrempa at redhat.com
Tue Jul 17 12:14:30 UTC 2018


Remove the issue of the monitor command to the caller so that the
function can be used with the modern approach.

Additionally improve the error message.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_hotplug.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 1a7d8f0ca3..774ee25286 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -155,10 +155,8 @@ qemuHotplugPrepareDiskAccess(virQEMUDriverPtr driver,


 static int
-qemuHotplugWaitForTrayEject(virQEMUDriverPtr driver,
-                            virDomainObjPtr vm,
-                            virDomainDiskDefPtr disk,
-                            const char *driveAlias)
+qemuHotplugWaitForTrayEject(virDomainObjPtr vm,
+                            virDomainDiskDefPtr disk)
 {
     unsigned long long now;
     int rc;
@@ -174,19 +172,14 @@ qemuHotplugWaitForTrayEject(virQEMUDriverPtr driver,
             /* the caller called qemuMonitorEjectMedia which usually reports an
              * error. Report the failure in an off-chance that it didn't. */
             if (virGetLastErrorCode() == VIR_ERR_OK) {
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                               _("timed out waiting for disk tray status update"));
+                virReportError(VIR_ERR_OPERATION_FAILED,
+                               _("timed out waiting to open tray of '%s'"),
+                               disk->dst);
             }
             return -1;
         }
     }

-    /* re-issue ejection command to pop out the media */
-    qemuDomainObjEnterMonitor(driver, vm);
-    rc = qemuMonitorEjectMedia(qemuDomainGetMonitor(vm), driveAlias, false);
-    if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-        return -1;
-
     return 0;
 }

@@ -242,9 +235,16 @@ qemuDomainChangeMediaLegacy(virQEMUDriverPtr driver,
     /* If the tray is present and tray change event is supported wait for it to open. */
     if (!force && diskPriv->tray &&
         virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_TRAY_MOVED)) {
-        rc = qemuHotplugWaitForTrayEject(driver, vm, disk, driveAlias);
+        rc = qemuHotplugWaitForTrayEject(vm, disk);
         if (rc < 0)
             goto cleanup;
+
+        /* re-issue ejection command to pop out the media */
+        qemuDomainObjEnterMonitor(driver, vm);
+        rc = qemuMonitorEjectMedia(priv->mon, driveAlias, false);
+        if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
+            goto cleanup;
+
     } else  {
         /* otherwise report possible errors from the attempt to eject the media*/
         if (rc < 0)
-- 
2.16.2




More information about the libvir-list mailing list