From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36111) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z1zVm-0001io-Kw for qemu-devel@nongnu.org; Mon, 08 Jun 2015 12:02:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z1zVi-0001AT-SZ for qemu-devel@nongnu.org; Mon, 08 Jun 2015 12:02:54 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:38531 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z1zVi-00018U-Fj for qemu-devel@nongnu.org; Mon, 08 Jun 2015 12:02:50 -0400 From: Vladimir Sementsov-Ogievskiy Date: Mon, 8 Jun 2015 18:21:23 +0300 Message-Id: <1433776886-27239-6-git-send-email-vsementsov@virtuozzo.com> In-Reply-To: <1433776886-27239-1-git-send-email-vsementsov@virtuozzo.com> References: <1433776886-27239-1-git-send-email-vsementsov@virtuozzo.com> Subject: [Qemu-devel] [PATCH 5/8] qcow2: add qcow2_dirty_bitmap_delete_all List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, Vladimir Sementsov-Ogievskiy , stefanha@redhat.com, pbonzini@redhat.com, den@openvz.org, jsnow@redhat.com From: Vladimir Sementsov-Ogievskiy Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/qcow2-dirty-bitmap.c | 29 +++++++++++++++++++++++++++++ block/qcow2.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/block/qcow2-dirty-bitmap.c b/block/qcow2-dirty-bitmap.c index bc0167c..db83112 100644 --- a/block/qcow2-dirty-bitmap.c +++ b/block/qcow2-dirty-bitmap.c @@ -501,3 +501,32 @@ int qcow2_dirty_bitmap_delete(BlockDriverState *bs, return ret; } + +int qcow2_delete_all_dirty_bitmaps(BlockDriverState *bs, Error **errp) +{ + BDRVQcowState *s = bs->opaque; + int ret = 0, i; + + for (i = 0; i < s->nb_dirty_bitmaps; ++i) { + ret = qcow2_dirty_bitmap_free_clusters(bs, s->dirty_bitmaps + i); + if (ret < 0) { + error_setg_errno(errp, -ret, + "Failed to free dirty bitmap clusters"); + return ret; + } + g_free(s->dirty_bitmaps[i].name); + } + + g_free(s->dirty_bitmaps); + s->nb_dirty_bitmaps = 0; + + ret = qcow2_write_dirty_bitmaps(bs); + if (ret < 0) { + error_setg_errno(errp, -ret, + "Failed to remove dirty bitmaps" + " from dirty bitmap list"); + return ret; + } + + return ret; +} diff --git a/block/qcow2.h b/block/qcow2.h index 24beee0..b5e576c 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -616,6 +616,8 @@ int qcow2_dirty_bitmap_create(BlockDriverState *bs, const char *name, int qcow2_dirty_bitmap_delete(BlockDriverState *bs, const char *name, Error **errp); +int qcow2_delete_all_dirty_bitmaps(BlockDriverState *bs, + Error **errp); void qcow2_free_dirty_bitmaps(BlockDriverState *bs); int qcow2_read_dirty_bitmaps(BlockDriverState *bs); -- 1.9.1