]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: domain: Prepare qemuDomainDiskGetBackendAlias for -blockdev
authorPeter Krempa <pkrempa@redhat.com>
Wed, 18 Jul 2018 11:58:59 +0000 (13:58 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 21 Aug 2018 13:46:06 +0000 (15:46 +0200)
Pass in the node name as the backend alias when -blockdev is used. As
copy-on-read is expressed by a separate -blockdev backing chain member
we need to decide which node name to use here.

For empty cdroms when using -blockdev there is no backend at all so NULL
is returned.

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

index 75b5e916b4ed33b73613277eee6f1f055e3b20b7..50b262403e55f37592b503dc4379f670a0cb2de4 100644 (file)
@@ -8691,12 +8691,29 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
  */
 int
 qemuDomainDiskGetBackendAlias(virDomainDiskDefPtr disk,
-                              virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED,
+                              virQEMUCapsPtr qemuCaps,
                               char **backendAlias)
 {
+    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+    const char *nodename = NULL;
     *backendAlias = NULL;
 
-    if (!(*backendAlias = qemuAliasDiskDriveFromDisk(disk)))
+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
+        if (!(*backendAlias = qemuAliasDiskDriveFromDisk(disk)))
+            return -1;
+
+        return 0;
+    }
+
+    if (virStorageSourceIsEmpty(disk->src))
+        return 0;
+
+    if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON)
+        nodename = priv->nodeCopyOnRead;
+    else
+        nodename = disk->src->nodeformat;
+
+    if (VIR_STRDUP(*backendAlias, nodename) < 0)
         return -1;
 
     return 0;