]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu-hotplug: fix eject media
authorPavel Hrdina <phrdina@redhat.com>
Thu, 17 Mar 2016 15:38:28 +0000 (16:38 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Tue, 22 Mar 2016 12:26:46 +0000 (13:26 +0100)
QEMU changed the error message to:

        "Tray of device 'drive-sata0-0-1' is not open"

and they may change the error massage in the future.

This updates the code to not depend on the text from the error message
but only on error itself.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_hotplug.c
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_text.c

index b580283d62734196da08d1ab48727b7bffde7b70..a78bc60d587332dd296eb0bdf09c01128eb8b1fe 100644 (file)
@@ -202,15 +202,14 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
         if (qemuDomainObjExitMonitor(driver, vm) < 0)
             goto cleanup;
 
-        if (rc == -2) {
+        if (rc < 0) {
             /* we've already tried, error out */
             if (ejectRetry)
                 goto error;
-            VIR_DEBUG("tray is locked, wait for the guest to unlock "
-                      "the tray and try to eject it again");
+
             ejectRetry = true;
-        } else if (rc < 0) {
-            goto error;
+            VIR_DEBUG("tray may be locked, wait for the guest to unlock "
+                      "the tray and try to eject it again");
         }
 
         if (virTimeMillisNow(&now) < 0)
@@ -220,7 +219,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
             if (virDomainObjWaitUntil(vm, now + CHANGE_MEDIA_TIMEOUT) != 0)
                 goto error;
         }
-    } while (ejectRetry && rc != 0);
+    } while (rc < 0);
 
     if (!virStorageSourceIsEmpty(newsrc)) {
         if (qemuGetDriveSourceString(newsrc, conn, &sourcestr) < 0)
index fe9288a349a680a5efffdf599c67cb7aac8218ba..57c34f0b168840a389deb3938d79bcecf0430d63 100644 (file)
@@ -2272,8 +2272,7 @@ int qemuMonitorJSONSetCPU(qemuMonitorPtr mon,
  * Run QMP command to eject a media from ejectable device.
  *
  * Returns:
- *      -2 on error, when the tray is locked
- *      -1 on all other errors
+ *      -1 on error
  *      0 on success
  */
 int qemuMonitorJSONEjectMedia(qemuMonitorPtr mon,
@@ -2294,15 +2293,6 @@ int qemuMonitorJSONEjectMedia(qemuMonitorPtr mon,
     if (ret == 0)
         ret = qemuMonitorJSONCheckError(cmd, reply);
 
-    if (ret < 0) {
-        virJSONValuePtr error = virJSONValueObjectGet(reply, "error");
-        if (error) {
-            const char *errorStr = virJSONValueObjectGetString(error, "desc");
-            if (errorStr && c_strcasestr(errorStr, "is locked"))
-                ret = -2;
-        }
-    }
-
     virJSONValueFree(cmd);
     virJSONValueFree(reply);
     return ret;
index bb87397377cde59b8a45940379a35672def5c3cc..3129427f48982eba540248f013e9010297d6ba48 100644 (file)
@@ -1170,8 +1170,7 @@ int qemuMonitorTextSetCPU(qemuMonitorPtr mon, int cpu, bool online)
  * Run HMP command to eject a media from ejectable device.
  *
  * Returns:
- *      -2 on error, when the tray is locked
- *      -1 on all other errors
+ *      -1 on error
  *      0 on success
  */
 int qemuMonitorTextEjectMedia(qemuMonitorPtr mon,
@@ -1192,8 +1191,6 @@ int qemuMonitorTextEjectMedia(qemuMonitorPtr mon,
      * device not found, device is locked ...
      * No message is printed on success it seems */
     if (c_strcasestr(reply, "device ")) {
-        if (c_strcasestr(reply, "is locked"))
-            ret = -2;
         virReportError(VIR_ERR_OPERATION_FAILED,
                        _("could not eject media on %s: %s"), dev_name, reply);
         goto cleanup;