From nobody Sat Feb 7 05:57:28 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.zoho.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 1495830741663517.2705893367654; Fri, 26 May 2017 13:32:21 -0700 (PDT) Received: from localhost ([::1]:38322 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dELuF-00060K-71 for importer@patchew.org; Fri, 26 May 2017 16:32:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58501) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dELl2-00052w-Df for qemu-devel@nongnu.org; Fri, 26 May 2017 16:22:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dELl1-0005Fm-DE for qemu-devel@nongnu.org; Fri, 26 May 2017 16:22:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57444) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dELky-0005Em-Qs; Fri, 26 May 2017 16:22:45 -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 CA4F53DE3D; Fri, 26 May 2017 20:22:43 +0000 (UTC) Received: from noname.redhat.com (ovpn-116-43.ams2.redhat.com [10.36.116.43]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1AB161713B; Fri, 26 May 2017 20:22:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CA4F53DE3D Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com CA4F53DE3D From: Kevin Wolf To: qemu-block@nongnu.org Date: Fri, 26 May 2017 22:21:49 +0200 Message-Id: <1495830130-30611-9-git-send-email-kwolf@redhat.com> In-Reply-To: <1495830130-30611-1-git-send-email-kwolf@redhat.com> References: <1495830130-30611-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.29]); Fri, 26 May 2017 20:22:43 +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 08/29] qed: Remove callback from qed_copy_from_backing_file() 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, pbonzini@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, mreitz@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" Signed-off-by: Kevin Wolf Reviewed-by: Eric Blake Reviewed-by: Stefan Hajnoczi --- block/qed.c | 57 +++++++++++++++++++++++---------------------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/block/qed.c b/block/qed.c index 584a5ba..61ef732 100644 --- a/block/qed.c +++ b/block/qed.c @@ -861,13 +861,9 @@ static int qed_read_backing_file(BDRVQEDState *s, uint= 64_t pos, * @pos: Byte position in device * @len: Number of bytes * @offset: Byte offset in image file - * @cb: Completion function - * @opaque: User data for completion function */ -static void qed_copy_from_backing_file(BDRVQEDState *s, uint64_t pos, - uint64_t len, uint64_t offset, - BlockCompletionFunc *cb, - void *opaque) +static int qed_copy_from_backing_file(BDRVQEDState *s, uint64_t pos, + uint64_t len, uint64_t offset) { QEMUIOVector qiov; QEMUIOVector *backing_qiov =3D NULL; @@ -876,8 +872,7 @@ static void qed_copy_from_backing_file(BDRVQEDState *s,= uint64_t pos, =20 /* Skip copy entirely if there is no work to do */ if (len =3D=3D 0) { - cb(opaque, 0); - return; + return 0; } =20 iov =3D (struct iovec) { @@ -906,7 +901,7 @@ static void qed_copy_from_backing_file(BDRVQEDState *s,= uint64_t pos, ret =3D 0; out: qemu_vfree(iov.iov_base); - cb(opaque, ret); + return ret; } =20 /** @@ -1133,42 +1128,36 @@ static void qed_aio_write_main(void *opaque, int re= t) } =20 /** - * Populate back untouched region of new data cluster + * Populate untouched regions of new data cluster */ -static void qed_aio_write_postfill(void *opaque, int ret) +static void qed_aio_write_cow(void *opaque, int ret) { QEDAIOCB *acb =3D opaque; BDRVQEDState *s =3D acb_to_s(acb); - uint64_t start =3D acb->cur_pos + acb->cur_qiov.size; - uint64_t len =3D - qed_start_of_cluster(s, start + s->header.cluster_size - 1) - star= t; - uint64_t offset =3D acb->cur_cluster + - qed_offset_into_cluster(s, acb->cur_pos) + - acb->cur_qiov.size; + uint64_t start, len, offset; + + /* Populate front untouched region of new data cluster */ + start =3D qed_start_of_cluster(s, acb->cur_pos); + len =3D qed_offset_into_cluster(s, acb->cur_pos); =20 + trace_qed_aio_write_prefill(s, acb, start, len, acb->cur_cluster); + ret =3D qed_copy_from_backing_file(s, start, len, acb->cur_cluster); if (ret) { qed_aio_complete(acb, ret); return; } =20 - trace_qed_aio_write_postfill(s, acb, start, len, offset); - qed_copy_from_backing_file(s, start, len, offset, - qed_aio_write_main, acb); -} + /* Populate back untouched region of new data cluster */ + start =3D acb->cur_pos + acb->cur_qiov.size; + len =3D qed_start_of_cluster(s, start + s->header.cluster_size - 1) - = start; + offset =3D acb->cur_cluster + + qed_offset_into_cluster(s, acb->cur_pos) + + acb->cur_qiov.size; =20 -/** - * Populate front untouched region of new data cluster - */ -static void qed_aio_write_prefill(void *opaque, int ret) -{ - QEDAIOCB *acb =3D opaque; - BDRVQEDState *s =3D acb_to_s(acb); - uint64_t start =3D qed_start_of_cluster(s, acb->cur_pos); - uint64_t len =3D qed_offset_into_cluster(s, acb->cur_pos); + trace_qed_aio_write_postfill(s, acb, start, len, offset); + ret =3D qed_copy_from_backing_file(s, start, len, offset); =20 - trace_qed_aio_write_prefill(s, acb, start, len, acb->cur_cluster); - qed_copy_from_backing_file(s, start, len, acb->cur_cluster, - qed_aio_write_postfill, acb); + qed_aio_write_main(acb, ret); } =20 /** @@ -1236,7 +1225,7 @@ static void qed_aio_write_alloc(QEDAIOCB *acb, size_t= len) =20 cb =3D qed_aio_write_zero_cluster; } else { - cb =3D qed_aio_write_prefill; + cb =3D qed_aio_write_cow; acb->cur_cluster =3D qed_alloc_clusters(s, acb->cur_nclusters); } =20 --=20 1.8.3.1