From 4e7e5e9f7b29ef1c6924116e045a9b2c4bd3ea1a Mon Sep 17 00:00:00 2001 From: Olaf Hering Date: Mon, 7 Jul 2014 17:05:17 +0200 Subject: [PATCH] libxl: add discard support to libxl_device_disk Translate libvirt discard settings into libxl-4.5 discard settings. Signed-off-by: Olaf Hering --- src/libxl/libxl_conf.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index a1ffdb2063..0b4a0b509c 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -715,6 +715,35 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, return -1; } +static int +libxlDiskSetDiscard(libxl_device_disk *x_disk, int discard) +{ + if (!x_disk->readwrite) + return 0; +#if defined(LIBXL_HAVE_LIBXL_DEVICE_DISK_DISCARD_ENABLE) + switch ((enum virDomainDiskDiscard)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; + case VIR_DOMAIN_DISK_DISCARD_IGNORE: + libxl_defbool_set(&x_disk->discard_enable, false); + break; + } + return 0; +#else + if (discard == VIR_DOMAIN_DISK_DISCARD_DEFAULT) + return 0; + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This version of libxenlight does not support " + "disk 'discard' option passing")); + return -1; +#endif +} + + int libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) { @@ -829,6 +858,8 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) x_disk->removable = 1; x_disk->readwrite = !l_disk->src->readonly; x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; + if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) + return -1; /* 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;