[libvirt] [PATCH 5/6] tools: fix the wrong check when use virsh setvcpus --maximum

Yanbing Du ydu at redhat.com
Mon Mar 23 03:33:50 UTC 2015



On 03/20/2015 10:39 PM, Pavel Hrdina wrote:
> From: Luyao Huang <lhuang at redhat.com>
>
> We will ignore --maximum option when only use setvcpus with
> this option, like this (this error is another issue):
>
>   # virsh setvcpus test3 --maximum 10
>   error: Failed to create controller cpu for group: No such file or directory
>
> this is because we do not set it in flags before we check if there is
> a flags set.
>
> Refactor these code and fix the logic.
>
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1204033
>
> Signed-off-by: Luyao Huang <lhuang at redhat.com>
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>   tools/virsh-domain.c | 30 ++++++------------------------
>   1 file changed, 6 insertions(+), 24 deletions(-)
>
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index 1d8225c..9430ad9 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -6735,6 +6735,8 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
>       VSH_EXCLUSIVE_OPTIONS_VAR(current, live);
>       VSH_EXCLUSIVE_OPTIONS_VAR(current, config);
>       VSH_EXCLUSIVE_OPTIONS_VAR(guest, config);
> +    VSH_EXCLUSIVE_OPTIONS_VAR(guest, maximum);
> +    VSH_EXCLUSIVE_OPTIONS_VAR(config, maximum);

'maximum' should be used with 'config', and 'live' and 'maximum' are 
mutually exclusive

>
>       if (config)
>           flags |= VIR_DOMAIN_AFFECT_CONFIG;
> @@ -6742,9 +6744,8 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
>           flags |= VIR_DOMAIN_AFFECT_LIVE;
>       if (guest)
>           flags |= VIR_DOMAIN_VCPU_GUEST;
> -    /* none of the options were specified */
> -    if (!current && flags == 0)
> -        flags = -1;
> +    if (maximum)
> +        flags |= VIR_DOMAIN_VCPU_MAXIMUM;
>
>       if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
>           return false;
> @@ -6754,30 +6755,11 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
>           goto cleanup;
>       }
>
> -    if (flags == -1) {
> +    /* none of the options were specified */
> +    if (!current && flags == 0) {
>           if (virDomainSetVcpus(dom, count) != 0)
>               goto cleanup;
>       } else {
> -        /* If the --maximum flag was given, we need to ensure only the
> -           --config flag is in effect as well */
> -        if (maximum) {
> -            vshDebug(ctl, VSH_ERR_DEBUG, "--maximum flag was given\n");
> -
> -            flags |= VIR_DOMAIN_VCPU_MAXIMUM;
> -
> -            /* If neither the --config nor --live flags were given, OR
> -               if just the --live flag was given, we need to error out
> -               warning the user that the --maximum flag can only be used
> -               with the --config flag */
> -            if (live || !config) {
> -
> -                /* Warn the user about the invalid flag combination */
> -                vshError(ctl, _("--maximum must be used with --config only"));
> -                goto cleanup;
> -            }
> -        }
> -
> -        /* Apply the virtual cpu changes */
>           if (virDomainSetVcpusFlags(dom, count, flags) < 0)
>               goto cleanup;
>       }
>

-- 
Regards,
Yanbing Du




More information about the libvir-list mailing list