mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 22:55:23 +00:00
qemu: Don't report error on successful media eject
If we are just ejecting media, ret == -1 even after the retry loop determines that the tray is open, as requested. This means media disconnect always report's error. Fix it, and fix some other mini issues: - Don't overwrite the 'eject' error message if the retry loop fails - Move the retries decrement inside the loop, otherwise the final loop might succeed, yet retries == 0 and we will raise error - Setting ret = -1 in the disk->src check is unneeded - Fix comment typos cc: mprivozn@redhat.com
This commit is contained in:
parent
134e685b1d
commit
406d8a9809
@ -98,10 +98,11 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
virObjectRef(vm);
|
virObjectRef(vm);
|
||||||
/* we don't want to report errors from media tray_open polling */
|
/* we don't want to report errors from media tray_open polling */
|
||||||
while (retries--) {
|
while (retries) {
|
||||||
if (origdisk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)
|
if (origdisk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
retries--;
|
||||||
virObjectUnlock(vm);
|
virObjectUnlock(vm);
|
||||||
VIR_DEBUG("Waiting 500ms for tray to open. Retries left %d", retries);
|
VIR_DEBUG("Waiting 500ms for tray to open. Retries left %d", retries);
|
||||||
usleep(500 * 1000); /* sleep 500ms */
|
usleep(500 * 1000); /* sleep 500ms */
|
||||||
@ -109,19 +110,20 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
virObjectUnref(vm);
|
virObjectUnref(vm);
|
||||||
|
|
||||||
if (disk->src) {
|
|
||||||
/* deliberately don't depend on 'ret' as 'eject' may have failed for the
|
|
||||||
* fist time and we are gonna check the drive state anyway */
|
|
||||||
const char *format = NULL;
|
|
||||||
|
|
||||||
/* We haven't succeeded yet */
|
|
||||||
ret = -1;
|
|
||||||
|
|
||||||
if (retries <= 0) {
|
if (retries <= 0) {
|
||||||
|
if (ret == 0) {
|
||||||
|
/* If ret == -1, EjectMedia already set an error message */
|
||||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||||
_("Unable to eject media before changing it"));
|
_("Unable to eject media"));
|
||||||
|
}
|
||||||
goto audit;
|
goto audit;
|
||||||
}
|
}
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
if (disk->src) {
|
||||||
|
/* deliberately don't depend on 'ret' as 'eject' may have failed the
|
||||||
|
* first time and we are going to check the drive state anyway */
|
||||||
|
const char *format = NULL;
|
||||||
|
|
||||||
if (disk->type != VIR_DOMAIN_DISK_TYPE_DIR) {
|
if (disk->type != VIR_DOMAIN_DISK_TYPE_DIR) {
|
||||||
if (disk->format > 0)
|
if (disk->format > 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user