[libvirt] [PATCH 4/9] qemu: command: use qemuDomainDiskGetBackendAlias in commandline building

Peter Krempa pkrempa at redhat.com
Wed Jul 18 15:22:05 UTC 2018


Use the proper backend for the block device both when using -drive and
when using -blockdev for disk drives and floppy disks.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_command.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 44ae8dcef7..6e550cf951 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1818,7 +1818,7 @@ qemuBuildDiskDeviceStr(const virDomainDef *def,
     virBuffer opt = VIR_BUFFER_INITIALIZER;
     const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
     const char *contAlias;
-    char *drivealias;
+    char *backendAlias = NULL;
     int controllerModel;

     if (qemuCheckDiskConfig(disk, qemuCaps) < 0)
@@ -2077,10 +2077,14 @@ qemuBuildDiskDeviceStr(const virDomainDef *def,
         virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISK_SHARE_RW))
         virBufferAddLit(&opt, ",share-rw=on");

-    if (!(drivealias = qemuAliasDiskDriveFromDisk(disk)))
+    if (qemuDomainDiskGetBackendAlias(disk, qemuCaps, &backendAlias) < 0)
         goto error;
-    virBufferAsprintf(&opt, ",drive=%s,id=%s", drivealias, disk->info.alias);
-    VIR_FREE(drivealias);
+
+    if (backendAlias)
+        virBufferAsprintf(&opt, ",drive=%s", backendAlias);
+    VIR_FREE(backendAlias);
+
+    virBufferAsprintf(&opt, ",id=%s", disk->info.alias);
     if (bootindex && virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX))
         virBufferAsprintf(&opt, ",bootindex=%u", bootindex);
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKIO)) {
@@ -2139,6 +2143,7 @@ qemuBuildDiskDeviceStr(const virDomainDef *def,
     return virBufferContentAndReset(&opt);

  error:
+    VIR_FREE(backendAlias);
     virBufferFreeAndReset(&opt);
     return NULL;
 }
@@ -2148,8 +2153,8 @@ static int
 qemuBuildFloppyCommandLineOptions(virCommandPtr cmd,
                                   const virDomainDef *def,
                                   virDomainDiskDefPtr disk,
+                                  virQEMUCapsPtr qemuCaps,
                                   unsigned int bootindex)
-
 {
     virBuffer fdc_opts = VIR_BUFFER_INITIALIZER;
     char driveLetter;
@@ -2163,10 +2168,11 @@ qemuBuildFloppyCommandLineOptions(virCommandPtr cmd,
     else
         driveLetter = 'A';

-    if (!(backendAlias = qemuAliasDiskDriveFromDisk(disk)))
-        return -1;
+    if (qemuDomainDiskGetBackendAlias(disk, qemuCaps, &backendAlias) < 0)
+        goto cleanup;

-    if (virAsprintf(&backendStr, "drive%c=%s", driveLetter, backendAlias) < 0)
+    if (backendAlias &&
+        virAsprintf(&backendStr, "drive%c=%s", driveLetter, backendAlias) < 0)
         goto cleanup;

     if (bootindex &&
@@ -2281,7 +2287,7 @@ qemuBuildDiskCommandLine(virCommandPtr cmd,

     if (!qemuDiskBusNeedsDriveArg(disk->bus)) {
         if (disk->bus == VIR_DOMAIN_DISK_BUS_FDC) {
-            if (qemuBuildFloppyCommandLineOptions(cmd, def, disk,
+            if (qemuBuildFloppyCommandLineOptions(cmd, def, disk, qemuCaps,
                                                   bootindex) < 0)
                 return -1;
         } else {
-- 
2.16.2




More information about the libvir-list mailing list