From nobody Tue Apr 15 06:11:10 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.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 1495826785243532.2977931629702; Fri, 26 May 2017 12:26:25 -0700 (PDT) Received: from localhost ([::1]:38089 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dEKsR-0003sP-M3 for importer@patchew.org; Fri, 26 May 2017 15:26:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46213) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dEKqW-0002Qq-7L for qemu-devel@nongnu.org; Fri, 26 May 2017 15:24:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dEKqR-0005vI-MB for qemu-devel@nongnu.org; Fri, 26 May 2017 15:24:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54570) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dEKqO-0005sF-H6; Fri, 26 May 2017 15:24:16 -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 635F980B22; Fri, 26 May 2017 19:24:15 +0000 (UTC) Received: from localhost (ovpn-117-108.phx2.redhat.com [10.3.117.108]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2CFC1173DF; Fri, 26 May 2017 19:24:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 635F980B22 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jcody@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 635F980B22 From: Jeff Cody To: qemu-block@nongnu.org Date: Fri, 26 May 2017 15:23:55 -0400 Message-Id: <20170526192404.32186-4-jcody@redhat.com> In-Reply-To: <20170526192404.32186-1-jcody@redhat.com> References: <20170526192404.32186-1-jcody@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.28]); Fri, 26 May 2017 19:24:15 +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 03/12] blockjob: introduce block_job_early_fail 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: peter.maydell@linaro.org, jcody@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, Paolo Bonzini 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: Paolo Bonzini Outside blockjob.c, block_job_unref is only used when a block job fails to start, and block_job_ref is not used at all. The reference counting thus is pretty well hidden. Introduce a separate function to be used by block jobs; because block_job_ref and block_job_unref now become static, move them earlier in blockjob.c. Reviewed-by: Stefan Hajnoczi Reviewed-by: John Snow Signed-off-by: Paolo Bonzini Reviewed-by: Jeff Cody Message-id: 20170508141310.8674-4-pbonzini@redhat.com Signed-off-by: Jeff Cody --- block/backup.c | 2 +- block/commit.c | 2 +- block/mirror.c | 2 +- blockjob.c | 47 ++++++++++++++++++++++++++--------------= ---- include/block/blockjob_int.h | 15 +++----------- tests/test-blockjob.c | 10 +++++----- 6 files changed, 39 insertions(+), 39 deletions(-) diff --git a/block/backup.c b/block/backup.c index a4fb288..5387fbd 100644 --- a/block/backup.c +++ b/block/backup.c @@ -692,7 +692,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDr= iverState *bs, } if (job) { backup_clean(&job->common); - block_job_unref(&job->common); + block_job_early_fail(&job->common); } =20 return NULL; diff --git a/block/commit.c b/block/commit.c index 76a0d98..a3028b2 100644 --- a/block/commit.c +++ b/block/commit.c @@ -426,7 +426,7 @@ fail: if (commit_top_bs) { bdrv_set_backing_hd(overlay_bs, top, &error_abort); } - block_job_unref(&s->common); + block_job_early_fail(&s->common); } =20 =20 diff --git a/block/mirror.c b/block/mirror.c index e86f8f8..b9eb2a2 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1252,7 +1252,7 @@ fail: =20 g_free(s->replaces); blk_unref(s->target); - block_job_unref(&s->common); + block_job_early_fail(&s->common); } =20 bdrv_child_try_set_perm(mirror_top_bs->backing, 0, BLK_PERM_ALL, diff --git a/blockjob.c b/blockjob.c index 71187d0..5a722c3 100644 --- a/blockjob.c +++ b/blockjob.c @@ -106,6 +106,32 @@ BlockJob *block_job_get(const char *id) return NULL; } =20 +static void block_job_ref(BlockJob *job) +{ + ++job->refcnt; +} + +static void block_job_attached_aio_context(AioContext *new_context, + void *opaque); +static void block_job_detach_aio_context(void *opaque); + +static void block_job_unref(BlockJob *job) +{ + if (--job->refcnt =3D=3D 0) { + BlockDriverState *bs =3D blk_bs(job->blk); + bs->job =3D NULL; + block_job_remove_all_bdrv(job); + blk_remove_aio_context_notifier(job->blk, + block_job_attached_aio_context, + block_job_detach_aio_context, job); + blk_unref(job->blk); + error_free(job->blocker); + g_free(job->id); + QLIST_REMOVE(job, job_list); + g_free(job); + } +} + static void block_job_attached_aio_context(AioContext *new_context, void *opaque) { @@ -293,26 +319,9 @@ void block_job_start(BlockJob *job) bdrv_coroutine_enter(blk_bs(job->blk), job->co); } =20 -void block_job_ref(BlockJob *job) +void block_job_early_fail(BlockJob *job) { - ++job->refcnt; -} - -void block_job_unref(BlockJob *job) -{ - if (--job->refcnt =3D=3D 0) { - BlockDriverState *bs =3D blk_bs(job->blk); - bs->job =3D NULL; - block_job_remove_all_bdrv(job); - blk_remove_aio_context_notifier(job->blk, - block_job_attached_aio_context, - block_job_detach_aio_context, job); - blk_unref(job->blk); - error_free(job->blocker); - g_free(job->id); - QLIST_REMOVE(job, job_list); - g_free(job); - } + block_job_unref(job); } =20 static void block_job_completed_single(BlockJob *job) diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h index bfcc5d1..45cdfd4 100644 --- a/include/block/blockjob_int.h +++ b/include/block/blockjob_int.h @@ -156,21 +156,12 @@ void block_job_sleep_ns(BlockJob *job, QEMUClockType = type, int64_t ns); void block_job_yield(BlockJob *job); =20 /** - * block_job_ref: + * block_job_early_fail: * @bs: The block device. * - * Grab a reference to the block job. Should be paired with block_job_unre= f. + * The block job could not be started, free it. */ -void block_job_ref(BlockJob *job); - -/** - * block_job_unref: - * @bs: The block device. - * - * Release reference to the block job and release resources if it is the l= ast - * reference. - */ -void block_job_unref(BlockJob *job); +void block_job_early_fail(BlockJob *job); =20 /** * block_job_completed: diff --git a/tests/test-blockjob.c b/tests/test-blockjob.c index 740e740..23bdf1a 100644 --- a/tests/test-blockjob.c +++ b/tests/test-blockjob.c @@ -116,11 +116,11 @@ static void test_job_ids(void) job[1] =3D do_test_id(blk[1], "id0", false); =20 /* But once job[0] finishes we can reuse its ID */ - block_job_unref(job[0]); + block_job_early_fail(job[0]); job[1] =3D do_test_id(blk[1], "id0", true); =20 /* No job ID specified, defaults to the backend name ('drive1') */ - block_job_unref(job[1]); + block_job_early_fail(job[1]); job[1] =3D do_test_id(blk[1], NULL, true); =20 /* Duplicate job ID */ @@ -133,9 +133,9 @@ static void test_job_ids(void) /* This one is valid */ job[2] =3D do_test_id(blk[2], "id_2", true); =20 - block_job_unref(job[0]); - block_job_unref(job[1]); - block_job_unref(job[2]); + block_job_early_fail(job[0]); + block_job_early_fail(job[1]); + block_job_early_fail(job[2]); =20 destroy_blk(blk[0]); destroy_blk(blk[1]); --=20 2.9.3