summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--block.c17
-rw-r--r--include/block/block.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/block.c b/block.c
index af3584389d..14d2ebc35a 100644
--- a/block.c
+++ b/block.c
@@ -667,6 +667,23 @@ int bdrv_parse_cache_flags(const char *mode, int *flags)
return 0;
}
+int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough)
+{
+ int ret = bdrv_parse_cache_flags(mode, flags);
+ if (ret < 0) {
+ return ret;
+ }
+
+ if (*flags & BDRV_O_CACHE_WB) {
+ *flags &= ~BDRV_O_CACHE_WB;
+ *writethrough = false;
+ } else {
+ *writethrough = true;
+ }
+
+ return 0;
+}
+
/*
* Returns the options and flags that a temporary snapshot should get, based on
* the originally requested flags (the originally requested image will have
diff --git a/include/block/block.h b/include/block/block.h
index b4b4650fd3..4fd6c050f0 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -208,6 +208,7 @@ void bdrv_replace_in_backing_chain(BlockDriverState *old,
BlockDriverState *new);
int bdrv_parse_cache_flags(const char *mode, int *flags);
+int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough);
int bdrv_parse_discard_flags(const char *mode, int *flags);
BdrvChild *bdrv_open_child(const char *filename,
QDict *options, const char *bdref_key,