From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, John Snow <jsnow@redhat.com>,
armbru@redhat.com, mreitz@redhat.com, vsementsov@parallels.com,
stefanha@redhat.com
Subject: [Qemu-devel] [PATCH v10 08/13] block: add bdrv_reclaim_dirty_bitmap
Date: Mon, 22 Dec 2014 20:12:17 -0500 [thread overview]
Message-ID: <1419297142-24282-9-git-send-email-jsnow@redhat.com> (raw)
In-Reply-To: <1419297142-24282-1-git-send-email-jsnow@redhat.com>
For a synchronization bitmap that has been used for
a failed operation, we may wish to merge that bitmap
back with the bitmap we copied it from so that no
dirty bit tracking information is lost due to the
failed operation.
For this operation, I add bdrv_reclaim_dirty_bitmap,
which takes a BdrvDirtyBitmap associated with a failed
operation and merges the bitmap back with the BdrvDirtyBitmap
that spawned it, then frees this failed bitmap.
Signed-off-by: John Snow <jsnow@redhat.com>
---
block.c | 13 +++++++++++++
include/block/block.h | 2 ++
2 files changed, 15 insertions(+)
diff --git a/block.c b/block.c
index f9e0767..990b9eb 100644
--- a/block.c
+++ b/block.c
@@ -53,6 +53,7 @@
struct BdrvDirtyBitmap {
HBitmap *bitmap;
+ BdrvDirtyBitmap *originator;
int64_t size;
int64_t granularity;
char *name;
@@ -5352,6 +5353,7 @@ BdrvDirtyBitmap *bdrv_copy_dirty_bitmap(BlockDriverState *bs,
BdrvDirtyBitmap *new_bitmap;
new_bitmap = g_malloc0(sizeof(BdrvDirtyBitmap));
+ new_bitmap->originator = bitmap;
new_bitmap->bitmap = hbitmap_copy(bitmap->bitmap);
new_bitmap->size = bitmap->size;
new_bitmap->granularity = bitmap->granularity;
@@ -5360,6 +5362,17 @@ BdrvDirtyBitmap *bdrv_copy_dirty_bitmap(BlockDriverState *bs,
return new_bitmap;
}
+BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
+ BdrvDirtyBitmap *failed)
+{
+ BdrvDirtyBitmap *originator = failed->originator;
+ hbitmap_merge(originator->bitmap, failed->bitmap);
+ bdrv_release_dirty_bitmap(bs, failed);
+
+ return originator;
+}
+
+
BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
int granularity,
const char *name,
diff --git a/include/block/block.h b/include/block/block.h
index e964abd..e51ca45 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -439,6 +439,8 @@ void bdrv_dirty_bitmap_make_anon(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
BdrvDirtyBitmap *bdrv_copy_dirty_bitmap(BlockDriverState *bs,
BdrvDirtyBitmap *bitmap,
const char *name);
+BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
+ BdrvDirtyBitmap *failed);
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs);
uint64_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
--
1.9.3
next prev parent reply other threads:[~2014-12-23 1:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-23 1:12 [Qemu-devel] [PATCH v10 00/13] block: Incremental backup series (RFC) John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 01/13] block: fix spoiling all dirty bitmaps by mirror and migration John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 02/13] qapi: Add optional field "name" to block dirty bitmap John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 03/13] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 04/13] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 05/13] hbitmap: Add hbitmap_copy John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 06/13] block: Add bdrv_copy_dirty_bitmap and bdrv_clear_dirty_bitmap John Snow
2014-12-30 13:47 ` Vladimir Sementsov-Ogievskiy
2015-01-10 3:25 ` John Snow
2015-01-13 9:54 ` Vladimir Sementsov-Ogievskiy
2015-01-13 16:37 ` John Snow
2015-01-13 16:43 ` Vladimir Sementsov-Ogievskiy
2015-01-13 16:45 ` John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 07/13] hbitmap: add hbitmap_merge John Snow
2014-12-23 1:12 ` John Snow [this message]
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 09/13] qmp: Add block-dirty-bitmap-enable and block-dirty-bitmap-disable John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 10/13] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 11/13] qapi: Add transaction support to block-dirty-bitmap-{add, enable, disable} John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 12/13] qmp: Add dirty bitmap 'enabled' field in query-block John Snow
2014-12-23 1:12 ` [Qemu-devel] [PATCH v10 13/13] qemu-iotests: Add tests for drive-backup sync=dirty-bitmap John Snow
2014-12-23 11:48 ` [Qemu-devel] [PATCH v10 00/13] block: Incremental backup series (RFC) Vladimir Sementsov-Ogievskiy
2014-12-23 16:23 ` John Snow
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=1419297142-24282-9-git-send-email-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@parallels.com \
/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).