From 3dae162db7f53cce57a21ad15799ace27768a8a0 Mon Sep 17 00:00:00 2001 From: Luyao Huang Date: Fri, 20 Mar 2015 15:39:03 +0100 Subject: [PATCH] tools: fix the wrong check when use virsh setvcpus --maximum The --maximum option wasn't properly parsed and the equivalent flag wasn't set. Fix this bug and also rewrite the way we check this option by using new macro. The new approach is that --maximum requires --config, no other combination is allowed, because they don't make sense. The new error will be: # virsh setvcpus test --maximum 10 error: Option --config is required by option --maximum Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1204033 Signed-off-by: Luyao Huang Signed-off-by: Pavel Hrdina --- tools/virsh-domain.c | 30 ++++++------------------------ tools/virsh.pod | 3 ++- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 4b627e1cd2..861766f540 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -6657,15 +6657,16 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd) VSH_EXCLUSIVE_OPTIONS_VAR(current, config); VSH_EXCLUSIVE_OPTIONS_VAR(guest, config); + VSH_REQUIRE_OPTION_VAR(maximum, config); + if (config) flags |= VIR_DOMAIN_AFFECT_CONFIG; if (live) 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; @@ -6675,30 +6676,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; } diff --git a/tools/virsh.pod b/tools/virsh.pod index f8496f32f5..1bb655bdd7 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -2181,7 +2181,8 @@ and may require guest agent to be configured in the guest. The I<--maximum> flag controls the maximum number of virtual cpus that can be hot-plugged the next time the domain is booted. As such, it must only be -used with the I<--config> flag, and not with the I<--live> flag. +used with the I<--config> flag, and not with the I<--live> or the I<--current> +flag. =item B I [I<--mode MODE-LIST>]