The funcion loads dirty bitmap from file, using underlying driver function.
Note: the function doesn't change BdrvDirtyBitmap.file field. This field is only used by bdrv_store_dirty_bitmap() function and is ONLY written by bdrv_dirty_bitmap_set_file() function. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> --- block.c | 18 ++++++++++++++++++ include/block/block.h | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/block.c b/block.c index 492abb4..9148977 100644 --- a/block.c +++ b/block.c @@ -3374,6 +3374,24 @@ bool bdrv_load_check_dirty_bitmap(BlockDriverState *file, const char *name) return false; } +BdrvDirtyBitmap *bdrv_load_dirty_bitmap(BlockDriverState *bs_for, + BlockDriverState *bs_file, + const char *name, + Error **errp) +{ + BlockDriver *drv = bs_file->drv; + if (!drv) { + return NULL; + } + if (drv->bdrv_dirty_bitmap_load) { + return drv->bdrv_dirty_bitmap_load(bs_for, bs_file, name, errp); + } + if (bs_file->file) { + return bdrv_load_dirty_bitmap(bs_for, bs_file->file, name, errp); + } + return NULL; +} + int bdrv_store_dirty_bitmap(BdrvDirtyBitmap *bitmap) { BlockDriverState *bs = bitmap->file; diff --git a/include/block/block.h b/include/block/block.h index 4b9b898..f587a03 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -534,6 +534,10 @@ HBitmap *bdrv_create_meta_bitmap(BdrvDirtyBitmap *bitmap, void bdrv_release_meta_bitmap(BdrvDirtyBitmap *bitmap); bool bdrv_load_check_dirty_bitmap(BlockDriverState *file, const char *name); +BdrvDirtyBitmap *bdrv_load_dirty_bitmap(BlockDriverState *bs_for, + BlockDriverState *bs_file, + const char *name, + Error **errp); int bdrv_store_dirty_bitmap(BdrvDirtyBitmap *bitmap); void bdrv_enable_copy_on_read(BlockDriverState *bs); -- 2.1.4