]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: avoid missing zero value judgement in cmdBlkiotune
authorAlex Jia <ajia@redhat.com>
Thu, 28 Jul 2011 11:13:41 +0000 (19:13 +0800)
committerEric Blake <eblake@redhat.com>
Thu, 28 Jul 2011 14:30:50 +0000 (08:30 -0600)
* tools/virsh.c: fix missing zero value judgement in cmdBlkiotune and correct
  vshError information.

  when weight is equal to 0, the cmdBlkiotune will not raise any error information
  when judge weight value first time, and execute else branch to judge weight
  value again, strncpy(temp->field, VIR_DOMAIN_BLKIO_WEIGHT, sizeof(temp->field))
  will be not executed for ever. However, if and only if param->field is equal
  to VIR_DOMAIN_BLKIO_WEIGHT, underlying qemuDomainSetBlkioParameters function
  will check whether weight value is in range [100, 1000].

* how to reproduce?

  % virsh blkiotune ${guestname} --weight 0

Signed-off-by: Alex Jia <ajia@redhat.com>
tools/virsh.c

index 61f69f05bce7150ed882d3f52b5ef29ae37ed92c..9e0744d80d96a32e2304097091446d4730b9d1cc 100644 (file)
@@ -4004,6 +4004,7 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd)
     virDomainPtr dom;
     int weight = 0;
     int nparams = 0;
+    int rv = 0;
     unsigned int i = 0;
     virTypedParameterPtr params = NULL, temp = NULL;
     bool ret = false;
@@ -4031,15 +4032,15 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd)
     if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return false;
 
-    if (vshCommandOptInt(cmd, "weight", &weight) < 0) {
+    if ((rv = vshCommandOptInt(cmd, "weight", &weight)) < 0) {
         vshError(ctl, "%s",
                  _("Unable to parse integer parameter"));
         goto cleanup;
     }
 
-    if (weight) {
+    if (rv > 0) {
         nparams++;
-        if (weight < 0) {
+        if (weight <= 0) {
             vshError(ctl, _("Invalid value of %d for I/O weight"), weight);
             goto cleanup;
         }