[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] qapi: add dirty bitmap status
From: |
John Snow |
Subject: |
[Qemu-devel] [PATCH] qapi: add dirty bitmap status |
Date: |
Tue, 12 May 2015 15:53:01 -0400 |
Bitmaps can be in a handful of different states with potentially
more to come as we tool around with migration and persistence patches.
Instead of having a bunch of boolean fields, it was suggested that we
just have an enum status field that will help expose the reason to
management APIs why certain bitmaps may be unavailable for various
commands
(e.g. busy in another operation, busy being migrated, etc.)
Suggested-by: Eric Blake <address@hidden>
Signed-off-by: John Snow <address@hidden>
---
block.c | 13 ++++++++++++-
include/block/block.h | 1 +
qapi/block-core.json | 23 +++++++++++++++++++++--
3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/block.c b/block.c
index 7904098..a8b9f25 100644
--- a/block.c
+++ b/block.c
@@ -3104,6 +3104,17 @@ bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
return !(bitmap->disabled || bitmap->successor);
}
+DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
+{
+ if (bdrv_dirty_bitmap_frozen(bitmap)) {
+ return DIRTY_BITMAP_STATUS_FROZEN;
+ } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
+ return DIRTY_BITMAP_STATUS_DISABLED;
+ } else {
+ return DIRTY_BITMAP_STATUS_ACTIVE;
+ }
+}
+
/**
* Create a successor bitmap destined to replace this bitmap after an
operation.
* Requires that the bitmap is not frozen and has no successor.
@@ -3244,7 +3255,7 @@ BlockDirtyInfoList
*bdrv_query_dirty_bitmaps(BlockDriverState *bs)
info->granularity = bdrv_dirty_bitmap_granularity(bm);
info->has_name = !!bm->name;
info->name = g_strdup(bm->name);
- info->frozen = bdrv_dirty_bitmap_frozen(bm);
+ info->status = bdrv_dirty_bitmap_status(bm);
entry->value = info;
*plist = entry;
plist = &entry->next;
diff --git a/include/block/block.h b/include/block/block.h
index 7d1a717..4d3ad88 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -474,6 +474,7 @@ uint32_t
bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap);
bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
+DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t
sector);
void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
int64_t cur_sector, int nr_sectors);
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 863ffea..8411d4f 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -326,6 +326,25 @@
'data': 'bool', '*offset': 'int' } }
##
+# @DirtyBitmapStatus:
+#
+# An enumeration of possible states that a dirty bitmap can report to the user.
+#
+# @frozen: The bitmap is currently in-use by a backup operation or block job,
+# and is immutable.
+#
+# @disabled: The bitmap is currently in-use by an internal operation and is
+# read-only. It can still be deleted.
+#
+# @active: The bitmap is actively monitoring for new writes, and can be
cleared,
+# deleted, or used for backup operations.
+#
+# Since: 2.4
+##
+{ 'enum': 'DirtyBitmapStatus',
+ 'data': ['active', 'disabled', 'frozen'] }
+
+##
# @BlockDirtyInfo:
#
# Block dirty bitmap information.
@@ -336,13 +355,13 @@
#
# @granularity: granularity of the dirty bitmap in bytes (since 1.4)
#
-# @frozen: whether the dirty bitmap is frozen (Since 2.4)
+# @status: current status of the dirty bitmap (since 2.4)
#
# Since: 1.3
##
{ 'struct': 'BlockDirtyInfo',
'data': {'*name': 'str', 'count': 'int', 'granularity': 'uint32',
- 'frozen': 'bool'} }
+ 'status': 'DirtyBitmapStatus'} }
##
# @BlockInfo:
--
2.1.0
- [Qemu-devel] [PATCH] qapi: add dirty bitmap status,
John Snow <=
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, Eric Blake, 2015/05/12
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, John Snow, 2015/05/12
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, John Snow, 2015/05/19
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, Markus Armbruster, 2015/05/20
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, John Snow, 2015/05/21
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, Kevin Wolf, 2015/05/22
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, Markus Armbruster, 2015/05/22
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, Kevin Wolf, 2015/05/22
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, John Snow, 2015/05/22
- Re: [Qemu-devel] [PATCH] qapi: add dirty bitmap status, John Snow, 2015/05/22