From nobody Tue Oct 28 02:10:45 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 (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516188877043906.9526399739192; Wed, 17 Jan 2018 03:34:37 -0800 (PST) Received: from localhost ([::1]:57082 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eblzC-0007XI-VD for importer@patchew.org; Wed, 17 Jan 2018 06:34:31 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48556) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eblqZ-0000YO-1s for qemu-devel@nongnu.org; Wed, 17 Jan 2018 06:25:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eblqU-0003xL-J9 for qemu-devel@nongnu.org; Wed, 17 Jan 2018 06:25:35 -0500 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:35620) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eblqU-0003wI-D5; Wed, 17 Jan 2018 06:25:30 -0500 Received: by mail-wr0-x244.google.com with SMTP id g38so15259191wrd.2; Wed, 17 Jan 2018 03:25:30 -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 w11sm2548965wrg.42.2018.01.17.03.25.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Jan 2018 03:25:28 -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=hpTkP+T5/M/dmA4zwYyBnzC5NMCj89kN1mw8q+JC5jlGR5J8cDDVdDZjqushICJkvn n1lssSLg8ccbxNVvQpGd/kBdaN+D67cbq/6lSWh3ChV0G0QTpr2T3idBjigMbhNoaMSI uLoTJ2HcpXmfCs94uzMb2XkCIsSRqOpiOGeVvM4s5Chht3Z2AZCMEFdODZWyLl0vIxmO yHzqzJfOBRUOw1AGXsvCj+WdZbVpVkOQ1NTdeVpfF+9OUufq5nJ6PKsHmadjYsdO7DjW AWIqFoME0yqFS1+O5xIKC+8OOja+GBHdliUeGCW837qv20NsFm2EQAwU5VPZyvZCvXE0 iZRw== 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=jV3eQW0xdtnXQ12ybcdtOOhUaLPgwZBhz+Ha7qYPrUfBTnvh7MnzKyejNBHm6O7VOg sPQbQ3HRhaoQnybgahHNoGdrjqF7hTftxfWskeC3NFZuVUtjGZ44yUk2O2cm8uoSTxaF DhRjsbHiDNoWA3EJl/qq4XosdUFsT4OSKZaXdIgbcLKguC7eCfgMrhgYfUSpoxv6eZvO m4WBOmkm7IAeTQeU5780X77X8SROKZB/tqkjZ+uz10RPb4WqNLRFHkeMyA0+MiNViGkG u8K9AJgzLKe/YpqXvMnt963HliB88x5wDxpD7MsdB99xDsBsgKIhjwurxUyGe53G7ysp uixQ== X-Gm-Message-State: AKwxytcu2WI3IFFFxrl4W1uU2d2lt94U4iCBdEgQFBnmVMLSooKe1tra 7t24E7YyEtwXZCM79nUlRcJ9+Vr4 X-Google-Smtp-Source: ACJfBosDKYS+EM/ZEEu/fZP3MP9X1xxNiSF6SDOYUc3SSoQlcKeYJnbm7P9xkp8MOcpH1crLO3kMdw== X-Received: by 10.223.152.172 with SMTP id w41mr2399036wrb.12.1516188329103; Wed, 17 Jan 2018 03:25:29 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Wed, 17 Jan 2018 12:25:09 +0100 Message-Id: <1516188312-29612-5-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1516188312-29612-1-git-send-email-pbonzini@redhat.com> References: <1516188312-29612-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:c0c::244 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