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;