[libvirt] [PATCH] qemu: Yet another check for blkdeviotune values

Martin Kletzander mkletzan at redhat.com
Thu Jun 9 15:16:02 UTC 2016


On Thu, Jun 09, 2016 at 10:56:01AM -0400, John Ferlan wrote:
>
>
>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)
>

More of a good point then a nit, actually.

>Couldn't decide if CONFIG_UNSUPPORTED was better than perhaps
>OPERATION_UNSUPPORTED which indicates that qemu refuses to accept just
>_max without non-_max
>

This was a copy from few lines above when we report CONFIG_UNSUPPORTED
for some values or older QEMU.

>Need to add:
>
>#undef CHECK_MAX
>

oh, forgot that completely

>ACK w/ that added.
>

Thanks, pushed.

>John
>
>>          qemuDomainObjEnterMonitor(driver, vm);
>>          ret = qemuMonitorSetBlockIoThrottle(priv->mon, device,
>>                                              &info, supportMaxOptions);
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160609/10e01b72/attachment-0001.sig>


More information about the libvir-list mailing list