]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Add field to store QOM path of a disk in private data
authorPeter Krempa <pkrempa@redhat.com>
Fri, 15 Jun 2018 07:12:01 +0000 (09:12 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 21 Aug 2018 13:46:06 +0000 (15:46 +0200)
When using -blockdev you need to use the qom path to refer to the disk
fronends. Add means for storing the path and getting it after restart.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
tests/qemustatusxml2xmldata/modern-in.xml

index 6e51f590cd9a291984e16486c1066dc94793c3e9..4ea12c3fd7eb3d995e91417d21e3a3d299545104 100644 (file)
@@ -1065,6 +1065,7 @@ qemuDomainDiskPrivateDispose(void *obj)
 
     VIR_FREE(priv->blockJobError);
     virStorageSourceFree(priv->migrSource);
+    VIR_FREE(priv->qomName);
 }
 
 static virClassPtr qemuDomainStorageSourcePrivateClass;
@@ -2123,6 +2124,30 @@ qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src,
 }
 
 
+static int
+qemuDomainDiskPrivateParse(xmlXPathContextPtr ctxt,
+                           virDomainDiskDefPtr disk)
+{
+    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+
+    priv->qomName = virXPathString("string(./qom/@name)", ctxt);
+
+    return 0;
+}
+
+
+static int
+qemuDomainDiskPrivateFormat(virDomainDiskDefPtr disk,
+                            virBufferPtr buf)
+{
+    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+
+    virBufferEscapeString(buf, "<qom name='%s'/>\n", priv->qomName);
+
+    return 0;
+}
+
+
 static void
 qemuDomainObjPrivateXMLFormatVcpus(virBufferPtr buf,
                                    virDomainDefPtr def)
@@ -2973,6 +2998,8 @@ virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks = {
     .alloc = qemuDomainObjPrivateAlloc,
     .free = qemuDomainObjPrivateFree,
     .diskNew = qemuDomainDiskPrivateNew,
+    .diskParse = qemuDomainDiskPrivateParse,
+    .diskFormat = qemuDomainDiskPrivateFormat,
     .vcpuNew = qemuDomainVcpuPrivateNew,
     .chrSourceNew = qemuDomainChrSourcePrivateNew,
     .vsockNew = qemuDomainVsockPrivateNew,
index 5dcbdfbbe158a0ec741f4e42916a3e6ea1f09181..2afc6b454a76444091b4182323a77e9fff374d40 100644 (file)
@@ -396,6 +396,8 @@ struct _qemuDomainDiskPrivate {
     /* information about the device */
     bool tray; /* device has tray */
     bool removable; /* device media can be removed/changed */
+
+    char *qomName; /* QOM path of the disk (also refers to the block backend) */
 };
 
 # define QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src) \
index c9f5c4e76a072e7cbf0f2c7679377923cca2c665..24e9fd9f6dacb1c9e75a48ac8ec647ea66314a33 100644 (file)
         <target dev='vdb' bus='virtio'/>
         <alias name='virtio-disk1'/>
         <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
+        <privateData>
+          <qom name='virtio-disk1/virtio-backend'/>
+        </privateData>
       </disk>
       <disk type='file' device='cdrom'>
         <driver name='qemu' type='raw'/>