]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxl: add discard support to libxl_device_disk
authorOlaf Hering <olaf@aepfle.de>
Mon, 7 Jul 2014 15:05:17 +0000 (17:05 +0200)
committerJim Fehlig <jfehlig@suse.com>
Wed, 9 Jul 2014 17:10:55 +0000 (11:10 -0600)
Translate libvirt discard settings into libxl-4.5 discard settings.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
src/libxl/libxl_conf.c

index a1ffdb206301b44bf372451464be6bfb24f7b9db..0b4a0b509c006836549d8b91f72276b0ea02f50a 100644 (file)
@@ -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;