render / rpms / libvirt

Forked from rpms/libvirt 10 months ago
Clone
6ae9ed
From 6dda778b55b7508e626635fa67d8f727167a8bed Mon Sep 17 00:00:00 2001
6ae9ed
Message-Id: <6dda778b55b7508e626635fa67d8f727167a8bed@dist-git>
6ae9ed
From: Peter Krempa <pkrempa@redhat.com>
6ae9ed
Date: Tue, 2 Aug 2016 13:42:00 +0200
6ae9ed
Subject: [PATCH] qemu: command: Refactor code extracted to
6ae9ed
 qemuBuildDriveSourceStr
6ae9ed
6ae9ed
Avoid a large block by tweaking the condition skipping empty drives and
6ae9ed
split up the switch containing two branches having different purpose.
6ae9ed
6ae9ed
(cherry picked from commit 1575f3e8d32b6049ec399cfb54ab36f4d0a0cb00)
6ae9ed
https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host]
6ae9ed
---
6ae9ed
 src/qemu/qemu_command.c | 119 +++++++++++++++++++++++-------------------------
6ae9ed
 1 file changed, 57 insertions(+), 62 deletions(-)
6ae9ed
6ae9ed
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
6ae9ed
index bb40832..a3e838c 100644
6ae9ed
--- a/src/qemu/qemu_command.c
6ae9ed
+++ b/src/qemu/qemu_command.c
6ae9ed
@@ -1107,70 +1107,65 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk,
6ae9ed
     if (qemuGetDriveSourceString(disk->src, secinfo, &source) < 0)
6ae9ed
         goto cleanup;
6ae9ed
 
6ae9ed
-    if (source &&
6ae9ed
-        !((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY ||
6ae9ed
-           disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) &&
6ae9ed
-          disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) {
6ae9ed
-
6ae9ed
-        virBufferAddLit(buf, "file=");
6ae9ed
-
6ae9ed
-        switch (actualType) {
6ae9ed
-        case VIR_STORAGE_TYPE_DIR:
6ae9ed
-            /* QEMU only supports magic FAT format for now */
6ae9ed
-            if (disk->src->format > 0 &&
6ae9ed
-                disk->src->format != VIR_STORAGE_FILE_FAT) {
6ae9ed
-                virReportError(VIR_ERR_INTERNAL_ERROR,
6ae9ed
-                               _("unsupported disk driver type for '%s'"),
6ae9ed
-                               virStorageFileFormatTypeToString(disk->src->format));
6ae9ed
-                goto cleanup;
6ae9ed
-            }
6ae9ed
-
6ae9ed
-            if (!disk->src->readonly) {
6ae9ed
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
6ae9ed
-                               _("cannot create virtual FAT disks in read-write mode"));
6ae9ed
-                goto cleanup;
6ae9ed
-            }
6ae9ed
-
6ae9ed
-            virBufferAddLit(buf, "fat:");
6ae9ed
-
6ae9ed
-            if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY)
6ae9ed
-                virBufferAddLit(buf, "floppy:");
6ae9ed
-
6ae9ed
-            break;
6ae9ed
-
6ae9ed
-        case VIR_STORAGE_TYPE_BLOCK:
6ae9ed
-            if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) {
6ae9ed
-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
6ae9ed
-                               disk->src->type == VIR_STORAGE_TYPE_VOLUME ?
6ae9ed
-                               _("tray status 'open' is invalid for block type volume") :
6ae9ed
-                               _("tray status 'open' is invalid for block type disk"));
6ae9ed
-                goto cleanup;
6ae9ed
-            }
6ae9ed
-
6ae9ed
-            break;
6ae9ed
-
6ae9ed
-        default:
6ae9ed
-            break;
6ae9ed
-        }
6ae9ed
-
6ae9ed
-        virQEMUBuildBufferEscapeComma(buf, source);
6ae9ed
-        virBufferAddLit(buf, ",");
6ae9ed
-
6ae9ed
-        if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) {
6ae9ed
-            virBufferAsprintf(buf, "password-secret=%s,",
6ae9ed
-                              secinfo->s.aes.alias);
6ae9ed
-        }
6ae9ed
-
6ae9ed
-        if (encinfo)
6ae9ed
-            virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo,
6ae9ed
-                                 encinfo->s.aes.alias);
6ae9ed
-
6ae9ed
-        if (disk->src->format > 0 &&
6ae9ed
-            disk->src->type != VIR_STORAGE_TYPE_DIR)
6ae9ed
-            virBufferAsprintf(buf, "format=%s,",
6ae9ed
-                              virStorageFileFormatTypeToString(disk->src->format));
6ae9ed
+    /* nothing to format if the drive is empty */
6ae9ed
+    if (!source ||
6ae9ed
+        ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY ||
6ae9ed
+          disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) &&
6ae9ed
+         disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) {
6ae9ed
+        ret = 0;
6ae9ed
+        goto cleanup;
6ae9ed
     }
