diff options
author | Peter Maydell | 2016-03-30 14:43:04 +0200 |
---|---|---|
committer | Peter Maydell | 2016-03-30 14:43:05 +0200 |
commit | b9c27e7ae6fb1387eafe858d8378ff14cd1c5b89 (patch) | |
tree | 5a66308f776272b19396a47005f5e6438047c8bc /qemu-io-cmds.c | |
parent | Merge remote-tracking branch 'remotes/jasowang/tags/net-pull-request' into st... (diff) | |
parent | iotests: Test qemu-img convert -S 0 behavior (diff) | |
download | qemu-b9c27e7ae6fb1387eafe858d8378ff14cd1c5b89.tar.gz qemu-b9c27e7ae6fb1387eafe858d8378ff14cd1c5b89.tar.xz qemu-b9c27e7ae6fb1387eafe858d8378ff14cd1c5b89.zip |
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block layer patches
# gpg: Signature made Wed 30 Mar 2016 11:57:54 BST using RSA key ID C88F2FD6
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
* remotes/kevin/tags/for-upstream: (48 commits)
iotests: Test qemu-img convert -S 0 behavior
block/null-{co,aio}: Implement get_block_status()
block/null-{co,aio}: Allow reading zeroes
qemu-img: Fix preallocation with -S 0 for convert
block: Remove bdrv_(set_)enable_write_cache()
block: Remove BDRV_O_CACHE_WB
block: Remove bdrv_parse_cache_flags()
qemu-io: Use bdrv_parse_cache_mode() in reopen_f()
block: Use bdrv_parse_cache_mode() in drive_init()
raw: Support BDRV_REQ_FUA
nbd: Support BDRV_REQ_FUA
iscsi: Support BDRV_REQ_FUA
block: Introduce bdrv_co_writev_flags()
block/qapi: Use blk_enable_write_cache()
block: Move enable_write_cache to BB level
block: Handle flush error in bdrv_pwrite_sync()
block: Always set writeback mode in blk_new_open()
block: blockdev_init(): Call blk_set_enable_write_cache() explicitly
xen_disk: Call blk_set_enable_write_cache() explicitly
qemu-img: Call blk_set_enable_write_cache() explicitly
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'qemu-io-cmds.c')
-rw-r--r-- | qemu-io-cmds.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c index 139f7ebcbb..382faa8a2a 100644 --- a/qemu-io-cmds.c +++ b/qemu-io-cmds.c @@ -2106,6 +2106,7 @@ static int reopen_f(BlockBackend *blk, int argc, char **argv) QDict *opts; int c; int flags = bs->open_flags; + bool writethrough = !blk_enable_write_cache(blk); BlockReopenQueue *brq; Error *local_err = NULL; @@ -2113,7 +2114,7 @@ static int reopen_f(BlockBackend *blk, int argc, char **argv) while ((c = getopt(argc, argv, "c:o:r")) != -1) { switch (c) { case 'c': - if (bdrv_parse_cache_flags(optarg, &flags) < 0) { + if (bdrv_parse_cache_mode(optarg, &flags, &writethrough) < 0) { error_report("Invalid cache option: %s", optarg); return 0; } @@ -2138,6 +2139,14 @@ static int reopen_f(BlockBackend *blk, int argc, char **argv) return qemuio_command_usage(&reopen_cmd); } + if (writethrough != blk_enable_write_cache(blk) && + blk_get_attached_dev(blk)) + { + error_report("Cannot change cache.writeback: Device attached"); + qemu_opts_reset(&reopen_opts); + return 0; + } + qopts = qemu_opts_find(&reopen_opts, NULL); opts = qopts ? qemu_opts_to_qdict(qopts, NULL) : NULL; qemu_opts_reset(&reopen_opts); @@ -2146,6 +2155,8 @@ static int reopen_f(BlockBackend *blk, int argc, char **argv) bdrv_reopen_multiple(brq, &local_err); if (local_err) { error_report_err(local_err); + } else { + blk_set_enable_write_cache(blk, !writethrough); } return 0; |