Re: [PATCH v3] Support IDE/SATA disk 'product' parameter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Jan 18, 2025 at 11:30:20 +0100, Adam Julis wrote:
> Since we supported 'product' parameter for SCSI, just expanded existing
> solution makes IDE/SATA parameter works too. QEMU requires parameter 'model'
> in case of IDE/SATA (instead of 'product'), so the process of making JSON
> object is slightly modified. Length of the 'product' parameter is
> different in SCSI (16 chars) and ATA/SATA (40 chars).
> 
> Resolves: https://gitlab.com/libvirt/libvirt/-/issues/697
> Signed-off-by: Adam Julis <ajulis@xxxxxxxxxx>
> ---
> 
> Changes to v2:
> - doc (mainly mentioned the different length of SCSI and SATA/ATA)
> - modified schemas (for supporting longer string)
> - added tests
> - ..details in formatting
> 
>  docs/formatdomain.rst                         |  9 ++--
>  src/conf/domain_validate.c                    | 14 +++++--
>  src/conf/schemas/domaincommon.rng             |  2 +-
>  src/qemu/qemu_command.c                       |  9 +++-
>  src/qemu/qemu_validate.c                      | 14 ++++++-
>  .../disk-sata-product.x86_64-latest.args      | 36 ++++++++++++++++
>  .../disk-sata-product.x86_64-latest.xml       | 41 +++++++++++++++++++
>  tests/qemuxmlconfdata/disk-sata-product.xml   | 28 +++++++++++++
>  ...csi-disk-vpd-build-error.x86_64-latest.err |  2 +-
>  ...disk-scsi-product-length.x86_64-latest.err |  1 +
>  .../disk-scsi-product-length.xml              | 28 +++++++++++++
>  tests/qemuxmlconftest.c                       |  2 +
>  12 files changed, 173 insertions(+), 13 deletions(-)
>  create mode 100644 tests/qemuxmlconfdata/disk-sata-product.x86_64-latest.args
>  create mode 100644 tests/qemuxmlconfdata/disk-sata-product.x86_64-latest.xml
>  create mode 100644 tests/qemuxmlconfdata/disk-sata-product.xml
>  create mode 100644 tests/qemuxmlconfdata/disk-scsi-product-length.x86_64-latest.err
>  create mode 100644 tests/qemuxmlconfdata/disk-scsi-product-length.xml
> 
> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
> index 620daae9af..0544b11fb9 100644
> --- a/docs/formatdomain.rst
> +++ b/docs/formatdomain.rst
> @@ -3562,12 +3562,13 @@ paravirtualized driver is specified via the ``disk`` element.
>     :since:`Since 0.10.1`
>  ``vendor``
>     If present, this element specifies the vendor of a virtual hard disk or
> -   CD-ROM device. It must not be longer than 8 printable characters.
> -   :since:`Since 1.0.1`
> +   CD-ROM device. It must not be longer than 8 printable characters. Only for
> +   'scsi' ``bus``.:since:`Since 1.0.1`
>  ``product``
>     If present, this element specifies the product of a virtual hard disk or
> -   CD-ROM device. It must not be longer than 16 printable characters.
> -   :since:`Since 1.0.1`
> +   CD-ROM device. It must not be longer than 16 printable characters for 'scsi'
> +   (:since:`Since 1.0.1`). For 'sata' or 'ide' not longer than 40 printable
> +   characters (:since:`Since 11.0.1`). Other ``bus`` is not supported.

11.1.0

>  ``address``
>     If present, the ``address`` element ties the disk to a given slot of a
>     controller (the actual ``<controller>`` device can often be inferred by
> diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
> index 6aed74dd8d..01dda3a278 100644
> --- a/src/conf/domain_validate.c
> +++ b/src/conf/domain_validate.c
> @@ -603,8 +603,8 @@ virDomainDiskDefValidateSource(const virStorageSource *src)
>  
>  
>  #define VENDOR_LEN  8
> -#define PRODUCT_LEN 16
> -
> +#define PRODUCT_SCSI_LEN 16
> +#define PRODUCT_ATA_SATA_LEN 40
>  
>  /**
>   * virDomainDiskDefSourceLUNValidate:
> @@ -880,10 +880,16 @@ virDomainDiskDefValidate(const virDomainDef *def,
>              return -1;
>          }
>  
> -        if (strlen(disk->product) > PRODUCT_LEN) {
> +        if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI &&
> +            strlen(disk->product) > PRODUCT_SCSI_LEN) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>                             _("disk product is more than %1$d characters"),
> -                           PRODUCT_LEN);
> +                           PRODUCT_SCSI_LEN);
> +            return -1;
> +        } else if (strlen(disk->product) > PRODUCT_ATA_SATA_LEN) {
> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                           _("disk product is more than %1$d characters"),
> +                           PRODUCT_ATA_SATA_LEN);
>              return -1;
>          }
>      }


I think I'll change this to add a temporary variable for the length
rather than duplicate the whole code.

[...]

I'll change the two things and push this.

Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux