On 11/28/2017 02:14 AM, Vladimir Sementsov-Ogievskiy wrote: > Add version of qcow2_reopen_bitmaps_rw, which do the same work but > also return a hint about was header updated or not. This will be > used in the following fix for bitmaps reloading after migration. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- > block/qcow2.h | 2 ++ > block/qcow2-bitmap.c | 15 ++++++++++++++- > 2 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/block/qcow2.h b/block/qcow2.h > index 6f0ff15dd0..40fa5b7cfe 100644 > --- a/block/qcow2.h > +++ b/block/qcow2.h > @@ -667,6 +667,8 @@ int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, > BdrvCheckResult *res, > void **refcount_table, > int64_t *refcount_table_size); > bool qcow2_load_autoloading_dirty_bitmaps(BlockDriverState *bs, Error > **errp); > +int qcow2_reopen_bitmaps_rw_hint(BlockDriverState *bs, bool *header_updated, > + Error **errp); > int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp); > void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs, Error > **errp); > int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp); > diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c > index f45e46cfbd..6c80dcda69 100644 > --- a/block/qcow2-bitmap.c > +++ b/block/qcow2-bitmap.c > @@ -1002,7 +1002,8 @@ fail: > return false; > } > > -int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp) > +int qcow2_reopen_bitmaps_rw_hint(BlockDriverState *bs, bool *header_updated, > + Error **errp) > { > BDRVQcow2State *s = bs->opaque; > Qcow2BitmapList *bm_list; > @@ -1010,6 +1011,10 @@ int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, > Error **errp) > GSList *ro_dirty_bitmaps = NULL; > int ret = 0; > > + if (header_updated != NULL) { > + *header_updated = false; > + } > + > if (s->nb_bitmaps == 0) { > /* No bitmaps - nothing to do */ > return 0; > @@ -1053,6 +1058,9 @@ int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error > **errp) > error_setg_errno(errp, -ret, "Can't update bitmap directory"); > goto out; > } > + if (header_updated != NULL) { > + *header_updated = true; > + } > g_slist_foreach(ro_dirty_bitmaps, set_readonly_helper, false); > } > > @@ -1063,6 +1071,11 @@ out: > return ret; > } > > +int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp) > +{ > + return qcow2_reopen_bitmaps_rw_hint(bs, NULL, errp); > +} > + > /* store_bitmap_data() > * Store bitmap to image, filling bitmap table accordingly. > */ >
Reviewed-by: John Snow <js...@redhat.com>