Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> --- include/block/dirty-bitmap.h | 3 +++ block/dirty-bitmap.c | 25 ++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h index 93d4336505..caf1f3d861 100644 --- a/include/block/dirty-bitmap.h +++ b/include/block/dirty-bitmap.h @@ -92,5 +92,8 @@ bool bdrv_has_changed_persistent_bitmaps(BlockDriverState *bs); BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs, BdrvDirtyBitmap *bitmap); char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp); +BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockDriverState *bs, + BdrvDirtyBitmap *bitmap, + Error **errp); #endif diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index d83da077d5..fe27ddfb83 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -327,15 +327,11 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs, * The merged parent will be un-frozen, but not explicitly re-enabled. * Called with BQL taken. */ -BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, - BdrvDirtyBitmap *parent, - Error **errp) +BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockDriverState *bs, + BdrvDirtyBitmap *parent, + Error **errp) { - BdrvDirtyBitmap *successor; - - qemu_mutex_lock(parent->mutex); - - successor = parent->successor; + BdrvDirtyBitmap *successor = parent->successor; if (!successor) { error_setg(errp, "Cannot reclaim a successor when none is present"); @@ -349,9 +345,20 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, bdrv_release_dirty_bitmap_locked(bs, successor); parent->successor = NULL; + return parent; +} + +BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, + BdrvDirtyBitmap *parent, + Error **errp) +{ + BdrvDirtyBitmap *ret; + + qemu_mutex_lock(parent->mutex); + ret = bdrv_reclaim_dirty_bitmap_locked(bs, parent, errp); qemu_mutex_unlock(parent->mutex); - return parent; + return ret; } /** -- 2.11.1