summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Rogers <brogers@suse.com>2016-03-09 15:18:11 -0700
committerhyokeun <hyokeun.jeon@samsung.com>2016-09-06 15:55:36 +0900
commit224977682905d4cb45ee00bfafa0ccc7b128d118 (patch)
tree835f7b2ef8b446ced9dbd0b291af77ad1bbc4d3c
parentedd1c47dc789a3a492fdc3bc8e70c3a2620b35e2 (diff)
downloadqemu-224977682905d4cb45ee00bfafa0ccc7b128d118.tar.gz
qemu-224977682905d4cb45ee00bfafa0ccc7b128d118.tar.bz2
qemu-224977682905d4cb45ee00bfafa0ccc7b128d118.zip
xen_disk: Add suse specific flush disable handling and map to QEMU equiv
Add code to read the suse specific suse-diskcache-disable-flush flag out of xenstore, and set the equivalent flag within QEMU. Patch taken from Xen's patch queue, Olaf Hering being the original author. [bsc#879425] Signed-off-by: Bruce Rogers <brogers@suse.com> Signed-off-by: Olaf Hering <olaf@aepfle.de>
-rw-r--r--hw/block/xen_disk.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
index 3b8ad33fc..6f37eeb43 100644
--- a/hw/block/xen_disk.c
+++ b/hw/block/xen_disk.c
@@ -111,6 +111,7 @@ struct XenBlkDev {
int requests_inflight;
int requests_finished;
+ gboolean cache_unsafe;
/* Persistent grants extension */
gboolean feature_discard;
gboolean feature_persistent;
@@ -793,6 +794,16 @@ static void blk_parse_discard(struct XenBlkDev *blkdev)
}
}
+static void blk_parse_cache_unsafe(struct XenBlkDev *blkdev)
+{
+ int enable;
+
+ blkdev->cache_unsafe = false;
+
+ if (xenstore_read_be_int(&blkdev->xendev, "suse-diskcache-disable-flush", &enable) == 0)
+ blkdev->cache_unsafe = !!enable;
+}
+
static int blk_init(struct XenDevice *xendev)
{
struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);
@@ -864,6 +875,7 @@ static int blk_init(struct XenDevice *xendev)
xenstore_write_be_int(&blkdev->xendev, "info", info);
blk_parse_discard(blkdev);
+ blk_parse_cache_unsafe(blkdev);
g_free(directiosafe);
return 0;
@@ -906,6 +918,9 @@ static int blk_connect(struct XenDevice *xendev)
qflags |= BDRV_O_UNMAP;
}
+ if (blkdev->cache_unsafe)
+ qflags |= BDRV_O_NO_FLUSH;
+
/* init qemu block driver */
index = (blkdev->xendev.dev - 202 * 256) / 16;
blkdev->dinfo = drive_get(IF_XEN, 0, index);