render / rpms / libvirt

Forked from rpms/libvirt 7 months ago
Clone
9c6c51
From 47660a5a575b406cfe09ad0f7fae56a7ae429c6c Mon Sep 17 00:00:00 2001
9c6c51
Message-Id: <47660a5a575b406cfe09ad0f7fae56a7ae429c6c@dist-git>
9c6c51
From: Peter Krempa <pkrempa@redhat.com>
9c6c51
Date: Mon, 21 Jan 2019 18:43:13 +0100
9c6c51
Subject: [PATCH] qemu: command: Don't format image properties for empty -drive
9c6c51
MIME-Version: 1.0
9c6c51
Content-Type: text/plain; charset=UTF-8
9c6c51
Content-Transfer-Encoding: 8bit
9c6c51
9c6c51
If a -drive has no image, using image properties makes qemu whine that
9c6c51
they should not be used.
9c6c51
9c6c51
This patch stops formating cache/readonly/... for empty drives
9c6c51
for the pre-blockdev syntax. Unfortunately those parameters can't be
9c6c51
added later when inserting media, but on the other hand qemu will start
9c6c51
with an empty drive.
9c6c51
9c6c51
Since we already were able to start a VM with such config previously due
9c6c51
to qemu ignoring them I've opted just to skip formatting them.
9c6c51
Additionally with -blockdev support it will work as expected as the
9c6c51
image properties will be formatted when adding the image itself which is
9c6c51
not possible without it.
9c6c51
9c6c51
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1651457
9c6c51
9c6c51
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
9c6c51
Reviewed-by: Ján Tomko <jtomko@redhat.com>
9c6c51
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
9c6c51
(cherry picked from commit f80eae8c2ae0c62ecaa550ab6353cf871bb17d4e)
9c6c51
9c6c51
https://bugzilla.redhat.com/show_bug.cgi?id=1553255
9c6c51
9c6c51
 Conflicts:
9c6c51
	src/qemu/qemu_command.c
9c6c51
	tests/qemuxml2argvdata/disk-cdrom.args
9c6c51
            - context: bootindex not yet assumed, 'boot=on' code still
9c6c51
            present
9c6c51
	tests/qemuxml2argvdata/disk-cdrom.x86_64-2.12.0.args
9c6c51
	tests/qemuxml2argvdata/disk-cdrom.x86_64-latest.args
9c6c51
            - missing refactor to capability file based tests
9c6c51
9c6c51
Reviewed-by: Ján Tomko <jtomko@redhat.com>
9c6c51
---
9c6c51
 src/qemu/qemu_command.c                      | 55 ++++++++++----------
9c6c51
 tests/qemuxml2argvdata/disk-cdrom-empty.args |  2 +-
9c6c51
 tests/qemuxml2argvdata/disk-cdrom.args       |  2 +-
9c6c51
 3 files changed, 30 insertions(+), 29 deletions(-)
9c6c51
9c6c51
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
9c6c51
index c706a4b095..e153c011f6 100644
9c6c51
--- a/src/qemu/qemu_command.c
9c6c51
+++ b/src/qemu/qemu_command.c
9c6c51
@@ -1695,37 +1695,38 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
9c6c51
         disk->bus != VIR_DOMAIN_DISK_BUS_IDE)
9c6c51
         virBufferAddLit(&opt, ",boot=on");
9c6c51
 
