From nobody Sat May 4 09:14:37 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; t=1565006531; cv=none; d=zoho.com; s=zohoarc; b=gui9NpeKsOwet1B8LyLmfi2tWRlsreE3opeKye9oSfqk6Qm5EiC6M2hEBjbcrCoJBAMsfBXfrtKkzIuZqNR8j7fq/cdAfHAsf5WNOAEtGvrlJpyBZ7L6sgmT9q4PxSHq4+BLZ3KdxZF903yu1FTOIwG3HfJDvPmVsLGBMI6QEoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565006531; h=Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:Sender:Subject:To:ARC-Authentication-Results; bh=mxUj3lBSLdtG2WMI3PzRja5q0jp+tUGL9K2oo5NJg+M=; b=HNWO4y0KT2PwtmZ+S800VROlx4MjIiDE3MtkDRvA/LKdRKefKBoUW6AuL/CZ36ddVNwtPApcGqOk5yfJ5HJoJAQROVslm4KsShfaYp+b5eBuEcaTpkHNdsN2ZjzUJkSJ8Q1mT2REo8Lh7+uv2DKe7zV8UVW1F/tOAsomCeC/O2c= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565006531698794.3103566965821; Mon, 5 Aug 2019 05:02:11 -0700 (PDT) Received: from localhost ([::1]:53344 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hubgk-0002ht-Ii for importer@patchew.org; Mon, 05 Aug 2019 08:02:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40180) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hubgC-0002Dh-Um for qemu-devel@nongnu.org; Mon, 05 Aug 2019 08:01:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hubgB-0008PS-Fv for qemu-devel@nongnu.org; Mon, 05 Aug 2019 08:01:32 -0400 Received: from relay.sw.ru ([185.231.240.75]:50848) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hubg5-0008Iv-75; Mon, 05 Aug 2019 08:01:25 -0400 Received: from [10.94.3.0] (helo=kvm.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.92) (envelope-from ) id 1hubg0-0006Fe-Nw; Mon, 05 Aug 2019 15:01:21 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Date: Mon, 5 Aug 2019 15:01:20 +0300 Message-Id: <20190805120120.23585-1-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.18.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH for-4.1] util/hbitmap: update orig_size on truncate X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: fam@euphon.net, kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, den@openvz.org, jsnow@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Without this, hbitmap_next_zero and hbitmap_next_dirty_area are broken after truncate. So, orig_size is broken since it's introduction in 76d570dc495c56bb. Fixes: 76d570dc495c56bb Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- Hi! Here is one more hbitmap bug I noticed. It's my fault, I'm sorry :( Broken in 4.0, but if we are already going to fix in 4.1 some things around it, it's a small meaningful addition. Users of broken API are incremental backup, sync mirror (but it may not be broken, if truncates not allowed during mirror, are they?), bitmap export through NBD. util/hbitmap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util/hbitmap.c b/util/hbitmap.c index 7905212a8b..bcc0acdc6a 100644 --- a/util/hbitmap.c +++ b/util/hbitmap.c @@ -53,7 +53,9 @@ */ =20 struct HBitmap { - /* Size of the bitmap, as requested in hbitmap_alloc. */ + /* + * Size of the bitmap, as requested in hbitmap_alloc or in hbitmap_tru= ncate. + */ uint64_t orig_size; =20 /* Number of total bits in the bottom level. */ @@ -732,6 +734,8 @@ void hbitmap_truncate(HBitmap *hb, uint64_t size) uint64_t num_elements =3D size; uint64_t old; =20 + hb->orig_size =3D size; + /* Size comes in as logical elements, adjust for granularity. */ size =3D (size + (1ULL << hb->granularity) - 1) >> hb->granularity; assert(size <=3D ((uint64_t)1 << HBITMAP_LOG_MAX_SIZE)); --=20 2.18.0