Signed-off-by: Fam Zheng <f...@redhat.com> --- blockdev.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/blockdev.c b/blockdev.c index 5eaf77e..859fa2e 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1398,6 +1398,7 @@ typedef struct ExternalSnapshotState { BlockDriverState *old_bs; BlockDriverState *new_bs; AioContext *aio_context; + Error *blocker; } ExternalSnapshotState; static void external_snapshot_prepare(BlkTransactionState *common, @@ -1519,6 +1520,9 @@ static void external_snapshot_prepare(BlkTransactionState *common, if (ret != 0) { error_propagate(errp, local_err); } + + error_setg(&state->blocker, "snapshot in progress"); + bdrv_op_block(state->old_bs, BLOCK_OP_TYPE_DEVICE_IO, state->blocker); } static void external_snapshot_commit(BlkTransactionState *common) @@ -1536,6 +1540,9 @@ static void external_snapshot_commit(BlkTransactionState *common) bdrv_reopen(state->new_bs, state->new_bs->open_flags & ~BDRV_O_RDWR, NULL); + bdrv_op_unblock(state->old_bs, BLOCK_OP_TYPE_DEVICE_IO, state->blocker); + error_free(state->blocker); + aio_context_release(state->aio_context); } -- 1.9.3