File libxl.add-option-to-disable-disk-cache-flushes-in-qdisk.patch of Package xen.6117

https://bugzilla.novell.com/show_bug.cgi?id=879425
---
 tools/libxl/libxl.c         |    2 ++
 tools/libxl/libxl.h         |   12 ++++++++++++
 tools/libxl/libxlu_disk.c   |    2 ++
 tools/libxl/libxlu_disk_i.h |    2 +-
 tools/libxl/libxlu_disk_l.l |    1 +
 5 files changed, 18 insertions(+), 1 deletion(-)

Index: xen-4.5.5-testing/tools/libxl/libxl.c
===================================================================
--- xen-4.5.5-testing.orig/tools/libxl/libxl.c
+++ xen-4.5.5-testing/tools/libxl/libxl.c
@@ -2848,6 +2848,8 @@ static void device_disk_add(libxl__egc *
         flexarray_append_pair(back, "discard-enable",
                               libxl_defbool_val(disk->discard_enable) ?
                               "1" : "0");
+        if ((disk->readwrite & ~LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MASK) == LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MAGIC)
+            flexarray_append_pair(back, "suse-diskcache-disable-flush", "1");
 
         flexarray_append(front, "backend-id");
         flexarray_append(front, libxl__sprintf(gc, "%d", disk->backend_domid));
Index: xen-4.5.5-testing/tools/libxl/libxl.h
===================================================================
--- xen-4.5.5-testing.orig/tools/libxl/libxl.h
+++ xen-4.5.5-testing/tools/libxl/libxl.h
@@ -163,6 +163,18 @@
 #define LIBXL_HAVE_BUILDINFO_HVM_MMIO_HOLE_MEMKB 1
 
 /*
+ * The libxl_device_disk has no way to indicate that cache=unsafe is
+ * supposed to be used. Provide this knob without breaking the ABI.
+ * This is done by overloading struct libxl_device_disk->readwrite:
+ * readwrite == 0: disk is readonly, no discard
+ * readwrite == 1: disk is readwrite, backend driver may enable discard
+ * readwrite == MAGIC: disk is readwrite, backend driver should ignore
+ * flush requests from the frontend driver.
+ */
+#define LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MAGIC 0x00006000U
+#define LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MASK  0xffff0fffU
+
+/*
  * libxl ABI compatibility
  *
  * The only guarantee which libxl makes regarding ABI compatibility
Index: xen-4.5.5-testing/tools/libxl/libxlu_disk.c
===================================================================
--- xen-4.5.5-testing.orig/tools/libxl/libxlu_disk.c
+++ xen-4.5.5-testing/tools/libxl/libxlu_disk.c
@@ -79,6 +79,8 @@ int xlu_disk_parse(XLU_Config *cfg,
         if (!disk->pdev_path || !strcmp(disk->pdev_path, ""))
             disk->format = LIBXL_DISK_FORMAT_EMPTY;
     }
+    if (disk->readwrite && dpc.suse_diskcache_disable_flush)
+        disk->readwrite = (disk->readwrite & LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MASK) | LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MAGIC;
 
     if (!disk->vdev) {
         xlu__disk_err(&dpc,0, "no vdev specified");
Index: xen-4.5.5-testing/tools/libxl/libxlu_disk_i.h
===================================================================
--- xen-4.5.5-testing.orig/tools/libxl/libxlu_disk_i.h
+++ xen-4.5.5-testing/tools/libxl/libxlu_disk_i.h
@@ -10,7 +10,7 @@ typedef struct {
     void *scanner;
     YY_BUFFER_STATE buf;
     libxl_device_disk *disk;
-    int access_set, had_depr_prefix;
+    int access_set, suse_diskcache_disable_flush, had_depr_prefix;
     const char *spec;
 } DiskParseContext;
 
Index: xen-4.5.5-testing/tools/libxl/libxlu_disk_l.l
===================================================================
--- xen-4.5.5-testing.orig/tools/libxl/libxlu_disk_l.l
+++ xen-4.5.5-testing/tools/libxl/libxlu_disk_l.l
@@ -176,6 +176,7 @@ script=[^,]*,?	{ STRIP(','); SAVESTRING(
 direct-io-safe,? { DPC->disk->direct_io_safe = 1; }
 discard,?	{ libxl_defbool_set(&DPC->disk->discard_enable, true); }
 no-discard,?	{ libxl_defbool_set(&DPC->disk->discard_enable, false); }
+suse-diskcache-disable-flush,? { DPC->suse_diskcache_disable_flush = 1; }
 
  /* the target magic parameter, eats the rest of the string */
 
openSUSE Build Service is sponsored by