To just release successor and unfreeze bitmap without any additional work. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> Signed-off-by: Denis V. Lunev <d...@openvz.org> --- block/dirty-bitmap.c | 10 ++++++++++ include/block/dirty-bitmap.h | 2 ++ 2 files changed, 12 insertions(+)
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index ab2c7f5..32aa6eb 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -274,6 +274,16 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, return parent; } +void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs, + BdrvDirtyBitmap *parent) +{ + BdrvDirtyBitmap *successor = parent->successor; + + if (successor) { + bdrv_release_dirty_bitmap(bs, successor); + parent->successor = NULL; + } +} /** * Truncates _all_ bitmaps attached to a BDS. */ diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h index 57b476c..20b3ec7 100644 --- a/include/block/dirty-bitmap.h +++ b/include/block/dirty-bitmap.h @@ -20,6 +20,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs, BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, Error **errp); +void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs, + BdrvDirtyBitmap *bitmap); void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap); BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name); -- 1.8.3.1