[libvirt] [PATCH v2 7/7] qemu: Format 'write-cache' parameter for disk frontends

Peter Krempa posted 7 patches 7 years ago
[libvirt] [PATCH v2 7/7] qemu: Format 'write-cache' parameter for disk frontends
Posted by Peter Krempa 7 years ago
The disk cache mode translates to various frontend and backend
attributes for the qemu block layer. For the frontend device the
'writeback' parameter is used and provided as 'write-cache'. Implement
this so that we can later switch to using -blockdev where we will not
pass the cachemode directly any more.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_command.c                            | 27 ++++++++++++++++++++++
 .../disk-drive-write-cache.new.args                | 10 ++++----
 2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index a1a9e91e49..08c6e4faac 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1822,6 +1822,30 @@ qemuCheckIOThreads(const virDomainDef *def,
 }


+static int
+qemuBuildDriveDevCacheStr(virDomainDiskDefPtr disk,
+                          virBufferPtr buf,
+                          virQEMUCapsPtr qemuCaps)
+{
+    bool wb;
+
+    if (disk->cachemode == VIR_DOMAIN_DISK_CACHE_DEFAULT)
+        return 0;
+
+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISK_WRITE_CACHE))
+        return 0;
+
+    if (qemuDomainDiskCachemodeFlags(disk->cachemode, &wb, NULL, NULL) < 0)
+        return -1;
+
+    virBufferStrcat(buf, ",write-cache=",
+                    virTristateSwitchTypeToString(virTristateSwitchFromBool(wb)),
+                    NULL);
+
+    return 0;
+}
+
+
 char *
 qemuBuildDriveDevStr(const virDomainDef *def,
                      virDomainDiskDefPtr disk,
@@ -2134,6 +2158,9 @@ qemuBuildDriveDevStr(const virDomainDef *def,
         }
     }

+    if (qemuBuildDriveDevCacheStr(disk, &opt, qemuCaps) < 0)
+        goto error;
+
     if (virBufferCheckError(&opt) < 0)
         goto error;

diff --git a/tests/qemuxml2argvdata/disk-drive-write-cache.new.args b/tests/qemuxml2argvdata/disk-drive-write-cache.new.args
index 90414a100f..3973249d18 100644
--- a/tests/qemuxml2argvdata/disk-drive-write-cache.new.args
+++ b/tests/qemuxml2argvdata/disk-drive-write-cache.new.args
@@ -28,16 +28,18 @@ server,nowait \
 -device lsi,id=scsi0,bus=pci.0,addr=0x2 \
 -drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,\
 cache=writeback \
--device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
+-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1,\
+write-cache=on \
 -drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-scsi0-0-0,\
 cache=none \
--device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 \
+-device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0,\
+write-cache=on \
 -drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-virtio-disk0,\
 cache=writethrough \
 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,\
-id=virtio-disk0 \
+id=virtio-disk0,write-cache=off \
 -drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-usb-disk1,\
 cache=directsync \
 -device usb-storage,bus=usb.0,port=1,drive=drive-usb-disk1,id=usb-disk1,\
-removable=off \
+removable=off,write-cache=off \
 -msg timestamp=on
-- 
2.16.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 7/7] qemu: Format 'write-cache' parameter for disk frontends
Posted by Ján Tomko 7 years ago
On Wed, Apr 18, 2018 at 11:38:47AM +0200, Peter Krempa wrote:
>The disk cache mode translates to various frontend and backend
>attributes for the qemu block layer. For the frontend device the
>'writeback' parameter is used and provided as 'write-cache'. Implement
>this so that we can later switch to using -blockdev where we will not
>pass the cachemode directly any more.
>
>Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>---
> src/qemu/qemu_command.c                            | 27 ++++++++++++++++++++++
> .../disk-drive-write-cache.new.args                | 10 ++++----
> 2 files changed, 33 insertions(+), 4 deletions(-)
>

Reviewed-by: Ján Tomko <jtomko@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list