src/qemu/qemu_hotplug.c | 10 ++++++++++ src/qemu/qemu_process.c | 4 ++++ 2 files changed, 14 insertions(+)
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@redhat.com>
---
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;
--
2.29.2
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@redhat.com> > --- Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> > 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; >
© 2016 - 2024 Red Hat, Inc.