|
|
c1c534 |
From 378887595f3cbb937f6c3e88ed3828e5f6698e33 Mon Sep 17 00:00:00 2001
|
|
|
c1c534 |
Message-Id: <378887595f3cbb937f6c3e88ed3828e5f6698e33@dist-git>
|
|
|
c1c534 |
From: Peter Krempa <pkrempa@redhat.com>
|
|
|
c1c534 |
Date: Thu, 23 Nov 2017 19:02:23 +0100
|
|
|
c1c534 |
Subject: [PATCH] qemu: command: Mark <shared/> disks as such in qemu
|
|
|
c1c534 |
|
|
|
c1c534 |
Qemu has now an internal mechanism for locking images to fix specific
|
|
|
c1c534 |
cases of disk corruption. This requires libvirt to mark the image as
|
|
|
c1c534 |
shared so that qemu lifts certain restrictions.
|
|
|
c1c534 |
|
|
|
c1c534 |
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1378242
|
|
|
c1c534 |
(cherry picked from commit 28907b0043fbf71085a798372ab9c816ba043b93)
|
|
|
c1c534 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
c1c534 |
---
|
|
|
c1c534 |
src/qemu/qemu_command.c | 4 +++
|
|
|
c1c534 |
.../qemuxml2argv-disk-drive-shared-locking.args | 32 +++++++++++++++++
|
|
|
c1c534 |
.../qemuxml2argv-disk-drive-shared-locking.xml | 42 ++++++++++++++++++++++
|
|
|
c1c534 |
tests/qemuxml2argvtest.c | 2 ++
|
|
|
c1c534 |
4 files changed, 80 insertions(+)
|
|
|
c1c534 |
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args
|
|
|
c1c534 |
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml
|
|
|
c1c534 |
|
|
|
c1c534 |
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
|
|
c1c534 |
index dfacff4b12..fc7f54e81e 100644
|
|
|
c1c534 |
--- a/src/qemu/qemu_command.c
|
|
|
c1c534 |
+++ b/src/qemu/qemu_command.c
|
|
|
c1c534 |
@@ -2182,6 +2182,10 @@ qemuBuildDriveDevStr(const virDomainDef *def,
|
|
|
c1c534 |
goto error;
|
|
|
c1c534 |
}
|
|
|
c1c534 |
|
|
|
c1c534 |
+ if (disk->src->shared &&
|
|
|
c1c534 |
+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISK_SHARE_RW))
|
|
|
c1c534 |
+ virBufferAddLit(&opt, ",share-rw=on");
|
|
|
c1c534 |
+
|
|
|
c1c534 |
if (!(drivealias = qemuAliasFromDisk(disk)))
|
|
|
c1c534 |
goto error;
|
|
|
c1c534 |
virBufferAsprintf(&opt, ",drive=%s,id=%s", drivealias, disk->info.alias);
|
|
|
c1c534 |
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args
|
|
|
c1c534 |
new file mode 100644
|
|
|
c1c534 |
index 0000000000..cdf17f26d1
|
|
|
c1c534 |
--- /dev/null
|
|
|
c1c534 |
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args
|
|
|
c1c534 |
@@ -0,0 +1,32 @@
|
|
|
c1c534 |
+LC_ALL=C \
|
|
|
c1c534 |
+PATH=/bin \
|
|
|
c1c534 |
+HOME=/home/test \
|
|
|
c1c534 |
+USER=test \
|
|
|
c1c534 |
+LOGNAME=test \
|
|
|
c1c534 |
+QEMU_AUDIO_DRV=none \
|
|
|
c1c534 |
+/usr/bin/qemu-system-i686 \
|
|
|
c1c534 |
+-name QEMUGuest1 \
|
|
|
c1c534 |
+-S \
|
|
|
c1c534 |
+-M pc \
|
|
|
c1c534 |
+-m 214 \
|
|
|
c1c534 |
+-smp 1,sockets=1,cores=1,threads=1 \
|
|
|
c1c534 |
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
|
|
c1c534 |
+-nographic \
|
|
|
c1c534 |
+-nodefaults \
|
|
|
c1c534 |
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
|
|
c1c534 |
+server,nowait \
|
|
|
c1c534 |
+-mon chardev=charmonitor,id=monitor,mode=readline \
|
|
|
c1c534 |
+-no-acpi \
|
|
|
c1c534 |
+-boot c \
|
|
|
c1c534 |
+-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x3 \
|
|
|
c1c534 |
+-usb \
|
|
|
c1c534 |
+-drive file=/dev/ide,format=raw,if=none,id=drive-ide0-0-0,cache=none \
|
|
|
c1c534 |
+-device ide-drive,bus=ide.0,unit=0,share-rw=on,drive=drive-ide0-0-0,\
|
|
|
c1c534 |
+id=ide0-0-0 \
|
|
|
c1c534 |
+-drive file=/dev/scsi,format=raw,if=none,id=drive-scsi0-0-0-0,cache=none \
|
|
|
c1c534 |
+-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,share-rw=on,\
|
|
|
c1c534 |
+drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \
|
|
|
c1c534 |
+-drive file=/dev/virtio,format=raw,if=none,id=drive-virtio-disk0,cache=none \
|
|
|
c1c534 |
+-device virtio-blk-pci,bus=pci.0,addr=0x4,share-rw=on,drive=drive-virtio-disk0,\
|
|
|
c1c534 |
+id=virtio-disk0 \
|
|
|
c1c534 |
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
|
|
|
c1c534 |
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml
|
|
|
c1c534 |
new file mode 100644
|
|
|
c1c534 |
index 0000000000..dd48857a30
|
|
|
c1c534 |
--- /dev/null
|
|
|
c1c534 |
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml
|
|
|
c1c534 |
@@ -0,0 +1,42 @@
|
|
|
c1c534 |
+<domain type='qemu'>
|
|
|
c1c534 |
+ <name>QEMUGuest1</name>
|
|
|
c1c534 |
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
|
c1c534 |
+ <memory unit='KiB'>219136</memory>
|
|
|
c1c534 |
+ <currentMemory unit='KiB'>219136</currentMemory>
|
|
|
c1c534 |
+ <vcpu placement='static'>1</vcpu>
|
|
|
c1c534 |
+ <os>
|
|
|
c1c534 |
+ <type arch='i686' machine='pc'>hvm</type>
|
|
|
c1c534 |
+ <boot dev='hd'/>
|
|
|
c1c534 |
+ </os>
|
|
|
c1c534 |
+ <clock offset='utc'/>
|
|
|
c1c534 |
+ <on_poweroff>destroy</on_poweroff>
|
|
|
c1c534 |
+ <on_reboot>restart</on_reboot>
|
|
|
c1c534 |
+ <on_crash>destroy</on_crash>
|
|
|
c1c534 |
+ <devices>
|
|
|
c1c534 |
+ <emulator>/usr/bin/qemu-system-i686</emulator>
|
|
|
c1c534 |
+ <disk type='block' device='disk'>
|
|
|
c1c534 |
+ <driver name='qemu' type='raw'/>
|
|
|
c1c534 |
+ <source dev='/dev/ide'/>
|
|
|
c1c534 |
+ <target dev='hda' bus='ide'/>
|
|
|
c1c534 |
+ <shareable/>
|
|
|
c1c534 |
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
|
|
c1c534 |
+ </disk>
|
|
|
c1c534 |
+ <disk type='block' device='disk'>
|
|
|
c1c534 |
+ <driver name='qemu' type='raw'/>
|
|
|
c1c534 |
+ <source dev='/dev/scsi'/>
|
|
|
c1c534 |
+ <target dev='sda' bus='scsi'/>
|
|
|
c1c534 |
+ <shareable/>
|
|
|
c1c534 |
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
|
|
c1c534 |
+ </disk>
|
|
|
c1c534 |
+ <disk type='block' device='disk'>
|
|
|
c1c534 |
+ <driver name='qemu' type='raw'/>
|
|
|
c1c534 |
+ <source dev='/dev/virtio'/>
|
|
|
c1c534 |
+ <target dev='vda' bus='virtio'/>
|
|
|
c1c534 |
+ <shareable/>
|
|
|
c1c534 |
+ </disk>
|
|
|
c1c534 |
+ <controller type='usb' index='0'/>
|
|
|
c1c534 |
+ <controller type='ide' index='0'/>
|
|
|
c1c534 |
+ <controller type='scsi' index='0' model='virtio-scsi'/>
|
|
|
c1c534 |
+ <memballoon model='virtio'/>
|
|
|
c1c534 |
+ </devices>
|
|
|
c1c534 |
+</domain>
|
|
|
c1c534 |
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
|
|
c1c534 |
index 00110cae19..4e981c9fab 100644
|
|
|
c1c534 |
--- a/tests/qemuxml2argvtest.c
|
|
|
c1c534 |
+++ b/tests/qemuxml2argvtest.c
|
|
|
c1c534 |
@@ -909,6 +909,8 @@ mymain(void)
|
|
|
c1c534 |
DO_TEST("disk-drive-shared",
|
|
|
c1c534 |
QEMU_CAPS_DRIVE_SERIAL);
|
|
|
c1c534 |
DO_TEST_PARSE_ERROR("disk-drive-shared-qcow", NONE);
|
|
|
c1c534 |
+ DO_TEST("disk-drive-shared-locking",
|
|
|
c1c534 |
+ QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DISK_SHARE_RW);
|
|
|
c1c534 |
DO_TEST("disk-drive-error-policy-stop",
|
|
|
c1c534 |
QEMU_CAPS_MONITOR_JSON);
|
|
|
c1c534 |
DO_TEST("disk-drive-error-policy-enospace",
|
|
|
c1c534 |
--
|
|
|
c1c534 |
2.15.0
|
|
|
c1c534 |
|