From patchwork Mon Aug 8 15:05:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 9268591 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C17A26075A for ; Mon, 8 Aug 2016 15:39:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B2A4F2815E for ; Mon, 8 Aug 2016 15:39:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A651E283E4; Mon, 8 Aug 2016 15:39:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4A8C22815E for ; Mon, 8 Aug 2016 15:39:55 +0000 (UTC) Received: from localhost ([::1]:58169 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bWmeg-0008BB-C3 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 08 Aug 2016 11:39:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42492) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bWm7V-00071H-AH for qemu-devel@nongnu.org; Mon, 08 Aug 2016 11:05:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bWm7R-0004UO-2x for qemu-devel@nongnu.org; Mon, 08 Aug 2016 11:05:37 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:8429 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bWm7Q-0004Sa-MP for qemu-devel@nongnu.org; Mon, 08 Aug 2016 11:05:33 -0400 Received: from kvm.qa.sw.ru. ([10.28.8.145]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id u77NfZce001857; Mon, 8 Aug 2016 02:41:39 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Mon, 8 Aug 2016 18:05:19 +0300 Message-Id: <1470668720-211300-29-git-send-email-vsementsov@virtuozzo.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1470668720-211300-1-git-send-email-vsementsov@virtuozzo.com> References: <1470668720-211300-1-git-send-email-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH 28/29] qcow2-bitmap: do not try reloading bitmaps X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, famz@redhat.com, armbru@redhat.com, mreitz@redhat.com, stefanha@redhat.com, pbonzini@redhat.com, den@openvz.org, jsnow@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Sometimes image is being reopened without removing bdrv state and therefore bitmaps. So here we allow not loading qcow2 bitmap if it already exists. It may lead to problem, if existing of such bitmap is a mistake - this mistake would be skipped. Signed-off-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Denis V. Lunev --- block/qcow2-bitmap.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index e94019c..def2005 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -642,15 +642,23 @@ static BdrvDirtyBitmap *load_bitmap(BlockDriverState *bs, } granularity = 1U << bmh->granularity_bits; - bitmap = bdrv_create_dirty_bitmap(bs, granularity, name, errp); + + bitmap = bdrv_find_dirty_bitmap(bs, name); if (bitmap == NULL) { - goto fail; - } + bitmap = bdrv_create_dirty_bitmap(bs, granularity, name, errp); + if (bitmap == NULL) { + goto fail; + } - ret = load_bitmap_data(bs, bitmap_table, bmh->bitmap_table_size, - bitmap); - if (ret < 0) { - error_setg_errno(errp, -ret, "Could not read bitmap from image"); + ret = load_bitmap_data(bs, bitmap_table, bmh->bitmap_table_size, + bitmap); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not read bitmap from image"); + goto fail; + } + } else if (granularity != bdrv_dirty_bitmap_granularity(bitmap)) { + error_setg(errp, "Bitmap '%s' already exists with other granularity", + name); goto fail; }