From nobody Tue Feb 10 19:48:00 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1539271131262647.3961982662446; Thu, 11 Oct 2018 08:18:51 -0700 (PDT) Received: from localhost ([::1]:35060 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gAcji-0007xJ-1D for importer@patchew.org; Thu, 11 Oct 2018 11:18:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59607) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gAchX-0006ah-VF for qemu-devel@nongnu.org; Thu, 11 Oct 2018 11:16:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gAchU-0006hM-Ox for qemu-devel@nongnu.org; Thu, 11 Oct 2018 11:16:35 -0400 Received: from relay.sw.ru ([185.231.240.75]:35534) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gAchU-0006em-EA; Thu, 11 Oct 2018 11:16:32 -0400 Received: from [10.28.8.145] (helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gAchQ-0002Z5-13; Thu, 11 Oct 2018 18:16:28 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Thu, 11 Oct 2018 18:16:20 +0300 Message-Id: <20181011151623.25702-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20181011151623.25702-1-vsementsov@virtuozzo.com> References: <20181011151623.25702-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v3 5/8] block/qcow2-refcount: check_refcounts_l2: don't count corrupted entries 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, den@openvz.org, vsementsov@virtuozzo.com, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Misaligned entries will lead to fatal qcow2 driver corruption on read or write to corresponding offset, so there is no sense to take them into account. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/qcow2-refcount.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 8fb9c9af39..3b34681f16 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -1634,15 +1634,6 @@ static int check_refcounts_l2(BlockDriverState *bs, = BdrvCheckResult *res, { uint64_t offset =3D l2_entry & L2E_OFFSET_MASK; =20 - if (flags & CHECK_FRAG_INFO) { - res->bfi.allocated_clusters++; - if (next_contiguous_offset && - offset !=3D next_contiguous_offset) { - res->bfi.fragmented_clusters++; - } - next_contiguous_offset =3D offset + s->cluster_size; - } - /* Correct offsets are cluster aligned */ if (offset_into_cluster(s, offset)) { if (qcow2_get_cluster_type(l2_entry) =3D=3D @@ -1681,9 +1672,6 @@ static int check_refcounts_l2(BlockDriverState *bs, B= drvCheckResult *res, * L2 table's entries */ } else { res->corruptions_fixed++; - /* Skip marking the cluster as used - * (it is unused now) */ - continue; } } else { res->corruptions++; @@ -1693,6 +1681,19 @@ static int check_refcounts_l2(BlockDriverState *bs, = BdrvCheckResult *res, "not properly aligned; L2 entry corrupted.\n", off= set); res->corruptions++; } + + /* Skip marking the cluster as used + * (l2 entry is marked as zero or still fatally corrupted)= */ + continue; + } + + if (flags & CHECK_FRAG_INFO) { + res->bfi.allocated_clusters++; + if (next_contiguous_offset && + offset !=3D next_contiguous_offset) { + res->bfi.fragmented_clusters++; + } + next_contiguous_offset =3D offset + s->cluster_size; } =20 /* Mark cluster as used */ --=20 2.18.0