From: John Snow <jsnow@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, John Snow <jsnow@redhat.com>,
qemu-devel@nongnu.org, armbru@redhat.com,
vsementsov@parallels.com, stefanha@redhat.com, mreitz@redhat.com
Subject: [Qemu-devel] [PATCH v4 08/20] block: Add bitmap disabled status
Date: Fri, 20 Mar 2015 15:16:51 -0400 [thread overview]
Message-ID: <1426879023-18151-9-git-send-email-jsnow@redhat.com> (raw)
In-Reply-To: <1426879023-18151-1-git-send-email-jsnow@redhat.com>
Add a status indicating the enabled/disabled state of the bitmap.
A bitmap is by default enabled, but you can lock the bitmap into
a read-only state by setting disabled = true.
A previous version of this patch added a QMP interface for changing
the state of the bitmap, but it has since been removed for now until
a use case emerges where this state must be revealed to the user.
The disabled state WILL be used internally for bitmap migration and
bitmap persistence.
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
block.c | 25 +++++++++++++++++++++++++
include/block/block.h | 3 +++
2 files changed, 28 insertions(+)
diff --git a/block.c b/block.c
index 2a590aa..0bf5565 100644
--- a/block.c
+++ b/block.c
@@ -54,6 +54,7 @@
struct BdrvDirtyBitmap {
HBitmap *bitmap;
char *name;
+ bool disabled;
QLIST_ENTRY(BdrvDirtyBitmap) list;
};
@@ -5448,10 +5449,16 @@ BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
bitmap = g_new0(BdrvDirtyBitmap, 1);
bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(sector_granularity) - 1);
bitmap->name = g_strdup(name);
+ bitmap->disabled = false;
QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
return bitmap;
}
+bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
+{
+ return !bitmap->disabled;
+}
+
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
{
BdrvDirtyBitmap *bm, *next;
@@ -5466,6 +5473,16 @@ void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
}
}
+void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
+{
+ bitmap->disabled = true;
+}
+
+void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
+{
+ bitmap->disabled = false;
+}
+
BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
{
BdrvDirtyBitmap *bm;
@@ -5530,12 +5547,14 @@ void bdrv_dirty_iter_init(BlockDriverState *bs,
void bdrv_set_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
int64_t cur_sector, int nr_sectors)
{
+ assert(bdrv_dirty_bitmap_enabled(bitmap));
hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
}
void bdrv_reset_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
int64_t cur_sector, int nr_sectors)
{
+ assert(bdrv_dirty_bitmap_enabled(bitmap));
hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
}
@@ -5544,6 +5563,9 @@ static void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
{
BdrvDirtyBitmap *bitmap;
QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
+ if (!bdrv_dirty_bitmap_enabled(bitmap)) {
+ continue;
+ }
hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
}
}
@@ -5553,6 +5575,9 @@ static void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
{
BdrvDirtyBitmap *bitmap;
QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
+ if (!bdrv_dirty_bitmap_enabled(bitmap)) {
+ continue;
+ }
hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
}
}
diff --git a/include/block/block.h b/include/block/block.h
index 493b7c5..029a8a7 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -457,9 +457,12 @@ BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
const char *name);
void bdrv_dirty_bitmap_make_anon(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
+void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap);
+void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap);
BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs);
uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap);
+bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector);
void bdrv_set_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
int64_t cur_sector, int nr_sectors);
--
2.1.0
next prev parent reply other threads:[~2015-03-20 19:17 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-20 19:16 [Qemu-devel] [PATCH v4 00/20] block: transactionless incremental backup series John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 01/20] docs: incremental backup documentation John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 02/20] qapi: Add optional field "name" to block dirty bitmap John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 03/20] qmp: Ensure consistent granularity type John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 04/20] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2015-03-20 19:39 ` Max Reitz
2015-04-02 9:57 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 05/20] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 06/20] hbitmap: cache array lengths John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 07/20] hbitmap: add hbitmap_merge John Snow
2015-04-02 12:19 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` John Snow [this message]
2015-04-02 12:21 ` [Qemu-devel] [PATCH v4 08/20] block: Add bitmap disabled status Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 09/20] block: Add bitmap successors John Snow
2015-04-02 12:23 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 10/20] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2015-04-02 12:44 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-02 16:55 ` John Snow
2015-04-08 2:15 ` John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 11/20] qmp: add block-dirty-bitmap-clear John Snow
2015-04-02 12:49 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 12/20] qmp: Add dirty bitmap status field in query-block John Snow
2015-04-02 12:49 ` Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 13/20] block: add BdrvDirtyBitmap documentation John Snow
2015-04-02 12:50 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 14/20] block: Ensure consistent bitmap function prototypes John Snow
2015-04-02 12:50 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 15/20] block: Resize bitmaps on bdrv_truncate John Snow
2015-04-02 13:37 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-02 15:57 ` John Snow
2015-04-07 12:57 ` Stefan Hajnoczi
2015-04-07 16:45 ` John Snow
2015-04-08 8:44 ` Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 16/20] hbitmap: truncate tests John Snow
2015-03-20 19:43 ` Max Reitz
2015-04-02 13:43 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 17/20] iotests: add invalid input incremental backup tests John Snow
2015-03-20 19:49 ` Max Reitz
2015-04-02 13:44 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 18/20] iotests: add QMP event waiting queue John Snow
2015-04-02 13:57 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-02 17:19 ` John Snow
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 19/20] iotests: add simple incremental backup case John Snow
2015-03-20 19:50 ` Max Reitz
2015-04-02 14:27 ` Stefan Hajnoczi
2015-04-06 21:49 ` John Snow
2015-04-07 13:00 ` Stefan Hajnoczi
2015-04-13 16:51 ` Max Reitz
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 20/20] iotests: add incremental backup failure recovery test John Snow
2015-03-20 19:51 ` Max Reitz
2015-04-02 14:52 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:52 ` [Qemu-devel] [PATCH v4 00/20] block: transactionless incremental backup series Max Reitz
2015-03-20 19:57 ` John Snow
2015-04-02 14:53 ` [Qemu-devel] [Qemu-block] " 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=1426879023-18151-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-block@nongnu.org \
--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).