[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 6/9] qmp: add block-dirty-bitmap-copy transaction
From: |
John Snow |
Subject: |
[Qemu-block] [PATCH 6/9] qmp: add block-dirty-bitmap-copy transaction |
Date: |
Thu, 4 Jun 2015 20:20:39 -0400 |
And then add the transaction that allows us to perform this
operation atomically.
Signed-off-by: John Snow <address@hidden>
---
blockdev.c | 39 +++++++++++++++++++++++++++++++++++++++
qapi-schema.json | 4 +++-
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/blockdev.c b/blockdev.c
index 9233bcd..3f9842a 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2012,6 +2012,40 @@ static void block_dirty_bitmap_add_abort(BlkActionState
*common)
}
}
+static void block_dirty_bitmap_copy_prepare(BlkActionState *common,
+ Error **errp)
+{
+ Error *local_err = NULL;
+ BlockDirtyBitmapCopy *action;
+ BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
+ common, common);
+
+ action = common->action->block_dirty_bitmap_copy;
+ /* AIO context taken (and released) within qmp_block_dirty_bitmap_copy */
+ qmp_block_dirty_bitmap_copy(action->node, action->source,
+ action->dest, &local_err);
+
+ if (!local_err) {
+ state->prepared = true;
+ } else {
+ error_propagate(errp, local_err);
+ }
+}
+
+static void block_dirty_bitmap_copy_abort(BlkActionState *common)
+{
+ BlockDirtyBitmapCopy *action;
+ BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
+ common, common);
+
+ action = common->action->block_dirty_bitmap_copy;
+ if (state->prepared) {
+ qmp_block_dirty_bitmap_remove(action->node,
+ action->source,
+ &error_abort);
+ }
+}
+
static void block_dirty_bitmap_clear_prepare(BlkActionState *common,
Error **errp)
{
@@ -2113,6 +2147,11 @@ static const BlkActionOps actions[] = {
.prepare = block_dirty_bitmap_add_prepare,
.abort = block_dirty_bitmap_add_abort,
},
+ [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_COPY] = {
+ .instance_size = sizeof(BlockDirtyBitmapState),
+ .prepare = block_dirty_bitmap_copy_prepare,
+ .abort = block_dirty_bitmap_copy_abort,
+ },
[TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_CLEAR] = {
.instance_size = sizeof(BlockDirtyBitmapState),
.prepare = block_dirty_bitmap_clear_prepare,
diff --git a/qapi-schema.json b/qapi-schema.json
index bbd4b3a..89fdd0f 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1472,6 +1472,7 @@
# blockdev-snapshot-internal-sync since 1.7
# blockdev-backup since 2.3
# block-dirty-bitmap-add since 2.4
+# block-dirty-bitmap-copy since 2.4
# block-dirty-bitmap-clear since 2.4
##
{ 'union': 'TransactionAction',
@@ -1482,7 +1483,8 @@
'abort': 'Abort',
'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal',
'block-dirty-bitmap-add': 'BlockDirtyBitmapAdd',
- 'block-dirty-bitmap-clear': 'BlockDirtyBitmap'
+ 'block-dirty-bitmap-clear': 'BlockDirtyBitmap',
+ 'block-dirty-bitmap-copy': 'BlockDirtyBitmapCopy'
} }
##
--
2.1.0
- [Qemu-block] [PATCH 3/9] block: add bdrv_copy_dirty_bitmap, (continued)
- [Qemu-block] [PATCH 3/9] block: add bdrv_copy_dirty_bitmap, John Snow, 2015/06/04
- [Qemu-block] [PATCH 1/9] qapi: Rename 'dirty-bitmap' mode to 'incremental', John Snow, 2015/06/04
- [Qemu-block] [PATCH 4/9] qapi: add Copy data type for bitmaps, John Snow, 2015/06/04
- [Qemu-block] [PATCH 7/9] block: add differential backup mode, John Snow, 2015/06/04
- [Qemu-block] [PATCH 5/9] qmp: add qmp cmd block-dirty-bitmap-copy, John Snow, 2015/06/04
- [Qemu-block] [PATCH 6/9] qmp: add block-dirty-bitmap-copy transaction,
John Snow <=
- [Qemu-block] [PATCH 9/9] iotests: add differential backup test, John Snow, 2015/06/04
- [Qemu-block] [PATCH 8/9] iotests: 124: support differential backups, John Snow, 2015/06/04
- Re: [Qemu-block] [Qemu-devel] [PATCH 0/9] block: add differential backup support, John Snow, 2015/06/23