From e74e6b78e6fe0c9ee426d1278fff45f5fa0af766 Mon Sep 17 00:00:00 2001 From: John Snow Date: Fri, 17 Apr 2015 19:49:59 -0400 Subject: qmp: add block-dirty-bitmap-clear Add bdrv_clear_dirty_bitmap and a matching QMP command, qmp_block_dirty_bitmap_clear that enables a user to reset the bitmap attached to a drive. This allows us to reset a bitmap in the event of a full drive backup. Signed-off-by: John Snow Reviewed-by: Max Reitz Reviewed-by: Stefan Hajnoczi Reviewed-by: Eric Blake Message-id: 1429314609-29776-12-git-send-email-jsnow@redhat.com Signed-off-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- block.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'block.c') diff --git a/block.c b/block.c index 9dc5c8cb1a..b7f1f002f3 100644 --- a/block.c +++ b/block.c @@ -63,6 +63,7 @@ struct BdrvDirtyBitmap { HBitmap *bitmap; BdrvDirtyBitmap *successor; + int64_t size; char *name; bool disabled; QLIST_ENTRY(BdrvDirtyBitmap) list; @@ -5557,6 +5558,7 @@ BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, } bitmap = g_new0(BdrvDirtyBitmap, 1); bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity)); + bitmap->size = bitmap_size; bitmap->name = g_strdup(name); bitmap->disabled = false; QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list); @@ -5759,6 +5761,12 @@ void bdrv_reset_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors); } +void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap) +{ + assert(bdrv_dirty_bitmap_enabled(bitmap)); + hbitmap_reset(bitmap->bitmap, 0, bitmap->size); +} + static void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors) { -- cgit v1.2.3