diff options
Diffstat (limited to 'block/dirty-bitmap.c')
-rw-r--r-- | block/dirty-bitmap.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 75435f6c2f..ce00ff3474 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -320,17 +320,13 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs, * In cases of failure where we can no longer safely delete the parent, * we may wish to re-join the parent and child/successor. * The merged parent will be un-frozen, but not explicitly re-enabled. - * Called with BQL taken. + * Called within bdrv_dirty_bitmap_lock..unlock and 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"); @@ -344,9 +340,21 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, bdrv_release_dirty_bitmap_locked(bs, successor); parent->successor = NULL; + return parent; +} + +/* Called with BQL taken. */ +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; } /** |