From nobody Wed Nov 5 12:35:13 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 1534533326778515.049509262268; Fri, 17 Aug 2018 12:15:26 -0700 (PDT) Received: from localhost ([::1]:36052 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqkDV-0007l6-LN for importer@patchew.org; Fri, 17 Aug 2018 15:15:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqk8y-0001Dr-HK for qemu-devel@nongnu.org; Fri, 17 Aug 2018 15:10:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fqk3z-0006uC-R3 for qemu-devel@nongnu.org; Fri, 17 Aug 2018 15:05:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56632) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fqk3m-0006p4-09; Fri, 17 Aug 2018 15:05:22 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4E37F307C717; Fri, 17 Aug 2018 19:05:21 +0000 (UTC) Received: from probe.redhat.com (ovpn-123-11.rdu2.redhat.com [10.10.123.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3209816C66; Fri, 17 Aug 2018 19:05:20 +0000 (UTC) From: John Snow To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 17 Aug 2018 15:04:54 -0400 Message-Id: <20180817190457.8292-5-jsnow@redhat.com> In-Reply-To: <20180817190457.8292-1-jsnow@redhat.com> References: <20180817190457.8292-1-jsnow@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Fri, 17 Aug 2018 19:05:21 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 4/7] 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: kwolf@redhat.com, John Snow , Jeff Cody , jtc@redhat.com, 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" 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 --- block/commit.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/block/commit.c b/block/commit.c index 4a17bb73ec..93c3b6a39e 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= () */ @@ -93,8 +87,8 @@ static void commit_complete(Job *job, void *opaque) =20 if (!job_is_cancelled(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.14.4