From 511bdb0bb2f4779b48c4b72461c29bc8504fcebe Mon Sep 17 00:00:00 2001 From: Kristina Hanicova Date: Wed, 10 Mar 2021 18:01:17 +0100 Subject: [PATCH] qemu: don't raise error upon interface update without for in coalesce With this, incomplete XML without for in coalesce won't raise error as before. It will leave the coalesce parameter empty, thanks to passing it as a parameter and return an integer to indicate error state - previously it returned pointer (or NULL for both error and incomplete XML). I also added a test case to test this functionality in the qemuxml2xmltest. The code went through some refactoring: * change of a condition * addition of a parameter * change of order, that allowed removal of VIR_FREE * removal of redundant labels and variables Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1535930 Signed-off-by: Kristina Hanicova Reviewed-by: Martin Kletzander --- src/conf/domain_conf.c | 25 +++++++++-------------- tests/qemuxml2argvdata/net-coalesce.xml | 9 ++++++++ tests/qemuxml2xmloutdata/net-coalesce.xml | 8 +++++++- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 9bf12ff599..b7f9c01e88 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7598,11 +7598,11 @@ virDomainNetIPInfoParseXML(const char *source, } -static virNetDevCoalescePtr +static int virDomainNetDefCoalesceParseXML(xmlNodePtr node, - xmlXPathContextPtr ctxt) + xmlXPathContextPtr ctxt, + virNetDevCoalescePtr *coalesce) { - virNetDevCoalescePtr ret = NULL; VIR_XPATH_NODE_AUTORESTORE(ctxt) unsigned long long tmp = 0; g_autofree char *str = NULL; @@ -7611,15 +7611,13 @@ virDomainNetDefCoalesceParseXML(xmlNodePtr node, str = virXPathString("string(./rx/frames/@max)", ctxt); if (!str) - return NULL; - - ret = g_new0(virNetDevCoalesce, 1); + return 0; if (virStrToLong_ullp(str, NULL, 10, &tmp) < 0) { virReportError(VIR_ERR_XML_DETAIL, _("cannot parse value '%s' for coalesce parameter"), str); - goto error; + return -1; } if (tmp > UINT32_MAX) { @@ -7627,15 +7625,13 @@ virDomainNetDefCoalesceParseXML(xmlNodePtr node, _("value '%llu' is too big for coalesce " "parameter, maximum is '%lu'"), tmp, (unsigned long) UINT32_MAX); - goto error; + return -1; } - ret->rx_max_coalesced_frames = tmp; - return ret; + *coalesce = g_new0(virNetDevCoalesce, 1); + (*coalesce)->rx_max_coalesced_frames = tmp; - error: - VIR_FREE(ret); - return NULL; + return 0; } static void @@ -11599,8 +11595,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, node = virXPathNode("./coalesce", ctxt); if (node) { - def->coalesce = virDomainNetDefCoalesceParseXML(node, ctxt); - if (!def->coalesce) + if (virDomainNetDefCoalesceParseXML(node, ctxt, &def->coalesce) < 0) goto error; } diff --git a/tests/qemuxml2argvdata/net-coalesce.xml b/tests/qemuxml2argvdata/net-coalesce.xml index bdcf786429..6fa3641e7d 100644 --- a/tests/qemuxml2argvdata/net-coalesce.xml +++ b/tests/qemuxml2argvdata/net-coalesce.xml @@ -55,6 +55,15 @@ + + + + + + + + + diff --git a/tests/qemuxml2xmloutdata/net-coalesce.xml b/tests/qemuxml2xmloutdata/net-coalesce.xml index 146fcaae25..55d08cad1d 100644 --- a/tests/qemuxml2xmloutdata/net-coalesce.xml +++ b/tests/qemuxml2xmloutdata/net-coalesce.xml @@ -56,6 +56,12 @@
+ + + + +
+ @@ -68,7 +74,7 @@