On 02.02.2017 11:41, Vladimir Sementsov-Ogievskiy wrote: > 01.02.2017 02:20, Max Reitz wrote: >> On 23.01.2017 13:10, Vladimir Sementsov-Ogievskiy wrote: >>> Realize .bdrv_remove_persistent_dirty_bitmap interface. >>> >>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> >>> --- >>> block/qcow2-bitmap.c | 40 ++++++++++++++++++++++++++++++++++++++++ >>> block/qcow2.c | 1 + >>> block/qcow2.h | 3 +++ >>> 3 files changed, 44 insertions(+) >>> >>> diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c >>> index 2687a3acd5..be026fc80e 100644 >>> --- a/block/qcow2-bitmap.c >>> +++ b/block/qcow2-bitmap.c >>> @@ -1064,6 +1064,46 @@ static Qcow2Bitmap >>> *find_bitmap_by_name(Qcow2BitmapList *bm_list, >>> return NULL; >>> } >>> +void qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs, >>> + const char *name, >>> + Error **errp) >>> +{ >>> + int ret; >>> + BDRVQcow2State *s = bs->opaque; >>> + Qcow2Bitmap *bm; >>> + Qcow2BitmapList *bm_list; >>> + >>> + if (s->nb_bitmaps == 0) { >>> + /* No bitmaps - nothing to do */ >> Shouldn't it be an error? I.e. "bitmap not found"? >> >>> + return; >>> + } >>> + >>> + bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, >>> + s->bitmap_directory_size, errp); >>> + if (bm_list == NULL) { >>> + return; >>> + } >>> + >>> + bm = find_bitmap_by_name(bm_list, name); >>> + if (bm == NULL) { >>> + goto fail; >> What about setting errp? Or do you not consider this an error? >> >> I think it should be an error. >> >>> + } >>> + >>> + QSIMPLEQ_REMOVE(bm_list, bm, Qcow2Bitmap, entry); >> bm->name is leaked here. > > No, bitmap_free(bm) below will free it.
Oops, right. Well then: Reviewed-by: Max Reitz <mre...@redhat.com>
signature.asc
Description: OpenPGP digital signature