diff options
author | Bruce Rogers <brogers@suse.com> | 2016-03-09 15:18:11 -0700 |
---|---|---|
committer | hyokeun <hyokeun.jeon@samsung.com> | 2016-09-06 15:55:36 +0900 |
commit | 224977682905d4cb45ee00bfafa0ccc7b128d118 (patch) | |
tree | 835f7b2ef8b446ced9dbd0b291af77ad1bbc4d3c | |
parent | edd1c47dc789a3a492fdc3bc8e70c3a2620b35e2 (diff) | |
download | qemu-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.c | 15 |
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); |