[libvirt] [PATCH 3/5] conf: Error out if iothread id is missing in iothreadpin

Peter Krempa pkrempa at redhat.com
Tue Apr 7 18:50:02 UTC 2015


Defining a domain with the following config:

<domain ...>
  ...
  <iothreads>1</iothreads>
  <cputune>
    <iothreadpin cpuset='1'/>

will result in the following config formatted back:
<domain type='kvm'>
  ...
  <iothreads>1</iothreads>
  <cputune>
    <iothreadpin iothread='0' cpuset='1'/>

After restart the VM would vanish. Since our schema requires the
@iothread field to be present in <iothreadpin> make it required by the
code too.
---
 src/conf/domain_conf.c | 44 ++++++++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 10ec17a..2ebd714 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -13233,31 +13233,35 @@ virDomainIothreadPinDefParseXML(xmlNodePtr node,

     ctxt->node = node;

-    if ((tmp = virXPathString("string(./@iothread)", ctxt))) {
-        if (virStrToLong_uip(tmp, NULL, 10, &iothreadid) < 0) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           _("invalid setting for iothread '%s'"), tmp);
-            goto error;
-        }
-        VIR_FREE(tmp);
+    if (!(tmp = virXPathString("string(./@iothread)", ctxt))) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("missing iothread id in iothreadpin"));
+        goto error;
+    }

-        if (iothreadid == 0) {
-            virReportError(VIR_ERR_XML_ERROR, "%s",
-                           _("zero is an invalid iothread id value"));
-            goto error;
-        }
+    if (virStrToLong_uip(tmp, NULL, 10, &iothreadid) < 0) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("invalid setting for iothread '%s'"), tmp);
+        goto error;
+    }
+    VIR_FREE(tmp);

-        /* IOThreads are numbered "iothread1...iothread<n>", where
-         * "n" is the iothreads value */
-        if (iothreadid > iothreads) {
-            virReportError(VIR_ERR_XML_ERROR, "%s",
-                           _("iothread id must not exceed iothreads"));
-            goto error;
-        }
+    if (iothreadid == 0) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("zero is an invalid iothread id value"));
+        goto error;
+    }

-        def->id = iothreadid;
+    /* IOThreads are numbered "iothread1...iothread<n>", where
+     * "n" is the iothreads value */
+    if (iothreadid > iothreads) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("iothread id must not exceed iothreads"));
+        goto error;
     }

+    def->id = iothreadid;
+
     if (!(tmp = virXMLPropString(node, "cpuset"))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("missing cpuset for iothreadpin"));
-- 
2.2.2




More information about the libvir-list mailing list