diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index b580283d62..a78bc60d58 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -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)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index fe9288a349..57c34f0b16 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -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;
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index bb87397377..3129427f48 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -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;