9c6c51
-    if (disk->src->readonly)
9c6c51
-        virBufferAddLit(&opt, ",readonly=on");
9c6c51
+    if (!virStorageSourceIsEmpty(disk->src)) {
9c6c51
+        if (disk->src->readonly)
9c6c51
+            virBufferAddLit(&opt, ",readonly=on");
9c6c51
 
9c6c51
+        if (disk->cachemode) {
9c6c51
+            virBufferAsprintf(&opt, ",cache=%s",
9c6c51
+                              qemuDiskCacheV2TypeToString(disk->cachemode));
9c6c51
+        }
9c6c51
 
9c6c51
-    if (disk->cachemode) {
9c6c51
-        virBufferAsprintf(&opt, ",cache=%s",
9c6c51
-                          qemuDiskCacheV2TypeToString(disk->cachemode));
9c6c51
+        if (disk->copy_on_read) {
9c6c51
+            virBufferAsprintf(&opt, ",copy-on-read=%s",
9c6c51
+                              virTristateSwitchTypeToString(disk->copy_on_read));
9c6c51
+        }
9c6c51
+
9c6c51
+        if (disk->discard) {
9c6c51
+            virBufferAsprintf(&opt, ",discard=%s",
9c6c51
+                              virDomainDiskDiscardTypeToString(disk->discard));
9c6c51
+        }
9c6c51
+
9c6c51
+        if (detect_zeroes) {
9c6c51
+            virBufferAsprintf(&opt, ",detect-zeroes=%s",
9c6c51
+                              virDomainDiskDetectZeroesTypeToString(detect_zeroes));
9c6c51
+        }
9c6c51
+
9c6c51
+        if (disk->iomode) {
9c6c51
+            virBufferAsprintf(&opt, ",aio=%s",
9c6c51
+                              virDomainDiskIoTypeToString(disk->iomode));
9c6c51
+        }
9c6c51
+
9c6c51
+        qemuBuildDiskThrottling(disk, &opt;;
9c6c51
     }
9c6c51
 
9c6c51
-    if (disk->copy_on_read) {
9c6c51
-        virBufferAsprintf(&opt, ",copy-on-read=%s",
9c6c51
-                          virTristateSwitchTypeToString(disk->copy_on_read));
9c6c51
-    }
9c6c51
-
9c6c51
-    if (disk->discard) {
9c6c51
-        virBufferAsprintf(&opt, ",discard=%s",
9c6c51
-                          virDomainDiskDiscardTypeToString(disk->discard));
9c6c51
-    }
9c6c51
-
9c6c51
-    if (detect_zeroes) {
9c6c51
-        virBufferAsprintf(&opt, ",detect-zeroes=%s",
9c6c51
-                          virDomainDiskDetectZeroesTypeToString(detect_zeroes));
9c6c51
-    }
9c6c51
-
9c6c51
-    if (disk->iomode) {
9c6c51
-        virBufferAsprintf(&opt, ",aio=%s",
9c6c51
-                          virDomainDiskIoTypeToString(disk->iomode));
9c6c51
-    }
9c6c51
-
9c6c51
-    qemuBuildDiskThrottling(disk, &opt;;
9c6c51
-
9c6c51
     if (virBufferCheckError(&opt) < 0)
9c6c51
         goto error;
9c6c51
 
9c6c51
diff --git a/tests/qemuxml2argvdata/disk-cdrom-empty.args b/tests/qemuxml2argvdata/disk-cdrom-empty.args
9c6c51
index 1cbc76ab86..b84bdda143 100644
9c6c51
--- a/tests/qemuxml2argvdata/disk-cdrom-empty.args
9c6c51
+++ b/tests/qemuxml2argvdata/disk-cdrom-empty.args
9c6c51
@@ -24,5 +24,5 @@ server,nowait \
9c6c51
 -usb \
9c6c51
 -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
9c6c51
 -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
9c6c51
--drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on \
9c6c51
+-drive if=none,id=drive-ide0-1-0,media=cdrom \
9c6c51
 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
9c6c51
diff --git a/tests/qemuxml2argvdata/disk-cdrom.args b/tests/qemuxml2argvdata/disk-cdrom.args
9c6c51
index 547263cbd8..f519ea5236 100644
9c6c51
--- a/tests/qemuxml2argvdata/disk-cdrom.args
9c6c51
+++ b/tests/qemuxml2argvdata/disk-cdrom.args
9c6c51
@@ -27,5 +27,5 @@ server,nowait \
9c6c51
 -drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,media=cdrom,\
9c6c51
 readonly=on \
9c6c51
 -device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
9c6c51
--drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on,cache=none \
9c6c51
+-drive if=none,id=drive-ide0-1-0,media=cdrom \
9c6c51
 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
9c6c51
-- 
9c6c51
2.20.1
9c6c51