From nobody Sun Oct 26 00:02:43 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; dkim=fail; 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 1516279839034631.825960382884; Thu, 18 Jan 2018 04:50:39 -0800 (PST) Received: from localhost ([::1]:56884 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ec9eQ-0006dO-7t for importer@patchew.org; Thu, 18 Jan 2018 07:50:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40055) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ec9Y1-0001FP-AW for qemu-devel@nongnu.org; Thu, 18 Jan 2018 07:44:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ec9Y0-0004YF-Cp for qemu-devel@nongnu.org; Thu, 18 Jan 2018 07:44:01 -0500 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:34056) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ec9Y0-0004Xe-5d; Thu, 18 Jan 2018 07:44:00 -0500 Received: by mail-wm0-x243.google.com with SMTP id 81so2581207wmb.1; Thu, 18 Jan 2018 04:44:00 -0800 (PST) Received: from 640k.lan (dynamic-adsl-78-12-229-84.clienti.tiscali.it. [78.12.229.84]) by smtp.gmail.com with ESMTPSA id t51sm13006472wrc.21.2018.01.18.04.43.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 04:43:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=BtBXwPrhMMoAWew9YUOVdDsCYAiCHXMMtmqX5jdWZnc=; b=V3DY5yj683PJrN+zLvw9KS+dGRThuw1A99KyLXkWlAgppUSFlgWsZXw7eJ0adR3tpA ziz/eLZaprbILz7X6TAmjnTlDEIubOnBHt+WAjx/ZipeNAeP+UejLhI3Bp/H/vkTIxGM 85BCjbPKBOd09gDvDgFeFyxi/DyBnNTYavR1OMRPCQR7B+ceFrJg/di5/yNtngQnzRz+ aWUdkfTjAywK2GSBHv8EVSt7x6C5y3vFf8VOmkplzok6wg7zQXtTMfZw4283clN9hgpx Fbj0jItehWOb8jw2geMMHjf5IbrhHlXNLEocV0pMyFWUEKKa5uIQXg627woPfTWG5lBC 6Pjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=BtBXwPrhMMoAWew9YUOVdDsCYAiCHXMMtmqX5jdWZnc=; b=UwNXjctDi72o2Tvvm5kSY28qth3ytVw6DoaVpfhOeK47TWSxIejaXFccY4afCPXI4c 10lnC8GkhcBxMLCoLMExMLvr1QonKhC8QcfDyte1qT+zsvDadXMp7vakRgp6aKTvOK3O x4cZscRgGaE8yC4/ytg8ckbREwCL4NVEqEr3O/BkAWeIPC2KptzsQKDiQqdIcT7LmXfP 9WI0XOVKFIPsWkDKNl+JvoZ9SMXA7HSMzbx2Lu39pQ2a91WxOe6OIvVfcB4OwgCz4bTq UzilwcQn8rxd5OOA/2zIfX43QYKiGy18ArGfIC/x/eZU+nM28Ef73gxhohEba9xCNopB Z8EA== X-Gm-Message-State: AKwxytejmgAZ/VV8T6O5Ib7GMtQNrUYRMXGHTnHcm3pcdHz/GZgr9jUw e3SYhJnsgGmQqa7eRvZzkrnn43IK X-Google-Smtp-Source: ACJfBotLKQ3mqhSM4S6C96bdsoRi0YxyS1hkJaWp6Z91T2BMxwRjpVd09B9vxRY5d2DON+35U+xM9A== X-Received: by 10.28.131.17 with SMTP id f17mr4808589wmd.139.1516279438745; Thu, 18 Jan 2018 04:43:58 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Thu, 18 Jan 2018 13:43:48 +0100 Message-Id: <1516279431-30424-5-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1516279431-30424-1-git-send-email-pbonzini@redhat.com> References: <1516279431-30424-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PATCH 4/7] qed: make bdrv_qed_do_open a coroutine_fn 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-block@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It is called from qcow2_invalidate_cache in coroutine context (incoming migration runs in a coroutine), so it's cleaner if metadata is always loaded from a coroutine. Signed-off-by: Paolo Bonzini --- block/qed.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/block/qed.c b/block/qed.c index e0e08ce..3e1f4bc 100644 --- a/block/qed.c +++ b/block/qed.c @@ -381,8 +381,9 @@ static void bdrv_qed_init_state(BlockDriverState *bs) qemu_co_queue_init(&s->allocating_write_reqs); } =20 -static int bdrv_qed_do_open(BlockDriverState *bs, QDict *options, int flag= s, - Error **errp) +/* Called with table_lock held. */ +static int coroutine_fn bdrv_qed_do_open(BlockDriverState *bs, QDict *opti= ons, + int flags, Error **errp) { BDRVQEDState *s =3D bs->opaque; QEDHeader le_header; @@ -513,9 +514,35 @@ out: return ret; } =20 +typedef struct QEDOpenCo { + BlockDriverState *bs; + QDict *options; + int flags; + Error **errp; + int ret; +} QEDOpenCo; + +static void coroutine_fn bdrv_qed_open_entry(void *opaque) +{ + QEDOpenCo *qoc =3D opaque; + BDRVQEDState *s =3D qoc->bs->opaque; + + qemu_co_mutex_lock(&s->table_lock); + qoc->ret =3D bdrv_qed_do_open(qoc->bs, qoc->options, qoc->flags, qoc->= errp); + qemu_co_mutex_unlock(&s->table_lock); +} + static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags, Error **errp) { + QEDOpenCo qoc =3D { + .bs =3D bs, + .options =3D options, + .flags =3D flags, + .errp =3D errp, + .ret =3D -EINPROGRESS + }; + bs->file =3D bdrv_open_child(NULL, options, "file", bs, &child_file, false, errp); if (!bs->file) { @@ -523,7 +550,14 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *= options, int flags, } =20 bdrv_qed_init_state(bs); - return bdrv_qed_do_open(bs, options, flags, errp); + if (qemu_in_coroutine()) { + bdrv_qed_open_entry(&qoc); + } else { + qemu_coroutine_enter(qemu_coroutine_create(bdrv_qed_open_entry, &q= oc)); + BDRV_POLL_WHILE(bs, qoc.ret =3D=3D -EINPROGRESS); + } + BDRV_POLL_WHILE(bs, qoc.ret =3D=3D -EINPROGRESS); + return qoc.ret; } =20 static void bdrv_qed_refresh_limits(BlockDriverState *bs, Error **errp) --=20 1.8.3.1