From nobody Mon Nov 17 23:49:54 2025 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=1607017421; cv=none; d=zohomail.com; s=zohoarc; b=AhPN6dhvFGn1kble5B+OkkJxXRjjFEAOLEswi+1Gn6oiHq74BzcTlAaa63frSnl8fw4mO7zzmyvdLI3noZKOeCbSio2w5XeyK4NMu7HZNknFStLrbSCHb/2Ww0XcUZtvkwDI4kCAvP9v0BZXqs8QXqUV3BzhzD9NjD32u1hL44g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607017421; 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=3WFvJcaC3EqpqiHgXJzqCNHaLxRITJyMEzdiPt+ayJw=; b=IDLjG7AkipaTJ5EPY2X22lLg68aF3JN6am2yAYZmuj6eOTfxawv+EjJZAKZnvicWZaJRRXT2tXAYUHMjlVtIvmRPqcPHQuqJt2i4JujWxfwz6iQDIJbbC0hdv8yq1ZNRg+X8UQ3enIl24IklfhxfqYnZeraKn/iR7+l8iYVumWc= 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 1607017421885115.99543923049976; Thu, 3 Dec 2020 09:43:41 -0800 (PST) Received: from localhost ([::1]:37336 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kksMm-0000Vv-5S for importer@patchew.org; Thu, 03 Dec 2020 12:26:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55450) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kksKH-0006gb-Dl for qemu-devel@nongnu.org; Thu, 03 Dec 2020 12:23:29 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:30518) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kksKF-0003Rc-Kb for qemu-devel@nongnu.org; Thu, 03 Dec 2020 12:23:29 -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-506-rK4mZqEtMymmVulttgb-7A-1; Thu, 03 Dec 2020 12:23:24 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DD3BBAFA82; Thu, 3 Dec 2020 17:23:23 +0000 (UTC) Received: from merkur.fritz.box (ovpn-114-175.ams2.redhat.com [10.36.114.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9D3B163BA7; Thu, 3 Dec 2020 17:23:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1607016206; 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=3WFvJcaC3EqpqiHgXJzqCNHaLxRITJyMEzdiPt+ayJw=; b=IzvIu4ArGtyglOryTFcC6fTx+Olj1cjHX/hoR3yTaAjJK6PN/vNcjCHvxM+gyAuZ9gihVn ZTrJh2EJwoHwE8aDm1w+lfabcGHU30h8Nw3ghM6360c7HIqUtxgHJ7QAzqrtDKI0YKe8Us mhu43zgcIHPtQi/BNNfdSP7H2l5lw98= X-MC-Unique: rK4mZqEtMymmVulttgb-7A-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 1/3] block: Simplify qmp_block_resize() error paths Date: Thu, 3 Dec 2020 18:23:09 +0100 Message-Id: <20201203172311.68232-2-kwolf@redhat.com> In-Reply-To: <20201203172311.68232-1-kwolf@redhat.com> References: <20201203172311.68232-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.495, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: kwolf@redhat.com, qemu-devel@nongnu.org, qemu-stable@nongnu.org, stefanha@redhat.com, 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) Content-Type: text/plain; charset="utf-8" The only thing that happens after the 'out:' label is blk_unref(blk). However, blk =3D NULL in all of the error cases, so instead of jumping to 'out:', we can just return directly. Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf Reviewed-by: Vladimir Sementsov-Ogievskiy --- blockdev.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/blockdev.c b/blockdev.c index fe6fb5dc1d..229d2cce1b 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2468,17 +2468,17 @@ void coroutine_fn qmp_block_resize(bool has_device,= const char *device, =20 if (size < 0) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "size", "a >0 size"= ); - goto out; + return; } =20 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_RESIZE, NULL)) { error_setg(errp, QERR_DEVICE_IN_USE, device); - goto out; + return; } =20 blk =3D blk_new_with_bs(bs, BLK_PERM_RESIZE, BLK_PERM_ALL, errp); if (!blk) { - goto out; + return; } =20 bdrv_drained_begin(bs); @@ -2487,7 +2487,6 @@ void coroutine_fn qmp_block_resize(bool has_device, c= onst char *device, bdrv_co_leave(bs, old_ctx); bdrv_drained_end(bs); =20 -out: bdrv_co_lock(bs); blk_unref(blk); bdrv_co_unlock(bs); --=20 2.28.0 From nobody Mon Nov 17 23:49:54 2025 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=1607016757; cv=none; d=zohomail.com; s=zohoarc; b=T7pV4wF+Q0q8JIcwNYjRyT7b1PCr6W34vrgv+NgEH6Yn/XxUSupuzsnMynIj49pFOdoRv54yggC21zFnI70XU3Ra68foIHRtUxegQfQzfgA7y/IKtFd/OsxT6YuT+K47ocR1Yzqz/brgUyY5LI1+vEJpRKd8NAhRq609DJba5X0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607016757; 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=cJuOJ0YpElwIyA8jgvKL1/m4MWictfzGOeNLaNfyDow=; b=BKyyrGLQ8Sk5GoXUNkk7ismtfKeZqjDBI+0IVqd4x4vp+3t65DVrC5zJSDop5RggOf9FvvY6oCLITasI3C9Pyv0nPJ3SVx6tOxHWwaNry22h5FJ3oBhNz+FuHusCac6bBC45oGa3grjnXYn2FtV6im4QPxAU4oLnvyrypQ3TKO4= 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 1607016757117841.4607398256979; Thu, 3 Dec 2020 09:32:37 -0800 (PST) Received: from localhost ([::1]:44812 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kksT5-00044M-1b for importer@patchew.org; Thu, 03 Dec 2020 12:32:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kksKM-0006jD-9s for qemu-devel@nongnu.org; Thu, 03 Dec 2020 12:23:34 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:53492) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kksKG-0003Sl-Tw for qemu-devel@nongnu.org; Thu, 03 Dec 2020 12:23:33 -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-595-mFT4B12KNzutC4pWd_gBmg-1; Thu, 03 Dec 2020 12:23:26 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 722CF107ACE4; Thu, 3 Dec 2020 17:23:25 +0000 (UTC) Received: from merkur.fritz.box (ovpn-114-175.ams2.redhat.com [10.36.114.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 319DA5B4A0; Thu, 3 Dec 2020 17:23:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1607016208; 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=cJuOJ0YpElwIyA8jgvKL1/m4MWictfzGOeNLaNfyDow=; b=gI4eSUxt05c2SlMn2P9dpw3E638HnIE1u2WPbQtC6+6FJ81ViKxXZtDGp8f3EWHj+5e9vN GZZjlO7iTalctWV4S/WHfsvKlhzQyVV2uhypK2l8U646agFpb1LmngnHLABgSApMBxknt8 aen6xPC+nxIiCv1FapgKVz9IIrwv2oE= X-MC-Unique: mFT4B12KNzutC4pWd_gBmg-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 2/3] block: Fix locking in qmp_block_resize() Date: Thu, 3 Dec 2020 18:23:10 +0100 Message-Id: <20201203172311.68232-3-kwolf@redhat.com> In-Reply-To: <20201203172311.68232-1-kwolf@redhat.com> References: <20201203172311.68232-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.495, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: kwolf@redhat.com, qemu-devel@nongnu.org, qemu-stable@nongnu.org, stefanha@redhat.com, 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) Content-Type: text/plain; charset="utf-8" The drain functions assume that we hold the AioContext lock of the drained block node. Make sure to actually take the lock. Cc: qemu-stable@nongnu.org Fixes: eb94b81a94bce112e6b206df846c1551aaf6cab6 Signed-off-by: Kevin Wolf Reviewed-by: Vladimir Sementsov-Ogievskiy --- blockdev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/blockdev.c b/blockdev.c index 229d2cce1b..0535a8dc9e 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2481,13 +2481,16 @@ void coroutine_fn qmp_block_resize(bool has_device,= const char *device, return; } =20 + bdrv_co_lock(bs); bdrv_drained_begin(bs); + bdrv_co_unlock(bs); + old_ctx =3D bdrv_co_enter(bs); blk_truncate(blk, size, false, PREALLOC_MODE_OFF, 0, errp); bdrv_co_leave(bs, old_ctx); - bdrv_drained_end(bs); =20 bdrv_co_lock(bs); + bdrv_drained_end(bs); blk_unref(blk); bdrv_co_unlock(bs); } --=20 2.28.0 From nobody Mon Nov 17 23:49:54 2025 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=1607017092; cv=none; d=zohomail.com; s=zohoarc; b=Lb6ID+ArEyJDsicmsERuLsOGPSyzzRQyE1YfUx/5AiBfcH/c/1kTillYFxXoASyhF9SG2FfWbb1cFS4LMsKs8K7vBy36ETkLUjdUKLzos2CJtMXPVu8Y3ewHVzc1JVE2UPcVTwMsQFQSvaNIeUn5egHuuBLpgUVdAVbQtWU56is= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607017092; 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=S900SpiJiWpgSYHQX3D3TlzJJk8QiYP6bMg+zIoxy5I=; b=nGdJgeJQOQ+T7uPQl1c+ORoU89mVkvWQ5bIwstc3kCO/LeI/OkDKs2Sod6SHgnH9rJmDwawjlYBYlEJmWCN6EGk1ENQzS8ZqCesAlmE6jOk+qa8gLzGSsheFcKUZ+Stzdv1lNqSmyRh7F5lcDXfGLF1X7oO0nAe4TLlO6sap0tA= 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 1607017092806397.7806204966879; Thu, 3 Dec 2020 09:38:12 -0800 (PST) Received: from localhost ([::1]:51722 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kksYR-0007GD-Tg for importer@patchew.org; Thu, 03 Dec 2020 12:38:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55550) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kksKO-0006oR-5z for qemu-devel@nongnu.org; Thu, 03 Dec 2020 12:23:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:38240) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kksKL-0003Tk-Tq for qemu-devel@nongnu.org; Thu, 03 Dec 2020 12:23:35 -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-43-ie_a5zZwPWCPvWIwvBx_3Q-1; Thu, 03 Dec 2020 12:23:28 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 061D7107ACE3; Thu, 3 Dec 2020 17:23:27 +0000 (UTC) Received: from merkur.fritz.box (ovpn-114-175.ams2.redhat.com [10.36.114.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id B96FB63BA7; Thu, 3 Dec 2020 17:23:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1607016212; 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=S900SpiJiWpgSYHQX3D3TlzJJk8QiYP6bMg+zIoxy5I=; b=T9W5Si8knfOD88OoptGBeKuNLSKvhSdBMBUUMXN4wwB3IKg+ZhZxJJjVVnzDhzpr2HkiGr 82MXktjnsDnIMgVop54Zkt5isuAgY9gfieQC8EcNWt4Snz9qrPUqY4NriuWtaet3n1DlUv RJDronDhClsZVnSdsBpSve0jWzxsG7c= X-MC-Unique: ie_a5zZwPWCPvWIwvBx_3Q-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 3/3] block: Fix deadlock in bdrv_co_yield_to_drain() Date: Thu, 3 Dec 2020 18:23:11 +0100 Message-Id: <20201203172311.68232-4-kwolf@redhat.com> In-Reply-To: <20201203172311.68232-1-kwolf@redhat.com> References: <20201203172311.68232-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@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=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.495, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=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: kwolf@redhat.com, qemu-devel@nongnu.org, qemu-stable@nongnu.org, stefanha@redhat.com, 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) Content-Type: text/plain; charset="utf-8" If bdrv_co_yield_to_drain() is called for draining a block node that runs in a different AioContext, it keeps that AioContext locked while it yields and schedules a BH in the AioContext to do the actual drain. As long as executing the BH is the very next thing the event loop of the node's AioContext, this actually happens to work, but when it tries to execute something else that wants to take the AioContext lock, it will deadlock. (In the bug report, this other thing is a virtio-scsi device running virtio_scsi_data_plane_handle_cmd().) Instead, always drop the AioContext lock across the yield and reacquire it only when the coroutine is reentered. The BH needs to unconditionally take the lock for itself now. This fixes the 'block_resize' QMP command on a block node that runs in an iothread. Cc: qemu-stable@nongnu.org Fixes: eb94b81a94bce112e6b206df846c1551aaf6cab6 Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=3D1903511 Signed-off-by: Kevin Wolf Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/io.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/block/io.c b/block/io.c index ec5e152bb7..a9f56a9ab1 100644 --- a/block/io.c +++ b/block/io.c @@ -306,17 +306,7 @@ static void bdrv_co_drain_bh_cb(void *opaque) =20 if (bs) { AioContext *ctx =3D bdrv_get_aio_context(bs); - AioContext *co_ctx =3D qemu_coroutine_get_aio_context(co); - - /* - * When the coroutine yielded, the lock for its home context was - * released, so we need to re-acquire it here. If it explicitly - * acquired a different context, the lock is still held and we don= 't - * want to lock it a second time (or AIO_WAIT_WHILE() would hang). - */ - if (ctx =3D=3D co_ctx) { - aio_context_acquire(ctx); - } + aio_context_acquire(ctx); bdrv_dec_in_flight(bs); if (data->begin) { assert(!data->drained_end_counter); @@ -328,9 +318,7 @@ static void bdrv_co_drain_bh_cb(void *opaque) data->ignore_bds_parents, data->drained_end_counter); } - if (ctx =3D=3D co_ctx) { - aio_context_release(ctx); - } + aio_context_release(ctx); } else { assert(data->begin); bdrv_drain_all_begin(); @@ -348,13 +336,16 @@ static void coroutine_fn bdrv_co_yield_to_drain(Block= DriverState *bs, int *drained_end_counter) { BdrvCoDrainData data; + Coroutine *self =3D qemu_coroutine_self(); + AioContext *ctx =3D bdrv_get_aio_context(bs); + AioContext *co_ctx =3D qemu_coroutine_get_aio_context(self); =20 /* Calling bdrv_drain() from a BH ensures the current coroutine yields= and * other coroutines run if they were queued by aio_co_enter(). */ =20 assert(qemu_in_coroutine()); data =3D (BdrvCoDrainData) { - .co =3D qemu_coroutine_self(), + .co =3D self, .bs =3D bs, .done =3D false, .begin =3D begin, @@ -368,13 +359,29 @@ static void coroutine_fn bdrv_co_yield_to_drain(Block= DriverState *bs, if (bs) { bdrv_inc_in_flight(bs); } - replay_bh_schedule_oneshot_event(bdrv_get_aio_context(bs), - bdrv_co_drain_bh_cb, &data); + + /* + * Temporarily drop the lock across yield or we would get deadlocks. + * bdrv_co_drain_bh_cb() reaquires the lock as needed. + * + * When we yield below, the lock for the current context will be + * released, so if this is actually the lock that protects bs, don't d= rop + * it a second time. + */ + if (ctx !=3D co_ctx) { + aio_context_release(ctx); + } + replay_bh_schedule_oneshot_event(ctx, bdrv_co_drain_bh_cb, &data); =20 qemu_coroutine_yield(); /* If we are resumed from some other event (such as an aio completion = or a * timer callback), it is a bug in the caller that should be fixed. */ assert(data.done); + + /* Reaquire the AioContext of bs if we dropped it */ + if (ctx !=3D co_ctx) { + aio_context_acquire(ctx); + } } =20 void bdrv_do_drained_begin_quiesce(BlockDriverState *bs, --=20 2.28.0