On 02/14/2017 11:59 AM, Vladimir Sementsov-Ogievskiy wrote: > This will be needed to check some restrictions before making bitmap > persistent in qmp-block-dirty-bitmap-add (this functionality will be > added by future patch) > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > Reviewed-by: Max Reitz <mre...@redhat.com> > --- > block.c | 22 ++++++++++++++++++++++ > include/block/block.h | 2 ++ > include/block/block_int.h | 4 ++++ > 3 files changed, 28 insertions(+) > > diff --git a/block.c b/block.c > index 970e4ca..d5f8af8 100644 > --- a/block.c > +++ b/block.c > @@ -4139,3 +4139,25 @@ void > bdrv_store_persistent_dirty_bitmaps(BlockDriverState *bs, Error **errp) > > drv->bdrv_store_persistent_dirty_bitmaps(bs, errp); > } > + > +bool bdrv_can_store_new_dirty_bitmap(BlockDriverState *bs, const char *name, > + uint32_t granularity, Error **errp) > +{ > + BlockDriver *drv = bs->drv; > + > + if (!drv) { > + error_setg_errno(errp, ENOMEDIUM, > + "Can't store persistent bitmaps to %s", > + bdrv_get_device_or_node_name(bs)); > + return false; > + } > + > + if (!drv->bdrv_can_store_new_dirty_bitmap) { > + error_setg_errno(errp, ENOTSUP, > + "Can't store persistent bitmaps to %s", > + bdrv_get_device_or_node_name(bs)); > + return false; > + } > + > + return drv->bdrv_can_store_new_dirty_bitmap(bs, name, granularity, errp); > +} > diff --git a/include/block/block.h b/include/block/block.h > index 0a20d68..ebf99b3 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -553,5 +553,7 @@ void bdrv_del_child(BlockDriverState *parent, BdrvChild > *child, Error **errp); > > void bdrv_load_autoloading_dirty_bitmaps(BlockDriverState *bs, Error **errp); > void bdrv_store_persistent_dirty_bitmaps(BlockDriverState *bs, Error **errp); > +bool bdrv_can_store_new_dirty_bitmap(BlockDriverState *bs, const char *name, > + uint32_t granularity, Error **errp); > > #endif > diff --git a/include/block/block_int.h b/include/block/block_int.h > index c3505da..db68067 100644 > --- a/include/block/block_int.h > +++ b/include/block/block_int.h > @@ -324,6 +324,10 @@ struct BlockDriver { > Error **errp); > void (*bdrv_store_persistent_dirty_bitmaps)(BlockDriverState *bs, > Error **errp); > + bool (*bdrv_can_store_new_dirty_bitmap)(BlockDriverState *bs, > + const char *name, > + uint32_t granularity, > + Error **errp); > > QLIST_ENTRY(BlockDriver) list; > }; >
Reviewed-by: John Snow <js...@redhat.com>