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

Peter Krempa posted 6 patches 7 years, 1 month ago
There is a newer version of this series
[libvirt] [PATCH 5/6] qemu: Format 'write-cache' parameter for disk frontends
Posted by Peter Krempa 7 years, 1 month 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 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index bbd3cd0a7d..83e263e9f9 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1882,6 +1882,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,
@@ -2194,6 +2218,9 @@ qemuBuildDriveDevStr(const virDomainDef *def,
         }
     }

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

-- 
2.16.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 5/6] qemu: Format 'write-cache' parameter for disk frontends
Posted by John Ferlan 7 years, 1 month ago

On 04/04/2018 04:13 AM, 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 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index bbd3cd0a7d..83e263e9f9 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -1882,6 +1882,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;

As I noted in patch 4 - this is checking a bit that's defined in QEMU
2.7 on some arches, but the test in patch 6 (probably should be in this
patch) would seem to indicate QEMU 2.12 is required.

> +
> +    if (qemuDomainDiskCachemodeFlags(disk->cachemode, &wb, NULL, NULL) < 0)
> +        return -1;

Wouldn't bother with -1 since we already know that cachemode will be
valid (e.g. from my comments in patch 4).


John

> +
> +    virBufferStrcat(buf, ",write-cache=",
> +                    virTristateSwitchTypeToString(virTristateSwitchFromBool(wb)),
> +                    NULL);
> +
> +    return 0;
> +}
> +
> +
>  char *
>  qemuBuildDriveDevStr(const virDomainDef *def,
>                       virDomainDiskDefPtr disk,
> @@ -2194,6 +2218,9 @@ qemuBuildDriveDevStr(const virDomainDef *def,
>          }
>      }
> 
> +    if (qemuBuildDriveDevCacheStr(disk, &opt, qemuCaps) < 0)
> +        goto error;
> +
>      if (virBufferCheckError(&opt) < 0)
>          goto error;
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 5/6] qemu: Format 'write-cache' parameter for disk frontends
Posted by Ján Tomko 7 years, 1 month ago
On Wed, Apr 04, 2018 at 10:13:58AM +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 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>

ACK

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