From patchwork Mon Aug 8 15:05:01 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: 9268531 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 93DAE60754 for ; Mon, 8 Aug 2016 15:06:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 83FC525D91 for ; Mon, 8 Aug 2016 15:06:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 78941283EE; Mon, 8 Aug 2016 15:06:19 +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 E90FF25D91 for ; Mon, 8 Aug 2016 15:06:18 +0000 (UTC) Received: from localhost ([::1]:57986 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bWm89-00072m-Vn for patchwork-qemu-devel@patchwork.kernel.org; Mon, 08 Aug 2016 11:06:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42387) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bWm7T-0006zy-FQ for qemu-devel@nongnu.org; Mon, 08 Aug 2016 11:05:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bWm7P-0004Rs-VC for qemu-devel@nongnu.org; Mon, 08 Aug 2016 11:05:35 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:13293 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bWm7P-0004PO-HE for qemu-devel@nongnu.org; Mon, 08 Aug 2016 11:05:31 -0400 Received: from kvm.qa.sw.ru. ([10.28.8.145]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id u77NfZcM001857; Mon, 8 Aug 2016 02:41:37 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Mon, 8 Aug 2016 18:05:01 +0300 Message-Id: <1470668720-211300-11-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 10/29] qcow2-bitmap: add IN_USE flag 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 This flag means that the bitmap is now in use by the software or was not successfully saved. In any way, with this flag set the bitmap data must be considered inconsistent and should not be loaded. With current implementation this flag is never set, as we just remove bitmaps from the image after loading. But it defined in qcow2 spec and must be handled. Also, it can be used in future, if async schemes of bitmap loading/saving are implemented. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/qcow2-bitmap.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index 43a9bb9..19f8203 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -44,7 +44,8 @@ #define BME_MAX_NAME_SIZE 1023 /* Bitmap directory entry flags */ -#define BME_RESERVED_FLAGS 0xffffffff +#define BME_RESERVED_FLAGS 0xfffffffe +#define BME_FLAG_IN_USE 1 /* bits [1, 8] U [56, 63] are reserved */ #define BME_TABLE_ENTRY_RESERVED_MASK 0xff000000000001fe @@ -487,6 +488,11 @@ static BdrvDirtyBitmap *load_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap = NULL; char *name = g_strndup((char *)(bmh + 1), bmh->name_size); + if (bmh->flags & BME_FLAG_IN_USE) { + error_setg(errp, "Bitmap '%s' is in use", name); + goto fail; + } + ret = bitmap_table_load(bs, bmh, &bitmap_table); if (ret < 0) { error_setg_errno(errp, -ret, @@ -795,7 +801,8 @@ void qcow2_bitmap_store(BlockDriverState *bs, return; } - if (bmh->bitmap_table_offset) { + if ((bmh->bitmap_table_offset != 0) || + !(bmh->flags & BME_FLAG_IN_USE)) { error_setg(errp, "The bitmap with same name already exists, but was" "not loaded."); @@ -820,7 +827,7 @@ void qcow2_bitmap_store(BlockDriverState *bs, } } else { ret = directory_set(bs, bmh, granularity, table_offset, table_size, - bmh->flags); + bmh->flags & ~BME_FLAG_IN_USE); if (ret < 0) { error_setg_errno(errp, ret, "Can't update dirty bitmap in qcow2."); goto fail;