From nobody Tue Feb 10 03:20:50 2026 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 151618739816429.674118290097454; Wed, 17 Jan 2018 03:09:58 -0800 (PST) Received: from localhost ([::1]:55502 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eblbR-00007r-4C for importer@patchew.org; Wed, 17 Jan 2018 06:09:57 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35807) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eblT7-0001ag-Up for qemu-devel@nongnu.org; Wed, 17 Jan 2018 06:01:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eblSy-0003Gh-6a for qemu-devel@nongnu.org; Wed, 17 Jan 2018 06:01:22 -0500 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:41936) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eblSy-0003Fd-17; Wed, 17 Jan 2018 06:01:12 -0500 Received: by mail-wm0-x243.google.com with SMTP id f71so14322172wmf.0; Wed, 17 Jan 2018 03:01:11 -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 o12sm3996897wrf.81.2018.01.17.03.01.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Jan 2018 03:01:09 -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=kLofZHI5wR6dpuV0lLNd2kCg3TIU/Gl4xnNF2n4qVugW/myvHZaJuCc8HAR6f6NBH0 otJa8uRcHuukuvMqboiUAXu04J0hLBdiqR2VqpdIsReCaI9M31S3e7DKMEpC22UDkHq1 Pfs0OU0LUes1RJNfuycR5Tvh1/h1OCkjnmW2gEDAkAxaeXV1HWdEkPVqoXxbHk5DAZa2 8Y8fQdSo7xie3/Y0W1N7YLfKq9bKFTpoXZrBaCoJWXvacVzq8k/s1B6HMFrkReJmKppU AjCiQUdwAIwNrF39y8C4SIYgD7dCU6+uYqa+sKNR83vSecqDkYZYQk9OT6LHduJi/LIc fweg== 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=EqEa6mLa5ibnUTw+zVePAl0cQ2fdcf/OliimFg0VZLK5KPHPB3UDOgiaAfYEO3TWCl xl+y5wiSQu07ulL7RUI0V8jwHJbdAwdfl3Qr1enYn1atgjopcywIGPrpA8p6WKMrO3Nz wFz1PxAjWSIhM19d03C+2fq/9/b7eUpMIIfy/dyY8q/HlUReNTcFzcjllSBLN0xdEyuY NAuunmbJD6cK9d557y0ATmj1hBguwmKSoKtrxjfnWF47+yEGWsG0StqvvLApPg/enw++ +uh2Z//EaczIJr/6frwk2kvwl5u1wY+x4DrjiwvbGslib+bhWtI3Te2YK7Y85jTrS1hY RJUg== X-Gm-Message-State: AKwxytetCOO8DJlF2LVROXKKLxbPfDHpRbQjIvy6EC6G3zMM6053S4Z4 vZy9WPBO76apdbSymg/dz+b/fl60 X-Google-Smtp-Source: ACJfBosrHVfYSfzej6suhyqqs8HYOVXUEfF2GlVjKTtCQBbw/TrCoHSQcT8T3OimTFF6K4m2VDWqiw== X-Received: by 10.28.210.149 with SMTP id j143mr1693000wmg.48.1516186870594; Wed, 17 Jan 2018 03:01:10 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Wed, 17 Jan 2018 12:00:48 +0100 Message-Id: <1516186851-23896-5-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1516186851-23896-1-git-send-email-pbonzini@redhat.com> References: <1516186851-23896-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