From d0819b9f02ba39a178d16c28df7ca0e3e066f28b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 5 Jan 2021 12:06:32 +0100 Subject: [PATCH] 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 --- 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;