提交 5f4c50d5 编写于 作者: M Martin Kletzander

qemu: Yet another check for blkdeviotune values

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: NMartin Kletzander <mkletzan@redhat.com>
上级 93a2fb23
......@@ -17358,6 +17358,27 @@ 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);
#undef CHECK_MAX
qemuDomainObjEnterMonitor(driver, vm);
ret = qemuMonitorSetBlockIoThrottle(priv->mon, device,
&info, supportMaxOptions);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册