From nobody Tue May 21 04:27:13 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612184043; cv=none; d=zohomail.com; s=zohoarc; b=S6FM+uRb/vWOKkj9Jje1gd/gxMzxEyxxv+IKmrOm0KZUK6mY0HtzbH7pYqjYNr5CWdI6fg0lCPjotnluYLEWo2o01WO83zLTllJ1KdcmcHleaT30thUZ9DVhv9VslhPqVUg/mXhBrTC4ZZe8u6Eb0EStuM2TB1TWKW0OkK6U/Io= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612184043; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=SJAGJCmimKYcS+clNb/u180mdWeuRwVVjwSl9bvxVJo=; b=iXlrbzumopP/dIMT1KcKVriSzwQLgsO5WDWxsANlVbUy70pRtfMTRtfmryaHmO6nI3x8IM2tPsJA9WOqcStn04gt8M26vFBFT2wBgw0RDjqCk+KmKCxmo5lOk9Rf9l8bAdFtJ+TLKGiEOOFgQM9NkL9D4XBmVjQjUAhJAkWQ04o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612184043644565.3720407445405; Mon, 1 Feb 2021 04:54:03 -0800 (PST) Received: from localhost ([::1]:42884 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l6YiQ-0004St-LB for importer@patchew.org; Mon, 01 Feb 2021 07:54:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36168) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l6YfF-0001Uk-TH for qemu-devel@nongnu.org; Mon, 01 Feb 2021 07:50:45 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:36116) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l6YfD-0004Kv-Dn for qemu-devel@nongnu.org; Mon, 01 Feb 2021 07:50:45 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-469-jlXvGvTGMbusheJGlG-PpQ-1; Mon, 01 Feb 2021 07:50:40 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 776AE107ACE3; Mon, 1 Feb 2021 12:50:39 +0000 (UTC) Received: from toolbox.redhat.com (ovpn-113-25.rdu2.redhat.com [10.10.113.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0EFB010016DB; Mon, 1 Feb 2021 12:50:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612183842; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SJAGJCmimKYcS+clNb/u180mdWeuRwVVjwSl9bvxVJo=; b=KN0z9xTjERDKeuIteduWLrzG3bv9Mg4kKZejz3d9lFiKV4H2PNYd7X6wiKmkpgm5kiB78a A3vLXorunrMN1foY0KTiuBKmwvWcN2fWOFxWUBektIzMQ9/ez0jxp2FpmnWmSnhavn8x4+ 8vcdzsknFnWuSWKO/mcMIKVvApukYNs= X-MC-Unique: jlXvGvTGMbusheJGlG-PpQ-1 From: Sergio Lopez To: qemu-devel@nongnu.org Subject: [PATCH v4 1/2] block: Avoid processing BDS twice in bdrv_set_aio_context_ignore() Date: Mon, 1 Feb 2021 13:50:31 +0100 Message-Id: <20210201125032.44713-2-slp@redhat.com> In-Reply-To: <20210201125032.44713-1-slp@redhat.com> References: <20210201125032.44713-1-slp@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=slp@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=slp@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.351, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Sergio Lopez , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Some graphs may contain an indirect reference to the first BDS in the chain that can be reached while walking it bottom->up from one its children. Doubling-processing of a BDS is especially problematic for the aio_notifiers, as they might attempt to work on both the old and the new AIO contexts. To avoid this problem, add every child and parent to the ignore list before actually processing them. Suggested-by: Kevin Wolf Signed-off-by: Sergio Lopez Reviewed-by: Kevin Wolf --- block.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/block.c b/block.c index 8b9d457546..3da99312db 100644 --- a/block.c +++ b/block.c @@ -6414,7 +6414,10 @@ void bdrv_set_aio_context_ignore(BlockDriverState *b= s, AioContext *new_context, GSList **ignore) { AioContext *old_context =3D bdrv_get_aio_context(bs); - BdrvChild *child; + GSList *children_to_process =3D NULL; + GSList *parents_to_process =3D NULL; + GSList *entry; + BdrvChild *child, *parent; =20 g_assert(qemu_get_current_aio_context() =3D=3D qemu_get_aio_context()); =20 @@ -6429,16 +6432,33 @@ void bdrv_set_aio_context_ignore(BlockDriverState *= bs, continue; } *ignore =3D g_slist_prepend(*ignore, child); - bdrv_set_aio_context_ignore(child->bs, new_context, ignore); + children_to_process =3D g_slist_prepend(children_to_process, child= ); } - QLIST_FOREACH(child, &bs->parents, next_parent) { - if (g_slist_find(*ignore, child)) { + + QLIST_FOREACH(parent, &bs->parents, next_parent) { + if (g_slist_find(*ignore, parent)) { continue; } - assert(child->klass->set_aio_ctx); - *ignore =3D g_slist_prepend(*ignore, child); - child->klass->set_aio_ctx(child, new_context, ignore); + *ignore =3D g_slist_prepend(*ignore, parent); + parents_to_process =3D g_slist_prepend(parents_to_process, parent); + } + + for (entry =3D children_to_process; + entry !=3D NULL; + entry =3D g_slist_next(entry)) { + child =3D entry->data; + bdrv_set_aio_context_ignore(child->bs, new_context, ignore); + } + g_slist_free(children_to_process); + + for (entry =3D parents_to_process; + entry !=3D NULL; + entry =3D g_slist_next(entry)) { + parent =3D entry->data; + assert(parent->klass->set_aio_ctx); + parent->klass->set_aio_ctx(parent, new_context, ignore); } + g_slist_free(parents_to_process); =20 bdrv_detach_aio_context(bs); =20 --=20 2.26.2 From nobody Tue May 21 04:27:13 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612183915; cv=none; d=zohomail.com; s=zohoarc; b=SDEjIwVS4rWK6nYtjHVFYZAvC+rg+UJdLBrKYPmRZ0TTFLT6AjN6Z/mYOA8YmpmH6yppzqKEqcu4mpFRSj/3FJqVZN92QoeXfE1RuU0KKAiRdPkc9aFFqOnaRrjP5WYbXox0lwWFuZCa8MPX03enXGCsLdiXjNjkfAAsnljoyCE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612183915; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qdV5DMM6dXOpa4giqDeWcXyhYAj5Yo6ZRMd9ri4fCwE=; b=GTvCSZ6nXYjnpI+IJx0XZSTdc30f3PkTT0r0M1s4X+aeq2RxgRgXkI3Ea7xA20OS2ojwtTT5Gl+bwqwLF3WfPwKNFXT5KGeOttN7b/Fzn6AyQ8rgAzMsEbNCHQaSEczLMRowHijoGuh2MF/Yn0TU2uN+llD74i+ZYM1RfSJcj/Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612183915619286.54112925291156; Mon, 1 Feb 2021 04:51:55 -0800 (PST) Received: from localhost ([::1]:38528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l6YgM-0002ZG-Fa for importer@patchew.org; Mon, 01 Feb 2021 07:51:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36186) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l6YfH-0001W9-2g for qemu-devel@nongnu.org; Mon, 01 Feb 2021 07:50:47 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:29532) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l6YfE-0004LA-N3 for qemu-devel@nongnu.org; Mon, 01 Feb 2021 07:50:46 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-336-LGgH65Q5NhSQnR-9y1ll_g-1; Mon, 01 Feb 2021 07:50:42 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1B337612AD; Mon, 1 Feb 2021 12:50:41 +0000 (UTC) Received: from toolbox.redhat.com (ovpn-113-25.rdu2.redhat.com [10.10.113.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id B6C0810021AA; Mon, 1 Feb 2021 12:50:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612183843; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qdV5DMM6dXOpa4giqDeWcXyhYAj5Yo6ZRMd9ri4fCwE=; b=exnTqjUgc7Fx71nasxXElS7X7ROxVcHfywVcpF+/Iy7GRn0badAg6XfjaDrzCdXd6SIswc +71QlhGo/LcGh7YymguttTl5TDP/DKv2XOuu349mww0axRQVSSA1XiVNsGECd7S1Z8as3F Ye0taKDQ3KaLBn1DDWfBvLiaEZ0KUeM= X-MC-Unique: LGgH65Q5NhSQnR-9y1ll_g-1 From: Sergio Lopez To: qemu-devel@nongnu.org Subject: [PATCH v4 2/2] block: move blk_exp_close_all() to qemu_cleanup() Date: Mon, 1 Feb 2021 13:50:32 +0100 Message-Id: <20210201125032.44713-3-slp@redhat.com> In-Reply-To: <20210201125032.44713-1-slp@redhat.com> References: <20210201125032.44713-1-slp@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=slp@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=slp@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.351, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Sergio Lopez , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Move blk_exp_close_all() from bdrv_close() to qemu_cleanup(), before bdrv_drain_all_begin(). Export drivers may have coroutines yielding at some point in the block layer, so we need to shut them down before draining the block layer, as otherwise they may get stuck blk_wait_while_drained(). RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=3D1900505 Signed-off-by: Sergio Lopez Reviewed-by: Kevin Wolf --- block.c | 1 - qemu-nbd.c | 1 + softmmu/runstate.c | 9 +++++++++ storage-daemon/qemu-storage-daemon.c | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index 3da99312db..9682c82fa8 100644 --- a/block.c +++ b/block.c @@ -4435,7 +4435,6 @@ static void bdrv_close(BlockDriverState *bs) void bdrv_close_all(void) { assert(job_next(NULL) =3D=3D NULL); - blk_exp_close_all(); =20 /* Drop references from requests still in flight, such as canceled blo= ck * jobs whose AIO context has not been polled yet */ diff --git a/qemu-nbd.c b/qemu-nbd.c index 0d513cb38c..608c63e82a 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -503,6 +503,7 @@ static const char *socket_activation_validate_opts(cons= t char *device, static void qemu_nbd_shutdown(void) { job_cancel_sync_all(); + blk_exp_close_all(); bdrv_close_all(); } =20 diff --git a/softmmu/runstate.c b/softmmu/runstate.c index 6177693a30..ac4b2e2540 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -25,6 +25,7 @@ #include "qemu/osdep.h" #include "audio/audio.h" #include "block/block.h" +#include "block/export.h" #include "chardev/char.h" #include "crypto/cipher.h" #include "crypto/init.h" @@ -783,6 +784,14 @@ void qemu_cleanup(void) */ migration_shutdown(); =20 + /* + * Close the exports before draining the block layer. The export + * drivers may have coroutines yielding on it, so we need to clean + * them up before the drain, as otherwise they may be get stuck in + * blk_wait_while_drained(). + */ + blk_exp_close_all(); + /* * We must cancel all block jobs while the block layer is drained, * or cancelling will be affected by throttling and thus may block diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-sto= rage-daemon.c index e0c87edbdd..d8d172cc60 100644 --- a/storage-daemon/qemu-storage-daemon.c +++ b/storage-daemon/qemu-storage-daemon.c @@ -314,6 +314,7 @@ int main(int argc, char *argv[]) main_loop_wait(false); } =20 + blk_exp_close_all(); bdrv_drain_all_begin(); bdrv_close_all(); =20 --=20 2.26.2