-Signed-off-by: Josh Durgin <address@hidden>
----
- block/rbd.c | 19 +++++++++++++++++++
- 1 files changed, 19 insertions(+), 0 deletions(-)
-
-diff --git a/block/rbd.c b/block/rbd.c
-index 1280d66..eebc334 100644
---- a/block/rbd.c
-+++ b/block/rbd.c
-@@ -476,6 +476,25 @@ static int qemu_rbd_open(BlockDriverState *bs, const char *filename, int flags)
- s->snap = g_strdup(snap_buf);
- }
-
-+ /*
-+ * Fallback to more conservative semantics if setting cache
-+ * options fails. Ignore errors from setting rbd_cache because the
-+ * only possible error is that the option does not exist, and
-+ * librbd defaults to no caching. If write through caching cannot
-+ * be set up, fall back to no caching.
-+ */
-+ if (flags & BDRV_O_NOCACHE) {
-+ rados_conf_set(s->cluster, "rbd_cache", "false");
-+ } else {
-+ rados_conf_set(s->cluster, "rbd_cache", "true");
-+ if (!(flags & BDRV_O_CACHE_WB)) {
-+ r = rados_conf_set(s->cluster, "rbd_cache_max_dirty", "0");
-+ if (r < 0) {
-+ rados_conf_set(s->cluster, "rbd_cache", "false");
-+ }
-+ }
-+ }
-+
- if (strstr(conf, "conf=") == NULL) {
- /* try default location, but ignore failure */
- rados_conf_read_file(s->cluster, NULL);
---
-1.7.5.4