[libvirt] [PATCH] libxl: add discard support to libxl_device_disk

Jim Fehlig jfehlig at suse.com
Fri May 30 21:07:42 UTC 2014


Olaf Hering wrote:
> Translate libvirt discard settings into libxl-4.5 discard settings.
>
> Signed-off-by: Olaf Hering <olaf at aepfle.de>
> ---
>
> default means leave decision to libxl.
> Not sure if that is what "default" in libvirt terms really means.
>   

It generally means hypervisor default, so deferring to libxl is the
right thing to do.

>
>  src/libxl/libxl_conf.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>
> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
> index b7fed7f..4cb062e 100644
> --- a/src/libxl/libxl_conf.c
> +++ b/src/libxl/libxl_conf.c
> @@ -713,6 +713,33 @@ libxlMakeDomBuildInfo(virDomainObjPtr vm, libxl_domain_config *d_config)
>      return -1;
>  }
>  
> +static void
> +libxlDiskSetDiscard(libxl_device_disk *x_disk, int discard)
> +{
> +    if (!x_disk->readwrite)
> +        return;
> +#if defined(LIBXL_HAVE_LIBXL_DEVICE_DISK_DISCARD_ENABLE)
> +    switch (discard) {
> +    case VIR_DOMAIN_DISK_DISCARD_DEFAULT:
>   
case VIR_DOMAIN_DISK_DISCARD_LAST:
> +        break;
> +    case VIR_DOMAIN_DISK_DISCARD_UNMAP:
> +        libxl_defbool_set(&x_disk->discard_enable, true);
> +        break;
> +    default:
>   

Then you can remove 'default'.

> +    case VIR_DOMAIN_DISK_DISCARD_IGNORE:
> +        libxl_defbool_set(&x_disk->discard_enable, false);
> +        break;
> +    }
> +#else
> +    if (discard == VIR_DOMAIN_DISK_DISCARD_DEFAULT)
> +        return;
> +    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                   _("This version of libxenlight does not support "
> +                     "discard= option passing"));
>   

An error would be reported here, but the overall libxlMakeDisk operation
would succeed right?  Shouldn't it fail if the user requests discard but
it is not supported?

Regards,
Jim

> +#endif
> +}
> +
> +
>  int
>  libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
>  {
> @@ -827,6 +854,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
>      x_disk->removable = 1;
>      x_disk->readwrite = !l_disk->readonly;
>      x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0;
> +    libxlDiskSetDiscard(x_disk, l_disk->discard);
>      /* An empty CDROM must have the empty format, otherwise libxl fails. */
>      if (x_disk->is_cdrom && !x_disk->pdev_path)
>          x_disk->format = LIBXL_DISK_FORMAT_EMPTY;
>
>   




More information about the libvir-list mailing list