6ae9ed
 
6ae9ed
+    if (actualType == VIR_STORAGE_TYPE_BLOCK &&
6ae9ed
+        disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) {
6ae9ed
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
6ae9ed
+                       disk->src->type == VIR_STORAGE_TYPE_VOLUME ?
6ae9ed
+                       _("tray status 'open' is invalid for block type volume") :
6ae9ed
+                       _("tray status 'open' is invalid for block type disk"));
6ae9ed
+        goto cleanup;
6ae9ed
+    }
6ae9ed
+
6ae9ed
+    virBufferAddLit(buf, "file=");
6ae9ed
+
6ae9ed
+    /* for now the DIR based storage is handled by the magic FAT format */
6ae9ed
+    if (actualType == VIR_STORAGE_TYPE_DIR) {
6ae9ed
+        if (disk->src->format > 0 &&
6ae9ed
+            disk->src->format != VIR_STORAGE_FILE_FAT) {
6ae9ed
+            virReportError(VIR_ERR_INTERNAL_ERROR,
6ae9ed
+                           _("unsupported disk driver type for '%s'"),
6ae9ed
+                           virStorageFileFormatTypeToString(disk->src->format));
6ae9ed
+            goto cleanup;
6ae9ed
+        }
6ae9ed
+
6ae9ed
+        if (!disk->src->readonly) {
6ae9ed
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
6ae9ed
+                           _("cannot create virtual FAT disks in read-write mode"));
6ae9ed
+            goto cleanup;
6ae9ed
+        }
6ae9ed
+
6ae9ed
+        virBufferAddLit(buf, "fat:");
6ae9ed
+
6ae9ed
+        if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY)
6ae9ed
+            virBufferAddLit(buf, "floppy:");
6ae9ed
+    }
6ae9ed
+
6ae9ed
+    virQEMUBuildBufferEscapeComma(buf, source);
6ae9ed
+    virBufferAddLit(buf, ",");
6ae9ed
+
6ae9ed
+    if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) {
6ae9ed
+        virBufferAsprintf(buf, "password-secret=%s,",
6ae9ed
+                          secinfo->s.aes.alias);
6ae9ed
+    }
6ae9ed
+
6ae9ed
+    if (encinfo)
6ae9ed
+        virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo,
6ae9ed
+                             encinfo->s.aes.alias);
6ae9ed
+
6ae9ed
+    if (disk->src->format > 0 &&
6ae9ed
+        disk->src->type != VIR_STORAGE_TYPE_DIR)
6ae9ed
+        virBufferAsprintf(buf, "format=%s,",
6ae9ed
+                          virStorageFileFormatTypeToString(disk->src->format));
6ae9ed
+
6ae9ed
     ret = 0;
6ae9ed
 
6ae9ed
  cleanup:
6ae9ed
-- 
6ae9ed
2.9.2
6ae9ed