Loading block/dirty-bitmap.c +18 −10 Original line number Diff line number Diff line Loading @@ -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 *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"); Loading @@ -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; } /** Loading include/block/dirty-bitmap.h +3 −0 Original line number Diff line number Diff line Loading @@ -93,5 +93,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs, BdrvDirtyBitmap *bitmap); char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp); int64_t bdrv_dirty_bitmap_next_zero(BdrvDirtyBitmap *bitmap, uint64_t start); BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, Error **errp); #endif Loading
block/dirty-bitmap.c +18 −10 Original line number Diff line number Diff line Loading @@ -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 *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"); Loading @@ -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; } /** Loading
include/block/dirty-bitmap.h +3 −0 Original line number Diff line number Diff line Loading @@ -93,5 +93,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs, BdrvDirtyBitmap *bitmap); char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp); int64_t bdrv_dirty_bitmap_next_zero(BdrvDirtyBitmap *bitmap, uint64_t start); BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, Error **errp); #endif