From nobody Sat Feb 7 04:46:16 2026 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=1621263471; cv=none; d=zohomail.com; s=zohoarc; b=RZgFvBJPAm/0znVrINRy+1rBKyyCUQtLlz4EorWO1Yzn/f5Kw18V/LdYf09xKQKXR6vP7w0ePuAXWgD1xqxDBF3ocN9T+WNKgSOqQBsupkk2dP5QPscIrvY/9LGIcHdMzwGLtOfb2Q4qTwJGTRSSa1XrILPn1V+ioeLjFQKQM4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621263471; 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=fV20J4Btohsbn/Q0xrXXA6gW+0ZKKcirbJd1bz20viM=; b=SZkfVGXa8eA4AYFfXFMMy+B6w+sB7osEJLBlnX5FzulPD2peTTd5VZN4cbHdtZMrahzlfmT8XiKg4uLo7aZCh+2VzqsgF82UC6Fd9/4ClEiO+fTgCk8sXKVDOsKtxLJqCIv1rrdYKmwpfuPComdqjnp+QT8s/m3x7cg2gdYds7Y= 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 1621263471546241.54221432391182; Mon, 17 May 2021 07:57:51 -0700 (PDT) Received: from localhost ([::1]:59898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1liegn-0007ri-Ut for importer@patchew.org; Mon, 17 May 2021 10:57:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34530) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaE-0001Sz-65 for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:02 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:44890) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaB-0004de-IC for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:01 -0400 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-264-zhF3H-I6M9-x7EuMdl9zXg-1; Mon, 17 May 2021 10:50:57 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3A204A0CAE; Mon, 17 May 2021 14:50:56 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-113-23.ams2.redhat.com [10.36.113.23]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5AE705D71D; Mon, 17 May 2021 14:50:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621263058; 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=fV20J4Btohsbn/Q0xrXXA6gW+0ZKKcirbJd1bz20viM=; b=RLBX1CClAGlBtWZ1w2GwakU+6s+doQVT5RXIU0ybujWvp6hJ4yrsGKrw+Zaaf6ogoQBHGj +lPrsU6v7qMOZVF2lAVp4xMmHMbnCV0XS4YK0W7NVZIBcIIze4qC3DpTltE7/yf95C81yG H+t1Dk3BtiIvaQMsQ9VytQQ5bPFoQ/M= X-MC-Unique: zhF3H-I6M9-x7EuMdl9zXg-1 From: Emanuele Giuseppe Esposito To: qemu-block@nongnu.org Subject: [PATCH v3 1/5] blkdebug: refactor removal of a suspended request Date: Mon, 17 May 2021 16:50:45 +0200 Message-Id: <20210517145049.55268-2-eesposit@redhat.com> In-Reply-To: <20210517145049.55268-1-eesposit@redhat.com> References: <20210517145049.55268-1-eesposit@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eesposit@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=170.10.133.124; envelope-from=eesposit@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -31 X-Spam_score: -3.2 X-Spam_bar: --- X-Spam_report: (-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.374, 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 , Emanuele Giuseppe Esposito , qemu-devel@nongnu.org, Max Reitz , Paolo Bonzini 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" Extract to a separate function. Do not rely on FOREACH_SAFE, which is only "safe" if the *current* node is removed---not if another node is removed. Instead, just walk the entire list from the beginning when asked to resume all suspended requests with a given tag. Co-developed-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/blkdebug.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 2c0b9b0ee8..8f19d991fa 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -793,7 +793,6 @@ static void suspend_request(BlockDriverState *bs, Blkde= bugRule *rule) printf("blkdebug: Resuming request '%s'\n", r.tag); } =20 - QLIST_REMOVE(&r, next); g_free(r.tag); } =20 @@ -869,25 +868,35 @@ static int blkdebug_debug_breakpoint(BlockDriverState= *bs, const char *event, return 0; } =20 -static int blkdebug_debug_resume(BlockDriverState *bs, const char *tag) +static int resume_req_by_tag(BDRVBlkdebugState *s, const char *tag, bool a= ll) { - BDRVBlkdebugState *s =3D bs->opaque; - BlkdebugSuspendedReq *r, *next; + BlkdebugSuspendedReq *r; =20 - QLIST_FOREACH_SAFE(r, &s->suspended_reqs, next, next) { +retry: + QLIST_FOREACH(r, &s->suspended_reqs, next) { if (!strcmp(r->tag, tag)) { + QLIST_REMOVE(r, next); qemu_coroutine_enter(r->co); + if (all) { + goto retry; + } return 0; } } return -ENOENT; } =20 +static int blkdebug_debug_resume(BlockDriverState *bs, const char *tag) +{ + BDRVBlkdebugState *s =3D bs->opaque; + + return resume_req_by_tag(s, tag, false); +} + static int blkdebug_debug_remove_breakpoint(BlockDriverState *bs, const char *tag) { BDRVBlkdebugState *s =3D bs->opaque; - BlkdebugSuspendedReq *r, *r_next; BlkdebugRule *rule, *next; int i, ret =3D -ENOENT; =20 @@ -900,11 +909,8 @@ static int blkdebug_debug_remove_breakpoint(BlockDrive= rState *bs, } } } - QLIST_FOREACH_SAFE(r, &s->suspended_reqs, next, r_next) { - if (!strcmp(r->tag, tag)) { - qemu_coroutine_enter(r->co); - ret =3D 0; - } + if (resume_req_by_tag(s, tag, true) =3D=3D 0) { + ret =3D 0; } return ret; } --=20 2.30.2 From nobody Sat Feb 7 04:46:16 2026 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=1621263334; cv=none; d=zohomail.com; s=zohoarc; b=K0IMco6gbP7bGKdznFauXlyK5WDwBRH/Z0/PmvVfZ7xb62TC4O7WzuyHISsL03yEI7qKUHsd7siMSmHGkh/XDw9tokT54+6cjey86dhPGb3yfhAEg08NC4K973Uhz4U3+VJCaLuECAW4UA/vpdBs0BqN+ndOhkR2/Mi+I4l76lI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621263334; 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=ICrrjGgia8w1NaBy1XQD706S9/jMkYW2Mr1MjkqN/bs=; b=Ziyk3DwGh6EWvTGTQnLy5orAf+zqLXsglNVxweYm1Smg92m9yeCf441z0uYsxWsAd0Tp5wiNYi+t45R2FqkW5zC69KFNPiqr5h1sDo4yzBOl8e/R0XH5giFvvjNWXy2TnGs98KygTyobby6wjRFpjL90k+H3ZKGjGTqMmOfZNQw= 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 1621263334743550.0758518207136; Mon, 17 May 2021 07:55:34 -0700 (PDT) Received: from localhost ([::1]:51466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lieea-00029F-WE for importer@patchew.org; Mon, 17 May 2021 10:55:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34560) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaF-0001Xk-Cl for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:29737) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaD-0004fX-I5 for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:03 -0400 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-372-OWp_ukHTNpKDEKcGlyIhnA-1; Mon, 17 May 2021 10:50:59 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6DAEA192377A; Mon, 17 May 2021 14:50:58 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-113-23.ams2.redhat.com [10.36.113.23]) by smtp.corp.redhat.com (Postfix) with ESMTP id 98B015D749; Mon, 17 May 2021 14:50:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621263060; 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=ICrrjGgia8w1NaBy1XQD706S9/jMkYW2Mr1MjkqN/bs=; b=MMv+vrmMxXsCZwK7m34oMPupEylenYi+xvRlbn4onlGknR0gePifnLa/e+zJerlp12vt8y dFD1mrKaXbO50atNYN7IqH3BGqp0XzEtQiUc/rwlk3rZqdWTrqJkpghLeC9IhzshsiNcYQ 8AHHYfQwV+k5btNhhnvVa6FPAblOq9A= X-MC-Unique: OWp_ukHTNpKDEKcGlyIhnA-1 From: Emanuele Giuseppe Esposito To: qemu-block@nongnu.org Subject: [PATCH v3 2/5] blkdebug: move post-resume handling to resume_req_by_tag Date: Mon, 17 May 2021 16:50:46 +0200 Message-Id: <20210517145049.55268-3-eesposit@redhat.com> In-Reply-To: <20210517145049.55268-1-eesposit@redhat.com> References: <20210517145049.55268-1-eesposit@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eesposit@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=170.10.133.124; envelope-from=eesposit@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -31 X-Spam_score: -3.2 X-Spam_bar: --- X-Spam_report: (-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.374, 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=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 , Emanuele Giuseppe Esposito , qemu-devel@nongnu.org, Max Reitz , Paolo Bonzini 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" We want to move qemu_coroutine_yield() after the loop on rules, because QLIST_FOREACH_SAFE is wrong if the rule list is modified while the coroutine has yielded. Therefore move the suspended request to the heap and clean it up from the remove side. All that is left is for blkdebug_debug_event to handle the yielding. Co-developed-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/blkdebug.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 8f19d991fa..e37f999254 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -775,25 +775,20 @@ static void blkdebug_close(BlockDriverState *bs) static void suspend_request(BlockDriverState *bs, BlkdebugRule *rule) { BDRVBlkdebugState *s =3D bs->opaque; - BlkdebugSuspendedReq r; + BlkdebugSuspendedReq *r; =20 - r =3D (BlkdebugSuspendedReq) { - .co =3D qemu_coroutine_self(), - .tag =3D g_strdup(rule->options.suspend.tag), - }; + r =3D g_new(BlkdebugSuspendedReq, 1); + + r->co =3D qemu_coroutine_self(); + r->tag =3D g_strdup(rule->options.suspend.tag); =20 remove_rule(rule); - QLIST_INSERT_HEAD(&s->suspended_reqs, &r, next); + QLIST_INSERT_HEAD(&s->suspended_reqs, r, next); =20 if (!qtest_enabled()) { - printf("blkdebug: Suspended request '%s'\n", r.tag); + printf("blkdebug: Suspended request '%s'\n", r->tag); } qemu_coroutine_yield(); - if (!qtest_enabled()) { - printf("blkdebug: Resuming request '%s'\n", r.tag); - } - - g_free(r.tag); } =20 static bool process_rule(BlockDriverState *bs, struct BlkdebugRule *rule, @@ -875,8 +870,18 @@ static int resume_req_by_tag(BDRVBlkdebugState *s, con= st char *tag, bool all) retry: QLIST_FOREACH(r, &s->suspended_reqs, next) { if (!strcmp(r->tag, tag)) { + Coroutine *co =3D r->co; + + if (!qtest_enabled()) { + printf("blkdebug: Resuming request '%s'\n", r->tag); + } + QLIST_REMOVE(r, next); - qemu_coroutine_enter(r->co); + g_free(r->tag); + g_free(r); + + qemu_coroutine_enter(co); + if (all) { goto retry; } --=20 2.30.2 From nobody Sat Feb 7 04:46:16 2026 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=1621263648; cv=none; d=zohomail.com; s=zohoarc; b=gWoC+J/niHhMr/eDTJpvK/Fe3mK1ZeVLgUxEwnx4BYZpZZkb+zE1zJ02e7FhpMlydVHXK64acasMEq8YxMgXIb90ohXrim2RkMAHw1veA9Jw2tX7jTxyHDqF/N8PW6FvyAWBakTHZblOR4EkQH4UHw5h8ZsoAdUjCHwMULLxWmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621263648; 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=B8069keYnyNIuYkM+FktH39KppMHupzj2AI8e+wRRD4=; b=dQYlu1BAF7xTaif++ljWfnz6mrNzC+dzFxt5a4zWXX0H0H/QmSIA0JwphCbYLr98ovk6QVKXsXrynprmRoJpPV4xZv7eBrZDprXzGh9FHI37Hp2Ftw6Lpv/c1UJgqkBKY/bosF93ZZEm8ONc9ERO2T+ZQ4omWzaYb9gAZuBfceQ= 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 1621263648830155.48120025605886; Mon, 17 May 2021 08:00:48 -0700 (PDT) Received: from localhost ([::1]:38842 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1liejd-0004Hq-1K for importer@patchew.org; Mon, 17 May 2021 11:00:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaI-0001lI-HP for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:24630) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaG-0004js-RM for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:06 -0400 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-204-mN49Oxj6PwKMKGg1gzNHLw-1; Mon, 17 May 2021 10:51:01 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C32F08015F7; Mon, 17 May 2021 14:51:00 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-113-23.ams2.redhat.com [10.36.113.23]) by smtp.corp.redhat.com (Postfix) with ESMTP id EF6035D6D7; Mon, 17 May 2021 14:50:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621263064; 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=B8069keYnyNIuYkM+FktH39KppMHupzj2AI8e+wRRD4=; b=h2+IvsUV9MiZ3ozHrJWsXX+pleD5vyEs1wFnmYmPLN5SkHduWNazaR1cvFPnamoGB4ka/3 uitMnp8Ll1WDrgZ/DrpTNIP/TzejWxrso00U9m6faX7CYCC0S6g4qldpohvt2AnOdhfNWt g5SMtfQEp7RyTI+CDf4fWdacik+Ow4A= X-MC-Unique: mN49Oxj6PwKMKGg1gzNHLw-1 From: Emanuele Giuseppe Esposito To: qemu-block@nongnu.org Subject: [PATCH v3 3/5] blkdebug: track all actions Date: Mon, 17 May 2021 16:50:47 +0200 Message-Id: <20210517145049.55268-4-eesposit@redhat.com> In-Reply-To: <20210517145049.55268-1-eesposit@redhat.com> References: <20210517145049.55268-1-eesposit@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eesposit@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=170.10.133.124; envelope-from=eesposit@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -31 X-Spam_score: -3.2 X-Spam_bar: --- X-Spam_report: (-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.374, 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=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 , Emanuele Giuseppe Esposito , qemu-devel@nongnu.org, Max Reitz , Paolo Bonzini 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" Add a counter for each action that a rule can trigger. This is mainly used to keep track of how many coroutine_yield() we need to perform after processing all rules in the list. Co-developed-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/blkdebug.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index e37f999254..388b5ed615 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -74,6 +74,7 @@ enum { ACTION_INJECT_ERROR, ACTION_SET_STATE, ACTION_SUSPEND, + ACTION__MAX, }; =20 typedef struct BlkdebugRule { @@ -791,22 +792,22 @@ static void suspend_request(BlockDriverState *bs, Blk= debugRule *rule) qemu_coroutine_yield(); } =20 -static bool process_rule(BlockDriverState *bs, struct BlkdebugRule *rule, - bool injected) +static void process_rule(BlockDriverState *bs, struct BlkdebugRule *rule, + int *action_count) { BDRVBlkdebugState *s =3D bs->opaque; =20 /* Only process rules for the current state */ if (rule->state && rule->state !=3D s->state) { - return injected; + return; } =20 /* Take the action */ + action_count[rule->action]++; switch (rule->action) { case ACTION_INJECT_ERROR: - if (!injected) { + if (action_count[ACTION_INJECT_ERROR] =3D=3D 1) { QSIMPLEQ_INIT(&s->active_rules); - injected =3D true; } QSIMPLEQ_INSERT_HEAD(&s->active_rules, rule, active_next); break; @@ -819,21 +820,19 @@ static bool process_rule(BlockDriverState *bs, struct= BlkdebugRule *rule, suspend_request(bs, rule); break; } - return injected; } =20 static void blkdebug_debug_event(BlockDriverState *bs, BlkdebugEvent event) { BDRVBlkdebugState *s =3D bs->opaque; struct BlkdebugRule *rule, *next; - bool injected; + int actions_count[ACTION__MAX] =3D { 0 }; =20 assert((int)event >=3D 0 && event < BLKDBG__MAX); =20 - injected =3D false; s->new_state =3D s->state; QLIST_FOREACH_SAFE(rule, &s->rules[event], next, next) { - injected =3D process_rule(bs, rule, injected); + process_rule(bs, rule, actions_count); } s->state =3D s->new_state; } --=20 2.30.2 From nobody Sat Feb 7 04:46:16 2026 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=1621263202; cv=none; d=zohomail.com; s=zohoarc; b=c0BTNb7ky4Tl99MDTT27z3scH0qLu60jh7wX6ZdolRlbddPpVIVxUv3PyxgsNseWHD4nk4wjN0u1iRcJ55rH4gk4uu2wjwpKQq7lOyx072pL/98GxZfaY0gw5DYau1Kq6+kuyTLj2iD8LLqk6FEanKmbAZJNhaXh1QrM8Mh+ZNk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621263202; 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=33QIVLtuBhoIzq+RHDiCreoWe4oLY1whxlrAWafcQ1Y=; b=SO3keiRISMQsLy0vIbWi2/7lokBhdHFjcdUg0kqlB75EzWqReAjSGdyNiEeMdRqCx8gyBNeNqyq846hOUo++/ebIq6m7jKiLdOVVHdX/E/9AT529rN8mQ2OmuvmLroahrstjsOX9ATMifJ+W0eKLaMjO9s1YDr1SYxKHPbo+vco= 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 1621263202005183.79026783372933; Mon, 17 May 2021 07:53:22 -0700 (PDT) Received: from localhost ([::1]:45262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1liecT-0006NH-8Y for importer@patchew.org; Mon, 17 May 2021 10:53:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaL-0001wN-8R for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:09 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:38159) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaJ-0004nt-He for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:09 -0400 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-589-PJ1wyg06PWyT5TPuv35KLg-1; Mon, 17 May 2021 10:51:04 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1AB8B80ED8E; Mon, 17 May 2021 14:51:03 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-113-23.ams2.redhat.com [10.36.113.23]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3934C5D6D7; Mon, 17 May 2021 14:51:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621263066; 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=33QIVLtuBhoIzq+RHDiCreoWe4oLY1whxlrAWafcQ1Y=; b=E7DstBCJRG32Eq9ohizaWVNTv5U76oOrQ/Dqu9xtlaQpm3zKSIG+UJOApx5MMcQqFwtO8Z N5lno6aDYHEvaJZxCcfXmL4Rn5KmoKJr5AoLtjSAsbw7P2ThE3fXScvHnIofGaourWcjsB pL1DmQtJeTkUMrLpXhB3gmDZo7gd39g= X-MC-Unique: PJ1wyg06PWyT5TPuv35KLg-1 From: Emanuele Giuseppe Esposito To: qemu-block@nongnu.org Subject: [PATCH v3 4/5] blkdebug: do not suspend in the middle of QLIST_FOREACH_SAFE Date: Mon, 17 May 2021 16:50:48 +0200 Message-Id: <20210517145049.55268-5-eesposit@redhat.com> In-Reply-To: <20210517145049.55268-1-eesposit@redhat.com> References: <20210517145049.55268-1-eesposit@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eesposit@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=eesposit@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -31 X-Spam_score: -3.2 X-Spam_bar: --- X-Spam_report: (-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.374, 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=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 , Emanuele Giuseppe Esposito , qemu-devel@nongnu.org, Max Reitz , Paolo Bonzini 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" That would be unsafe in case a rule other than the current one is removed while the coroutine has yielded. Keep FOREACH_SAFE because suspend_request deletes the current rule. After this patch, *all* matching rules are deleted before suspending the coroutine, rather than just one. This doesn't affect the existing testcases. Use actions_count to see how many yield to issue. Co-developed-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/blkdebug.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 388b5ed615..dffd869b32 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -789,7 +789,6 @@ static void suspend_request(BlockDriverState *bs, Blkde= bugRule *rule) if (!qtest_enabled()) { printf("blkdebug: Suspended request '%s'\n", r->tag); } - qemu_coroutine_yield(); } =20 static void process_rule(BlockDriverState *bs, struct BlkdebugRule *rule, @@ -834,6 +833,12 @@ static void blkdebug_debug_event(BlockDriverState *bs,= BlkdebugEvent event) QLIST_FOREACH_SAFE(rule, &s->rules[event], next, next) { process_rule(bs, rule, actions_count); } + + while (actions_count[ACTION_SUSPEND] > 0) { + qemu_coroutine_yield(); + actions_count[ACTION_SUSPEND]--; + } + s->state =3D s->new_state; } =20 --=20 2.30.2 From nobody Sat Feb 7 04:46:16 2026 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=1621263432; cv=none; d=zohomail.com; s=zohoarc; b=HljbpSBBkCvpEryQSBcEURGMc7YIL+YM+pOtBdcyfd8ZQCNobD0Xx6GZxVshPgpOKb9ATcWKxP5BBp9ZitFga1QdD5AcF0Hs6mjPr1aLZQZNoxIoe7xXazbO/LGFOS8PI9ISnAxoQAWqds1aO0e409SnFVgCriWpUrVzLqzzhYk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621263432; 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=8A4K7B6u+Ahiit92Q//OczxdstTQY10OSEPcPfO7f6o=; b=igY7H0vCieLJ/xJRJ8Y2ubVIhTuYDjdtFh8vSsvye7cgXAkbwJBNp3ovVt2dsih/qZqaq8Pkq5oMUumd38/yoZXPxgeGIomDC/JnACDt4PUG6dU00eq/g36RNWaNdCaxbbJsQoQCuk2ZQWKHjiUcBixShrfcpky7Ds1xifDeWkU= 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 1621263432174297.87742251404404; Mon, 17 May 2021 07:57:12 -0700 (PDT) Received: from localhost ([::1]:57370 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1liegA-0006Bi-CJ for importer@patchew.org; Mon, 17 May 2021 10:57:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaO-00028q-EH for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:27727) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lieaK-0004o7-LR for qemu-devel@nongnu.org; Mon, 17 May 2021 10:51:12 -0400 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-309-C-ZbL9jUOTC7cT35QxHTZw-1; Mon, 17 May 2021 10:51:06 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2F846801106; Mon, 17 May 2021 14:51:05 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-113-23.ams2.redhat.com [10.36.113.23]) by smtp.corp.redhat.com (Postfix) with ESMTP id 631835D6D7; Mon, 17 May 2021 14:51:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621263067; 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=8A4K7B6u+Ahiit92Q//OczxdstTQY10OSEPcPfO7f6o=; b=YmgUqCxCd/aWcMx/NWr37ePVSa3Iilefpzg5n/6V2ZuqPos7PurD6fvLVbpgLyshWJxC6g e7mCcVoRprTLeryfEsUbs0VmXFezQEcX8LLrV4NDbpspHvENpCOC4edvADBUV1tExSbe2d x7l3dy/703BWnSJkg7CxTA/aD7j0EPo= X-MC-Unique: C-ZbL9jUOTC7cT35QxHTZw-1 From: Emanuele Giuseppe Esposito To: qemu-block@nongnu.org Subject: [PATCH v3 5/5] blkdebug: protect rules and suspended_reqs with a lock Date: Mon, 17 May 2021 16:50:49 +0200 Message-Id: <20210517145049.55268-6-eesposit@redhat.com> In-Reply-To: <20210517145049.55268-1-eesposit@redhat.com> References: <20210517145049.55268-1-eesposit@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eesposit@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=eesposit@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -31 X-Spam_score: -3.2 X-Spam_bar: --- X-Spam_report: (-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.374, 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=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 , Emanuele Giuseppe Esposito , qemu-devel@nongnu.org, Max Reitz , Paolo Bonzini 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" Co-developed-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito --- block/blkdebug.c | 53 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index dffd869b32..cf8b088ce7 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -54,6 +54,7 @@ typedef struct BDRVBlkdebugState { /* For blkdebug_refresh_filename() */ char *config_file; =20 + QemuMutex lock; QLIST_HEAD(, BlkdebugRule) rules[BLKDBG__MAX]; QSIMPLEQ_HEAD(, BlkdebugRule) active_rules; QLIST_HEAD(, BlkdebugSuspendedReq) suspended_reqs; @@ -245,7 +246,9 @@ static int add_rule(void *opaque, QemuOpts *opts, Error= **errp) }; =20 /* Add the rule */ + qemu_mutex_lock(&s->lock); QLIST_INSERT_HEAD(&s->rules[event], rule, next); + qemu_mutex_unlock(&s->lock); =20 return 0; } @@ -468,6 +471,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *o= ptions, int flags, int ret; uint64_t align; =20 + qemu_mutex_init(&s->lock); opts =3D qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); if (!qemu_opts_absorb_qdict(opts, options, errp)) { ret =3D -EINVAL; @@ -568,6 +572,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *o= ptions, int flags, ret =3D 0; out: if (ret < 0) { + qemu_mutex_destroy(&s->lock); g_free(s->config_file); } qemu_opts_del(opts); @@ -582,6 +587,7 @@ static int rule_check(BlockDriverState *bs, uint64_t of= fset, uint64_t bytes, int error; bool immediately; =20 + qemu_mutex_lock(&s->lock); QSIMPLEQ_FOREACH(rule, &s->active_rules, active_next) { uint64_t inject_offset =3D rule->options.inject.offset; =20 @@ -595,6 +601,7 @@ static int rule_check(BlockDriverState *bs, uint64_t of= fset, uint64_t bytes, } =20 if (!rule || !rule->options.inject.error) { + qemu_mutex_unlock(&s->lock); return 0; } =20 @@ -606,6 +613,7 @@ static int rule_check(BlockDriverState *bs, uint64_t of= fset, uint64_t bytes, remove_rule(rule); } =20 + qemu_mutex_unlock(&s->lock); if (!immediately) { aio_co_schedule(qemu_get_current_aio_context(), qemu_coroutine_sel= f()); qemu_coroutine_yield(); @@ -771,8 +779,10 @@ static void blkdebug_close(BlockDriverState *bs) } =20 g_free(s->config_file); + qemu_mutex_destroy(&s->lock); } =20 +/* Called with lock held. */ static void suspend_request(BlockDriverState *bs, BlkdebugRule *rule) { BDRVBlkdebugState *s =3D bs->opaque; @@ -791,6 +801,7 @@ static void suspend_request(BlockDriverState *bs, Blkde= bugRule *rule) } } =20 +/* Called with lock held. */ static void process_rule(BlockDriverState *bs, struct BlkdebugRule *rule, int *action_count) { @@ -829,9 +840,11 @@ static void blkdebug_debug_event(BlockDriverState *bs,= BlkdebugEvent event) =20 assert((int)event >=3D 0 && event < BLKDBG__MAX); =20 - s->new_state =3D s->state; - QLIST_FOREACH_SAFE(rule, &s->rules[event], next, next) { - process_rule(bs, rule, actions_count); + WITH_QEMU_LOCK_GUARD(&s->lock) { + s->new_state =3D s->state; + QLIST_FOREACH_SAFE(rule, &s->rules[event], next, next) { + process_rule(bs, rule, actions_count); + } } =20 while (actions_count[ACTION_SUSPEND] > 0) { @@ -839,7 +852,9 @@ static void blkdebug_debug_event(BlockDriverState *bs, = BlkdebugEvent event) actions_count[ACTION_SUSPEND]--; } =20 + qemu_mutex_lock(&s->lock); s->state =3D s->new_state; + qemu_mutex_unlock(&s->lock); } =20 static int blkdebug_debug_breakpoint(BlockDriverState *bs, const char *eve= nt, @@ -862,11 +877,14 @@ static int blkdebug_debug_breakpoint(BlockDriverState= *bs, const char *event, .options.suspend.tag =3D g_strdup(tag), }; =20 + qemu_mutex_lock(&s->lock); QLIST_INSERT_HEAD(&s->rules[blkdebug_event], rule, next); + qemu_mutex_unlock(&s->lock); =20 return 0; } =20 +/* Called with lock held. */ static int resume_req_by_tag(BDRVBlkdebugState *s, const char *tag, bool a= ll) { BlkdebugSuspendedReq *r; @@ -884,7 +902,9 @@ retry: g_free(r->tag); g_free(r); =20 + qemu_mutex_unlock(&s->lock); qemu_coroutine_enter(co); + qemu_mutex_lock(&s->lock); =20 if (all) { goto retry; @@ -898,8 +918,12 @@ retry: static int blkdebug_debug_resume(BlockDriverState *bs, const char *tag) { BDRVBlkdebugState *s =3D bs->opaque; + int rc; =20 - return resume_req_by_tag(s, tag, false); + qemu_mutex_lock(&s->lock); + rc =3D resume_req_by_tag(s, tag, false); + qemu_mutex_unlock(&s->lock); + return rc; } =20 static int blkdebug_debug_remove_breakpoint(BlockDriverState *bs, @@ -909,17 +933,19 @@ static int blkdebug_debug_remove_breakpoint(BlockDriv= erState *bs, BlkdebugRule *rule, *next; int i, ret =3D -ENOENT; =20 - for (i =3D 0; i < BLKDBG__MAX; i++) { - QLIST_FOREACH_SAFE(rule, &s->rules[i], next, next) { - if (rule->action =3D=3D ACTION_SUSPEND && - !strcmp(rule->options.suspend.tag, tag)) { - remove_rule(rule); - ret =3D 0; + WITH_QEMU_LOCK_GUARD(&s->lock) { + for (i =3D 0; i < BLKDBG__MAX; i++) { + QLIST_FOREACH_SAFE(rule, &s->rules[i], next, next) { + if (rule->action =3D=3D ACTION_SUSPEND && + !strcmp(rule->options.suspend.tag, tag)) { + remove_rule(rule); + ret =3D 0; + } } } - } - if (resume_req_by_tag(s, tag, true) =3D=3D 0) { - ret =3D 0; + if (resume_req_by_tag(s, tag, true) =3D=3D 0) { + ret =3D 0; + } } return ret; } @@ -929,6 +955,7 @@ static bool blkdebug_debug_is_suspended(BlockDriverStat= e *bs, const char *tag) BDRVBlkdebugState *s =3D bs->opaque; BlkdebugSuspendedReq *r; =20 + QEMU_LOCK_GUARD(&s->lock); QLIST_FOREACH(r, &s->suspended_reqs, next) { if (!strcmp(r->tag, tag)) { return true; --=20 2.30.2