mirror of https://github.com/xemu-project/xemu.git
block/dirty-bitmap: add _locked version of bdrv_reclaim_dirty_bitmap
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: John Snow <jsnow@redhat.com> Message-id: 20180207155837.92351-4-vsementsov@virtuozzo.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
604ab74bb5
commit
044ee8e143
|
@ -320,17 +320,13 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
|
||||||
* In cases of failure where we can no longer safely delete the parent,
|
* In cases of failure where we can no longer safely delete the parent,
|
||||||
* we may wish to re-join the parent and child/successor.
|
* we may wish to re-join the parent and child/successor.
|
||||||
* The merged parent will be un-frozen, but not explicitly re-enabled.
|
* 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,
|
BdrvDirtyBitmap *parent,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
BdrvDirtyBitmap *successor;
|
BdrvDirtyBitmap *successor = parent->successor;
|
||||||
|
|
||||||
qemu_mutex_lock(parent->mutex);
|
|
||||||
|
|
||||||
successor = parent->successor;
|
|
||||||
|
|
||||||
if (!successor) {
|
if (!successor) {
|
||||||
error_setg(errp, "Cannot reclaim a successor when none is present");
|
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);
|
bdrv_release_dirty_bitmap_locked(bs, successor);
|
||||||
parent->successor = NULL;
|
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);
|
qemu_mutex_unlock(parent->mutex);
|
||||||
|
|
||||||
return parent;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -93,5 +93,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs,
|
||||||
BdrvDirtyBitmap *bitmap);
|
BdrvDirtyBitmap *bitmap);
|
||||||
char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp);
|
char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp);
|
||||||
int64_t bdrv_dirty_bitmap_next_zero(BdrvDirtyBitmap *bitmap, uint64_t start);
|
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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue