[PATCH] qemu: Properly handle setting of <iotune> for empty cdrom

Daniel Henrique Barboza danielhb413 at gmail.com
Tue Jan 5 12:10:58 UTC 2021



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 at redhat.com>
> ---


Reviewed-by: Daniel Henrique Barboza <danielhb413 at 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;
> 




More information about the libvir-list mailing list