diff options
author | John Snow <jsnow@redhat.com> | 2015-04-17 19:49:59 -0400 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2015-04-28 15:36:10 +0200 |
commit | e74e6b78e6fe0c9ee426d1278fff45f5fa0af766 (patch) | |
tree | 7e076da8b90218a37041d5ec59bc3c747abd7a7b /block.c | |
parent | d58d84539784d27c826924a79d9436178b07ff69 (diff) | |
download | qemu-e74e6b78e6fe0c9ee426d1278fff45f5fa0af766.zip qemu-e74e6b78e6fe0c9ee426d1278fff45f5fa0af766.tar.gz qemu-e74e6b78e6fe0c9ee426d1278fff45f5fa0af766.tar.bz2 |
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 <jsnow@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 1429314609-29776-12-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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) { |