From: Peter Krempa Date: Fri, 29 Apr 2016 11:38:51 +0000 (+0200) Subject: qemu: process: Refresh ejectable media tray state on VM start X-Git-Tag: v1.3.3.2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f6721a3d9a9ba41f62a9687576fb9cbdccc2f41e;p=thirdparty%2Flibvirt.git qemu: process: Refresh ejectable media tray state on VM start Empty floppy drives start with tray in "open" state and libvirt did not refresh it after startup. The code that inserts media into the tray then waited until the tray was open before inserting the media and thus floppies could not be inserted. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1326660 (cherry picked from commit a34faf33011c5c0d7b47ee0849bf1e11635e17c5) --- diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 67fb6240e6..b8ab068bc4 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -299,8 +299,14 @@ qemuDomainCheckEjectableMedia(virQEMUDriverPtr driver, if (!info) goto cleanup; - if (info->tray_open && virDomainDiskGetSource(disk)) - ignore_value(virDomainDiskSetSource(disk, NULL)); + if (info->tray_open) { + if (virDomainDiskGetSource(disk)) + ignore_value(virDomainDiskSetSource(disk, NULL)); + + disk->tray_status = VIR_DOMAIN_DISK_TRAY_OPEN; + } else { + disk->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED; + } } ret = 0; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e3df26563c..2698178e3d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5457,6 +5457,10 @@ qemuProcessLaunch(virConnectPtr conn, if (qemuProcessUpdateVideoRamSize(driver, vm, asyncJob) < 0) goto cleanup; + VIR_DEBUG("Updating ejectable media status"); + if (qemuDomainCheckEjectableMedia(driver, vm, asyncJob) < 0) + goto cleanup; + if (flags & VIR_QEMU_PROCESS_START_AUTODESTROY && qemuProcessAutoDestroyAdd(driver, vm, conn) < 0) goto cleanup;