[PATCH] conf: Reject blockio settings for "<disk device='lun'>"

Peter Krempa via Devel posted 1 patch 17 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/01a84495659b0604610ff4b7c1ff9aed97513a4c.1776169059.git.pkrempa@redhat.com
src/conf/domain_validate.c                    |  8 ++++++
.../disk-blockio-device-lun.x86_64-latest.err |  1 +
.../disk-blockio-device-lun.xml               | 26 +++++++++++++++++++
tests/qemuxmlconftest.c                       |  1 +
4 files changed, 36 insertions(+)
create mode 100644 tests/qemuxmlconfdata/disk-blockio-device-lun.x86_64-latest.err
create mode 100644 tests/qemuxmlconfdata/disk-blockio-device-lun.xml
[PATCH] conf: Reject blockio settings for "<disk device='lun'>"
Posted by Peter Krempa via Devel 17 hours ago
From: Peter Krempa <pkrempa@redhat.com>

Overriding the blockio settings for disk passthrough via
"<disk device='lun'>" doesn't make sense and in fact the 'scsi-block'
device in qemu doesn't even expose the appropriate properties:

  qemu-system-x86_64: -device {"driver":"scsi-block","bus":"scsi0.0","channel":0,"scsi-id":0,"lun":0,"drive":"libvirt-1-format","id":"scsi0-0-0-0","logical_block_size":512,"physical_block_size":512}: Property 'scsi-block.physical_block_size' not found

Reject those at validation.

Resolves: https://redhat.atlassian.net/browse/RHEL-145937
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/conf/domain_validate.c                    |  8 ++++++
 .../disk-blockio-device-lun.x86_64-latest.err |  1 +
 .../disk-blockio-device-lun.xml               | 26 +++++++++++++++++++
 tests/qemuxmlconftest.c                       |  1 +
 4 files changed, 36 insertions(+)
 create mode 100644 tests/qemuxmlconfdata/disk-blockio-device-lun.x86_64-latest.err
 create mode 100644 tests/qemuxmlconfdata/disk-blockio-device-lun.xml

diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index a49156061f..3946f92182 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -786,6 +786,14 @@ virDomainDiskDefValidate(const virDomainDef *def,
     if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
         if (virDomainDiskDefSourceLUNValidate(disk->src) < 0)
             return -1;
+
+        if (disk->blockio.logical_block_size > 0 ||
+            disk->blockio.physical_block_size > 0 ||
+            disk->blockio.discard_granularity_specified) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("blockio is not supported with device='lun'"));
+            return -1;
+        }
     } else {
         if (disk->src->pr) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
diff --git a/tests/qemuxmlconfdata/disk-blockio-device-lun.x86_64-latest.err b/tests/qemuxmlconfdata/disk-blockio-device-lun.x86_64-latest.err
new file mode 100644
index 0000000000..508abf7a97
--- /dev/null
+++ b/tests/qemuxmlconfdata/disk-blockio-device-lun.x86_64-latest.err
@@ -0,0 +1 @@
+unsupported configuration: blockio is not supported with device='lun'
diff --git a/tests/qemuxmlconfdata/disk-blockio-device-lun.xml b/tests/qemuxmlconfdata/disk-blockio-device-lun.xml
new file mode 100644
index 0000000000..862e064d4f
--- /dev/null
+++ b/tests/qemuxmlconfdata/disk-blockio-device-lun.xml
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219136</memory>
+  <currentMemory unit='KiB'>219136</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <disk type='block' device='lun'>
+      <source dev='/dev/something'/>
+      <target dev='sda' bus='scsi'/>
+      <blockio logical_block_size='512' physical_block_size='512' discard_granularity='4096'/>
+    </disk>
+    <controller type='usb' index='0'/>
+    <controller type='ide' index='0'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index 14aa723ec5..4c9b55693a 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -1613,6 +1613,7 @@ mymain(void)
     DO_TEST_CAPS_LATEST("disk-geometry");
     DO_TEST_CAPS_LATEST("disk-blockio");
     DO_TEST_CAPS_LATEST("disk-blockio-no-discard");
+    DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-blockio-device-lun");

     driver.config->storageUseNbdkit = 1;
     DO_TEST_CAPS_LATEST_NBDKIT("disk-cdrom-network-nbdkit", QEMU_NBDKIT_CAPS_PLUGIN_CURL);
-- 
2.53.0
Re: [PATCH] conf: Reject blockio settings for "<disk device='lun'>"
Posted by Ján Tomko via Devel 17 hours ago
On a Tuesday in 2026, Peter Krempa via Devel wrote:
>From: Peter Krempa <pkrempa@redhat.com>
>
>Overriding the blockio settings for disk passthrough via
>"<disk device='lun'>" doesn't make sense and in fact the 'scsi-block'
>device in qemu doesn't even expose the appropriate properties:
>
>  qemu-system-x86_64: -device {"driver":"scsi-block","bus":"scsi0.0","channel":0,"scsi-id":0,"lun":0,"drive":"libvirt-1-format","id":"scsi0-0-0-0","logical_block_size":512,"physical_block_size":512}: Property 'scsi-block.physical_block_size' not found
>
>Reject those at validation.
>
>Resolves: https://redhat.atlassian.net/browse/RHEL-145937
>Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>---
> src/conf/domain_validate.c                    |  8 ++++++
> .../disk-blockio-device-lun.x86_64-latest.err |  1 +
> .../disk-blockio-device-lun.xml               | 26 +++++++++++++++++++
> tests/qemuxmlconftest.c                       |  1 +
> 4 files changed, 36 insertions(+)
> create mode 100644 tests/qemuxmlconfdata/disk-blockio-device-lun.x86_64-latest.err
> create mode 100644 tests/qemuxmlconfdata/disk-blockio-device-lun.xml
>

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

Jano