[libvirt] [PATCH 02/14] conf: Refactor/rename virDomainDiskDefSourceParse

Peter Krempa posted 14 patches 7 years, 1 month ago
[libvirt] [PATCH 02/14] conf: Refactor/rename virDomainDiskDefSourceParse
Posted by Peter Krempa 7 years, 1 month ago
Make the function more usable by returning the full disk definition and
fix the only caller for the new semantics. The new name for the function
is virDomainDiskDefParse.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/conf/domain_conf.c   | 33 ++++++++++++---------------------
 src/conf/domain_conf.h   |  8 ++++----
 src/libvirt_private.syms |  2 +-
 src/qemu/qemu_driver.c   |  9 +++++++--
 4 files changed, 24 insertions(+), 28 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ae7c0d9b71..e2bad48cc8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -15864,44 +15864,35 @@ virDomainDeviceDefParse(const char *xmlStr,
 }


-virStorageSourcePtr
-virDomainDiskDefSourceParse(const char *xmlStr,
-                            const virDomainDef *def,
-                            virDomainXMLOptionPtr xmlopt,
-                            unsigned int flags)
+virDomainDiskDefPtr
+virDomainDiskDefParse(const char *xmlStr,
+                      const virDomainDef *def,
+                      virDomainXMLOptionPtr xmlopt,
+                      unsigned int flags)
 {
     xmlDocPtr xml;
-    xmlNodePtr node;
     xmlXPathContextPtr ctxt = NULL;
     virDomainDiskDefPtr disk = NULL;
-    virStorageSourcePtr ret = NULL;

     if (!(xml = virXMLParseStringCtxt(xmlStr, _("(disk_definition)"), &ctxt)))
         goto cleanup;
-    node = ctxt->node;

-    if (!virXMLNodeNameEqual(node, "disk")) {
+    if (!virXMLNodeNameEqual(ctxt->node, "disk")) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("expecting root element of 'disk', not '%s'"),
-                       node->name);
+                       ctxt->node->name);
         goto cleanup;
     }

-    flags |= VIR_DOMAIN_DEF_PARSE_DISK_SOURCE;
-    if (!(disk = virDomainDiskDefParseXML(xmlopt, node, ctxt,
-                                          NULL, def->seclabels,
-                                          def->nseclabels,
-                                          flags)))
-        goto cleanup;
-
-    ret = disk->src;
-    disk->src = NULL;
+    disk = virDomainDiskDefParseXML(xmlopt, ctxt->node, ctxt,
+                                    NULL, def->seclabels,
+                                    def->nseclabels,
+                                    flags);

  cleanup:
-    virDomainDiskDefFree(disk);
     xmlFreeDoc(xml);
     xmlXPathFreeContext(ctxt);
-    return ret;
+    return disk;
 }


diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 61379e50fe..650901c1f4 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2935,10 +2935,10 @@ virDomainDeviceDefPtr virDomainDeviceDefParse(const char *xmlStr,
                                               virCapsPtr caps,
                                               virDomainXMLOptionPtr xmlopt,
                                               unsigned int flags);
-virStorageSourcePtr virDomainDiskDefSourceParse(const char *xmlStr,
-                                                const virDomainDef *def,
-                                                virDomainXMLOptionPtr xmlopt,
-                                                unsigned int flags);
+virDomainDiskDefPtr virDomainDiskDefParse(const char *xmlStr,
+                                          const virDomainDef *def,
+                                          virDomainXMLOptionPtr xmlopt,
+                                          unsigned int flags);
 virDomainDefPtr virDomainDefParseString(const char *xmlStr,
                                         virCapsPtr caps,
                                         virDomainXMLOptionPtr xmlopt,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 03fe3b315f..96a0a6de52 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -315,7 +315,7 @@ virDomainDiskDefCheckDuplicateInfo;
 virDomainDiskDefForeachPath;
 virDomainDiskDefFree;
 virDomainDiskDefNew;
-virDomainDiskDefSourceParse;
+virDomainDiskDefParse;
 virDomainDiskDetectZeroesTypeFromString;
 virDomainDiskDetectZeroesTypeToString;
 virDomainDiskDeviceTypeToString;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 7bcc4936de..4e9add0ef7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17456,6 +17456,7 @@ qemuDomainBlockCopy(virDomainPtr dom, const char *disk, const char *destxml,
     unsigned long long bandwidth = 0;
     unsigned int granularity = 0;
     unsigned long long buf_size = 0;
+    virDomainDiskDefPtr diskdef = NULL;
     virStorageSourcePtr dest = NULL;
     size_t i;

@@ -17508,14 +17509,18 @@ qemuDomainBlockCopy(virDomainPtr dom, const char *disk, const char *destxml,
         }
     }

-    if (!(dest = virDomainDiskDefSourceParse(destxml, vm->def, driver->xmlopt,
-                                             VIR_DOMAIN_DEF_PARSE_INACTIVE)))
+    if (!(diskdef = virDomainDiskDefParse(destxml, vm->def, driver->xmlopt,
+                                          VIR_DOMAIN_DEF_PARSE_INACTIVE |
+                                          VIR_DOMAIN_DEF_PARSE_DISK_SOURCE)))
         goto cleanup;

+    VIR_STEAL_PTR(dest, diskdef->src);
+
     ret = qemuDomainBlockCopyCommon(vm, dom->conn, disk, dest, bandwidth,
                                     granularity, buf_size, flags, false);

  cleanup:
+    virDomainDiskDefFree(diskdef);
     virDomainObjEndAPI(&vm);
     return ret;
 }
-- 
2.16.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 02/14] conf: Refactor/rename virDomainDiskDefSourceParse
Posted by Ján Tomko 7 years, 1 month ago
On Thu, Mar 29, 2018 at 01:50:59PM +0200, Peter Krempa wrote:
>Make the function more usable by returning the full disk definition and
>fix the only caller for the new semantics. The new name for the function
>is virDomainDiskDefParse.
>
>Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>---
> src/conf/domain_conf.c   | 33 ++++++++++++---------------------
> src/conf/domain_conf.h   |  8 ++++----
> src/libvirt_private.syms |  2 +-
> src/qemu/qemu_driver.c   |  9 +++++++--
> 4 files changed, 24 insertions(+), 28 deletions(-)
>

ACK

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list