[libvirt] [PATCH] qemu: Yet another check for blkdeviotune values
John Ferlan
jferlan at redhat.com
Thu Jun 9 14:56:01 UTC 2016
On 06/07/2016 05:26 PM, Martin Kletzander wrote:
> If you want to set block device I/O tuning values that end with '_max'
> and there is nothing else set, libvirt emits an error. In particular:
>
> error: internal error: Unexpected error
>
> That's an unknown error. That is because *_max values depend on their
> respective non-_max values. QEMU even says that in the error message
> sent as a response to the monitor command:
>
> "error": {"class": "GenericError", "desc": "bps_max/iops_max require
> corresponding bps/iops values"}
>
> the problem was that we didn't know that and there was no check for it.
> Adding such check makes sure that there will be less confused users.
>
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
> src/qemu/qemu_driver.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index a7202ed3e3a1..d73238a66c66 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -17391,6 +17391,25 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
> }
> if (!set_size_iops)
> info.size_iops_sec = oldinfo->size_iops_sec;
> +
> +#define CHECK_MAX(val) \
> + do { \
> + if (info.val##_max && !info.val) { \
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \
> + _("Value '%s' cannot be set if " \
> + "'%s' is not set"), \
> + #val "_max", #val); \
> + goto endjob; \
> + } \
> + } while (false);
> +
> + CHECK_MAX(total_bytes_sec);
> + CHECK_MAX(read_bytes_sec);
> + CHECK_MAX(write_bytes_sec);
> + CHECK_MAX(total_iops_sec);
> + CHECK_MAX(read_iops_sec);
> + CHECK_MAX(write_iops_sec);
> +
s/Value/value/ (NIT: and only since you'll be in there)
Couldn't decide if CONFIG_UNSUPPORTED was better than perhaps
OPERATION_UNSUPPORTED which indicates that qemu refuses to accept just
_max without non-_max
Need to add:
#undef CHECK_MAX
ACK w/ that added.
John
> qemuDomainObjEnterMonitor(driver, vm);
> ret = qemuMonitorSetBlockIoThrottle(priv->mon, device,
> &info, supportMaxOptions);
>
More information about the libvir-list
mailing list