[libvirt] [PATCH 19/34] conf: Fold private data parsing into virDomainStorageSourceParse

Peter Krempa pkrempa at redhat.com
Mon Mar 18 15:55:08 UTC 2019


Storage source private data can be parsed along with other components of
private data rather than a separate function which is called from
multiple places.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/conf/domain_conf.c | 42 ++++++++++++------------------------------
 src/conf/domain_conf.h |  3 ++-
 src/qemu/qemu_domain.c |  2 +-
 3 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d74ac2f1fb..bf3ad45397 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9020,31 +9020,6 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
 }


-static int
-virDomainDiskSourcePrivateDataParse(xmlNodePtr node,
-                                    xmlXPathContextPtr ctxt,
-                                    virStorageSourcePtr src,
-                                    unsigned int flags,
-                                    virDomainXMLOptionPtr xmlopt)
-{
-    VIR_XPATH_NODE_AUTORESTORE(ctxt);
-
-    if (!(flags & VIR_DOMAIN_DEF_PARSE_STATUS) ||
-        !xmlopt || !xmlopt->privateData.storageParse)
-        return 0;
-
-    ctxt->node = node;
-
-    if (!(ctxt->node = virXPathNode("./privateData", ctxt)))
-        return 0;
-
-    if (xmlopt->privateData.storageParse(ctxt, src) < 0)
-        return -1;
-
-    return 0;
-}
-
-
 static int
 virDomainDiskSourcePRParse(xmlNodePtr node,
                            xmlXPathContextPtr ctxt,
@@ -9068,7 +9043,8 @@ int
 virDomainStorageSourceParse(xmlNodePtr node,
                             xmlXPathContextPtr ctxt,
                             virStorageSourcePtr src,
-                            unsigned int flags)
+                            unsigned int flags,
+                            virDomainXMLOptionPtr xmlopt)
 {
     VIR_XPATH_NODE_AUTORESTORE(ctxt);
     xmlNodePtr tmp;
@@ -9122,6 +9098,15 @@ virDomainStorageSourceParse(xmlNodePtr node,
     if (src->path && !*src->path)
         VIR_FREE(src->path);

+    if ((flags & VIR_DOMAIN_DEF_PARSE_STATUS) &&
+        xmlopt && xmlopt->privateData.storageParse &&
+        (tmp = virXPathNode("./privateData", ctxt))) {
+        ctxt->node = tmp;
+
+        if (xmlopt->privateData.storageParse(ctxt, src) < 0)
+            return -1;
+    }
+
     return 0;
 }

@@ -9133,10 +9118,7 @@ virDomainDiskSourceParse(xmlNodePtr node,
                          unsigned int flags,
                          virDomainXMLOptionPtr xmlopt)
 {
-    if (virDomainStorageSourceParse(node, ctxt, src, flags) < 0)
-        return -1;
-
-    if (virDomainDiskSourcePrivateDataParse(node, ctxt, src, flags, xmlopt) < 0)
+    if (virDomainStorageSourceParse(node, ctxt, src, flags, xmlopt) < 0)
         return -1;

     return 0;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 0bdd6c0f55..0b6d432871 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3472,7 +3472,8 @@ virDomainStorageSourceFormatFull(virBufferPtr buf,
 int virDomainStorageSourceParse(xmlNodePtr node,
                                 xmlXPathContextPtr ctxt,
                                 virStorageSourcePtr src,
-                                unsigned int flags)
+                                unsigned int flags,
+                                virDomainXMLOptionPtr xmlopt)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);

 int virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def,
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index ea70979f8b..0a0a464dd2 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2726,7 +2726,7 @@ qemuDomainObjPrivateXMLParseJobNBDSource(xmlNodePtr node,
     }

     if (virDomainStorageSourceParse(ctxt->node, ctxt, migrSource,
-                                    VIR_DOMAIN_DEF_PARSE_STATUS) < 0)
+                                    VIR_DOMAIN_DEF_PARSE_STATUS, NULL) < 0)
         goto cleanup;

     if ((ctxt->node = virXPathNode("./privateData", ctxt)) &&
-- 
2.20.1




More information about the libvir-list mailing list