Save and restore node names if we know them in the status XML so that we
don't need to recalculate them or don't lose them in some cases.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_domain.c | 12 ++++++++++++
tests/qemustatusxml2xmldata/modern-in.xml | 4 ++++
2 files changed, 16 insertions(+)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 326c939c85..2c5de9508b 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1937,6 +1937,9 @@ static int
qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
virStorageSourcePtr src)
{
+ src->nodestorage =
virXPathString("string(./nodenames/nodename[@type='storage']/@name)",
ctxt);
+ src->nodeformat =
virXPathString("string(./nodenames/nodename[@type='format']/@name)",
ctxt);
+
if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0)
return -1;
@@ -1948,6 +1951,15 @@ static int
qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src,
virBufferPtr buf)
{
+ if (src->nodestorage || src->nodeformat) {
+ virBufferAddLit(buf, "<nodenames>\n");
+ virBufferAdjustIndent(buf, 2);
+ virBufferEscapeString(buf, "<nodename type='storage'
name='%s'/>\n", src->nodestorage);
+ virBufferEscapeString(buf, "<nodename type='format'
name='%s'/>\n", src->nodeformat);
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "</nodenames>\n");
+ }
+
if (virStorageSourcePrivateDataFormatRelPath(src, buf) < 0)
return -1;
diff --git a/tests/qemustatusxml2xmldata/modern-in.xml
b/tests/qemustatusxml2xmldata/modern-in.xml
index c1e57618b6..d57e1f605f 100644
--- a/tests/qemustatusxml2xmldata/modern-in.xml
+++ b/tests/qemustatusxml2xmldata/modern-in.xml
@@ -309,6 +309,10 @@
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/base.qcow2'>
<privateData>
+ <nodenames>
+ <nodename type='storage' name='test-storage'/>
+ <nodename type='format' name='test-format'/>
+ </nodenames>
<relPath>base.qcow2</relPath>
</privateData>
</source>
--
2.16.2