[libvirt] [PATCH 27/55] qemu: domain: Add field for storing node name for copy-on-read

Peter Krempa pkrempa at redhat.com
Tue Aug 7 14:22:18 UTC 2018


The copy-on-read feature is expressed by adding a new node layer in
qemu when using -blockdev. Since we will keep these per-disk (as opposed
to per storage source) we need to store the appropriate node names in
the disk definition.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_domain.c                    | 11 +++++++++++
 src/qemu/qemu_domain.h                    |  1 +
 tests/qemustatusxml2xmldata/modern-in.xml |  3 +++
 3 files changed, 15 insertions(+)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 9c1a2c6053..c98be208f1 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1066,6 +1066,7 @@ qemuDomainDiskPrivateDispose(void *obj)
     VIR_FREE(priv->blockJobError);
     virStorageSourceFree(priv->migrSource);
     VIR_FREE(priv->backendQomName);
+    VIR_FREE(priv->nodeCopyOnRead);
 }

 static virClassPtr qemuDomainStorageSourcePrivateClass;
@@ -2131,6 +2132,7 @@ qemuDomainDiskPrivateParse(xmlXPathContextPtr ctxt,
     qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK_PRIVATE(disk);

     priv->backendQomName = virXPathString("string(./qom/@backend)", ctxt);
+    priv->nodeCopyOnRead = virXPathString("string(./nodenames/nodename[@type='copyOnRead']/@name)", ctxt);

     return 0;
 }
@@ -2144,6 +2146,15 @@ qemuDomainDiskPrivateFormat(virDomainDiskDefPtr disk,

     virBufferEscapeString(buf, "<qom backend='%s'/>\n", priv->backendQomName);

+    if (priv->nodeCopyOnRead) {
+        virBufferAddLit(buf, "<nodenames>\n");
+        virBufferAdjustIndent(buf, 2);
+        virBufferEscapeString(buf, "<nodename type='copyOnRead' name='%s'/>\n",
+                              priv->nodeCopyOnRead);
+        virBufferAdjustIndent(buf, -2);
+        virBufferAddLit(buf, "</nodenames>\n");
+    }
+
     return 0;
 }

diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 7d0b304727..d3147cb69a 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -398,6 +398,7 @@ struct _qemuDomainDiskPrivate {
     bool removable; /* device media can be removed/changed */

     char *backendQomName; /* QOM path to the eligible block backend */
+    char *nodeCopyOnRead; /* nodename of the disk-wide copy-on-read blockdev layer */
 };

 # define QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src) \
diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxml2xmldata/modern-in.xml
index 21d4faca66..612090786a 100644
--- a/tests/qemustatusxml2xmldata/modern-in.xml
+++ b/tests/qemustatusxml2xmldata/modern-in.xml
@@ -333,6 +333,9 @@
         <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
         <privateData>
           <qom backend='virtio-disk1/virtio-backend'/>
+          <nodenames>
+            <nodename type='copyOnRead' name='cor-node'/>
+          </nodenames>
         </privateData>
       </disk>
       <disk type='file' device='cdrom'>
-- 
2.16.2




More information about the libvir-list mailing list