diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0370eed120..9d8eabb42a 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 cad330715b..49b0803c53 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3467,7 +3467,8 @@ int virDomainStorageSourceFormat(virBufferPtr attrBuf, 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 341ea7d37c..71fbc8f2a2 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2760,7 +2760,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)) &&