From nobody Tue Apr 8 16:37:08 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; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1535726537030371.51776805937504; Fri, 31 Aug 2018 07:42:17 -0700 (PDT) Received: from localhost ([::1]:54031 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fvkcp-0005Mk-PU for importer@patchew.org; Fri, 31 Aug 2018 10:42:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50652) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fvkQN-00019c-9u for qemu-devel@nongnu.org; Fri, 31 Aug 2018 10:29:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fvkMN-0000rk-4Q for qemu-devel@nongnu.org; Fri, 31 Aug 2018 10:25:16 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:48986 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fvkME-0000kq-6A; Fri, 31 Aug 2018 10:25:08 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 39A6F406DE3D; Fri, 31 Aug 2018 14:25:03 +0000 (UTC) Received: from localhost (ovpn-117-235.ams2.redhat.com [10.36.117.235]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BE78F1010422; Fri, 31 Aug 2018 14:25:02 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Date: Fri, 31 Aug 2018 16:24:41 +0200 Message-Id: <20180831142446.22264-7-mreitz@redhat.com> In-Reply-To: <20180831142446.22264-1-mreitz@redhat.com> References: <20180831142446.22264-1-mreitz@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Fri, 31 Aug 2018 14:25:03 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Fri, 31 Aug 2018 14:25:03 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'mreitz@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PULL 06/11] block/commit: utilize job_exit shim 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: Kevin Wolf , Peter Maydell , qemu-devel@nongnu.org, Max Reitz 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" From: John Snow Change the manual deferment to commit_complete into the implicit callback to job_exit, renaming commit_complete to commit_exit. This conversion does change the timing of when job_completed is called to after the bdrv_replace_node and bdrv_unref calls, which could have implications for bjob->blk which will now be put down after this cleanup. Kevin highlights that we did not take any permissions for that backend at job creation time, so it is safe to reorder these operations. Signed-off-by: John Snow Reviewed-by: Max Reitz Message-id: 20180830015734.19765-5-jsnow@redhat.com Reviewed-by: Jeff Cody Signed-off-by: Max Reitz --- block/commit.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/block/commit.c b/block/commit.c index 4a17bb73ec..da69165de3 100644 --- a/block/commit.c +++ b/block/commit.c @@ -68,19 +68,13 @@ static int coroutine_fn commit_populate(BlockBackend *b= s, BlockBackend *base, return 0; } =20 -typedef struct { - int ret; -} CommitCompleteData; - -static void commit_complete(Job *job, void *opaque) +static void commit_exit(Job *job) { CommitBlockJob *s =3D container_of(job, CommitBlockJob, common.job); BlockJob *bjob =3D &s->common; - CommitCompleteData *data =3D opaque; BlockDriverState *top =3D blk_bs(s->top); BlockDriverState *base =3D blk_bs(s->base); BlockDriverState *commit_top_bs =3D s->commit_top_bs; - int ret =3D data->ret; bool remove_commit_top_bs =3D false; =20 /* Make sure commit_top_bs and top stay around until bdrv_replace_node= () */ @@ -91,10 +85,10 @@ static void commit_complete(Job *job, void *opaque) * the normal backing chain can be restored. */ blk_unref(s->base); =20 - if (!job_is_cancelled(job) && ret =3D=3D 0) { + if (!job_is_cancelled(job) && job->ret =3D=3D 0) { /* success */ - ret =3D bdrv_drop_intermediate(s->commit_top_bs, base, - s->backing_file_str); + job->ret =3D bdrv_drop_intermediate(s->commit_top_bs, base, + s->backing_file_str); } else { /* XXX Can (or should) we somehow keep 'consistent read' blocked e= ven * after the failed/cancelled commit job is gone? If we already wr= ote @@ -117,9 +111,6 @@ static void commit_complete(Job *job, void *opaque) * bdrv_set_backing_hd() to fail. */ block_job_remove_all_bdrv(bjob); =20 - job_completed(job, ret); - g_free(data); - /* If bdrv_drop_intermediate() didn't already do that, remove the comm= it * filter driver from the backing chain. Do this as the final step so = that * the 'consistent read' permission can be granted. */ @@ -137,7 +128,6 @@ static void commit_complete(Job *job, void *opaque) static int coroutine_fn commit_run(Job *job, Error **errp) { CommitBlockJob *s =3D container_of(job, CommitBlockJob, common.job); - CommitCompleteData *data; int64_t offset; uint64_t delay_ns =3D 0; int ret =3D 0; @@ -210,9 +200,6 @@ static int coroutine_fn commit_run(Job *job, Error **er= rp) out: qemu_vfree(buf); =20 - data =3D g_malloc(sizeof(*data)); - data->ret =3D ret; - job_defer_to_main_loop(&s->common.job, commit_complete, data); return ret; } =20 @@ -224,6 +211,7 @@ static const BlockJobDriver commit_job_driver =3D { .user_resume =3D block_job_user_resume, .drain =3D block_job_drain, .run =3D commit_run, + .exit =3D commit_exit, }, }; =20 --=20 2.17.1