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 | focaccia-qemu-e74e6b78e6fe0c9ee426d1278fff45f5fa0af766.tar.gz focaccia-qemu-e74e6b78e6fe0c9ee426d1278fff45f5fa0af766.zip | |
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
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) { |