[libvirt] [PATCH v2 1/3] conf: Don't format cputune element when not needed

Martin Kletzander mkletzan at redhat.com
Tue Jan 29 16:12:06 UTC 2013


Commit 60b176c3d0f0d5037acfa5e27c7753f657833a0b introduced a bug that
when editing an XML with cputune similar to this:

...
  <vcpu placement='static' current='1'>2</vcpu>
  <cputune>
    <vcpupin vcpu="1" cpuset="0"/>
  </cputune>
...

results in formatted XML that looks like this:

...
  <vcpu placement='static' current='1'>2</vcpu>
  <cputune>
  </cputune>
...

That is caused by a condition depending on def->cputune.vcpupin being
set rather than checking def->cputune.nvcpupin.  Notice that nvcpupin
can be 0 and vcpupin can still be allocated since it's a pointer to an
array, so no harm done there.

I also changed it on other places in the code where it depended on the
wrong variable.
---
v2:
 - I checked other places that used the false presumption, found one
   and fixed it as well
---
 src/conf/domain_conf.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 8dbfb96..ac4b2c2 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -13955,10 +13955,10 @@ virDomainIsAllVcpupinInherited(virDomainDefPtr def)
     int i;

     if (!def->cpumask) {
-        if (!def->cputune.vcpupin)
-            return true;
-        else
+        if (def->cputune.nvcpupin)
             return false;
+        else
+            return true;
     } else {
         for (i = 0; i < def->cputune.nvcpupin; i++) {
             if (!virBitmapEqual(def->cputune.vcpupin[i]->cpumask,
@@ -14143,7 +14143,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
     virBufferAsprintf(buf, ">%u</vcpu>\n", def->maxvcpus);

     if (def->cputune.shares ||
-        (def->cputune.vcpupin && !virDomainIsAllVcpupinInherited(def)) ||
+        (def->cputune.nvcpupin && !virDomainIsAllVcpupinInherited(def)) ||
         def->cputune.period || def->cputune.quota ||
         def->cputune.emulatorpin ||
         def->cputune.emulator_period || def->cputune.emulator_quota)
@@ -14209,7 +14209,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
         VIR_FREE(cpumask);
     }
     if (def->cputune.shares ||
-        (def->cputune.vcpupin && !virDomainIsAllVcpupinInherited(def)) ||
+        (def->cputune.nvcpupin && !virDomainIsAllVcpupinInherited(def)) ||
         def->cputune.period || def->cputune.quota ||
         def->cputune.emulatorpin ||
         def->cputune.emulator_period || def->cputune.emulator_quota)
--
1.8.1.2




More information about the libvir-list mailing list