From nobody Sun Oct 5 19:25:51 2025 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15041281857681022.0400118724014; Wed, 30 Aug 2017 14:23:05 -0700 (PDT) Received: from localhost ([::1]:52779 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dnARz-0002cd-HI for importer@patchew.org; Wed, 30 Aug 2017 17:23:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37118) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dnABv-00044F-Gf for qemu-devel@nongnu.org; Wed, 30 Aug 2017 17:06:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dnABu-0007ht-A6 for qemu-devel@nongnu.org; Wed, 30 Aug 2017 17:06:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40418) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dnABr-0007fl-Mf; Wed, 30 Aug 2017 17:06:23 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AC9B6C04B958; Wed, 30 Aug 2017 21:06:22 +0000 (UTC) Received: from red.redhat.com (ovpn-122-186.rdu2.redhat.com [10.10.122.186]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5E0939816D; Wed, 30 Aug 2017 21:06:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com AC9B6C04B958 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=eblake@redhat.com From: Eric Blake To: qemu-devel@nongnu.org Date: Wed, 30 Aug 2017 16:05:37 -0500 Message-Id: <20170830210542.2153-14-eblake@redhat.com> In-Reply-To: <20170830210542.2153-1-eblake@redhat.com> References: <20170830210542.2153-1-eblake@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 30 Aug 2017 21:06:22 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v6 13/18] mirror: Switch mirror_dirty_init() to byte-based iteration 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, qemu-block@nongnu.org, Jeff Cody , Max Reitz , jsnow@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now that we have adjusted the majority of the calls this function makes to be byte-based, it is easier to read the code if it makes passes over the image using bytes rather than sectors. Signed-off-by: Eric Blake Reviewed-by: John Snow --- v6: no change v5: rebase to earlier changes v2-v4: no change --- block/mirror.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/block/mirror.c b/block/mirror.c index 18172a56a3..87d9857475 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -613,15 +613,13 @@ static void mirror_throttle(MirrorBlockJob *s) static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s) { - int64_t sector_num, end; + int64_t offset; BlockDriverState *base =3D s->base; BlockDriverState *bs =3D s->source; BlockDriverState *target_bs =3D blk_bs(s->target); - int ret, n; + int ret; int64_t count; - end =3D s->bdev_length / BDRV_SECTOR_SIZE; - if (base =3D=3D NULL && !bdrv_has_zero_init(target_bs)) { if (!bdrv_can_write_zeroes_with_unmap(target_bs)) { bdrv_set_dirty_bitmap(s->dirty_bitmap, 0, s->bdev_length); @@ -629,9 +627,9 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJo= b *s) } s->initial_zeroing_ongoing =3D true; - for (sector_num =3D 0; sector_num < end; ) { - int nb_sectors =3D MIN(end - sector_num, - QEMU_ALIGN_DOWN(INT_MAX, s->granularity) >> BDRV_SECTOR_BI= TS); + for (offset =3D 0; offset < s->bdev_length; ) { + int bytes =3D MIN(s->bdev_length - offset, + QEMU_ALIGN_DOWN(INT_MAX, s->granularity)); mirror_throttle(s); @@ -647,9 +645,8 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJo= b *s) continue; } - mirror_do_zero_or_discard(s, sector_num * BDRV_SECTOR_SIZE, - nb_sectors * BDRV_SECTOR_SIZE, false= ); - sector_num +=3D nb_sectors; + mirror_do_zero_or_discard(s, offset, bytes, false); + offset +=3D bytes; } mirror_wait_for_all_io(s); @@ -657,10 +654,10 @@ static int coroutine_fn mirror_dirty_init(MirrorBlock= Job *s) } /* First part, loop on the sectors and initialize the dirty bitmap. */ - for (sector_num =3D 0; sector_num < end; ) { + for (offset =3D 0; offset < s->bdev_length; ) { /* Just to make sure we are not exceeding int limit. */ - int nb_sectors =3D MIN(INT_MAX >> BDRV_SECTOR_BITS, - end - sector_num); + int bytes =3D MIN(s->bdev_length - offset, + QEMU_ALIGN_DOWN(INT_MAX, s->granularity)); mirror_throttle(s); @@ -668,23 +665,16 @@ static int coroutine_fn mirror_dirty_init(MirrorBlock= Job *s) return 0; } - ret =3D bdrv_is_allocated_above(bs, base, sector_num * BDRV_SECTOR= _SIZE, - nb_sectors * BDRV_SECTOR_SIZE, &coun= t); + ret =3D bdrv_is_allocated_above(bs, base, offset, bytes, &count); if (ret < 0) { return ret; } - /* TODO: Relax this once bdrv_is_allocated_above and dirty - * bitmaps no longer require sector alignment. */ - assert(QEMU_IS_ALIGNED(count, BDRV_SECTOR_SIZE)); - n =3D count >> BDRV_SECTOR_BITS; - assert(n > 0); + assert(count); if (ret =3D=3D 1) { - bdrv_set_dirty_bitmap(s->dirty_bitmap, - sector_num * BDRV_SECTOR_SIZE, - n * BDRV_SECTOR_SIZE); + bdrv_set_dirty_bitmap(s->dirty_bitmap, offset, count); } - sector_num +=3D n; + offset +=3D count; } return 0; } --=20 2.13.5