[PATCH 1/4] conf: domain_validate: make disk queue configuration driver specific

Roman Bogorodskiy posted 4 patches 1 week, 3 days ago
[PATCH 1/4] conf: domain_validate: make disk queue configuration driver specific
Posted by Roman Bogorodskiy 1 week, 3 days ago
Currently, virDomainDiskDefValidate() allows to configure disks' number
of queues and queue size for virtio disks only. However, the bhyve
driver allows to configure these for the NVMe disks, so make this
check driver-specific.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
---
 src/conf/domain_validate.c | 12 ------------
 src/qemu/qemu_driver.c     | 15 +++++++++++++++
 src/qemu/qemu_validate.c   | 14 ++++++++++++++
 3 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index 17955decc0..8085d782c5 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -835,18 +835,6 @@ virDomainDiskDefValidate(const virDomainDef *def,
             return -1;
         }
 
-        if (disk->queues) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("queues attribute in disk driver element is only supported for virtio bus"));
-            return -1;
-        }
-
-        if (disk->queue_size) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("queue_size attribute in disk driver is only supported for virtio bus"));
-            return -1;
-        }
-
         if (disk->event_idx != VIR_TRISTATE_SWITCH_ABSENT) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("disk event_idx mode supported only for virtio bus"));
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a1b1edcbbf..88c2b4edc3 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6745,6 +6745,21 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef,
                            _("target %1$s already exists"), disk->dst);
             return -1;
         }
+
+        if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
+            if (disk->queues) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("queues attribute in disk driver element is only supported for virtio bus"));
+                return -1;
+            }
+
+            if (disk->queue_size) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("queue_size attribute in disk driver is only supported for virtio bus"));
+                return -1;
+            }
+        }
+
         if (virDomainDiskTranslateSourcePool(disk) < 0)
             return -1;
         if (qemuCheckDiskConfigAgainstDomain(vmdef, disk) < 0)
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 747e54bf44..5008391707 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -3698,6 +3698,20 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
         }
     }
 
+    if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
+        if (disk->queues) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("queues attribute in disk driver element is only supported for virtio bus"));
+            return -1;
+        }
+
+        if (disk->queue_size) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("queue_size attribute in disk driver is only supported for virtio bus"));
+            return -1;
+        }
+    }
+
     return 0;
 }
 
-- 
2.51.0
Re: [PATCH 1/4] conf: domain_validate: make disk queue configuration driver specific
Posted by Peter Krempa via Devel 1 week, 3 days ago
On Mon, Nov 10, 2025 at 18:55:39 +0100, Roman Bogorodskiy wrote:
> Currently, virDomainDiskDefValidate() allows to configure disks' number
> of queues and queue size for virtio disks only. However, the bhyve
> driver allows to configure these for the NVMe disks, so make this
> check driver-specific.
> 
> Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
> ---
>  src/conf/domain_validate.c | 12 ------------
>  src/qemu/qemu_driver.c     | 15 +++++++++++++++
>  src/qemu/qemu_validate.c   | 14 ++++++++++++++
>  3 files changed, 29 insertions(+), 12 deletions(-)
> 
> diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
> index 17955decc0..8085d782c5 100644
> --- a/src/conf/domain_validate.c
> +++ b/src/conf/domain_validate.c
> @@ -835,18 +835,6 @@ virDomainDiskDefValidate(const virDomainDef *def,
>              return -1;
>          }
>  
> -        if (disk->queues) {
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                           _("queues attribute in disk driver element is only supported for virtio bus"));
> -            return -1;
> -        }
> -
> -        if (disk->queue_size) {
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                           _("queue_size attribute in disk driver is only supported for virtio bus"));
> -            return -1;
> -        }
> -
>          if (disk->event_idx != VIR_TRISTATE_SWITCH_ABSENT) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                             _("disk event_idx mode supported only for virtio bus"));
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index a1b1edcbbf..88c2b4edc3 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -6745,6 +6745,21 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef,
>                             _("target %1$s already exists"), disk->dst);
>              return -1;
>          }
> +
> +        if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
> +            if (disk->queues) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("queues attribute in disk driver element is only supported for virtio bus"));
> +                return -1;
> +            }
> +
> +            if (disk->queue_size) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("queue_size attribute in disk driver is only supported for virtio bus"));
> +                return -1;
> +            }
> +        }

