[PATCH 2/5] qemu: add support for discard_granularity

Kristina Hanicova posted 5 patches 2 years, 6 months ago
[PATCH 2/5] qemu: add support for discard_granularity
Posted by Kristina Hanicova 2 years, 6 months ago
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1849570

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
---
 src/qemu/qemu_command.c                                | 2 ++
 src/vz/vz_utils.c                                      | 3 ++-
 tests/qemuxml2argvdata/disk-blockio.x86_64-latest.args | 2 +-
 tests/qemuxml2argvdata/disk-blockio.xml                | 2 +-
 4 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 64af0b5ea9..23810bc067 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1760,6 +1760,7 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
     unsigned int bootindex = 0;
     unsigned int logical_block_size = disk->blockio.logical_block_size;
     unsigned int physical_block_size = disk->blockio.physical_block_size;
+    unsigned int discard_granularity = disk->blockio.discard_granularity;
     g_autoptr(virJSONValue) wwn = NULL;
     g_autofree char *serial = NULL;
     virTristateSwitch removable = VIR_TRISTATE_SWITCH_ABSENT;
@@ -1939,6 +1940,7 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
                               "p:bootindex", bootindex,
                               "p:logical_block_size", logical_block_size,
                               "p:physical_block_size", physical_block_size,
+                              "p:discard_granularity", discard_granularity,
                               "A:wwn", &wwn,
                               "p:rotation_rate", disk->rotation_rate,
                               "S:vendor", disk->vendor,
diff --git a/src/vz/vz_utils.c b/src/vz/vz_utils.c
index 7db7dbd419..de707df883 100644
--- a/src/vz/vz_utils.c
+++ b/src/vz/vz_utils.c
@@ -279,7 +279,8 @@ vzCheckDiskUnsupportedParams(virDomainDiskDef *disk)
     }
 
     if (disk->blockio.logical_block_size ||
-        disk->blockio.physical_block_size) {
+        disk->blockio.physical_block_size ||
+        disk->blockio.discard_granularity) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("Setting disk block sizes is not "
                          "supported by vz driver."));
diff --git a/tests/qemuxml2argvdata/disk-blockio.x86_64-latest.args b/tests/qemuxml2argvdata/disk-blockio.x86_64-latest.args
index 7270613573..15f31ae60d 100644
--- a/tests/qemuxml2argvdata/disk-blockio.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/disk-blockio.x86_64-latest.args
@@ -32,7 +32,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
 -device '{"driver":"ide-cd","bus":"ide.0","unit":1,"drive":"libvirt-2-format","id":"ide0-0-1"}' \
 -blockdev '{"driver":"file","filename":"/tmp/idedisk.img","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
 -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
--device '{"driver":"ide-hd","bus":"ide.0","unit":2,"drive":"libvirt-1-format","id":"ide0-0-2","bootindex":1,"logical_block_size":512,"physical_block_size":512}' \
+-device '{"driver":"ide-hd","bus":"ide.0","unit":2,"drive":"libvirt-1-format","id":"ide0-0-2","bootindex":1,"logical_block_size":512,"physical_block_size":512,"discard_granularity":4096}' \
 -audiodev '{"id":"audio1","driver":"none"}' \
 -device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
diff --git a/tests/qemuxml2argvdata/disk-blockio.xml b/tests/qemuxml2argvdata/disk-blockio.xml
index 170728371f..84943719d4 100644
--- a/tests/qemuxml2argvdata/disk-blockio.xml
+++ b/tests/qemuxml2argvdata/disk-blockio.xml
@@ -23,7 +23,7 @@
       <source file='/tmp/idedisk.img'/>
       <target dev='hdc' bus='ide'/>
       <address type='drive' controller='0' bus='0' target='0' unit='2'/>
-      <blockio logical_block_size='512' physical_block_size='512'/>
+      <blockio logical_block_size='512' physical_block_size='512' discard_granularity='4096'/>
     </disk>
     <controller type='usb' index='0'/>
     <controller type='ide' index='0'/>
-- 
2.41.0
Re: [PATCH 2/5] qemu: add support for discard_granularity
Posted by Peter Krempa 2 years, 6 months ago
On Wed, Aug 02, 2023 at 13:47:15 +0200, Kristina Hanicova wrote:
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1849570
> 
> Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
> ---
>  src/qemu/qemu_command.c                                | 2 ++
>  src/vz/vz_utils.c                                      | 3 ++-
>  tests/qemuxml2argvdata/disk-blockio.x86_64-latest.args | 2 +-
>  tests/qemuxml2argvdata/disk-blockio.xml                | 2 +-
>  4 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 64af0b5ea9..23810bc067 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -1760,6 +1760,7 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
>      unsigned int bootindex = 0;
>      unsigned int logical_block_size = disk->blockio.logical_block_size;
>      unsigned int physical_block_size = disk->blockio.physical_block_size;
> +    unsigned int discard_granularity = disk->blockio.discard_granularity;
>      g_autoptr(virJSONValue) wwn = NULL;
>      g_autofree char *serial = NULL;
>      virTristateSwitch removable = VIR_TRISTATE_SWITCH_ABSENT;
> @@ -1939,6 +1940,7 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
>                                "p:bootindex", bootindex,
>                                "p:logical_block_size", logical_block_size,
>                                "p:physical_block_size", physical_block_size,
> +                              "p:discard_granularity", discard_granularity,

This is a device frontend property, so you'll also need to add it to the
ABI stability check and make sure it doesn't differ between cases when
same ABI is required.

See virDomainDiskDefCheckABIStability

Note that logical_block_size and physical_block_size ought to have the
same treatment.