[PATCH 08/23] qemu: reset max iotune setting when needed

Peter Krempa pkrempa at redhat.com
Wed Mar 3 13:46:58 UTC 2021


On Mon, Jan 11, 2021 at 12:50:01 +0300, Nikolay Shirokovskiy wrote:
> Currenly API is not very convinient when switching from read/write to total
> tunes back and forth. read/write and total tunes can not be set simulaneously
> so one need to choose one. Now if for example total_bytes_sec and
> total_bytes_sec_max are set and we set read_bytes_sec only then API fails. The
> issue is new max settings are copied from the old ones in this case and as
> a result after defaults are applied we got settings for read_bytes_sec and
> total_bytes_sec_max which is incorrect.
> 
> In order to handle such situation nicely let's reset max settings if
> appropriate avg settings is reseted explicitly or implicitly.

NACK, IMO we must not change any fields which the user didn't touch.

> 
> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
>  src/qemu/qemu_driver.c | 31 ++++++++++++++++++++-----------
>  1 file changed, 20 insertions(+), 11 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 117c7b7..9093baf 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -15901,6 +15901,22 @@ qemuDomainSetBlockIoTuneDefaults(virDomainBlockIoTuneInfoPtr newinfo,
>      SET_IOTUNE_DEFAULTS(IOPS_MAX, iops_sec_max);
>  #undef SET_IOTUNE_DEFAULTS
>  
> +#define RESET_IOTUNE_MAX(BOOL, FIELD) \

Also the series sells removing macros, so adding new ones isn't very
productive ;)

> +    do { \
> +        if (set_fields & QEMU_BLOCK_IOTUNE_SET_##BOOL) { \
> +            if (!newinfo->total_##FIELD) \
> +                newinfo->total_##FIELD##_max = 0; \
> +            if (!newinfo->read_##FIELD) \
> +                newinfo->read_##FIELD##_max = 0; \
> +            if (!newinfo->write_##FIELD) \
> +                newinfo->write_##FIELD##_max = 0; \
> +        } \
> +    } while (0)
> +
> +    RESET_IOTUNE_MAX(BYTES, bytes_sec);
> +    RESET_IOTUNE_MAX(IOPS, iops_sec);
> +#undef RESET_IOTUNE_MAX




More information about the libvir-list mailing list