From nobody Thu Jan 23 05:33:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737546780; cv=none; d=zohomail.com; s=zohoarc; b=ejnu5JzYEBm/TQUQ+ln3m1UhGuRVxL0Vs8/rpvVl266bVDbYHBzRylchvzAlPvLiOgju6V/rmxKp9ePBPDFxBgmzx7WoicCP73CZ7cHvhM1UBpLgGvGxo1n81LOhQfCGIZ5iPdlX3Yy4wu2zA/rQMCfD2J0lswZjal8/uyUgzts= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737546780; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bpGQXazZRTs7fXzsCi2gPR/wNSY6kSjuxkw2BiXV7oA=; b=llpyY5jDk6it4I7qF+HCCFKk2xQBi92viHsNS1r1FUbisMhMrXCdnqmJGROc4OqSuHKcN9v024R1GXZeYudqNdujPPWkv8D3SG4XfRfFnJ+/p515NCLVtYrhby3p+n62W8iP7ulfnq5d3jB4oZMZIZAN5VgrGhheg/Wopbbbu3g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737546780755742.3307042815094; Wed, 22 Jan 2025 03:53:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taZHw-0003qV-M8; Wed, 22 Jan 2025 06:52:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taZHa-0003D1-TY for qemu-devel@nongnu.org; Wed, 22 Jan 2025 06:52:34 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taZHY-0000vp-1D for qemu-devel@nongnu.org; Wed, 22 Jan 2025 06:52:29 -0500 Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-223-fcet-vwSN1qP4gPSCpqiWQ-1; Wed, 22 Jan 2025 06:51:20 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 931AF1955DC9; Wed, 22 Jan 2025 11:51:19 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.195]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 16E9B1956053; Wed, 22 Jan 2025 11:51:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737546747; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bpGQXazZRTs7fXzsCi2gPR/wNSY6kSjuxkw2BiXV7oA=; b=bokufthJjs2mVB3tk/EV/aM3X+DmRAsp77rVt4myd68bxgit9GVFOea3VTPfUc6QE/JjEH KIHEaoXsRb81ZuZlZyPQhif5lt1dxFULvNcYhno4wX2mbHKwAfCmYYel1zptqkpT1elW2T ukVT9JDVb8Z2dOspsjFLUV7zr0sWb9c= X-MC-Unique: fcet-vwSN1qP4gPSCpqiWQ-1 X-Mimecast-MFC-AGG-ID: fcet-vwSN1qP4gPSCpqiWQ From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, hreitz@redhat.com, pkrempa@redhat.com, peterx@redhat.com, qemu-devel@nongnu.org Subject: [PATCH 1/9] block: Allow inactivating already inactive nodes Date: Wed, 22 Jan 2025 12:50:38 +0100 Message-ID: <20250122115046.51216-2-kwolf@redhat.com> In-Reply-To: <20250122115046.51216-1-kwolf@redhat.com> References: <20250122115046.51216-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 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=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -51 X-Spam_score: -5.2 X-Spam_bar: ----- X-Spam_report: (-5.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.996, 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_H2=-0.086, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1737546781434019000 Content-Type: text/plain; charset="utf-8" What we wanted to catch with the assertion is cases where the recursion finds that a child was inactive before its parent. This should never happen. But if the user tries to inactivate an image that is already inactive, that's harmless and we don't want to fail the assertion. Signed-off-by: Kevin Wolf --- block.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index f60606f242..43ed632a7a 100644 --- a/block.c +++ b/block.c @@ -6955,7 +6955,8 @@ bdrv_has_bds_parent(BlockDriverState *bs, bool only_a= ctive) return false; } =20 -static int GRAPH_RDLOCK bdrv_inactivate_recurse(BlockDriverState *bs) +static int GRAPH_RDLOCK +bdrv_inactivate_recurse(BlockDriverState *bs, bool top_level) { BdrvChild *child, *parent; int ret; @@ -6973,7 +6974,14 @@ static int GRAPH_RDLOCK bdrv_inactivate_recurse(Bloc= kDriverState *bs) return 0; } =20 - assert(!(bs->open_flags & BDRV_O_INACTIVE)); + /* + * Inactivating an already inactive node on user request is harmless, = but if + * a child is already inactive before its parent, that's bad. + */ + if (bs->open_flags & BDRV_O_INACTIVE) { + assert(top_level); + return 0; + } =20 /* Inactivate this node */ if (bs->drv->bdrv_inactivate) { @@ -7010,7 +7018,7 @@ static int GRAPH_RDLOCK bdrv_inactivate_recurse(Block= DriverState *bs) =20 /* Recursively inactivate children */ QLIST_FOREACH(child, &bs->children, next) { - ret =3D bdrv_inactivate_recurse(child->bs); + ret =3D bdrv_inactivate_recurse(child->bs, false); if (ret < 0) { return ret; } @@ -7035,7 +7043,7 @@ int bdrv_inactivate_all(void) if (bdrv_has_bds_parent(bs, false)) { continue; } - ret =3D bdrv_inactivate_recurse(bs); + ret =3D bdrv_inactivate_recurse(bs, true); if (ret < 0) { bdrv_next_cleanup(&it); break; --=20 2.48.1