From: Peter Krempa Date: Tue, 5 Jan 2021 11:06:32 +0000 (+0100) Subject: qemu: Properly handle setting of for empty cdrom X-Git-Tag: v7.0.0-rc1~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0819b9f02ba39a178d16c28df7ca0e3e066f28b;p=thirdparty%2Flibvirt.git qemu: Properly handle setting of for empty cdrom When starting a VM with an empty cdrom which has configured the startup fails as qemu is not happy about setting tuning for an empty drive: error: internal error: unable to execute 'block_set_io_throttle', unexpected error: 'Device has no medium' Resolve this by skipping the setting of throttling for empty drives and updating the throttling when new medium is inserted into the drive. Resolves: https://gitlab.com/libvirt/libvirt/-/issues/111 Signed-off-by: Peter Krempa Reviewed-by: Daniel Henrique Barboza --- diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9b93f256e8..57635cd419 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -558,6 +558,16 @@ qemuDomainChangeMediaBlockdev(virQEMUDriverPtr driver, nodename); } + /* set throttling for the new image */ + if (rc == 0 && + !virStorageSourceIsEmpty(newsrc) && + qemuDiskConfigBlkdeviotuneEnabled(disk)) { + rc = qemuMonitorSetBlockIoThrottle(priv->mon, NULL, + diskPriv->qomName, + &disk->blkdeviotune, + true, true, true); + } + if (rc == 0) rc = qemuMonitorBlockdevTrayClose(priv->mon, diskPriv->qomName); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e7421b415f..414e9327d2 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6838,6 +6838,10 @@ qemuProcessSetupDiskThrottlingBlockdev(virQEMUDriverPtr driver, if (qemuDiskBusIsSD(disk->bus)) continue; + /* Setting throttling for empty drives fails */ + if (virStorageSourceIsEmpty(disk->src)) + continue; + if (!qemuDiskConfigBlkdeviotuneEnabled(disk)) continue;