From: John Snow <jsnow@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, John Snow <jsnow@redhat.com>,
jcody@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 6/9] qmp: add block-dirty-bitmap-copy transaction
Date: Thu, 4 Jun 2015 20:20:39 -0400 [thread overview]
Message-ID: <1433463642-21840-7-git-send-email-jsnow@redhat.com> (raw)
In-Reply-To: <1433463642-21840-1-git-send-email-jsnow@redhat.com>
And then add the transaction that allows us to perform this
operation atomically.
Signed-off-by: John Snow <jsnow@redhat.com>
---
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
next prev parent reply other threads:[~2015-06-05 0:21 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-05 0:20 [Qemu-devel] [PATCH 0/9] block: add differential backup support John Snow
2015-06-05 0:20 ` [Qemu-devel] [PATCH 1/9] qapi: Rename 'dirty-bitmap' mode to 'incremental' John Snow
2015-06-05 2:34 ` Eric Blake
2015-06-25 16:16 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-06-05 0:20 ` [Qemu-devel] [PATCH 2/9] hbitmap: add hbitmap_copy John Snow
2015-06-05 2:37 ` Eric Blake
2015-06-05 0:20 ` [Qemu-devel] [PATCH 3/9] block: add bdrv_copy_dirty_bitmap John Snow
2015-06-05 2:42 ` Eric Blake
2015-06-05 0:20 ` [Qemu-devel] [PATCH 4/9] qapi: add Copy data type for bitmaps John Snow
2015-06-05 2:57 ` Eric Blake
2015-06-05 0:20 ` [Qemu-devel] [PATCH 5/9] qmp: add qmp cmd block-dirty-bitmap-copy John Snow
2015-06-05 3:04 ` Eric Blake
2015-06-05 0:20 ` John Snow [this message]
2015-06-05 0:20 ` [Qemu-devel] [PATCH 7/9] block: add differential backup mode John Snow
2015-06-05 0:20 ` [Qemu-devel] [PATCH 8/9] iotests: 124: support differential backups John Snow
2015-06-05 0:20 ` [Qemu-devel] [PATCH 9/9] iotests: add differential backup test John Snow
2015-06-23 17:00 ` [Qemu-devel] [PATCH 0/9] block: add differential backup support John Snow
2015-06-24 14:33 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1433463642-21840-7-git-send-email-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).