On 5/13/20 10:49 PM, John Snow wrote:
This is a new job-creating command.
Signed-off-by: John Snow <js...@redhat.com>
---
qapi/block-core.json | 18 +++++++++++
qapi/transaction.json | 2 ++
blockdev.c | 74 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 94 insertions(+)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 0fb527a9a1..f7cae77fc9 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -2250,6 +2250,24 @@
'*auto-finalize': 'bool',
'*auto-dismiss': 'bool' } }
+##
+# @block-dirty-bitmap-populate:
+#
+# Creates a new job that writes a pattern into a dirty bitmap.
+#
+# Since: 5.0
5.1
+++ b/qapi/transaction.json
@@ -50,6 +50,7 @@
# - @block-dirty-bitmap-enable: since 4.0
# - @block-dirty-bitmap-disable: since 4.0
# - @block-dirty-bitmap-merge: since 4.0
+# - @block-dirty-bitmap-populate: since 5.0
ditto
+++ b/blockdev.c
@@ -2233,6 +2233,63 @@ static void
block_dirty_bitmap_remove_commit(BlkActionState *common)
bdrv_release_dirty_bitmap(state->bitmap);
}
+static void block_dirty_bitmap_populate_prepare(BlkActionState *common,
+ Error **errp)
+{
+ BlockJobActionState *state = DO_UPCAST(BlockJobActionState, common,
common);
+ BlockDirtyBitmapPopulate *bitpop;
+ BlockDriverState *bs;
+ AioContext *aio_context;
+ BdrvDirtyBitmap *bmap = NULL;
+ int job_flags = JOB_DEFAULT;
+
+ assert(common->action->type == \
+ TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_POPULATE);
\ is not necessary here.
+ bitpop = common->action->u.block_dirty_bitmap_populate.data;
+
+ bmap = block_dirty_bitmap_lookup(bitpop->node, bitpop->name, &bs, errp);
+ if (!bmap) {
+ return;
+ }
So the bitmap has to already exist, and we are just merging into it,
correct?
Otherwise looks good.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org