[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/48] block: Remove copy-on-read from bdrv_move_feat
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 02/48] block: Remove copy-on-read from bdrv_move_feature_fields() |
Date: |
Tue, 29 Mar 2016 17:08:02 +0200 |
Ever since we first introduced bdrv_append() in commit 8802d1fd ('qapi:
Introduce blockdev-group-snapshot-sync command'), the copy-on-read flag
was moved to the new top layer when taking a snapshot. The only problem
is that it doesn't make a whole lot of sense.
The use case for manually enabled CoR is to avoid reading data twice
from a slow remote image, so we want to save it to a local overlay, say
an ISO image accessed via HTTP to a local qcow2 overlay. When taking a
snapshot, we end up with a backing chain like this:
http <- local.qcow2 <- snap_overlay.qcow2
There is no point in doing CoR from local.qcow2 into snap_overlay.qcow2,
we just want to keep copying data from the remote source into
local.qcow2.
The other use case of CoR is in the context of streaming, which isn't
very interesting for bdrv_move_feature_fields() because op blockers
prevent this combination.
This patch makes the copy-on-read flag stay on the image for which it
was originally set and prevents it from being propagated to the new
overlay. It is no longer intended to move CoR to the BlockBackend level.
In order for this to make sense, we also need to keep the respective
image read-write.
As a side effect of these changes, creating a live snapshot image (as
opposed to using an existing externally created one) on top of a COR
block device works now. It used to fail because it tried to open its
backing file both read-only and with COR.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block.c | 2 --
blockdev.c | 7 +++++--
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index e0b280b..ee34c8c 100644
--- a/block.c
+++ b/block.c
@@ -2248,8 +2248,6 @@ static void bdrv_move_feature_fields(BlockDriverState
*bs_dest,
/* move some fields that need to stay attached to the device */
/* dev info */
- bs_dest->copy_on_read = bs_src->copy_on_read;
-
bs_dest->enable_write_cache = bs_src->enable_write_cache;
/* dirty bitmap */
diff --git a/blockdev.c b/blockdev.c
index 35f8515..914b526 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1741,6 +1741,7 @@ static void external_snapshot_prepare(BlkActionState
*common,
}
flags = state->old_bs->open_flags;
+ flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
/* create new image w/backing file */
mode = s->has_mode ? s->mode : NEW_IMAGE_MODE_ABSOLUTE_PATHS;
@@ -1811,8 +1812,10 @@ static void external_snapshot_commit(BlkActionState
*common)
/* We don't need (or want) to use the transactional
* bdrv_reopen_multiple() across all the entries at once, because we
* don't want to abort all of them if one of them fails the reopen */
- bdrv_reopen(state->old_bs, state->old_bs->open_flags & ~BDRV_O_RDWR,
- NULL);
+ if (!state->old_bs->copy_on_read) {
+ bdrv_reopen(state->old_bs, state->old_bs->open_flags & ~BDRV_O_RDWR,
+ NULL);
+ }
}
static void external_snapshot_abort(BlkActionState *common)
--
1.8.3.1
- [Qemu-devel] [PULL 00/48] Block layer patches, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 01/48] block: Remove bdrv_make_anon(), Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 04/48] block: Remove cache.writeback from blockdev-add, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 02/48] block: Remove copy-on-read from bdrv_move_feature_fields(),
Kevin Wolf <=
- [Qemu-devel] [PULL 03/48] block: Remove dirty bitmaps from bdrv_move_feature_fields(), Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 05/48] block: Make backing files always writeback, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 09/48] block/qapi: make two printf() formats literal, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 11/48] block/qapi: Set s->device in bdrv_query_stats(), Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 08/48] block: Remove blk_set_bs(), Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 07/48] block/raw-posix.c: Make physical devices usable in QEMU under Mac OS X host, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 06/48] block: Reject writethrough mode except at the root, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 10/48] block/qapi: fix unbounded stack for dump_qdict, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 14/48] qemu-img/qemu-io: don't prompt for passwords if not required, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 12/48] block/qapi: Pass bdrv_query_blk_stats() s->stats, Kevin Wolf, 2016/03/29