[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] xen_disk: support cache backend option
Support a backend option "cache" that specifies the cache mode that should be used to open the disk file or device. See: http://marc.info/?l=xen-devel&m=137226872905057 Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> diff --git a/hw/xen_disk.c b/hw/xen_disk.c index f484404..092aa6b 100644 --- a/hw/block/xen_disk.c +++ b/hw/block/xen_disk.c @@ -94,6 +94,7 @@ struct XenBlkDev { char *type; char *dev; char *devtype; + char *cache; const char *fileproto; const char *filename; int ring_ref; @@ -734,6 +735,12 @@ static int blk_init(struct XenDevice *xendev) if (blkdev->devtype == NULL) { blkdev->devtype = xenstore_read_be_str(&blkdev->xendev, "device-type"); } + if (blkdev->cache == NULL) { + blkdev->cache = xenstore_read_be_str(&blkdev->xendev, "cache"); + } + if (blkdev->cache == NULL) { + blkdev->cache = g_strdup("writeback"); + } /* do we have all we need? */ if (blkdev->params == NULL || @@ -774,6 +781,8 @@ out_error: blkdev->dev = NULL; g_free(blkdev->devtype); blkdev->devtype = NULL; + g_free(blkdev->cache); + blkdev->cache = NULL; return -1; } @@ -782,8 +791,14 @@ static int blk_connect(struct XenDevice *xendev) struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); int pers, index, qflags; - /* read-only ? */ - qflags = BDRV_O_CACHE_WB | BDRV_O_NATIVE_AIO; + if (!strcmp(blkdev->cache, "none")) { + qflags = BDRV_O_NATIVE_AIO | BDRV_O_NOCACHE; + } else if (!strcmp(blkdev->cache, "writethrough")) { + qflags = 0; + } else { + /* default to writeback */ + qflags = BDRV_O_NATIVE_AIO | BDRV_O_CACHE_WB; + } if (strcmp(blkdev->mode, "w") == 0) { qflags |= BDRV_O_RDWR; } @@ -950,6 +965,7 @@ static int blk_free(struct XenDevice *xendev) g_free(blkdev->type); g_free(blkdev->dev); g_free(blkdev->devtype); + g_free(blkdev->cache); qemu_bh_delete(blkdev->bh); return 0; } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |