From nobody Wed Apr 16 07:41:26 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 1499449434324348.32395012375866; Fri, 7 Jul 2017 10:43:54 -0700 (PDT) Received: from localhost ([::1]:57886 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTXIG-00020f-R2 for importer@patchew.org; Fri, 07 Jul 2017 13:43:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42084) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTWlU-0005Lf-PE for qemu-devel@nongnu.org; Fri, 07 Jul 2017 13:10:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTWlT-0008Dy-9l for qemu-devel@nongnu.org; Fri, 07 Jul 2017 13:10:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40502) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dTWlO-00089f-At; Fri, 07 Jul 2017 13:09:54 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5E87861E50; Fri, 7 Jul 2017 17:09:53 +0000 (UTC) Received: from noname.redhat.com (ovpn-117-34.ams2.redhat.com [10.36.117.34]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7550061F23; Fri, 7 Jul 2017 17:09:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5E87861E50 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5E87861E50 From: Kevin Wolf To: qemu-block@nongnu.org Date: Fri, 7 Jul 2017 19:07:51 +0200 Message-Id: <1499447335-6125-37-git-send-email-kwolf@redhat.com> In-Reply-To: <1499447335-6125-1-git-send-email-kwolf@redhat.com> References: <1499447335-6125-1-git-send-email-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Fri, 07 Jul 2017 17:09:53 +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] [PULL 036/100] backup: Switch backup_do_cow() to byte-based 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, qemu-devel@nongnu.org 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" From: Eric Blake We are gradually converting to byte-based interfaces, as they are easier to reason about than sector-based. Convert another internal function (no semantic change). Signed-off-by: Eric Blake Reviewed-by: John Snow Reviewed-by: Jeff Cody Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- block/backup.c | 62 ++++++++++++++++++++++++------------------------------= ---- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/block/backup.c b/block/backup.c index 503fbec..f7e14db 100644 --- a/block/backup.c +++ b/block/backup.c @@ -91,7 +91,7 @@ static void cow_request_end(CowRequest *req) } =20 static int coroutine_fn backup_do_cow(BackupBlockJob *job, - int64_t sector_num, int nb_sectors, + int64_t offset, uint64_t bytes, bool *error_is_read, bool is_write_notifier) { @@ -101,34 +101,28 @@ static int coroutine_fn backup_do_cow(BackupBlockJob = *job, QEMUIOVector bounce_qiov; void *bounce_buffer =3D NULL; int ret =3D 0; - int64_t sectors_per_cluster =3D cluster_size_sectors(job); - int64_t start, end; /* clusters */ + int64_t start, end; /* bytes */ int n; /* bytes */ =20 qemu_co_rwlock_rdlock(&job->flush_rwlock); =20 - start =3D sector_num / sectors_per_cluster; - end =3D DIV_ROUND_UP(sector_num + nb_sectors, sectors_per_cluster); + start =3D QEMU_ALIGN_DOWN(offset, job->cluster_size); + end =3D QEMU_ALIGN_UP(bytes + offset, job->cluster_size); =20 - trace_backup_do_cow_enter(job, start * job->cluster_size, - sector_num * BDRV_SECTOR_SIZE, - nb_sectors * BDRV_SECTOR_SIZE); + trace_backup_do_cow_enter(job, start, offset, bytes); =20 - wait_for_overlapping_requests(job, start * job->cluster_size, - end * job->cluster_size); - cow_request_begin(&cow_request, job, start * job->cluster_size, - end * job->cluster_size); + wait_for_overlapping_requests(job, start, end); + cow_request_begin(&cow_request, job, start, end); =20 - for (; start < end; start++) { - if (test_bit(start, job->done_bitmap)) { - trace_backup_do_cow_skip(job, start * job->cluster_size); + for (; start < end; start +=3D job->cluster_size) { + if (test_bit(start / job->cluster_size, job->done_bitmap)) { + trace_backup_do_cow_skip(job, start); continue; /* already copied */ } =20 - trace_backup_do_cow_process(job, start * job->cluster_size); + trace_backup_do_cow_process(job, start); =20 - n =3D MIN(job->cluster_size, - job->common.len - start * job->cluster_size); + n =3D MIN(job->cluster_size, job->common.len - start); =20 if (!bounce_buffer) { bounce_buffer =3D blk_blockalign(blk, job->cluster_size); @@ -137,11 +131,10 @@ static int coroutine_fn backup_do_cow(BackupBlockJob = *job, iov.iov_len =3D n; qemu_iovec_init_external(&bounce_qiov, &iov, 1); =20 - ret =3D blk_co_preadv(blk, start * job->cluster_size, - bounce_qiov.size, &bounce_qiov, + ret =3D blk_co_preadv(blk, start, bounce_qiov.size, &bounce_qiov, is_write_notifier ? BDRV_REQ_NO_SERIALISING : = 0); if (ret < 0) { - trace_backup_do_cow_read_fail(job, start * job->cluster_size, = ret); + trace_backup_do_cow_read_fail(job, start, ret); if (error_is_read) { *error_is_read =3D true; } @@ -149,22 +142,22 @@ static int coroutine_fn backup_do_cow(BackupBlockJob = *job, } =20 if (buffer_is_zero(iov.iov_base, iov.iov_len)) { - ret =3D blk_co_pwrite_zeroes(job->target, start * job->cluster= _size, + ret =3D blk_co_pwrite_zeroes(job->target, start, bounce_qiov.size, BDRV_REQ_MAY_UNMA= P); } else { - ret =3D blk_co_pwritev(job->target, start * job->cluster_size, + ret =3D blk_co_pwritev(job->target, start, bounce_qiov.size, &bounce_qiov, job->compress ? BDRV_REQ_WRITE_COMPRESSED= : 0); } if (ret < 0) { - trace_backup_do_cow_write_fail(job, start * job->cluster_size,= ret); + trace_backup_do_cow_write_fail(job, start, ret); if (error_is_read) { *error_is_read =3D false; } goto out; } =20 - set_bit(start, job->done_bitmap); + set_bit(start / job->cluster_size, job->done_bitmap); =20 /* Publish progress, guest I/O counts as progress too. Note that = the * offset field is an opaque progress value, it is not a disk offs= et. @@ -180,8 +173,7 @@ out: =20 cow_request_end(&cow_request); =20 - trace_backup_do_cow_return(job, sector_num * BDRV_SECTOR_SIZE, - nb_sectors * BDRV_SECTOR_SIZE, ret); + trace_backup_do_cow_return(job, offset, bytes, ret); =20 qemu_co_rwlock_unlock(&job->flush_rwlock); =20 @@ -194,14 +186,12 @@ static int coroutine_fn backup_before_write_notify( { BackupBlockJob *job =3D container_of(notifier, BackupBlockJob, before_= write); BdrvTrackedRequest *req =3D opaque; - int64_t sector_num =3D req->offset >> BDRV_SECTOR_BITS; - int nb_sectors =3D req->bytes >> BDRV_SECTOR_BITS; =20 assert(req->bs =3D=3D blk_bs(job->common.blk)); - assert((req->offset & (BDRV_SECTOR_SIZE - 1)) =3D=3D 0); - assert((req->bytes & (BDRV_SECTOR_SIZE - 1)) =3D=3D 0); + assert(QEMU_IS_ALIGNED(req->offset, BDRV_SECTOR_SIZE)); + assert(QEMU_IS_ALIGNED(req->bytes, BDRV_SECTOR_SIZE)); =20 - return backup_do_cow(job, sector_num, nb_sectors, NULL, true); + return backup_do_cow(job, req->offset, req->bytes, NULL, true); } =20 static void backup_set_speed(BlockJob *job, int64_t speed, Error **errp) @@ -406,8 +396,8 @@ static int coroutine_fn backup_run_incremental(BackupBl= ockJob *job) if (yield_and_check(job)) { goto out; } - ret =3D backup_do_cow(job, cluster * sectors_per_cluster, - sectors_per_cluster, &error_is_read, + ret =3D backup_do_cow(job, cluster * job->cluster_size, + job->cluster_size, &error_is_read, false); if ((ret < 0) && backup_error_action(job, error_is_read, -ret) =3D=3D @@ -509,8 +499,8 @@ static void coroutine_fn backup_run(void *opaque) if (alloced < 0) { ret =3D alloced; } else { - ret =3D backup_do_cow(job, start * sectors_per_cluster, - sectors_per_cluster, &error_is_read, + ret =3D backup_do_cow(job, start * job->cluster_size, + job->cluster_size, &error_is_read, false); } if (ret < 0) { --=20 1.8.3.1