On 1/5/21 8:22 AM, Peter Krempa wrote:
When starting a VM with an empty cdrom which has <iotune> 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 <pkrempa@xxxxxxxxxx> ---
Reviewed-by: Daniel Henrique Barboza <danielhb413@xxxxxxxxx>
src/qemu/qemu_hotplug.c | 10 ++++++++++ src/qemu/qemu_process.c | 4 ++++ 2 files changed, 14 insertions(+) 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;