This is dead code; virDomainDeviceDefParse calls
virDomainDeviceDefValidate which calls the driver specific callback.


> +
>          if (virDomainDiskTranslateSourcePool(disk) < 0)
>              return -1;
>          if (qemuCheckDiskConfigAgainstDomain(vmdef, disk) < 0)
> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> index 747e54bf44..5008391707 100644
> --- a/src/qemu/qemu_validate.c
> +++ b/src/qemu/qemu_validate.c
> @@ -3698,6 +3698,20 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
>          }
>      }
>  
> +    if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
> +        if (disk->queues) {
> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                           _("queues attribute in disk driver element is only supported for virtio bus"));
> +            return -1;
> +        }
> +
> +        if (disk->queue_size) {
> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                           _("queue_size attribute in disk driver is only supported for virtio bus"));
> +            return -1;
> +        }
> +    }
> +
>      return 0;
>  }
>  
> -- 
> 2.51.0
>
Re: [PATCH 1/4] conf: domain_validate: make disk queue configuration driver specific
Posted by Michal Prívozník via Devel 1 week, 2 days ago
On 11/10/25 19:46, Peter Krempa via Devel wrote:
> On Mon, Nov 10, 2025 at 18:55:39 +0100, Roman Bogorodskiy wrote:
>> Currently, virDomainDiskDefValidate() allows to configure disks' number
>> of queues and queue size for virtio disks only. However, the bhyve
>> driver allows to configure these for the NVMe disks, so make this
>> check driver-specific.
>>
>> Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
>> ---
>>  src/conf/domain_validate.c | 12 ------------
>>  src/qemu/qemu_driver.c     | 15 +++++++++++++++
>>  src/qemu/qemu_validate.c   | 14 ++++++++++++++
>>  3 files changed, 29 insertions(+), 12 deletions(-)
>>
>> diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
>> index 17955decc0..8085d782c5 100644
>> --- a/src/conf/domain_validate.c
>> +++ b/src/conf/domain_validate.c
>> @@ -835,18 +835,6 @@ virDomainDiskDefValidate(const virDomainDef *def,
>>              return -1;
>>          }
>>  
>> -        if (disk->queues) {
>> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> -                           _("queues attribute in disk driver element is only supported for virtio bus"));
>> -            return -1;
>> -        }
>> -
>> -        if (disk->queue_size) {
>> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> -                           _("queue_size attribute in disk driver is only supported for virtio bus"));
>> -            return -1;
>> -        }
>> -
>>          if (disk->event_idx != VIR_TRISTATE_SWITCH_ABSENT) {
>>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>>                             _("disk event_idx mode supported only for virtio bus"));
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index a1b1edcbbf..88c2b4edc3 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -6745,6 +6745,21 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef,
>>                             _("target %1$s already exists"), disk->dst);
>>              return -1;
>>          }
>> +
>> +        if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
>> +            if (disk->queues) {
>> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> +                               _("queues attribute in disk driver element is only supported for virtio bus"));
>> +                return -1;
>> +            }
>> +
>> +            if (disk->queue_size) {
>> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> +                               _("queue_size attribute in disk driver is only supported for virtio bus"));
>> +                return -1;
>> +            }
>> +        }
> 
> This is dead code; virDomainDeviceDefParse calls
> virDomainDeviceDefValidate which calls the driver specific callback.

Yeah, just drop this hunk.

> 
> 
>> +
>>          if (virDomainDiskTranslateSourcePool(disk) < 0)
>>              return -1;
>>          if (qemuCheckDiskConfigAgainstDomain(vmdef, disk) < 0)
>> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
>> index 747e54bf44..5008391707 100644
>> --- a/src/qemu/qemu_validate.c
>> +++ b/src/qemu/qemu_validate.c
>> @@ -3698,6 +3698,20 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
>>          }
>>      }
>>  
>> +    if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
>> +        if (disk->queues) {
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> +                           _("queues attribute in disk driver element is only supported for virtio bus"));
>> +            return -1;
>> +        }
>> +
>> +        if (disk->queue_size) {
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> +                           _("queue_size attribute in disk driver is only supported for virtio bus"));
>> +            return -1;
>> +        }
>> +    }
>> +
>>      return 0;
>>  }
>>  
>> -- 
>> 2.51.0
>>
> 

Michal