From nobody Sun May 5 04:10:15 2024 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=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1667839068; cv=none; d=zohomail.com; s=zohoarc; b=TuoMP4tDLZbmD3TrXp7uw10oDcKy6xNKiI7n+b35GBM005hhdUv299hMK+6NfU+20B2z0OexKTGlaGvd1463kptbfZ8skFXOb6DOSJzQ/A85vWwCTVajiMeklQdp1TbpGO1lj1XMMusFiHuqPRSrhnE1khukJw3aJHT5chPM1YY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667839068; h=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=d/6W19azstujcDObR70ENetfPW6mRbE1NUxU6QlS31c=; b=kFmHVWbPIWndjcafRY3lMTrjadGaszcyFbCsg6w1PJCdAsVACoXiSFoka8VgtbDiGN4ioOroHcubU1mBS24u9fzN8ophz1LGEhayMYvCE5P/X0AU4VhmO+1XLkk5SxF83T/MqyeOqOFq6TfIxgu9BbXVvBhgi62rBtOd5BIyupg= 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 1667839068733139.35802278129108; Mon, 7 Nov 2022 08:37:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1os56t-0005T2-Cy; Mon, 07 Nov 2022 11:36:31 -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 1os56r-0005QO-1q; Mon, 07 Nov 2022 11:36:29 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1os56o-0008Sc-3D; Mon, 07 Nov 2022 11:36:28 -0500 Received: from iva8-3a65cceff156.qloud-c.yandex.net (iva8-3a65cceff156.qloud-c.yandex.net [IPv6:2a02:6b8:c0c:2d80:0:640:3a65:ccef]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTP id B2D02608A6; Mon, 7 Nov 2022 19:36:12 +0300 (MSK) Received: from vsementsov-win.yandex-team.ru (unknown [2a02:6b8:b081:7318::1:29]) by iva8-3a65cceff156.qloud-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id 6oMWGH9or4-aBNCJ1rm; Mon, 07 Nov 2022 19:36:11 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1667838971; bh=d/6W19azstujcDObR70ENetfPW6mRbE1NUxU6QlS31c=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=cEW6VCTQEpRx+noI6qkpLLdNkgSTvIA9oX7zOTEXtS5ORGu3xYe9gfqi19RAkw/kS O71hdx8gzXI4E2baFvfabiZ6EUBhQCUlPrmtwSzdGZSlK6gJMiAiY3KHtU2WzWoxu4 l1jVmLJvQM/dMFtN3KZGKJzrCJDUFcY5hWBlh+cA= Authentication-Results: iva8-3a65cceff156.qloud-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, hreitz@redhat.com, kwolf@redhat.com, vsementsov@yandex-team.ru, Vladimir Sementsov-Ogievskiy , Vladimir Sementsov-Ogievskiy Subject: [PATCH v8 1/4] block: drop bdrv_detach_child() Date: Mon, 7 Nov 2022 19:35:55 +0300 Message-Id: <20221107163558.618889-2-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221107163558.618889-1-vsementsov@yandex-team.ru> References: <20221107163558.618889-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.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 @yandex-team.ru) X-ZM-MESSAGEID: 1667839069641100002 Content-Type: text/plain; charset="utf-8" From: Vladimir Sementsov-Ogievskiy The only caller is bdrv_root_unref_child(), let's just do the logic directly in it. It simplifies further convertion of bdrv_root_unref_child() to transaction action. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Hanna Reitz --- block.c | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/block.c b/block.c index 3bd594eb2a..65f5bb96ed 100644 --- a/block.c +++ b/block.c @@ -3060,30 +3060,6 @@ static BdrvChild *bdrv_attach_child_noperm(BlockDriv= erState *parent_bs, tran, errp); } =20 -static void bdrv_detach_child(BdrvChild *child) -{ - BlockDriverState *old_bs =3D child->bs; - - GLOBAL_STATE_CODE(); - bdrv_replace_child_noperm(child, NULL); - bdrv_child_free(child); - - if (old_bs) { - /* - * Update permissions for old node. We're just taking a parent awa= y, so - * we're loosening restrictions. Errors of permission update are n= ot - * fatal in this case, ignore them. - */ - bdrv_refresh_perms(old_bs, NULL); - - /* - * When the parent requiring a non-default AioContext is removed, = the - * node moves back to the main AioContext - */ - bdrv_try_change_aio_context(old_bs, qemu_get_aio_context(), NULL, = NULL); - } -} - /* * This function steals the reference to child_bs from the caller. * That reference is later dropped by bdrv_root_unref_child(). @@ -3172,12 +3148,28 @@ out: /* Callers must ensure that child->frozen is false. */ void bdrv_root_unref_child(BdrvChild *child) { - BlockDriverState *child_bs; + BlockDriverState *child_bs =3D child->bs; =20 GLOBAL_STATE_CODE(); + bdrv_replace_child_noperm(child, NULL); + bdrv_child_free(child); + + if (child_bs) { + /* + * Update permissions for old node. We're just taking a parent awa= y, so + * we're loosening restrictions. Errors of permission update are n= ot + * fatal in this case, ignore them. + */ + bdrv_refresh_perms(child_bs, NULL); + + /* + * When the parent requiring a non-default AioContext is removed, = the + * node moves back to the main AioContext + */ + bdrv_try_change_aio_context(child_bs, qemu_get_aio_context(), NULL, + NULL); + } =20 - child_bs =3D child->bs; - bdrv_detach_child(child); bdrv_unref(child_bs); } =20 --=20 2.34.1 From nobody Sun May 5 04:10:15 2024 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=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1667839086; cv=none; d=zohomail.com; s=zohoarc; b=F2fnPdDF7/0NzJlLDktqXEA9tF1LYLl50b6DJb2aU7kSg4gcXp4QHnnOqb828dRY6HNWP7X4Vr16ETnkb0IdlC+tt6KQkmaPMj9i8CefoBmisv7rIJnE4nWIxJzzKE5UTNrSimM+CRtEhCbwmQTGL9dQIcaCGQE+/60Dvjy47aE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667839086; h=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=4bqrvJC6j/nEcfgskbdizX61P6fUjTH4OVfUTvvL0wU=; b=KK6AmpseeaJXJnN8TEXZT05t+yVs6hXTok1WXAY84tUZHAtTJW5E6LM9lfTrPkQDA96UPHV1At7LSVY3o537eLdLgXxfMyCX2CSzMyvNI2B5OtvY481RyJrg1h902akv2t8jpAy12yuRl5wchFfKoODRnqWUVwvEycLJSc3Qj2Q= 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 1667839086247372.1732437869596; Mon, 7 Nov 2022 08:38:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1os56y-0005aR-5S; Mon, 07 Nov 2022 11:36:36 -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 1os56v-0005X6-76; Mon, 07 Nov 2022 11:36:33 -0500 Received: from forwardcorp1c.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1os56t-0000vO-Ih; Mon, 07 Nov 2022 11:36:32 -0500 Received: from iva8-3a65cceff156.qloud-c.yandex.net (iva8-3a65cceff156.qloud-c.yandex.net [IPv6:2a02:6b8:c0c:2d80:0:640:3a65:ccef]) by forwardcorp1c.mail.yandex.net (Yandex) with ESMTP id 8C5475F596; Mon, 7 Nov 2022 19:36:13 +0300 (MSK) Received: from vsementsov-win.yandex-team.ru (unknown [2a02:6b8:b081:7318::1:29]) by iva8-3a65cceff156.qloud-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id 6oMWGH9or4-aCNCJsIM; Mon, 07 Nov 2022 19:36:12 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1667838972; bh=4bqrvJC6j/nEcfgskbdizX61P6fUjTH4OVfUTvvL0wU=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=1H+n0SS269Xbz7uj13Lx7M/kZpfmJZH9gbmIboqmwCgZSmYjSTiVJEAmdti+PjLRl ULqeqVrOvERVCVOpwsIrFIYwPM4LgsX/w2gEgKzBG0LAI7bXdU6uQjb7ecWPstF1c2 DharAmBu0QRuyyb91EZ1YQsyk1YE1ENzBpsWm3co= Authentication-Results: iva8-3a65cceff156.qloud-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, hreitz@redhat.com, kwolf@redhat.com, vsementsov@yandex-team.ru, Vladimir Sementsov-Ogievskiy , Vladimir Sementsov-Ogievskiy Subject: [PATCH v8 2/4] block: drop bdrv_remove_filter_or_cow_child Date: Mon, 7 Nov 2022 19:35:56 +0300 Message-Id: <20221107163558.618889-3-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221107163558.618889-1-vsementsov@yandex-team.ru> References: <20221107163558.618889-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 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=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1c.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.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 @yandex-team.ru) X-ZM-MESSAGEID: 1667839087298100001 Content-Type: text/plain; charset="utf-8" From: Vladimir Sementsov-Ogievskiy Drop this simple wrapper used only in one place. We have too many graph modifying functions even without it. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Hanna Reitz --- block.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/block.c b/block.c index 65f5bb96ed..8acff7983d 100644 --- a/block.c +++ b/block.c @@ -93,8 +93,6 @@ static bool bdrv_recurse_has_child(BlockDriverState *bs, static void bdrv_replace_child_noperm(BdrvChild *child, BlockDriverState *new_bs); static void bdrv_remove_child(BdrvChild *child, Transaction *tran); -static void bdrv_remove_filter_or_cow_child(BlockDriverState *bs, - Transaction *tran); =20 static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, @@ -5055,17 +5053,6 @@ static void bdrv_remove_child(BdrvChild *child, Tran= saction *tran) tran_add(tran, &bdrv_remove_child_drv, child); } =20 -/* - * A function to remove backing-chain child of @bs if exists: cow child for - * format nodes (always .backing) and filter child for filters (may be .fi= le or - * .backing) - */ -static void bdrv_remove_filter_or_cow_child(BlockDriverState *bs, - Transaction *tran) -{ - bdrv_remove_child(bdrv_filter_or_cow_child(bs), tran); -} - static int bdrv_replace_node_noperm(BlockDriverState *from, BlockDriverState *to, bool auto_skip, Transaction *tran, @@ -5150,7 +5137,7 @@ static int bdrv_replace_node_common(BlockDriverState = *from, } =20 if (detach_subchain) { - bdrv_remove_filter_or_cow_child(to_cow_parent, tran); + bdrv_remove_child(bdrv_filter_or_cow_child(to_cow_parent), tran); } =20 found =3D g_hash_table_new(NULL, NULL); --=20 2.34.1 From nobody Sun May 5 04:10:15 2024 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=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1667839068; cv=none; d=zohomail.com; s=zohoarc; b=BLdR0H0Ep1FwKuVEW0XSjcXbls0Dn6UIK0M1ku965Ty0CyJwZU7GAhTvuWarfce1e/8SO1fwUO3YHQVvsURAqphHa8l31HtrRh+8Kl1vt10biWGz38U4B2tIwTYacjMqp8a+3DPHe7sEL4QetVMfFAie3tRHiLBONlTo8oPU+dY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667839068; h=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=c0FmKDdh4DOiEKkRdDWJq16mgKzvoqtsFukHeTA6gmY=; b=YHWeNe00lCEMaMTmF3+wzaq2kEp3jvGeSUhql64HFZ86DBVQdeiKJb2ZW0hDTY8L1WKuYPuJPW03c3pYu/kmidzHtNc3IGly68sHTH4w1abItr+eKiJUpFeuxWPqHpt+nqplJ0apYTqJIjh9DlWxA9cSIK6em+2Orp5MIbX1AgE= 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 1667839067838935.9105322898166; Mon, 7 Nov 2022 08:37:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1os56v-0005Y8-Nf; Mon, 07 Nov 2022 11:36:33 -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 1os56t-0005Sn-4e; Mon, 07 Nov 2022 11:36:31 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1os56n-0000AG-O7; Mon, 07 Nov 2022 11:36:30 -0500 Received: from iva8-3a65cceff156.qloud-c.yandex.net (iva8-3a65cceff156.qloud-c.yandex.net [IPv6:2a02:6b8:c0c:2d80:0:640:3a65:ccef]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTP id 6AABB608DC; Mon, 7 Nov 2022 19:36:14 +0300 (MSK) Received: from vsementsov-win.yandex-team.ru (unknown [2a02:6b8:b081:7318::1:29]) by iva8-3a65cceff156.qloud-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id 6oMWGH9or4-aDNCxf6A; Mon, 07 Nov 2022 19:36:13 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1667838973; bh=c0FmKDdh4DOiEKkRdDWJq16mgKzvoqtsFukHeTA6gmY=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=JXVWzL+vW+GVN+zNU6HmiIveMs5fjPQWv/vWJ0q+kyAUhk3K7iGtHDua+t1DVaHMC gX9j3kzmVZ7b0QRQHCbBYgfO6b4/D888JC5vTulaEnbxLKyQ2+YZqXXBgdK+y+8Y09 Lq9BO/ydvWmShlOvqEm7KDbQV0FCJMxd2ofmgQ5Y= Authentication-Results: iva8-3a65cceff156.qloud-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, hreitz@redhat.com, kwolf@redhat.com, vsementsov@yandex-team.ru, Vladimir Sementsov-Ogievskiy , Vladimir Sementsov-Ogievskiy Subject: [PATCH v8 3/4] block: bdrv_refresh_perms(): allow external tran Date: Mon, 7 Nov 2022 19:35:57 +0300 Message-Id: <20221107163558.618889-4-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221107163558.618889-1-vsementsov@yandex-team.ru> References: <20221107163558.618889-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham 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 @yandex-team.ru) X-ZM-MESSAGEID: 1667839069678100003 Content-Type: text/plain; charset="utf-8" From: Vladimir Sementsov-Ogievskiy Allow passing external Transaction pointer, stop creating extra Transaction objects. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Hanna Reitz --- block.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/block.c b/block.c index 8acff7983d..eed54f968d 100644 --- a/block.c +++ b/block.c @@ -2581,15 +2581,24 @@ char *bdrv_perm_names(uint64_t perm) } =20 =20 -static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) +/* @tran is allowed to be NULL. In this case no rollback is possible */ +static int bdrv_refresh_perms(BlockDriverState *bs, Transaction *tran, + Error **errp) { int ret; - Transaction *tran =3D tran_new(); + Transaction *local_tran =3D NULL; g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, bs); GLOBAL_STATE_CODE(); =20 + if (!tran) { + tran =3D local_tran =3D tran_new(); + } + ret =3D bdrv_list_refresh_perms(list, NULL, tran, errp); - tran_finalize(tran, ret); + + if (local_tran) { + tran_finalize(local_tran, ret); + } =20 return ret; } @@ -2605,7 +2614,7 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t pe= rm, uint64_t shared, =20 bdrv_child_set_perm(c, perm, shared, tran); =20 - ret =3D bdrv_refresh_perms(c->bs, &local_err); + ret =3D bdrv_refresh_perms(c->bs, tran, &local_err); =20 tran_finalize(tran, ret); =20 @@ -3089,7 +3098,7 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *c= hild_bs, goto out; } =20 - ret =3D bdrv_refresh_perms(child_bs, errp); + ret =3D bdrv_refresh_perms(child_bs, tran, errp); =20 out: tran_finalize(tran, ret); @@ -3130,7 +3139,7 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent= _bs, goto out; } =20 - ret =3D bdrv_refresh_perms(parent_bs, errp); + ret =3D bdrv_refresh_perms(parent_bs, tran, errp); if (ret < 0) { goto out; } @@ -3158,7 +3167,7 @@ void bdrv_root_unref_child(BdrvChild *child) * we're loosening restrictions. Errors of permission update are n= ot * fatal in this case, ignore them. */ - bdrv_refresh_perms(child_bs, NULL); + bdrv_refresh_perms(child_bs, NULL, NULL); =20 /* * When the parent requiring a non-default AioContext is removed, = the @@ -3400,7 +3409,7 @@ int bdrv_set_backing_hd(BlockDriverState *bs, BlockDr= iverState *backing_hd, goto out; } =20 - ret =3D bdrv_refresh_perms(bs, errp); + ret =3D bdrv_refresh_perms(bs, tran, errp); out: tran_finalize(tran, ret); =20 @@ -5213,7 +5222,7 @@ int bdrv_append(BlockDriverState *bs_new, BlockDriver= State *bs_top, goto out; } =20 - ret =3D bdrv_refresh_perms(bs_new, errp); + ret =3D bdrv_refresh_perms(bs_new, tran, errp); out: tran_finalize(tran, ret); =20 @@ -6513,7 +6522,7 @@ int bdrv_activate(BlockDriverState *bs, Error **errp) */ if (bs->open_flags & BDRV_O_INACTIVE) { bs->open_flags &=3D ~BDRV_O_INACTIVE; - ret =3D bdrv_refresh_perms(bs, errp); + ret =3D bdrv_refresh_perms(bs, NULL, errp); if (ret < 0) { bs->open_flags |=3D BDRV_O_INACTIVE; return ret; @@ -6658,7 +6667,7 @@ static int bdrv_inactivate_recurse(BlockDriverState *= bs) * We only tried to loosen restrictions, so errors are not fatal, igno= re * them. */ - bdrv_refresh_perms(bs, NULL); + bdrv_refresh_perms(bs, NULL, NULL); =20 /* Recursively inactivate children */ QLIST_FOREACH(child, &bs->children, next) { --=20 2.34.1 From nobody Sun May 5 04:10:15 2024 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=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1667839114; cv=none; d=zohomail.com; s=zohoarc; b=OwBaDXQd+mHZBnvsQg0SNZW3SIWfIfOLVPlJiOPAfNLZA7+y/0JmtcObrLmc6d5+fRuEcJDDE2rby9Gew5GuffHmLB6wPBWl2uLwqhe5LAOz9EeHSJ4uCylN15+AOKblMbes71aj+yJJq0Awxe9R8Jhv6kFP1qcVOkzWwSLW9PE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667839114; h=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=sMSKoXrIwnB9j3ELiriv3/2q8O1xxftJlNX7bSulgTc=; b=jPAeesODwiqYzTAgonnkg0SBySFOJjV4nnvcIzR3E/0pzF7DLCj7spJPhuJ/9MS36D/FBgP5C4wsSDWjMRD2smHPrMDnxke0uIlPhNDLXwkakI3VOVf2/a85L0uQeiCXNCZCB1C8YTJnqAlOpCRh0+Lwqg0hWswMDustdUtkXdA= 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 1667839114176954.3016267934042; Mon, 7 Nov 2022 08:38:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1os56s-0005SK-8O; Mon, 07 Nov 2022 11:36:30 -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 1os56p-0005Pi-Qd; Mon, 07 Nov 2022 11:36:27 -0500 Received: from forwardcorp1c.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1os56n-0000GS-Lu; Mon, 07 Nov 2022 11:36:27 -0500 Received: from iva8-3a65cceff156.qloud-c.yandex.net (iva8-3a65cceff156.qloud-c.yandex.net [IPv6:2a02:6b8:c0c:2d80:0:640:3a65:ccef]) by forwardcorp1c.mail.yandex.net (Yandex) with ESMTP id 5F7A35F3E3; Mon, 7 Nov 2022 19:36:15 +0300 (MSK) Received: from vsementsov-win.yandex-team.ru (unknown [2a02:6b8:b081:7318::1:29]) by iva8-3a65cceff156.qloud-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id 6oMWGH9or4-aENC3YCE; Mon, 07 Nov 2022 19:36:14 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1667838974; bh=sMSKoXrIwnB9j3ELiriv3/2q8O1xxftJlNX7bSulgTc=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=fSDOsGuc9IjeaKgtwDigR6qce45cOB3aK9rDqvUxfx0rJC8YOKrOZXDqUG6QkzumC sO5BZGK6NuwWPfxFJOcDbxQMRz31xkxPHraTNgGVLBXVCzHegFXs08yRrqCmgjJZQK CLe0m1Xpbpts/5wG2m8QQYP4GqFCH2KPZfk5WNTw= Authentication-Results: iva8-3a65cceff156.qloud-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, hreitz@redhat.com, kwolf@redhat.com, vsementsov@yandex-team.ru, Vladimir Sementsov-Ogievskiy , Vladimir Sementsov-Ogievskiy Subject: [PATCH v8 4/4] block: refactor bdrv_list_refresh_perms to allow any list of nodes Date: Mon, 7 Nov 2022 19:35:58 +0300 Message-Id: <20221107163558.618889-5-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221107163558.618889-1-vsementsov@yandex-team.ru> References: <20221107163558.618889-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 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=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1c.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.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 @yandex-team.ru) X-ZM-MESSAGEID: 1667839115328100001 Content-Type: text/plain; charset="utf-8" From: Vladimir Sementsov-Ogievskiy We are going to increase usage of collecting nodes in a list to then update, and calling bdrv_topological_dfs() each time is not convenient, and not correct as we are going to interleave graph modifying with filling the node list. So, let's switch to a function that takes any list of nodes, adds all their subtrees and do topological sort. And finally, refresh permissions. While being here, make the function public, as we'll want to use it from blockdev.c in near future. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Hanna Reitz --- block.c | 51 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/block.c b/block.c index eed54f968d..4e039ee220 100644 --- a/block.c +++ b/block.c @@ -2511,8 +2511,12 @@ static int bdrv_node_refresh_perm(BlockDriverState *= bs, BlockReopenQueue *q, return 0; } =20 -static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, - Transaction *tran, Error **errp) +/* + * @list is a product of bdrv_topological_dfs() (may be called several tim= es) - + * a topologically sorted subgraph. + */ +static int bdrv_do_refresh_perms(GSList *list, BlockReopenQueue *q, + Transaction *tran, Error **errp) { int ret; BlockDriverState *bs; @@ -2534,6 +2538,24 @@ static int bdrv_list_refresh_perms(GSList *list, Blo= ckReopenQueue *q, return 0; } =20 +/* + * @list is any list of nodes. List is completed by all subtrees and + * topologically sorted. It's not a problem if some node occurs in the @li= st + * several times. + */ +static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, + Transaction *tran, Error **errp) +{ + g_autoptr(GHashTable) found =3D g_hash_table_new(NULL, NULL); + g_autoptr(GSList) refresh_list =3D NULL; + + for ( ; list; list =3D list->next) { + refresh_list =3D bdrv_topological_dfs(refresh_list, found, list->d= ata); + } + + return bdrv_do_refresh_perms(refresh_list, q, tran, errp); +} + void bdrv_get_cumulative_perm(BlockDriverState *bs, uint64_t *perm, uint64_t *shared_perm) { @@ -2594,7 +2616,7 @@ static int bdrv_refresh_perms(BlockDriverState *bs, T= ransaction *tran, tran =3D local_tran =3D tran_new(); } =20 - ret =3D bdrv_list_refresh_perms(list, NULL, tran, errp); + ret =3D bdrv_do_refresh_perms(list, NULL, tran, errp); =20 if (local_tran) { tran_finalize(local_tran, ret); @@ -4350,7 +4372,6 @@ int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, = Error **errp) BlockReopenQueueEntry *bs_entry, *next; AioContext *ctx; Transaction *tran =3D tran_new(); - g_autoptr(GHashTable) found =3D NULL; g_autoptr(GSList) refresh_list =3D NULL; =20 assert(qemu_get_current_aio_context() =3D=3D qemu_get_aio_context()); @@ -4380,18 +4401,15 @@ int bdrv_reopen_multiple(BlockReopenQueue *bs_queue= , Error **errp) bs_entry->prepared =3D true; } =20 - found =3D g_hash_table_new(NULL, NULL); QTAILQ_FOREACH(bs_entry, bs_queue, entry) { BDRVReopenState *state =3D &bs_entry->state; =20 - refresh_list =3D bdrv_topological_dfs(refresh_list, found, state->= bs); + refresh_list =3D g_slist_prepend(refresh_list, state->bs); if (state->old_backing_bs) { - refresh_list =3D bdrv_topological_dfs(refresh_list, found, - state->old_backing_bs); + refresh_list =3D g_slist_prepend(refresh_list, state->old_back= ing_bs); } if (state->old_file_bs) { - refresh_list =3D bdrv_topological_dfs(refresh_list, found, - state->old_file_bs); + refresh_list =3D g_slist_prepend(refresh_list, state->old_file= _bs); } } =20 @@ -5108,7 +5126,6 @@ static int bdrv_replace_node_common(BlockDriverState = *from, Error **errp) { Transaction *tran =3D tran_new(); - g_autoptr(GHashTable) found =3D NULL; g_autoptr(GSList) refresh_list =3D NULL; BlockDriverState *to_cow_parent =3D NULL; int ret; @@ -5149,10 +5166,8 @@ static int bdrv_replace_node_common(BlockDriverState= *from, bdrv_remove_child(bdrv_filter_or_cow_child(to_cow_parent), tran); } =20 - found =3D g_hash_table_new(NULL, NULL); - - refresh_list =3D bdrv_topological_dfs(refresh_list, found, to); - refresh_list =3D bdrv_topological_dfs(refresh_list, found, from); + refresh_list =3D g_slist_prepend(refresh_list, to); + refresh_list =3D g_slist_prepend(refresh_list, from); =20 ret =3D bdrv_list_refresh_perms(refresh_list, NULL, tran, errp); if (ret < 0) { @@ -5237,7 +5252,6 @@ int bdrv_replace_child_bs(BdrvChild *child, BlockDriv= erState *new_bs, { int ret; Transaction *tran =3D tran_new(); - g_autoptr(GHashTable) found =3D NULL; g_autoptr(GSList) refresh_list =3D NULL; BlockDriverState *old_bs =3D child->bs; =20 @@ -5249,9 +5263,8 @@ int bdrv_replace_child_bs(BdrvChild *child, BlockDriv= erState *new_bs, =20 bdrv_replace_child_tran(child, new_bs, tran); =20 - found =3D g_hash_table_new(NULL, NULL); - refresh_list =3D bdrv_topological_dfs(refresh_list, found, old_bs); - refresh_list =3D bdrv_topological_dfs(refresh_list, found, new_bs); + refresh_list =3D g_slist_prepend(refresh_list, old_bs); + refresh_list =3D g_slist_prepend(refresh_list, new_bs); =20 ret =3D bdrv_list_refresh_perms(refresh_list, NULL, tran, errp); =20 --=20 2.34.1