]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: command: Don't format image properties for empty -drive
authorPeter Krempa <pkrempa@redhat.com>
Tue, 15 Jan 2019 16:28:21 +0000 (17:28 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 21 Jan 2019 16:04:26 +0000 (17:04 +0100)
If a -drive has no image, using image properties makes qemu whine that
they should not be used.

This patch stops formating cache/readonly/... for empty drives
for the pre-blockdev syntax. Unfortunately those parameters can't be
added later when inserting media, but on the other hand qemu will start
with an empty drive.

Since we already were able to start a VM with such config previously due
to qemu ignoring them I've opted just to skip formatting them.
Additionally with -blockdev support it will work as expected as the
image properties will be formatted when adding the image itself which is
not possible without it.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1651457

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/qemu/qemu_command.c
tests/qemuxml2argvdata/disk-cdrom.args
tests/qemuxml2argvdata/disk-cdrom.x86_64-2.12.0.args
tests/qemuxml2argvdata/disk-cdrom.x86_64-latest.args

index 822d5f866903ed487c4f7f39920c7ae9378c5394..3913ac4c1586c92443dabf46778a07e6ee289c3f 100644 (file)
@@ -1745,37 +1745,38 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
         }
     }
 
-    if (disk->src->readonly)
-        virBufferAddLit(&opt, ",readonly=on");
+    if (!virStorageSourceIsEmpty(disk->src)) {
+        if (disk->src->readonly)
+            virBufferAddLit(&opt, ",readonly=on");
 
+        if (disk->cachemode) {
+            virBufferAsprintf(&opt, ",cache=%s",
+                              qemuDiskCacheV2TypeToString(disk->cachemode));
+        }
 
-    if (disk->cachemode) {
-        virBufferAsprintf(&opt, ",cache=%s",
-                          qemuDiskCacheV2TypeToString(disk->cachemode));
-    }
+        if (disk->copy_on_read) {
+            virBufferAsprintf(&opt, ",copy-on-read=%s",
+                              virTristateSwitchTypeToString(disk->copy_on_read));
+        }
 
-    if (disk->copy_on_read) {
-        virBufferAsprintf(&opt, ",copy-on-read=%s",
-                          virTristateSwitchTypeToString(disk->copy_on_read));
-    }
+        if (disk->discard) {
+            virBufferAsprintf(&opt, ",discard=%s",
+                              virDomainDiskDiscardTypeToString(disk->discard));
+        }
 
-    if (disk->discard) {
-        virBufferAsprintf(&opt, ",discard=%s",
-                          virDomainDiskDiscardTypeToString(disk->discard));
-    }
+        if (detect_zeroes) {
+            virBufferAsprintf(&opt, ",detect-zeroes=%s",
+                              virDomainDiskDetectZeroesTypeToString(detect_zeroes));
+        }
 
-    if (detect_zeroes) {
-        virBufferAsprintf(&opt, ",detect-zeroes=%s",
-                          virDomainDiskDetectZeroesTypeToString(detect_zeroes));
-    }
+        if (disk->iomode) {
+            virBufferAsprintf(&opt, ",aio=%s",
+                              virDomainDiskIoTypeToString(disk->iomode));
+        }
 
-    if (disk->iomode) {
-        virBufferAsprintf(&opt, ",aio=%s",
-                          virDomainDiskIoTypeToString(disk->iomode));
+        qemuBuildDiskThrottling(disk, &opt);
     }
 
-    qemuBuildDiskThrottling(disk, &opt);
-
     if (virBufferCheckError(&opt) < 0)
         goto error;
 
index 0b62e6ee9f1546bbd247d77530bc9962c31b4bd3..a9f60aa47776d9101c3247ea103e9d525cb17aba 100644 (file)
@@ -27,7 +27,7 @@ bootindex=1 \
 -drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,media=cdrom,\
 readonly=on \
 -device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
--drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on,cache=none \
+-drive if=none,id=drive-ide0-1-0,media=cdrom \
 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \
--drive if=none,id=drive-ide0-1-1,media=cdrom,readonly=on \
+-drive if=none,id=drive-ide0-1-1,media=cdrom \
 -device ide-drive,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1
index b51c0919cc3ccb0de909b038d4d130493b8aacd2..a39d920f67cc582aeb0a2b7796f25c111807b6e6 100644 (file)
@@ -28,10 +28,10 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
 -drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=on \
 -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
--drive if=none,id=drive-ide0-1-0,readonly=on,cache=none \
+-drive if=none,id=drive-ide0-1-0 \
 -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,\
 write-cache=on \
--drive if=none,id=drive-ide0-1-1,readonly=on \
+-drive if=none,id=drive-ide0-1-1 \
 -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
index 8bdcffada33944761b0fcbb9f33fb822dc3b0e9d..029ae23dfa3a138e5926229376429ce7d39c969d 100644 (file)
@@ -28,10 +28,10 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
 -drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=on \
 -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
--drive if=none,id=drive-ide0-1-0,readonly=on,cache=none \
+-drive if=none,id=drive-ide0-1-0 \
 -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,\
 write-cache=on \
--drive if=none,id=drive-ide0-1-1,readonly=on \
+-drive if=none,id=drive-ide0-1-1 \
 -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \