From patchwork Fri Nov 27 14:44:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936491 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F114C63798 for ; Fri, 27 Nov 2020 14:53:22 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CEA6B21D81 for ; Fri, 27 Nov 2020 14:53:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="XQAJFnjO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CEA6B21D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:58300 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif7g-0000zz-K9 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:53:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36522) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0f-0000uW-EG; Fri, 27 Nov 2020 09:46:05 -0500 Received: from mail-db8eur05on2112.outbound.protection.outlook.com ([40.107.20.112]:40192 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0d-000369-Gg; Fri, 27 Nov 2020 09:46:05 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g1lr9Okf4Oiw41XTRS79q/RpGsB7XsuNEZljzdckibrS9KQeWP5OtptTqMPfMClzbHwiy6fsh24yzrerwmEMcSv6XnyYbjaQDaEXw9E+7RJj6g1WSHo3SDBbDfVgLWiQ0tqIQC6ucFQRUlXpuf7UQYnVIC+pko7wJVJ8ul7sF8y3vPmKzNcl/TB3ZDZe6WyMJjVDTc0Y2mh8SjTVt/YEkq3s7CSt7JSbS6p8DJLfN17esB/O9acanrJB/SXzhYf3iTU7VYLY7dRssHa982HPMRKZcuWcib4bO7eUptKXKDCwxP7Du9yf78/EcV4VxEWGkspE4s+J7U3xWa3z8BlA7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bfKrlBnM24PbMJMuiw42AzL42bQJiCYNW1BbgVgTT4s=; b=BuKynLKMGARHAcRkVDcbfUbX/36sFvaF1xCzZRRaAzleUms8O+DdpJswZSvGqH6AXzdW8yLMuZ2xvkjGRNNa7dpxDJ0zkBSY/xvwakxe0qOUDGteLIc3Itkk28MoH8Fryy1g9bMdzuJ22aMyrwi8dyUacLCUTP8FLI7L93vPah47NKC9TfGeZy5MbRm09FhRKwfGuVNKsGs+QKKAdOXPkhfL0XD9FZRhnrRj55wVlZK9P5rZpJ9pR+J4vcQTq4mWhD03zTFYD3TNN+Py61eSxLRuP8m3jsM2oWHwtBKjnYLwr/1/gP2nASsdjzhv5cVaqTMgieCvdWwtyWUjbjpnZw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bfKrlBnM24PbMJMuiw42AzL42bQJiCYNW1BbgVgTT4s=; b=XQAJFnjO1HGBR75J4SvR7ECfpT3NZDrSZQWjvwpstiu4vpVhuen5JkLzThOD/vQnDPjvHlKZmJvGzGFvA5q/Q7nk850GcIo7Zev3nh+5MPVw+0jzVvuexQ9No0S6ou9g236a4e0joLEXX/q5DfTLMeVn0EUuFr7MfSoB8nZVtr0= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5128.eurprd08.prod.outlook.com (2603:10a6:20b:e3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.24; Fri, 27 Nov 2020 14:45:47 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:45:47 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 01/36] tests/test-bdrv-graph-mod: add test_parallel_exclusive_write Date: Fri, 27 Nov 2020 17:44:47 +0300 Message-Id: <20201127144522.29991-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:36 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6c73c7ab-cc7f-46a6-b5af-08d892e31a8a X-MS-TrafficTypeDiagnostic: AM6PR08MB5128: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6iztLi3J1k88Zm0VsJWgP0lD3PLIBHyjcJQenhY4nmGkaNJXj7yvIfkwTbbXeZBhujglejEIdUHp2DtaOaGDfDUS2d7UycG54np8Nw9wGiegCzd/eIt1GDgN+9jnVKyARp08PQr3UtxcUsQZk2R8Wco8kuHb73zS2txw2mD9dwfOxgoQMj6oTHa58Z4CJ0vhWNxbxXO9S4B/NfpXfYZacU135CvTVoimL8msBKD7K4KlicbrHKPMYqCScOz9g9LdMyp1kaUJ0SRHq1QRgcBlWOPSZ0pIXuKBhn7GZS2CAwUsEc+XDSX2ia7MR6A0R30VOfT+/td4iEC96T4KrjIGvQYqB/G9L3R/Jr1l33VwxFtjVXmGcfwP0pdDFUU1el3N X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(346002)(39840400004)(136003)(376002)(66946007)(66556008)(478600001)(6512007)(2616005)(66476007)(6506007)(316002)(26005)(186003)(6666004)(69590400008)(16526019)(956004)(8676002)(5660300002)(6916009)(83380400001)(2906002)(4326008)(1076003)(8936002)(36756003)(86362001)(6486002)(52116002)(107886003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: zYBoRtRLanMSsyCXh1huDmhbAOVfVDky3KZRk0euHOEDqQY08QCLGgYBrke6Gf79KliqO5Rvxz53D/j7sojzL8jLLNZQPUDd/ftazr28jWUaskHXPpN/LWYt43o5Aa/tzHTyuQtwFXI9vmE1a1IpJXA2YRXhwq7+fLvbLZkuDEWGJf/A4X4p/HS9riX/6DWnOl61ZwjCrAXc2MurkHfcqWkZ5L01a8Uu5s0mW72UFfVB/+1mlDxUwKDEemj8ZaAe0PES7ZzMJLkhrxFlihAHLDEkMsBUH/cBER4xI9gWoR3rwPh+ZxN3X9B6FW+jPEUeubwQbOasaltcHAJ+NsNt2A/Q1fRbXcIxLZ/I6zogNaglgMl8T/SlVOIWPMwtnFzEwlJDA0YRJ49doFTdzHddGlpqMzXMe1X6g4JOb9ZflFf4oZhFuGwaYOjQZsaY5rR588tmMTHqcFSJPO+e6ruRYLfvN4hu8ktAkPD5l3yW8nQKYgm8yAMHgtERX7gO8bXt6UUzgdsUH1h3eKtHivlO3mLuGJsYDkjeIwK3KSyaIOsPYvtCWMD0KWSuZ1ptnoTJjEjX5UCSCOw0ulCJLeZRAmNmbWvG4QexNmCEzuVhV1DEgVV5iWBb1WK8mG5RdgIl4IPAgbiiwSKdO/3t56XndD1+K/CFxF7NnOHUs3g5dd9ozB9+8tG2eSVE7wq+LgaJFuQ8awWqoIQ+vDEnTJE8C8YKseG7ucXVN/iuyLGHlALBecbw/V9f6R9KmnANMJ02RyzyG5KsGDW/ybFQd6XcHITkcDboykggrM/H5QuqRKrvOLuUSJo3iBXcQh9DCZs7oFgxR9w5hHxQdx0jFQTEMZcz6THmstHzNsPBScspD99m0F1Hek2HQUyXsJ/QmQ2ct5CYZltMokfn2j7a2mLHEylQQmhPceEE1ysyrKCNP7Xp52er0ECxzkS8i4VfVWXcB/cg4KwWky4r3U39FtAvr/DgKWGrAHDQMul3vcJ1NGie33WIhzQlwr0NN+FY1TRV X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c73c7ab-cc7f-46a6-b5af-08d892e31a8a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:37.5097 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LthqGRy+ndqcceSckbyrPoOyvlHF2z+cfCX9lwOem9kEe663Ey4uLkkuNyDWy9QolJG+f6UYwS6Wv2Vpy7mp5duQAZos7TceEYF3F/POgQM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5128 Received-SPF: pass client-ip=40.107.20.112; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add the test that shows that concept of ignore_children is incomplete. Actually, when we want to update something, ignoring permission of some existing BdrvChild, we should ignore also the propagated effect of this child to the other children. But that's not done. Better approach (update permissions on already updated graph) will be implemented later. Now the test fails, so it's added with -d argument to not break make check. Test fails with "Conflicts with use by fl1 as 'backing', which does not allow 'write' on base" because when updating permissions we can ignore original top->fl1 BdrvChild. But we don't ignore exclusive write permission in fl1->base BdrvChild, which is propagated. Correct thing to do is make graph change first and then do permission update from the top node. To run test do ./test-bdrv-graph-mod -d -p /bdrv-graph-mod/parallel-exclusive-write from /tests. Signed-off-by: Vladimir Sementsov-Ogievskiy --- tests/test-bdrv-graph-mod.c | 62 +++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 8cff13830e..3b9e6f242f 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -44,6 +44,21 @@ static BlockDriver bdrv_no_perm = { .bdrv_child_perm = no_perm_default_perms, }; +static void exclusive_write_perms(BlockDriverState *bs, BdrvChild *c, + BdrvChildRole role, + BlockReopenQueue *reopen_queue, + uint64_t perm, uint64_t shared, + uint64_t *nperm, uint64_t *nshared) +{ + *nperm = BLK_PERM_WRITE; + *nshared = BLK_PERM_ALL & ~BLK_PERM_WRITE; +} + +static BlockDriver bdrv_exclusive_writer = { + .format_name = "exclusive-writer", + .bdrv_child_perm = exclusive_write_perms, +}; + static BlockDriverState *no_perm_node(const char *name) { return bdrv_new_open_driver(&bdrv_no_perm, name, BDRV_O_RDWR, &error_abort); @@ -55,6 +70,12 @@ static BlockDriverState *pass_through_node(const char *name) BDRV_O_RDWR, &error_abort); } +static BlockDriverState *exclusive_writer_node(const char *name) +{ + return bdrv_new_open_driver(&bdrv_exclusive_writer, name, + BDRV_O_RDWR, &error_abort); +} + /* * test_update_perm_tree * @@ -185,8 +206,44 @@ static void test_should_update_child(void) blk_unref(root); } +/* + * test_parallel_exclusive_write + * + * Check that when we replace node, old permissions of the node being removed + * doesn't break the replacement. + */ +static void test_parallel_exclusive_write(void) +{ + BlockDriverState *top = exclusive_writer_node("top"); + BlockDriverState *base = no_perm_node("base"); + BlockDriverState *fl1 = pass_through_node("fl1"); + BlockDriverState *fl2 = pass_through_node("fl2"); + + bdrv_attach_child(top, fl1, "backing", &child_of_bds, BDRV_CHILD_DATA, + &error_abort); + bdrv_attach_child(fl1, base, "backing", &child_of_bds, BDRV_CHILD_FILTERED, + &error_abort); + bdrv_attach_child(fl2, base, "backing", &child_of_bds, BDRV_CHILD_FILTERED, + &error_abort); + bdrv_ref(base); + + bdrv_replace_node(fl1, fl2, &error_abort); + + bdrv_unref(top); +} + int main(int argc, char *argv[]) { + int i; + bool debug = false; + + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-d")) { + debug = true; + break; + } + } + bdrv_init(); qemu_init_main_loop(&error_abort); @@ -196,5 +253,10 @@ int main(int argc, char *argv[]) g_test_add_func("/bdrv-graph-mod/should-update-child", test_should_update_child); + if (debug) { + g_test_add_func("/bdrv-graph-mod/parallel-exclusive-write", + test_parallel_exclusive_write); + } + return g_test_run(); } From patchwork Fri Nov 27 14:44:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936519 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02634C2D0E4 for ; Fri, 27 Nov 2020 15:00:11 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 59D6B2223F for ; Fri, 27 Nov 2020 15:00:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="enN45Z67" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 59D6B2223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:52312 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifEH-0001vz-9s for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:00:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif19-0001F2-8l; Fri, 27 Nov 2020 09:46:35 -0500 Received: from mail-db8eur05on2112.outbound.protection.outlook.com ([40.107.20.112]:40192 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0y-000369-8r; Fri, 27 Nov 2020 09:46:35 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DkhYSALyQ4szkvE0dbYVDfs3vqYQeVf7kkHS9T0dbdviSX6Q5+BrdkUtywFo9KLwX1U3IyhVqjU0drQzG5mFSlkh6JOw8ObDEl80Q3NzgxTEp1nd5M9pf8Sbwotz7TnARBp38bT1vD9Glbd2V3ZG+CJZvTdOQEhVvgm+SnwtgY4zhPMkDAMFDjyUuSeSG8f3+MI03QI9AQJaSIQIHcuIywtAAVBD282mZnTXWriBKaFf73QBBLBUgfy11zia7yiRAQt4viWzfdBH8ofgjIDEmOfdeMTVHPJl+bWRi/FmfjtX2Cg6Jd1aHDJxlgzpk8h+cvAjgfyJYXC3ZvEqXeI9bg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gz5aFpP0pFNJf+XRHJeM2GHXaL6TNAk3uERb3fkjda0=; b=dcWpu9rkn4lMqGrbSijLQQBFfEPoRs35Fjos5NAwCG8CnLVHUGYWDBmO+0MoTT8wlM0PbiMjiwDRxsrckDQv/+qQBjPSDIGaSM6p9CzpVmaRmCzoHRm6c6iymrFgZS0JV25eNkiCzkGLRkGHNg9RyX+WM1k9OewEMGLNK7sA1MCMJV9FEephWDiJw1lsxfpplw0GoXJ0NhLD8/fP+tO+JFSqZYk8FuzxNynvEnOZIyBGW68fHG1Btx5tC2z4f4CFuCslQeLzV420MMkNh63KSxypL+P1Xtv8zJGy2C2PbAsfo1O0fyESN1KJxQH85+y8M3lvcOOUC3222kkX6j0PgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gz5aFpP0pFNJf+XRHJeM2GHXaL6TNAk3uERb3fkjda0=; b=enN45Z67kfdMIAo7clRdyM9L9vL38sbr6dhQ18QX9gWkleh1YWaW3l2lTp7AyV45dnfmRij5bVRBrWTHBgZqLiJD5y7QjKYV5LlpKFXfuIF5LB4A3tXNu3xGL7AbbFAKb+aP6nvVUGHnWjbnkK8UZ2sH7ff4Fhu8AJfT8cwc+OY= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5128.eurprd08.prod.outlook.com (2603:10a6:20b:e3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.24; Fri, 27 Nov 2020 14:45:55 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:45:55 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 02/36] tests/test-bdrv-graph-mod: add test_parallel_perm_update Date: Fri, 27 Nov 2020 17:44:48 +0300 Message-Id: <20201127144522.29991-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: da371e7e-4ddb-46f5-b702-08d892e31afd X-MS-TrafficTypeDiagnostic: AM6PR08MB5128: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iZ2cZWL4Gf5d7q38yOPyzMnZLlP15hrkvhS+nQWl+xGmMYJphm7oTaHTNyC5KQTW2Vah2XJ2Ri3QpfysgnNcK7du0o4eq7epWf784GROanFaayjAjSCCkWbc7R0/brShmZEehsUpFTUsp/dekMyPQ2haLiWlMOESMRUwUOSGpbaMoIvsYg3WExASyFFMybFTScWSkTV52ebnlkxpCUdHkt0waNsHBEuNnUVrLHyMZQQ4Q3rIueFu2NntcPtYn6IJ5P9rJ1Tt0L+VDp5jXjevNBSN4LQjugc+qzZhpMbcGvJCzafDbp3hI9d3cPZHZKGhHZJoGgu8ZwIBNehRKVQONg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(346002)(39840400004)(136003)(376002)(66946007)(66556008)(478600001)(6512007)(2616005)(66476007)(6506007)(316002)(26005)(186003)(6666004)(16526019)(956004)(8676002)(5660300002)(6916009)(83380400001)(2906002)(4326008)(1076003)(8936002)(36756003)(86362001)(6486002)(52116002)(107886003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?q?1Q/eIt5Y9B+JdMkCdr3MsvZ3U/fIun?= =?utf-8?q?rY2slB/QDBYaLOYw4JAk7o7DotsyfSRPuhqCijrMIkX8gsg4ixSgwqJMjDH+7fj35?= =?utf-8?q?u6lvo+9yS0ZLzbl51tbKdr98Q3o5+QRPiy+/sDMgNbFTUtlEPiKPFiyFu9ogmb9Bo?= =?utf-8?q?syq29Lw6gpTCmnLLYJsaFwk5C8CdffMoQA7YmNeqy6Z7kgVCqKfthTJNywrqLlBKI?= =?utf-8?q?mKysa33R5mudzTBB0+bc13BD7dJAiQzc2wIsQ0sOD+j1NBdQJMTg2VjxSBVqK4rjj?= =?utf-8?q?NHALwxgMgAKIhJ9CVKt/Q3wrmet38ITS5a/VtZH4BM0vbBLo7Auc8NYvgSQvoq1Q+?= =?utf-8?q?jd+86mYzfFlG2y0tKOVfOk/N/o8lgh1lAS/HeuJmyucYrXKOSXxPyG5QmMxb2BZDa?= =?utf-8?q?s5Ers92EmJ0DXNjlagJ1qJWhubGQdpv7S7PQHXgSTxMzLE4s/6lpRery7N7FGcglZ?= =?utf-8?q?wx6uy+goiKfmLjqzGWA9r1k6mZ+9Yb33p+UNaV4MKEkXWaj84np7p/d5r5qCG7wj/?= =?utf-8?q?Jhnk6vPVmyHeAn7NyIDfmddRSQ0IkadSDv4RVATYWoVatVBqnqP4PIudij0+OqcBc?= =?utf-8?q?u0LaQeXA2q1Ki9QC4H46Z2IZIkT+c/ev7U2TA1p6mkwhcqkPlFb47ZTyebHotOhVX?= =?utf-8?q?L5p0zihexZBfWxv5eBkxQMG7T9nyk0Wyso8QH2/2gaTBAZdRCAbfcFS9TWEsllul1?= =?utf-8?q?JZ4e3MjAIE0WhhF4w06Cmpq6AZmfe0G+ukI8jW5gW1Ebgqe0Onos8nNUbttL86gYH?= =?utf-8?q?iUQ+suCouXyLOgkJylsZNUSCLVUQoWa6/9EKcpn2zOzVDAiXIC+h69j19tXRMf760?= =?utf-8?q?cdOCx8TkNiMboX3aOYoiV4vCnr2ktGE2UShtGL3/roPHvYtzfoXn3sg6bxFXy6eLW?= =?utf-8?q?HByVxksMNiFx5ka4ut/ekHyM8ni5aKxHY3DR3EAlUbgftiVcrjWhT/fArh/BOHIoM?= =?utf-8?q?HYhGtLUnpfhUzlQ/wHA?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: da371e7e-4ddb-46f5-b702-08d892e31afd X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:38.2594 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RStrhM2bzQ/+98GWpGJCIkKeupzQKYBktgQNKe4zGZr8oksZg28a6ksiOeUbbF8qggCE3/Qh2SrZZ2vYGzwSsZtzfrKrKQf7+RphoCNwIxo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5128 Received-SPF: pass client-ip=40.107.20.112; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add test to show that simple DFS recursion order is not correct for permission update. Correct order is topological-sort order, which will be introduced later. Consider the block driver which has two filter children: one active with exclusive write access and one inactive with no specific permissions. And, these two children has a common base child, like this: ┌─────┐ ┌──────┐ │ fl2 │ ◀── │ top │ └─────┘ └──────┘ │ │ │ │ w │ ▼ │ ┌──────┐ │ │ fl1 │ │ └──────┘ │ │ │ │ w │ ▼ │ ┌──────┐ └───────▶ │ base │ └──────┘ So, exclusive write is propagated. Assume, we want to make fl2 active instead of fl1. So, we set some option for top driver and do permission update. If permission update (remember, it's DFS) goes first through top->fl1->base branch it will succeed: it firstly drop exclusive write permissions and than apply them for another BdrvChildren. But if permission update goes first through top->fl2->base branch it will fail, as when we try to update fl2->base child, old not yet updated fl1->base child will be in conflict. Now test fails, so it runs only with -d flag. To run do ./test-bdrv-graph-mod -d -p /bdrv-graph-mod/parallel-perm-update from /tests. Signed-off-by: Vladimir Sementsov-Ogievskiy --- tests/test-bdrv-graph-mod.c | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 3b9e6f242f..27e3361a60 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -232,6 +232,68 @@ static void test_parallel_exclusive_write(void) bdrv_unref(top); } +static void write_to_file_perms(BlockDriverState *bs, BdrvChild *c, + BdrvChildRole role, + BlockReopenQueue *reopen_queue, + uint64_t perm, uint64_t shared, + uint64_t *nperm, uint64_t *nshared) +{ + if (bs->file && c == bs->file) { + *nperm = BLK_PERM_WRITE; + *nshared = BLK_PERM_ALL & ~BLK_PERM_WRITE; + } else { + *nperm = 0; + *nshared = BLK_PERM_ALL; + } +} + +static BlockDriver bdrv_write_to_file = { + .format_name = "tricky-perm", + .bdrv_child_perm = write_to_file_perms, +}; + +static void test_parallel_perm_update(void) +{ + BlockDriverState *top = no_perm_node("top"); + BlockDriverState *tricky = + bdrv_new_open_driver(&bdrv_write_to_file, "tricky", BDRV_O_RDWR, + &error_abort); + BlockDriverState *base = no_perm_node("base"); + BlockDriverState *fl1 = pass_through_node("fl1"); + BlockDriverState *fl2 = pass_through_node("fl2"); + BdrvChild *c_fl1, *c_fl2; + + bdrv_attach_child(top, tricky, "file", &child_of_bds, BDRV_CHILD_DATA, + &error_abort); + c_fl1 = bdrv_attach_child(tricky, fl1, "first", &child_of_bds, + BDRV_CHILD_FILTERED, &error_abort); + c_fl2 = bdrv_attach_child(tricky, fl2, "second", &child_of_bds, + BDRV_CHILD_FILTERED, &error_abort); + bdrv_attach_child(fl1, base, "backing", &child_of_bds, BDRV_CHILD_FILTERED, + &error_abort); + bdrv_attach_child(fl2, base, "backing", &child_of_bds, BDRV_CHILD_FILTERED, + &error_abort); + bdrv_ref(base); + + /* Select fl1 as first child to be active */ + tricky->file = c_fl1; + bdrv_child_refresh_perms(top, top->children.lh_first, &error_abort); + + assert(c_fl1->perm & BLK_PERM_WRITE); + + /* Now, try to switch active child and update permissions */ + tricky->file = c_fl2; + bdrv_child_refresh_perms(top, top->children.lh_first, &error_abort); + + assert(c_fl2->perm & BLK_PERM_WRITE); + + /* Switch once more, to not care about real child order in the list */ + tricky->file = c_fl1; + bdrv_child_refresh_perms(top, top->children.lh_first, &error_abort); + + assert(c_fl1->perm & BLK_PERM_WRITE); +} + int main(int argc, char *argv[]) { int i; @@ -256,6 +318,8 @@ int main(int argc, char *argv[]) if (debug) { g_test_add_func("/bdrv-graph-mod/parallel-exclusive-write", test_parallel_exclusive_write); + g_test_add_func("/bdrv-graph-mod/parallel-perm-update", + test_parallel_perm_update); } return g_test_run(); From patchwork Fri Nov 27 14:44:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936529 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D67E6C2D0E4 for ; Fri, 27 Nov 2020 15:05:10 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 461292223F for ; Fri, 27 Nov 2020 15:05:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="mIEY2rem" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 461292223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:36628 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifJ7-0007N9-5n for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:05:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36918) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1D-0001Nu-Dd; Fri, 27 Nov 2020 09:46:39 -0500 Received: from mail-db8eur05on2112.outbound.protection.outlook.com ([40.107.20.112]:40192 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1B-000369-51; Fri, 27 Nov 2020 09:46:39 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gzq5ZaQO4zIM6S/QaWTekG4WVmf9IrHFfx6qf1/L79pWvU/R6CRg0IjkdgU/y5yQpFvH46gtVObkoZs2T8/hKJ9hd7fU5UGRvXrLkOXIwVctASXxk6HF7mGl23VW1yv6fo6lYBxcGm7+Um5sFkYBTxFeborhMLE84QGB/ce4EB2QsZDwiwgUVdxmqyMeNmtL7kdm9cdM/15qpxT9oLJF2PHufguw5bhQdGY9eBwdndN/K+uPcbRalRzFVLzWU2oX7hPVtWQOzpLz0ilywejHOb5t22ZTZwoFC1PVL7cRX7dJ8WSTJPyt2DKGt3lmJhctAZcEjeZypQb1MRN/eah7WQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=opGSjhBhIR5jpeUJk7EWNVLixLNA/jtLFIFR8IV+GsY=; b=WapzlG2TPyBGtI0hFPVMziyuR//Oo/KBPEkDA5yJgjr+xOmJHZz0VHltPMItkbYEqjMVlCT7kRRfkqiV8vMIIKdsnzzhSFUrSZuHgx1vXpt9sYaRSuXBkAhbOv2OUgac4e6Dm5FeqvnyuPe2NcUokAMRcvgRXlb5S2NV+ZozeyJfWxsB8Bn1HFyzPLDXmKjkULYnClINYP2SnR4DHvBEGaS0Jpn7VT4sAZhTvrqKfCJRNsfCnN5/kQFVaToSZ/DCE6ptrnnPcmrZ0FQElSp5mRM6ccqpmTTJC7gUaqQYYsIvUnnodJugL0lLzDIWDzcXw6CalG8HvK+3mKu0tZKXpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=opGSjhBhIR5jpeUJk7EWNVLixLNA/jtLFIFR8IV+GsY=; b=mIEY2remjTZkJGUeQXXapvVg4t93hh6xqbHAqF0cjF89UvMKQKuSdUQS7j6YG1Boo3kI6uNOBNYA5QWgNRnb0VPJgMg4IR8nrJJy38J4gXCgHelZrsr0O6ApOxp7nXpW7EUysjeVRQrUbitxrIbfVpKxjwI7S2ihdekzRSAGGes= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5128.eurprd08.prod.outlook.com (2603:10a6:20b:e3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.24; Fri, 27 Nov 2020 14:45:56 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:45:56 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 03/36] block: bdrv_append(): don't consume reference Date: Fri, 27 Nov 2020 17:44:49 +0300 Message-Id: <20201127144522.29991-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:38 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b86f5ad8-6835-4e2f-e2a2-08d892e31b75 X-MS-TrafficTypeDiagnostic: AM6PR08MB5128: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:150; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0flvWfw66MEtc2Q2BccfcMZaHCf97C/vsbOJvl1ZBxHntz/5f1J4vNw6U9IJhzqgJxbNtEXs4ayU7q03q4xnyhk0PsyjigxOj8pLvEONyWwYZfFRfj6Sz2kj8ndoT3O27famZ/yrbJ7MbgwoqAn6C8mKEWPUjKO7c5AwDr2PQgCwQLY38PJ/s/6sOB9mDdvzQZ7Iz4sTvI2p5OKsF7sOKRMxvO6564DH+LAYgJb422xKbQOScUo2fBuP6aoiIMf0IP3esmsa88EbvljA2T6KFl3ojmY6Kn8BWFcd6ayi6BR2tlAsopI66Vmq36bqpB+8pTK53WJ5rUWk2zqSJ272M3KBsWVyW09rIzDCEX2PSoQL2jTJrSa4cXCgm6YM8XBB X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(346002)(39840400004)(136003)(376002)(66946007)(66556008)(478600001)(6512007)(2616005)(66476007)(6506007)(316002)(26005)(186003)(6666004)(69590400008)(16526019)(956004)(8676002)(5660300002)(6916009)(83380400001)(2906002)(4326008)(1076003)(8936002)(36756003)(86362001)(6486002)(52116002)(107886003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: Jsz/DcUKrDIMf293uPrK98wnX/SmZqHQXDHOA0nb7KgDSoBhbN1vQjl+/qR5cjvclBOoWmzK74vbGT2SfkZ/o010OdQwFNTQV/X2oSHFhR/UfvlA7gYiCw+cRGFb/U+3SWa2C5RgwzR69tow48zBFTZBL3/GJG0RWj4QoWCbMIBXV37Azy2P1d/jwknEZPur7Sh5RsuSppVc+gZO2e/wH4G+FB5feRs6Obh5tGr8Fv2wXryFwdeCOVqH6NYe6cCUuPEMKhmThaErmOR5wZg4KnBo+pGNxawJQci8G8zWZyYadRgHZDRGE8jkJPtdNnNTWfw2TyqAjHlmdOMq4ev4mLwL/Ibw86O5qHYRZW4Q8A4nLrqdF+p0JjK3GRfO3nz6mVRA4EBy6r1YQ0DUEpEJQ2aMU3WVx4iXhJXfXkb3NnNbiHhhnvinrAqsQHTIFWvoeaxAsQuoPNkQVXUhgkvaWV2TkyYuxp+LhNjIk/Gm35sjcSwgTxyWsYqiU0UtJDoUuBR9hADBHmSntaswIhbdSupNr0XlyX1+ybU51NdjnAWDC41ygfAwTrM0KVo9QgFzlMAgiFLfpzOFDlBAYvbKqJMAl+dkV6cg/d/KMpgk2AihrfD/Fn58s5B4hp8AX+9jMlCudX0XftfGFLB+zVZrjwyiSrq8E0kw2X06xT73Sp76YZ9JSTMwGGL/Qlgge3vO1h40CCkMChTV8OzdCnLqZAqdm3/YJscrJ0tx7+AYynwPHswbh2awyPOdW8S5D4PX4l42c0k2HP8fsQ4QYHqBFJY61pb9FxxciGqA3E1bH0sIWxfMXMEsntsfaKYzWzDTQcRCZtnOwXsB3Qz1IUVCq7o9Q6xRp3+Due+ovvK1wg+b90LWBUABP5ziONeaCzd++xRZKN+o+zAuv98WsdLQx2UeYf4QA9XftKlpaYiHjZzjuJGju+vWyfJfhmehvmgGk6e09UAdF9c5qlBTJlB86wqAepCN8tnepGveATMYalZBKrt1+BmPZgQTb5xfiC58 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b86f5ad8-6835-4e2f-e2a2-08d892e31b75 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:39.0669 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eyGTIRCh68Rg5Z/xNVEdECOoHHxBCz18IRYUOHpVMVVdB2kzhaLKK7vbKB5yDgE6qx2qqBDvDb3W8v9SLIAyMbpB8w2ID+MteP2u6Ev1SwM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5128 Received-SPF: pass client-ip=40.107.20.112; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We have too much comments for this feature. It seems better just don't do it. Most of real users (tests don't count) have to create additional reference. Drop also comment in external_snapshot_prepare: - bdrv_append doesn't "remove" old bs in common sense, it sounds strange - the fact that bdrv_append can fail is obvious from the context - the fact that we must rollback all changes in transaction abort is known (it's the direct role of abort) Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 19 +++---------------- block/backup-top.c | 1 - block/commit.c | 1 + block/mirror.c | 3 --- blockdev.c | 4 ---- tests/test-bdrv-drain.c | 2 +- tests/test-bdrv-graph-mod.c | 2 ++ 7 files changed, 7 insertions(+), 25 deletions(-) diff --git a/block.c b/block.c index 0dd28f0902..55efef3c9d 100644 --- a/block.c +++ b/block.c @@ -3145,11 +3145,6 @@ static BlockDriverState *bdrv_append_temp_snapshot(BlockDriverState *bs, goto out; } - /* bdrv_append() consumes a strong reference to bs_snapshot - * (i.e. it will call bdrv_unref() on it) even on error, so in - * order to be able to return one, we have to increase - * bs_snapshot's refcount here */ - bdrv_ref(bs_snapshot); bdrv_append(bs_snapshot, bs, &local_err); if (local_err) { error_propagate(errp, local_err); @@ -4608,10 +4603,8 @@ void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, * * This function does not create any image files. * - * bdrv_append() takes ownership of a bs_new reference and unrefs it because - * that's what the callers commonly need. bs_new will be referenced by the old - * parents of bs_top after bdrv_append() returns. If the caller needs to keep a - * reference of its own, it must call bdrv_ref(). + * Recent update: bdrv_append does NOT eat bs_new reference for now. Drop this + * comment several moths later. */ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, Error **errp) @@ -4621,20 +4614,14 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, bdrv_set_backing_hd(bs_new, bs_top, &local_err); if (local_err) { error_propagate(errp, local_err); - goto out; + return; } bdrv_replace_node(bs_top, bs_new, &local_err); if (local_err) { error_propagate(errp, local_err); bdrv_set_backing_hd(bs_new, NULL, &error_abort); - goto out; } - - /* bs_new is now referenced by its new parents, we don't need the - * additional reference any more. */ -out: - bdrv_unref(bs_new); } static void bdrv_delete(BlockDriverState *bs) diff --git a/block/backup-top.c b/block/backup-top.c index fe6883cc97..650ed6195c 100644 --- a/block/backup-top.c +++ b/block/backup-top.c @@ -222,7 +222,6 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, bdrv_drained_begin(source); - bdrv_ref(top); bdrv_append(top, source, &local_err); if (local_err) { error_prepend(&local_err, "Cannot append backup-top filter: "); diff --git a/block/commit.c b/block/commit.c index 71db7ba747..61924bcf66 100644 --- a/block/commit.c +++ b/block/commit.c @@ -313,6 +313,7 @@ void commit_start(const char *job_id, BlockDriverState *bs, commit_top_bs->total_sectors = top->total_sectors; bdrv_append(commit_top_bs, top, &local_err); + bdrv_unref(commit_top_bs); /* referenced by new parents or failed */ if (local_err) { commit_top_bs = NULL; error_propagate(errp, local_err); diff --git a/block/mirror.c b/block/mirror.c index 8e1ad6eceb..13f7ecc998 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1605,9 +1605,6 @@ static BlockJob *mirror_start_job( bs_opaque = g_new0(MirrorBDSOpaque, 1); mirror_top_bs->opaque = bs_opaque; - /* bdrv_append takes ownership of the mirror_top_bs reference, need to keep - * it alive until block_job_create() succeeds even if bs has no parent. */ - bdrv_ref(mirror_top_bs); bdrv_drained_begin(bs); bdrv_append(mirror_top_bs, bs, &local_err); bdrv_drained_end(bs); diff --git a/blockdev.c b/blockdev.c index b5f11c524b..96c96f8ba6 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1587,10 +1587,6 @@ static void external_snapshot_prepare(BlkActionState *common, goto out; } - /* This removes our old bs and adds the new bs. This is an operation that - * can fail, so we need to do it in .prepare; undoing it for abort is - * always possible. */ - bdrv_ref(state->new_bs); bdrv_append(state->new_bs, state->old_bs, &local_err); if (local_err) { error_propagate(errp, local_err); diff --git a/tests/test-bdrv-drain.c b/tests/test-bdrv-drain.c index 8a29e33e00..892f7f47d8 100644 --- a/tests/test-bdrv-drain.c +++ b/tests/test-bdrv-drain.c @@ -1478,7 +1478,6 @@ static void test_append_to_drained(void) g_assert_cmpint(base_s->drain_count, ==, 1); g_assert_cmpint(base->in_flight, ==, 0); - /* Takes ownership of overlay, so we don't have to unref it later */ bdrv_append(overlay, base, &error_abort); g_assert_cmpint(base->in_flight, ==, 0); g_assert_cmpint(overlay->in_flight, ==, 0); @@ -1495,6 +1494,7 @@ static void test_append_to_drained(void) g_assert_cmpint(overlay->quiesce_counter, ==, 0); g_assert_cmpint(overlay_s->drain_count, ==, 0); + bdrv_unref(overlay); bdrv_unref(base); blk_unref(blk); } diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 27e3361a60..cfe096c9af 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -138,6 +138,7 @@ static void test_update_perm_tree(void) bdrv_append(filter, bs, &local_err); error_free_or_abort(&local_err); + bdrv_unref(filter); blk_unref(root); } @@ -202,6 +203,7 @@ static void test_should_update_child(void) bdrv_append(filter, bs, &error_abort); g_assert(target->backing->bs == bs); + bdrv_unref(filter); bdrv_unref(bs); blk_unref(root); } From patchwork Fri Nov 27 14:44:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936545 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E425C2D0E4 for ; Fri, 27 Nov 2020 15:12:17 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8E8C92065E for ; Fri, 27 Nov 2020 15:12:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="O9uhYohM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8E8C92065E Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:58284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifPz-00082P-ER for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:12:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37128) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1Z-0001ms-Dq; Fri, 27 Nov 2020 09:47:01 -0500 Received: from mail-db8eur05on2128.outbound.protection.outlook.com ([40.107.20.128]:27730 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1X-0003Uq-Eg; Fri, 27 Nov 2020 09:47:01 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XrEZqMu8g2I7G3a4+m3jarKI+n9YtEAYgouosJ5X3zs+tSqGDTDa2DCkqmji10XCxa10y1MWSnj2/q7Yev9VG+f8aC9bKl/vECrv1ULH/lWvhd4k5xIx91gTSyX60s7g4GZTUQWAojl+5jurrbg7L9FNUYpe4X0fUmk1zBoF3Hh3vZAupToDwM/v8ZaDFtrwRrUuWumLR/xShbpCyT7Yh7mX08rEx1ed433IYxRH3DjnlVTSWX3kPJgTUJBMPt9uTHnE3tlp3NrMOY4DSM8pBDW23sfz8pHbB08+0xZ8QTw43ExxgYhxIA8uwYL7YLdcu2H1/dPmdChWvUNhknYOGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nf/ugMQ2qt0+ghbHSsD95N+SQm3+WshpXEfckv9P+UI=; b=PflVCMGgFvUefSRNWnXnXRVxek3li9qA/QuscvZUy5q7Q/OMa4fa+TPxmbw6HV27W9IwwVvsJCJGZ3NVik44o7vqid33MjSVeiQ+gRm43A9kNP5MW95OmKHAgsYbRUMiSDNXVnE10bRgTVNx3g3FIphlgrLtho1Xy0OWaSbekay/16Si0WpOuSuLKuy+SGjtKV21jEG8m6sWQpEdQ7iSRqVzAi1jMwiBr6zvEaMHRa34NLe8Erqnl9WgB1EEzQ8E049FQSmo8X9VJPh6HhbPX0rmI11EvCPX7F2qqF3MJuEDLeVbKhS/HVFg76QWKq3ayo4hLDJpO+SjcSHA0zDFWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nf/ugMQ2qt0+ghbHSsD95N+SQm3+WshpXEfckv9P+UI=; b=O9uhYohMAIvRo0QFCxos5E6zfN2KVLmOQUhSZB4R9AM/W2aiSBCb13xLPtp+LL0c4swkkLSM6ekFntXEba5EXSsCPR6XpRTQWOGkUyWCzPq3dTuruEZRlGlpvZxyFQumSXGt9NHod552LHSjvOKlv482q2KzjpqbHwEJHcyifZs= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5128.eurprd08.prod.outlook.com (2603:10a6:20b:e3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.24; Fri, 27 Nov 2020 14:45:56 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:45:56 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 04/36] block: bdrv_append(): return status Date: Fri, 27 Nov 2020 17:44:50 +0300 Message-Id: <20201127144522.29991-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:39 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 197ea59e-01db-4215-b02f-08d892e31bec X-MS-TrafficTypeDiagnostic: AM6PR08MB5128: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:15; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DnNztdsRswcHeRgDb2avUNb5rxJM0l+wyLdVVPElc5dh43RVmHoxxDhpOTI9n+FHQB4og6rXmghjrbJ1Ihqabjc5sZlPfnZ6ZZDeHP+ixST1LIEUBloEGoDu3iMG+dxWDPL/nZwos+j2J0djFBa4BnM54mPehLXfin2Mv0mSDTWdvjD4pt5/C7Jr/mzkg35ZkpHyP/hIbGbw+2N1qSY1b0DnCTnNNcW0DrgV+Y33/Af6IHAKS6k0EExHQZZkEUEmri7YAS8q0RE+55s5ZoXHKGHEXzc9UBTg/o6vkQZSuTshZyYwQ6Stf3adpRuyGq36ofI7TrMSWuB6K3KJ8t7XWd2HKYbpxMLzUTJoBjwN+giTbEIgxSaxCb9cl+wjlAHi X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(346002)(39840400004)(136003)(376002)(66946007)(66556008)(478600001)(6512007)(2616005)(66476007)(6506007)(316002)(26005)(186003)(6666004)(69590400008)(16526019)(956004)(8676002)(5660300002)(6916009)(83380400001)(2906002)(4326008)(1076003)(8936002)(36756003)(86362001)(6486002)(52116002)(107886003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 0JGiUlZgnh59NoNYWjjaF977usNNXP7iTGyHzk3lCx1vEHUsJ/KQH0gjQBW06AT9qKY93hk/GCmpvv4EyhUHL2RuMwOfYdeEGqzThdKNeByE/D/PWY+Ecqu25yLrCYHoTUi/r2NXWllDWJnMHpsM4hUiL+bbU+cuEsAY2vYhRTERWoLoaZDXwtC6nyw0EHyAli0lsyuT4cTvoEBTA+WvWQPwhL63okYZc1P12mXSqjOOBZYTrWm7RR9z/WkA/39xGdQp1eXNZOdIlhiDcRMgePqTZNdmldlNi98zAJ6anooh9o1aGvBxBwym/zSmNonYPoMe6FXiXcYXkssk1HNdbRcJwkY99sK6DUuPTRZ16Hw1U/Hy6cw2dDg/bV0UrCBDD6/U2xlBfR69TvtPulHVCciW6cGTWsC3FVudxyem5tXZgGAnk9zKUAgzgZCXl86HYpY1K20/wBaYTVlCfN9bbs898gHf/F3RicolzrWwESrHBW/pQJ3m2oddbCcgCnZ3EGUkQMHYZkFt9VqC99B/92IJyDrboJY9mU9vxJpTJVH8LyPQuyccbG4HNkLd+gK8yQAKb2IFlXUQvsCxFrLY4CO/1j8N5t4HahGqMJnPwODBkHD8Z02PuuwFVeqef/ksIEZsl8zM8Kz4epTURfxpnFxp+abnkTaaILyGLe0SPnvfUn/GlXSm4a+/aILgU4I0YzQ8MuBF9sgPSqhW93bDpM+D8AkaYs4FDhZiFhWBXdfmUZ/O+R1ndb6Zq0Am15wCAs3Inqb5+eteIJlyN7VLAK93WnpUpJB79gvLZc4uGHT/WP9KVmjn9zC6Is7voJYq4SYw8tMNEM70mwF3wb7cRwh7+2teqObEAICoJJZLCRQFU5SNDWOMcdowGbu1bzTXkb7yFBmZQ0Kyr+y7V5t5fNMfOC/IVlu99j1BSulj98rc8dGVYF4aJxD7d+gIU19drCiZ20zLyReF6O77TRDwjGlQYpvfWuZOP3AJMt9lPJQF5zSK9pF1TW0c12UcUS3h X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 197ea59e-01db-4215-b02f-08d892e31bec X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:39.8186 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IzaU35AJhmxJ720b0LtoV0fIaGTwZkE2gTACq1ChBwt5wPYnHMm+lvLO56x2jixApyWBw9qQRirQCAJbkZDTM6A5RCSMpMpd0cILwuvbC8M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5128 Received-SPF: pass client-ip=40.107.20.128; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Return int status to avoid extra error propagation schemes. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Alberto Garcia Reviewed-by: Kevin Wolf --- include/block/block.h | 4 ++-- block.c | 15 ++++++++------- block/commit.c | 6 ++---- block/mirror.c | 6 ++---- blockdev.c | 6 +++--- tests/test-bdrv-graph-mod.c | 6 +++--- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index db37a35cee..ee3f5a6cca 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -344,8 +344,8 @@ int bdrv_create(BlockDriver *drv, const char* filename, int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp); BlockDriverState *bdrv_new(void); -void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, - Error **errp); +int bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, + Error **errp); void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp); diff --git a/block.c b/block.c index 55efef3c9d..916087ee1a 100644 --- a/block.c +++ b/block.c @@ -3103,7 +3103,6 @@ static BlockDriverState *bdrv_append_temp_snapshot(BlockDriverState *bs, int64_t total_size; QemuOpts *opts = NULL; BlockDriverState *bs_snapshot = NULL; - Error *local_err = NULL; int ret; /* if snapshot, we create a temporary backing file and open it @@ -3145,9 +3144,8 @@ static BlockDriverState *bdrv_append_temp_snapshot(BlockDriverState *bs, goto out; } - bdrv_append(bs_snapshot, bs, &local_err); - if (local_err) { - error_propagate(errp, local_err); + ret = bdrv_append(bs_snapshot, bs, errp); + if (ret < 0) { bs_snapshot = NULL; goto out; } @@ -4606,22 +4604,25 @@ void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, * Recent update: bdrv_append does NOT eat bs_new reference for now. Drop this * comment several moths later. */ -void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, - Error **errp) +int bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, + Error **errp) { Error *local_err = NULL; bdrv_set_backing_hd(bs_new, bs_top, &local_err); if (local_err) { error_propagate(errp, local_err); - return; + return -EPERM; } bdrv_replace_node(bs_top, bs_new, &local_err); if (local_err) { error_propagate(errp, local_err); bdrv_set_backing_hd(bs_new, NULL, &error_abort); + return -EPERM; } + + return 0; } static void bdrv_delete(BlockDriverState *bs) diff --git a/block/commit.c b/block/commit.c index 61924bcf66..b89bb20b75 100644 --- a/block/commit.c +++ b/block/commit.c @@ -254,7 +254,6 @@ void commit_start(const char *job_id, BlockDriverState *bs, BlockDriverState *iter; BlockDriverState *commit_top_bs = NULL; BlockDriverState *filtered_base; - Error *local_err = NULL; int64_t base_size, top_size; uint64_t base_perms, iter_shared_perms; int ret; @@ -312,11 +311,10 @@ void commit_start(const char *job_id, BlockDriverState *bs, commit_top_bs->total_sectors = top->total_sectors; - bdrv_append(commit_top_bs, top, &local_err); + ret = bdrv_append(commit_top_bs, top, errp); bdrv_unref(commit_top_bs); /* referenced by new parents or failed */ - if (local_err) { + if (ret < 0) { commit_top_bs = NULL; - error_propagate(errp, local_err); goto fail; } diff --git a/block/mirror.c b/block/mirror.c index 13f7ecc998..c3fbe3e8bd 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1560,7 +1560,6 @@ static BlockJob *mirror_start_job( BlockDriverState *mirror_top_bs; bool target_is_backing; uint64_t target_perms, target_shared_perms; - Error *local_err = NULL; int ret; if (granularity == 0) { @@ -1606,12 +1605,11 @@ static BlockJob *mirror_start_job( mirror_top_bs->opaque = bs_opaque; bdrv_drained_begin(bs); - bdrv_append(mirror_top_bs, bs, &local_err); + ret = bdrv_append(mirror_top_bs, bs, errp); bdrv_drained_end(bs); - if (local_err) { + if (ret < 0) { bdrv_unref(mirror_top_bs); - error_propagate(errp, local_err); return NULL; } diff --git a/blockdev.c b/blockdev.c index 96c96f8ba6..2af35d0958 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1432,6 +1432,7 @@ typedef struct ExternalSnapshotState { static void external_snapshot_prepare(BlkActionState *common, Error **errp) { + int ret; int flags = 0; QDict *options = NULL; Error *local_err = NULL; @@ -1587,9 +1588,8 @@ static void external_snapshot_prepare(BlkActionState *common, goto out; } - bdrv_append(state->new_bs, state->old_bs, &local_err); - if (local_err) { - error_propagate(errp, local_err); + ret = bdrv_append(state->new_bs, state->old_bs, errp); + if (ret < 0) { goto out; } state->overlay_appended = true; diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index cfe096c9af..74f4a4153b 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -122,7 +122,7 @@ static BlockDriverState *exclusive_writer_node(const char *name) */ static void test_update_perm_tree(void) { - Error *local_err = NULL; + int ret; BlockBackend *root = blk_new(qemu_get_aio_context(), BLK_PERM_WRITE | BLK_PERM_CONSISTENT_READ, @@ -135,8 +135,8 @@ static void test_update_perm_tree(void) bdrv_attach_child(filter, bs, "child", &child_of_bds, BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, &error_abort); - bdrv_append(filter, bs, &local_err); - error_free_or_abort(&local_err); + ret = bdrv_append(filter, bs, NULL); + g_assert_cmpint(ret, <, 0); bdrv_unref(filter); blk_unref(root); From patchwork Fri Nov 27 14:44:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936547 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E7DBC63798 for ; Fri, 27 Nov 2020 15:13:03 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9B4B522242 for ; Fri, 27 Nov 2020 15:13:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="ie8sJgND" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9B4B522242 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:59690 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifQj-0000CI-Bv for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:13:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1U-0001id-2p; Fri, 27 Nov 2020 09:46:56 -0500 Received: from mail-db8eur05on2112.outbound.protection.outlook.com ([40.107.20.112]:40192 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1R-000369-At; Fri, 27 Nov 2020 09:46:55 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ft1PUTnof4mQKl2mxC2AvZbyuT4ls43UqBHmCVbxKVkw6CRdKiLtrxpr3IPx/9M3ZXeu9vxG4ESIyqCDxsZcuxNVM/Q6pibh4P2W4EZ8qcrlnSV4rQTzm7dGxAKDFZvMqPAUjil/UBQTx3RvedkU5wALE0B+cFtiaqQwYGadcQysceXZgqsFKY0v3B661P+FEqRzChpsdWiaKOxWEyVPaLrPCCtS99r7JVByaQVT3/SOc+4ESPxMT3caTtOEHbwtkXIe2b8znZkk5cBbEZtKu9jHxSS90Uw4bytfq35vbcdWG68r69FMOXAHOyf94uHyhBAVWvCV8d2ERRw9CF0hSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sFPGEPAiKKMfURhdgBuDqVfOjB1QsbB+PzCJJfiYB3Q=; b=jkUysl5tephSe46SxnQOTHGPU4zml+nHaMF9SUOA4+e/36VILxwawiFFvqrm9mFksdn0YZRXrM76TpvycnRa7t5pjXyDG0wfD/KAPxk0ahm2BGnNzeT6S34wIcBvPunpIxxvDKgxsOdx1ZksKFIDt9JH0/N38FA482ZVRsIrewsnwtwVT5EUj58sK7uDiLVbYLIj8jfvLBxa5OslofM8owWtqMCYicYv7k/5aopqQrcB5S1ukzXHbnYX2Ju9ioVS4ENd2JHAe+uax/n3vuAUoTehy3jo14sJFZlvJXb7xLVOS/7L/mhbfafpgnci7k2Vk3K23P5JJMzJ2ijCntMfCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sFPGEPAiKKMfURhdgBuDqVfOjB1QsbB+PzCJJfiYB3Q=; b=ie8sJgNDIjyKLGfYkCjHxW7B0E/tkIOqf3RQKD24ID81B3a14JZijW7QZD7t7uF8L7H1jNfrcu+qbnGKtnRwWPLRdsG3ABkkaH1ssl8mO4kkMzu2FwDOME6j0Ng0EuuvFsIfqqzmXkx+sMs0Jq0BzY4rOkls3z3QavslIYBl5qc= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5128.eurprd08.prod.outlook.com (2603:10a6:20b:e3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.24; Fri, 27 Nov 2020 14:45:57 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:45:57 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 05/36] block: add bdrv_parent_try_set_aio_context Date: Fri, 27 Nov 2020 17:44:51 +0300 Message-Id: <20201127144522.29991-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:39 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7777bd0a-07e5-4ef3-ff3f-08d892e31c5f X-MS-TrafficTypeDiagnostic: AM6PR08MB5128: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:185; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3Zk7GI9ro2+TxPsPCMMHkgKmrjXn5/8hQ4s6bk56xuD0u+A1sSQR6/UpqHwaYzO0iyZ6okOl+QaEkIhbJjzLyWTLwwZxFjE8ojPCKS1iLXtkV9VvEPGzlb1VNKJM53f6e6+ZqOJGHFdYyO0lntrD1CfIGMO3c5oKe0JOkgH8vBmkcQMBLmKxXBFmDHu7MoRYlqV4Q7lb3xWfaBLL25lTn61vD66yO2EomeI+sicGwaQtOhrMG0J/WdFCAy2Hu/Svf7YHG4WzouCc/BjUCTyDT7s6QZv8xoOEKWpyyFt045K5Xge58i96/NXq78eb2naxQzbqyEJJ4PaAyhVFvbC/ks6mRhbTBqb8TEStJF4wX5lm6ETm3J9UgGjn+ih++kXI X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(346002)(39840400004)(136003)(376002)(66946007)(66556008)(478600001)(6512007)(2616005)(66476007)(6506007)(316002)(26005)(186003)(6666004)(69590400008)(16526019)(956004)(8676002)(5660300002)(6916009)(83380400001)(2906002)(4326008)(1076003)(8936002)(36756003)(86362001)(6486002)(52116002)(107886003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: uGKoWHrJa62C+MTqGaDhBCWzdkUu1sq3S+VY2I3thJGVSTpwaOfbcl3bpGbM7b0CUwcNwqGe4QB9pfBlgLMMyzGCqkCggCjvRvV+r8McWSxxmgM3ryibMVfqgz+mz1x58LujVcEunF39SK1Mh8RdNMBvIDdSwwFDNEeEoKdc5Wnfk8zPqaHAfOpz0i28tZEEBW7bMRIrhLUg62xXG7shmlDN0PZccEMFKfU9+r1FwGD9vpooxF5M5I1TtT7uVujGYKadxXKStwKTgopgBFMG9ofdwN9sJali3UXrpmFd3uXzXRL2FJKdQJaYXdCgPbhc73LBJspZPqWjR27WPrqfchCnMHtHExf4jUMRospDLBm+Xqst3GOQjVT8mN9aAH6mlAWO2FlqnEOHrmfig2litSbch1gmT6HAkGvr3RsrQBMOIEvXlR7Hup8LHv1YlimnELRBltqYRvN3b26WnGa7a7IkSdm9Wtnw+HiDkrboNbrQ6+U1pc607Xd5B/+DvCh+a7lRNEqWobxBRwxr5yvBc6AezLIkZLlw8vn+Bml7W/0BHDeJmNK34f7YDAvp994wg/23+UiZQWOuFRf1XsuF2TdAEoBE0ktGei1tTHMFfXPNypBUyZqji4JiLje8fKNJB0U7wUMxzRnx+xY9hX9wE07VXe8PK8iDZD+jdULAchuckrwUgJFhd2AJyHQQGOjSkKvxA/ziAVBiTphC/+IZRH4tNTfBKwQ687xiWzKjPzplBG3xDPXRrxaW97A66j4INlghv3Wr3iXSpOpqDybPYPi0RUohNZAF7D+gPQ9UZSJWrp8Aly7AbbP38PDPej0RhVzOPaftp/5bRTCaIsp5ZAU1IJlbi+HKBg6jLW5nRw/tO4SBAQwuXkrcRYULJVH4rc5xLig25LbmpsHvTkLEvXIviCn8pkjh0/xh8uz2WO2gtzA9nC+OUPyd5yNsQIpT5OS46HMX+2r4NbptYRWVf2t1aoT0OgNwE9gRP0kJvdaS1DOagDgo/UJvoaimdGf+ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7777bd0a-07e5-4ef3-ff3f-08d892e31c5f X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:40.6181 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nxIh97qxXj70Xnb2JQwfEWjp38cxmYRmmyUxr8mp+Uif58FWP8sxH7HcuYXOFOHtB0TdHeJOuGxdkOPYK8Pj7NNnFIYJvyR3rEYpnLOWRvY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5128 Received-SPF: pass client-ip=40.107.20.112; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We already have bdrv_parent_can_set_aio_context(). Add corresponding bdrv_parent_set_aio_context_ignore() and bdrv_parent_try_set_aio_context() and use them instead of open-coding. Make bdrv_parent_try_set_aio_context() public, as it will be used in further commit. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block.h | 2 ++ block.c | 51 +++++++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index ee3f5a6cca..550c5a7513 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -686,6 +686,8 @@ bool bdrv_child_can_set_aio_context(BdrvChild *c, AioContext *ctx, GSList **ignore, Error **errp); bool bdrv_can_set_aio_context(BlockDriverState *bs, AioContext *ctx, GSList **ignore, Error **errp); +int bdrv_parent_try_set_aio_context(BdrvChild *c, AioContext *ctx, + Error **errp); int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz); int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo); diff --git a/block.c b/block.c index 916087ee1a..5d925c208d 100644 --- a/block.c +++ b/block.c @@ -81,6 +81,9 @@ static BlockDriverState *bdrv_open_inherit(const char *filename, BdrvChildRole child_role, Error **errp); +static void bdrv_parent_set_aio_context_ignore(BdrvChild *c, AioContext *ctx, + GSList **ignore); + /* If non-zero, use only whitelisted block drivers */ static int use_bdrv_whitelist; @@ -2655,17 +2658,12 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, * try moving the parent into the AioContext of child_bs instead. */ if (bdrv_get_aio_context(child_bs) != ctx) { ret = bdrv_try_set_aio_context(child_bs, ctx, &local_err); - if (ret < 0 && child_class->can_set_aio_ctx) { - GSList *ignore = g_slist_prepend(NULL, child); - ctx = bdrv_get_aio_context(child_bs); - if (child_class->can_set_aio_ctx(child, ctx, &ignore, NULL)) { - error_free(local_err); + if (ret < 0) { + if (bdrv_parent_try_set_aio_context(child, ctx, NULL) == 0) { ret = 0; - g_slist_free(ignore); - ignore = g_slist_prepend(NULL, child); - child_class->set_aio_ctx(child, ctx, &ignore); + error_free(local_err); + local_err = NULL; } - g_slist_free(ignore); } if (ret < 0) { error_propagate(errp, local_err); @@ -6452,9 +6450,7 @@ void bdrv_set_aio_context_ignore(BlockDriverState *bs, if (g_slist_find(*ignore, child)) { continue; } - assert(child->klass->set_aio_ctx); - *ignore = g_slist_prepend(*ignore, child); - child->klass->set_aio_ctx(child, new_context, ignore); + bdrv_parent_set_aio_context_ignore(child, new_context, ignore); } bdrv_detach_aio_context(bs); @@ -6511,6 +6507,37 @@ static bool bdrv_parent_can_set_aio_context(BdrvChild *c, AioContext *ctx, return true; } +static void bdrv_parent_set_aio_context_ignore(BdrvChild *c, AioContext *ctx, + GSList **ignore) +{ + if (g_slist_find(*ignore, c)) { + return; + } + *ignore = g_slist_prepend(*ignore, c); + + assert(c->klass->set_aio_ctx); + c->klass->set_aio_ctx(c, ctx, ignore); +} + +int bdrv_parent_try_set_aio_context(BdrvChild *c, AioContext *ctx, + Error **errp) +{ + GSList *ignore = NULL; + + if (!bdrv_parent_can_set_aio_context(c, ctx, &ignore, errp)) { + g_slist_free(ignore); + return -EPERM; + } + + g_slist_free(ignore); + ignore = NULL; + + bdrv_parent_set_aio_context_ignore(c, ctx, &ignore); + g_slist_free(ignore); + + return 0; +} + bool bdrv_child_can_set_aio_context(BdrvChild *c, AioContext *ctx, GSList **ignore, Error **errp) { From patchwork Fri Nov 27 14:44:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936481 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C4D7C2D0E4 for ; Fri, 27 Nov 2020 14:48:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6B34A221EB for ; Fri, 27 Nov 2020 14:48:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="pTlfESiJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6B34A221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:43894 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif3M-0003Uk-1K for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:48:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36568) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0l-00012J-3S; Fri, 27 Nov 2020 09:46:11 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0j-0003DS-6e; Fri, 27 Nov 2020 09:46:10 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DQK4eLv63oLOORc1dMb3WNfTrQxjzDy4ySZOHmuwvqJKL9IKRemHTbJHuCLeE7oUp6ZtbuNM1w6t/OV2GT6l5/dfvX5EM0n8DQcjVPXgaVb8SSd5YnrsiHdwbJAU0KPW+WTsSwJb/Un8h45oQVGQg+IhA5Vknbf+yn7el0MFIBT0YyhKY5We2QnkkGehJ63UNEePWv+HXB9g949rXIEb9gJeXNHKcM3wG/LFzPxsTejgKSI+ZCFn3Ev7xXqQJFK/Y0IBqz+LlxTEdZv12C/2w+YlpcYcLDR1Z5Oz3xA2QUNNZ418JH0/4uf/YOGzKI0Ea+QBxH9aiPD/+kiD/nFKPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ovZlqQ04dAk/jEozZR5XpNc3Xam1uRubyD28uy37c28=; b=PjKgyA58/nt/dZLAAZoSifjDtXRgMXF6h9Pr2vm1wYvw4+ba+9+4N2I3uo2JoMOuZ0sjOa+beOxPQCIgSzpgmtKgV388IpZnhJDdx+pnv271tilX2s8oGsvb6bTKpW8MNIsGKS8LJxTQmN1XuQwDqDT8pRHwYMw+GDAb5pCYqMS+p2ic1ntDciF8Zs9csR6nUunAwiaqDKDSSQ8jkQyk0BAjH91g07dKnbBXGZPldnR5rHRUd+Uk1G4N1VTYadiYc+PvHqZpCkJj/WJSY68P2RPpujHg2SsWTXuCmrwnZ6IICCABBQrsEoI47YMNJ7jbafjU3Cn0hcx52qv250qFAw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ovZlqQ04dAk/jEozZR5XpNc3Xam1uRubyD28uy37c28=; b=pTlfESiJRlpb0awldDxkCEEXAOpfTMiTnrqnHlhkaEPGsrl8FYiH5IimBfNI5pMj1aIj10owNTVa2sez/9vkE3NfcLiB8cQO2qwdrOg3bJYYZl0SNm2XKJ1vaTgT9ig4S/eAnesNMn1tyaL1S6pz8BKf+quxwtR5W5DOqNAa4WU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:02 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:02 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 06/36] block: BdrvChildClass: add .get_parent_aio_context handler Date: Fri, 27 Nov 2020 17:44:52 +0300 Message-Id: <20201127144522.29991-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:40 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 920871de-3259-43b5-afd3-08d892e31cd9 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1360; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fJNcyq/bvMww2tPc7eDjHk6J1NyEQ4eKWA4vT5OZgTVFNmrsEv5/HaqsCF4roxf2LdhsXaUv7dQ12EPjWj9VVIym/QhGWYOInV5Zft171LJiMoaI1JX1QcT01BtTGmv4jLg3gBmfUDf5l7srgPW2sGOxNodTyO+gkKwUq9nh3HoPydRDHRqvr2ZAiA9/VPHcoA2JiciJGmi6bFnBkvPm3lpmavnxbrCCV/EI3xxWXkbsOaZU/GsfkrmoDL9CzDUA2jva7I2RmoenP8EEOfz2XpYlR/fcCPzNLUsYxl5UgTfh+GcYDuaIL1R4RfFDzZohCctZw63Ws7RTLmnrcxcsnYv53Ncrj60ydK6sGONGnbHLZuuZnCbECVatKMjCuuKl9M5yvslRMA9d6tsd5Vi/Ng== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002)(142923001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: KWWSoDyyp3OVl5U7YYPYD7KUt3s6iL7RKAvT4eBYxG1Se3B2rNbkF0Fjfxvf0P4gG06+ntA6yB6Q2MD/tnZbHE5bWJ0N7QDwRdIk1OxeqAne/JmLaoIwDyFNt9h7FT4TJckTJwgX6WGfONf9MGkMjieAfSGr7tBUXyFJ7jgC5046nDHdNDAVfGHZDyoNzR6PbpKtiDKgtb1zwURSG1FxipoP8xzwiibljLaQzYCqS+MGXseTxWMANgc6jYV1onuW1fl4cNQFzYf4Rda0dMy+UgMxnNlLCFpRMRe9hpezOHw08v0lkPm0unLBws3lT6tnJ7C7MVabFW26qX2tB4h8YCuTUg9kdRQdlJ+Lkl+On16eapX1q2pkfuELvwI+WnsY9PFl/27/iMW408ARbmuDNkd7dhHv7EgjGQl9x0J3Qbz4gJ60/ve6Q8H0y4x2YMvqVSgBxj49V28yin4pgifN4MuI4fALUlhUnqb7JP2H2W7m2xtdiPgepXgcAUuQoGoZDY3t8I6iA5euUfZ5CiG4UYYx4vqUMY3cwuSXVPUI1bsBokPWfzVihzJGSr4siM3RKLetOtFCm9AwJlb5jUoq6EXtjSTaNVeYbi6Jsd4FZlUx1rRIwKNqu1WDwIvziFu24Wfv11TBJxhz1QaLuX2xjsVyNMbJx2uqzpMfAoXsiYIxcISpDB+KB79w7YFQQR78lSVVVKJWdqTwRQNCAvCvVGiEOCeT/QZnlV6LY/vKDMoUpJ3OtLQEGZpt9S0JJTZD0MPN7467RcsGstKo0rO8yv0rv5FjX20yZJ3Y4FfAU6Ayl5hexW7vB/G62HsDSRRJOCbRKyv0rlbrUfYwXta1w40sRH4l7NkaSrkg5ckUDGjiQtgXfguEG1iw8rM4mbvLmkCUvUpClZc5CPWF4MaEmWQOGFE96cad5bGFH8E+a91rq8xTZacyv6TRIeOJ2SZdyD9ByxAR9G5BF4FiGG/+BsCOCPso3J18H3b5H7HHWjF845EPbpQxSjSbdWtHswfH X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 920871de-3259-43b5-afd3-08d892e31cd9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:41.3867 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XbPZ9MlJBiANaRCg5ECGv69cFLG86Yc6GTG5cc1w5BpfSJkQfu7M2zxdwRIdmGgWnQ1TqiyR9AcbB/EuGhJsDxqjsv6WJxxSTcuascjm/+A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add new handler to get aio context and implement it in all child classes. Add corresponding public interface to be used soon. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block.h | 3 +++ include/block/block_int.h | 2 ++ block.c | 13 +++++++++++++ block/block-backend.c | 9 +++++++++ blockjob.c | 8 ++++++++ 5 files changed, 35 insertions(+) diff --git a/include/block/block.h b/include/block/block.h index 550c5a7513..6788ccd25b 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -688,6 +688,9 @@ bool bdrv_can_set_aio_context(BlockDriverState *bs, AioContext *ctx, GSList **ignore, Error **errp); int bdrv_parent_try_set_aio_context(BdrvChild *c, AioContext *ctx, Error **errp); + +AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c); + int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz); int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo); diff --git a/include/block/block_int.h b/include/block/block_int.h index 9138aaf5ec..943fd855fe 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -772,6 +772,8 @@ struct BdrvChildClass { bool (*can_set_aio_ctx)(BdrvChild *child, AioContext *ctx, GSList **ignore, Error **errp); void (*set_aio_ctx)(BdrvChild *child, AioContext *ctx, GSList **ignore); + + AioContext *(*get_parent_aio_context)(BdrvChild *child); }; extern const BdrvChildClass child_of_bds; diff --git a/block.c b/block.c index 5d925c208d..95d3684d8d 100644 --- a/block.c +++ b/block.c @@ -1334,6 +1334,13 @@ static int bdrv_child_cb_update_filename(BdrvChild *c, BlockDriverState *base, return 0; } +static AioContext *bdrv_child_cb_get_parent_aio_context(BdrvChild *c) +{ + BlockDriverState *bs = c->opaque; + + return bdrv_get_aio_context(bs); +} + const BdrvChildClass child_of_bds = { .parent_is_bds = true, .get_parent_desc = bdrv_child_get_parent_desc, @@ -1347,8 +1354,14 @@ const BdrvChildClass child_of_bds = { .can_set_aio_ctx = bdrv_child_cb_can_set_aio_ctx, .set_aio_ctx = bdrv_child_cb_set_aio_ctx, .update_filename = bdrv_child_cb_update_filename, + .get_parent_aio_context = bdrv_child_cb_get_parent_aio_context, }; +AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c) +{ + return c->klass->get_parent_aio_context(c); +} + static int bdrv_open_flags(BlockDriverState *bs, int flags) { int open_flags = flags; diff --git a/block/block-backend.c b/block/block-backend.c index ce78d30794..28efa0dff3 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -298,6 +298,13 @@ static void blk_root_detach(BdrvChild *child) } } +static AioContext *blk_root_get_parent_aio_context(BdrvChild *c) +{ + BlockBackend *blk = c->opaque; + + return blk_get_aio_context(blk); +} + static const BdrvChildClass child_root = { .inherit_options = blk_root_inherit_options, @@ -318,6 +325,8 @@ static const BdrvChildClass child_root = { .can_set_aio_ctx = blk_root_can_set_aio_ctx, .set_aio_ctx = blk_root_set_aio_ctx, + + .get_parent_aio_context = blk_root_get_parent_aio_context, }; /* diff --git a/blockjob.c b/blockjob.c index 9d0bed01c2..f671763c2c 100644 --- a/blockjob.c +++ b/blockjob.c @@ -163,6 +163,13 @@ static void child_job_set_aio_ctx(BdrvChild *c, AioContext *ctx, job->job.aio_context = ctx; } +static AioContext *child_job_get_parent_aio_context(BdrvChild *c) +{ + BlockJob *job = c->opaque; + + return job->job.aio_context; +} + static const BdrvChildClass child_job = { .get_parent_desc = child_job_get_parent_desc, .drained_begin = child_job_drained_begin, @@ -171,6 +178,7 @@ static const BdrvChildClass child_job = { .can_set_aio_ctx = child_job_can_set_aio_ctx, .set_aio_ctx = child_job_set_aio_ctx, .stay_at_node = true, + .get_parent_aio_context = child_job_get_parent_aio_context, }; void block_job_remove_all_bdrv(BlockJob *job) From patchwork Fri Nov 27 14:44:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936479 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FAADC2D0E4 for ; Fri, 27 Nov 2020 14:48:28 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DCF712222C for ; Fri, 27 Nov 2020 14:48:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="OstFWz0q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DCF712222C Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:43210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif2w-0003CN-TG for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:48:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36540) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0i-0000yj-IG; Fri, 27 Nov 2020 09:46:08 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0g-0003DS-KH; Fri, 27 Nov 2020 09:46:08 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NNSOQSRKT37oR5++dL26ynVRgSlxSgXhKyUy+G7FvvaGesuG2BBfIrZGRQzluIOakz53nSQH8jVVupzSBifobuAdkscEReOCCqE7furZ8x++OmQTG/kK6dBcIpjvjrGBx84XeyALLAhWgWfvRFmPdGMmWP3ZfzC105OhTv+l8e5sk3fiAPclm675uWp86aLVut90CuEy8TB7iSh5r7hxD7xkB1ZoA760u87f5sZga6yCtxQHbY7L2Gv7Fkts5tg1C5FoiLZOJBwZO6rZVwbsIit1TKiseqpXlgP/esumWNEP2OuhcdSEps/ZiwunG7KguAm3C6zoFAmEKHPYbD/3Nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qhATC0FnNbSgj1Fckf53Il0JbrsP3nIm/WMCen9YvHE=; b=Yxrrzg7BGUCiSi94LiZKOmqS9t/sRsiDyxRtyLN7KBrkuxVQFQYEMhgcWUdNUBqVOSYnF8lwK8w6oD+Badej/MOo64ZZeRxcKdsoq1nep5D8WjDF5CKq9sI6wcSGTdyznZIBX9fw6HPqFHhxwHgNWyiiEdtFb3XWaSxK93pLDb8QUE5AUj9QkzL8HgKyPsd4LJsbphZjEdopjBiL0edSVLux1zpoU/os26Kf9nleskDa7tem+59jPIE8pYKr53beVG4Cq/AzlPjeRqOzOolZOL7tLmNPpWlRy4hJaX0jXY59ienBYwJOst0QSh/Cfr54GYF6aOjMsyPpTOQrwHs52w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qhATC0FnNbSgj1Fckf53Il0JbrsP3nIm/WMCen9YvHE=; b=OstFWz0q0CsqFdiND29LnRpCZpuQ6XcHyha17R4MAekpexce5gOjdCMZLVeIrxiRzsLzB71Y8OLWiQBGJhOxy44Tqo9Q2z6vpO0GxUbxXuJyomTgOM9PeQsfB4YGol7VMj3oKh/lbmVgTNDCIX9fs9R6NSYKSv6GnNsNQJiaGKo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:03 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:03 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 07/36] block: drop ctx argument from bdrv_root_attach_child Date: Fri, 27 Nov 2020 17:44:53 +0300 Message-Id: <20201127144522.29991-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:41 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d69be697-1339-4fb9-25cd-08d892e31d4d X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:576; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ipIHVufVDjmG+ecI+uHEd+FXRDypCY/DFCHdrY8Z/5RI1H5lULLAaMvh/3i2eASz0peB8OWjndg+WMHtD7221ETQyWfizSlDx3qX7Iss3TUb01WO6KTjhr/NsyVIxUQlqboIULADTS7QrsygSGnx20/gaNd4Lfk0aQ3b77GjjaqUrZpAiUjY43enW7fWisx4SQ9QNSX9b4U6nJ1soGUVcxxQtgrnIFrMwa+FGskO+bXNRhSTwWCara7qdFcIIfg1kjeoq2wMvhdWYQkiE+Q6F8OSRaWpMDC/LcQHW1hogYkyMfR2Umv+dbmMdMTP+aq7cLgI6oGzYz/6HvxTivFhDc9n1gfL8QYM3ez2SfJc285Qi3tXJnnuX/O9d4hGCwyl X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: ZqnxnIcfahnCcVMN7+PZHDzofgjwCnqVi+99C4XuNfw2qbxmXZrh4e3Vkg0jftn5SxAfsMS6GrEavSenkr73/CK7ATpFoLUz1jegGpqbcYLdcU/PKSwRZdYWXgAu3hJp7Jor1t6F3fb7JcIGBk8zkQl5wMHrPAABMdTZgt3ObeuIRhw0yDGW6OnCetLlHuSpsPaHscMX9Mbjg4BypoM3heWM1dXGw7y8PhEg+IhNYCEwm9VOHk7aReRRNDLHuxeQX+wIu8gELKPXdeKT6zrmri+X6LA66S8FgTht/J/JZcyDgPI7F/wZF5eydnTK+Zx45P7ksjkAqm9dVy40N+Ge8mMXWuC5Vj/vM0xYd5+7e6sc2kE5LYsIVRvXEyfHtbGk07xVnbSdHg2Ql6sKZH+tlyz6SEfOduqw9lAdWuGOsJcEFk9SFNsbrfJFOVIWLoUw6nEPRbM9vcZTjwiwZLpRfiYtgA6oehREQLjHS7rXy3P+CQGKm56QK3BqfNr6tUHquKO2Bf2TdabJX221UQsaZOqQWntjoonPteoOpRP4EH5Lwx5nFzVj83PUTGvUTYaZjk5y2IFwDpCp0Z0jXMrrHFIOwMK+tcNmnlJhyE05FuG1TpY7c9VohoG8gnyhCRIV932/NEPjJAt9/8D7ESHPJ4aZPLkNTZ6l1P63h9SIMj7z75JXM8Dh9z8VYI+eDuu+zWhJFsBOj0jJv5SHTEpqAReeMhI1nVPORo/tbQN/oZdES8fNCdKz0+bw9OIQ04Y7eGkvkfYBjg1cNCR0JYks4qLjpA896Q5HR57j9LNi9r98CH6Be0KBDis1plUUZt8kT/j9WqNrZ2F6d+oWfzWDClmRuS2r2UprH0byY2OcaCaxJthExRmX7LEQuSQsrwIlZhYmHW6rX4OJiup0cHd7Ipa9/E+Eu2tVunQCs0zOjFkBVoAXi2jR6dZHjiwW3hMsosovelbwMvMWzT/CFlgHo9ApUJqegb92PlC+N/IL9Fo4zstg0XqXO/j4Xi0B5DL1 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d69be697-1339-4fb9-25cd-08d892e31d4d X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:42.1504 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ZPT5jyK+bOXhqZqSVBUkIz5Ys69XZLOMkkAbRGsVDxt4CH8cTUeV5BP9ytQOXXVKJUx+uEw2pk9+Gp35x1WQdNAfsFgtQLdhbJS6KCNJM0A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Passing parent aio context is redundant, as child_class and parent opaque pointer are enough to retrieve it. Drop the argument and use new bdrv_child_get_parent_aio_context() interface. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block_int.h | 1 - block.c | 8 +++++--- block/block-backend.c | 4 ++-- blockjob.c | 3 +-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index 943fd855fe..24a04ac2dc 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -1278,7 +1278,6 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, const char *child_name, const BdrvChildClass *child_class, BdrvChildRole child_role, - AioContext *ctx, uint64_t perm, uint64_t shared_perm, void *opaque, Error **errp); void bdrv_root_unref_child(BdrvChild *child); diff --git a/block.c b/block.c index 95d3684d8d..15e6ab666e 100644 --- a/block.c +++ b/block.c @@ -2640,13 +2640,13 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, const char *child_name, const BdrvChildClass *child_class, BdrvChildRole child_role, - AioContext *ctx, uint64_t perm, uint64_t shared_perm, void *opaque, Error **errp) { BdrvChild *child; Error *local_err = NULL; int ret; + AioContext *ctx; ret = bdrv_check_update_perm(child_bs, NULL, perm, shared_perm, NULL, errp); if (ret < 0) { @@ -2666,6 +2666,8 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, .opaque = opaque, }; + ctx = bdrv_child_get_parent_aio_context(child); + /* If the AioContexts don't match, first try to move the subtree of * child_bs into the AioContext of the new parent. If this doesn't work, * try moving the parent into the AioContext of child_bs instead. */ @@ -2721,8 +2723,8 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs, perm, shared_perm, &perm, &shared_perm); child = bdrv_root_attach_child(child_bs, child_name, child_class, - child_role, bdrv_get_aio_context(parent_bs), - perm, shared_perm, parent_bs, errp); + child_role, perm, shared_perm, parent_bs, + errp); if (child == NULL) { return NULL; } diff --git a/block/block-backend.c b/block/block-backend.c index 28efa0dff3..357931ee34 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -435,7 +435,7 @@ BlockBackend *blk_new_open(const char *filename, const char *reference, blk->root = bdrv_root_attach_child(bs, "root", &child_root, BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, - blk->ctx, perm, BLK_PERM_ALL, blk, errp); + perm, BLK_PERM_ALL, blk, errp); if (!blk->root) { blk_unref(blk); return NULL; @@ -849,7 +849,7 @@ int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp) bdrv_ref(bs); blk->root = bdrv_root_attach_child(bs, "root", &child_root, BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, - blk->ctx, blk->perm, blk->shared_perm, + blk->perm, blk->shared_perm, blk, errp); if (blk->root == NULL) { return -EPERM; diff --git a/blockjob.c b/blockjob.c index f671763c2c..01da714755 100644 --- a/blockjob.c +++ b/blockjob.c @@ -225,8 +225,7 @@ int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs, if (job->job.aio_context != qemu_get_aio_context()) { aio_context_release(job->job.aio_context); } - c = bdrv_root_attach_child(bs, name, &child_job, 0, - job->job.aio_context, perm, shared_perm, job, + c = bdrv_root_attach_child(bs, name, &child_job, 0, perm, shared_perm, job, errp); if (job->job.aio_context != qemu_get_aio_context()) { aio_context_acquire(job->job.aio_context); From patchwork Fri Nov 27 14:44:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936499 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2DB5FC2D0E4 for ; Fri, 27 Nov 2020 14:55:58 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7E2C1221EB for ; Fri, 27 Nov 2020 14:55:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="YmaJrWYh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E2C1221EB Authentication-Results: mail.kernel.org; dmarc=pass (p=none dis=none) header.from=nongnu.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:38616 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifAC-0004SH-Dk for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:55:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36600) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0m-00014W-JI; Fri, 27 Nov 2020 09:46:12 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0k-0003Ef-ON; Fri, 27 Nov 2020 09:46:12 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IGDFYKkQNpHuHqKR2oUJugq1UJ3lwPoElDOTsYuoNSNT1deCaVPqEpHjEic7jkectTFXVTGcouqmZtt1qcjSWfj+qcSsqq3FYjlK0gWzg0yTUn6/q8bONYIwf2V+wHV7kfvBEztVniJA/gXDUgtYgh7B9UiTpJShYZB9WgyTxGFFC+Sj8LxTWaQDXoKBzOSIo6eV8EJNPf4Nk9ru+x54otLMwwzAO1NR6SaUi7sR0Q8dMLpNP4KXti0TlyLBLbYVu68YNAPNbNvI+3YBI1s/uF22cDjczo96TVU5rKGGJS18qK6pyOomfxA8GS/2j8na/6FJmSCDUDCqOLBEQzHZCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kfkwml83o8pFSQKB+X+jungWMoeHnAJq9jMgsVNPZwE=; b=mKusESPHVysS1Sjqk1iruEjRKNAur7XACm2PMabCnX0RypENi6bvvqFOE6qzyN7QYd1oxtR2yzCbBPSapwWYIvywoqNwYOhFAe1ae/cpVOiY1r4t9inTisH8fPlcthbGiXy5q4CUqjKyDsJUTvBvniloyO1QeOI8ToxbbykxKPes9LXZzSqJG2b12Owe3zQkMT5+SMRkrAzJFitB/R9h0UDCUfDm0jGuXnFex9vibYbfl+UVfh+/RyveTQLopAdct40HtGSANLQLacb3PbRLeYZpA9aJJjGJPuT4ZrFNk75Npg9ZU+NClhKNg3aPhOWaUepQwJCuw2/3ObhlyRN5Jg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kfkwml83o8pFSQKB+X+jungWMoeHnAJq9jMgsVNPZwE=; b=YmaJrWYhXbGxFupXt5YeDpNLklx0BJvgk/aYQjHHoBD39KyPk132PHNBF3GuSpzpAo2j8isPK/XezdmzjdzbUdne030aZ0oxhjNjYRNjtJi6KysAi/wEjyA3YUiR61X/NQ7Gs6zvHaE/qLqAj001t+H5WoVloLQZVSscEreVNfw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:03 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:03 +0000 To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 08/36] block: make bdrv_reopen_{prepare, commit, abort} private Date: Fri, 27 Nov 2020 17:44:54 +0300 Message-Id: <20201127144522.29991-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:42 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a07e1c0d-6080-49a1-ecea-08d892e31dc5 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:446; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BLuEoXRoqi8Yqz0vvXH4lVbBVoLoNQZmnVo120pnBulO/fvLEgHBgWdIehNDMgWsTBp7r2fx/RtOaJWw7C3n08PxxJ5QMYLlS/bL55KxijWocv3LrxP8i6TY3fTQv/1Q5uh8EEtcpvbKB7M4bY5EnQjh2YcLWKa2jbgx+iNZV/XhyDhMHsmP4VNT3BKNdIHdV1vJpKbw037G7RtEVsMUH8nM2oiyLzc056z8ASMHAPnuMKt1B9GQvMQe1F4laycpKotlU83wSuJC+EknVLp4eq/cHqWVWDyJzLM2sB0JvZcgn2D8DIrJToHHqg6V+urZMjrNIA+9UZeZGCTzv6nN/kugenOQkFdrAJZWcu+APVap83FejsKnxkQafW7mTUFe X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 2mzGdM0wBgIaXfhPrsfSqjn4FDIe/dWfYBLR7XEQiRLxSb8k9kikjKlKXp5v9YeHzBvroluJ8EC91qyeZQzwASp+hRvdydj/pGFZ8+MOhb74TKuAfSM+no7Ri1G5vEl4CEHwuZnaNTkHuHbRM39bpCfxKwTdwlEqgOGF61cLKpNFC8mqpx69IjLpRxTS9o1IoWCy5ZZ2i9w0W+fbGGtM+LhHIzoRNVEcjNK9jx/T9DeDIvC3wVmCFb60UNVSXYlBYYFKgizn00fjl/WJ8mfs2MActfGFs/pX+tTwvgKT5xG8oAtG5QzoSSgb9GqIjT//JsudHvgNMWx31WSRtyxkWzYwxDnVIeuQ518blmslrEg6BCx2X+z/8tmjFmmVATauj3Yw42nGZTWB1XAwuB+U40WjhOi1rhMkVgJlywHt5T5mBmNTrnQDrTcudnKcTiydk7fo2Vwy2+m64JjXSurYJlZGuF/OiPBj0KDbO78ppU9h8gLF9ox6jsvVOmazG1S2XdZ0vWDZ/IaP02bKXR9VZOTO9yw4zagRzC3EiQiCjrVKrgsEWcUtsXDkLw+he8v0ePAw0QSiUjV+yLS9ys/ApK9Zyh/MQq3d0InMsWOcc6X7Bek+PansJbuTPhr4M+QPTi6HBfqj5zHGiMWd2xP7SxI3IYk38NKRvtdYDRkHcVSJEUNzQAvPgVi12EQyOW9Gpds4QdrqMh8jN0q1COGcsQyr5V1aKZN2GDQxrRSEbdeZNguHpK8mlOmKRmD4ouJ1qlMxYNsGIL+HIIbBHbXUKgXtBVjfEnqBU7wnxGg2XOtvJ5xJVm51iW9xt7MjZw+gUQ5DDXC0o8Gsug62VWEHqNxrbDpUiKhxRhejxSpmXFIskALs7BilLpbvsHaJaqQ/EmwDmDyxLDZNuAIlgxRlIYeV1EWKZgeFfCW8Jv9WYG9PjBQ5VtGW05FffgJLJf2PMd1EwEDJFBXTcfu4BlpIAk1w7jSKbWrKjFYrDnmlu+zEcLa/Gv8T89fCL70q0z0g X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a07e1c0d-6080-49a1-ecea-08d892e31dc5 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:42.9200 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: t5kqokXct/2XVZPwBRWNRPwOgTf4yh9VjCMqzuso0EbdkAmhzaZh5jwBOsDk6QqBAUQBXGVfjW7Xc7KDfuqyMuiRqqQr6XnPKTGH4PROJv4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Reply-to: Vladimir Sementsov-Ogievskiy X-Patchwork-Original-From: Vladimir Sementsov-Ogievskiy via From: Vladimir Sementsov-Ogievskiy These functions are called only from bdrv_reopen_multiple() in block.c. No reason to publish them. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Alberto Garcia Reviewed-by: Kevin Wolf --- include/block/block.h | 4 ---- block.c | 13 +++++++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index 6788ccd25b..5d59984ad4 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -373,10 +373,6 @@ BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue, int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp); int bdrv_reopen_set_read_only(BlockDriverState *bs, bool read_only, Error **errp); -int bdrv_reopen_prepare(BDRVReopenState *reopen_state, - BlockReopenQueue *queue, Error **errp); -void bdrv_reopen_commit(BDRVReopenState *reopen_state); -void bdrv_reopen_abort(BDRVReopenState *reopen_state); int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset, int bytes, BdrvRequestFlags flags); int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags); diff --git a/block.c b/block.c index 15e6ab666e..3765c7caed 100644 --- a/block.c +++ b/block.c @@ -84,6 +84,11 @@ static BlockDriverState *bdrv_open_inherit(const char *filename, static void bdrv_parent_set_aio_context_ignore(BdrvChild *c, AioContext *ctx, GSList **ignore); +static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue + *queue, Error **errp); +static void bdrv_reopen_commit(BDRVReopenState *reopen_state); +static void bdrv_reopen_abort(BDRVReopenState *reopen_state); + /* If non-zero, use only whitelisted block drivers */ static int use_bdrv_whitelist; @@ -4082,8 +4087,8 @@ static int bdrv_reopen_parse_backing(BDRVReopenState *reopen_state, * commit() for any other BDS that have been left in a prepare() state * */ -int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, - Error **errp) +static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, + BlockReopenQueue *queue, Error **errp) { int ret = -1; int old_flags; @@ -4298,7 +4303,7 @@ error: * makes them final by swapping the staging BlockDriverState contents into * the active BlockDriverState contents. */ -void bdrv_reopen_commit(BDRVReopenState *reopen_state) +static void bdrv_reopen_commit(BDRVReopenState *reopen_state) { BlockDriver *drv; BlockDriverState *bs; @@ -4358,7 +4363,7 @@ void bdrv_reopen_commit(BDRVReopenState *reopen_state) * Abort the reopen, and delete and free the staged changes in * reopen_state */ -void bdrv_reopen_abort(BDRVReopenState *reopen_state) +static void bdrv_reopen_abort(BDRVReopenState *reopen_state) { BlockDriver *drv; From patchwork Fri Nov 27 14:44:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936477 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E515BC2D0E4 for ; Fri, 27 Nov 2020 14:48:24 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4E273221EB for ; Fri, 27 Nov 2020 14:48:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="MkjUZrE5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E273221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42876 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif2t-00034N-AC for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:48:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36626) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0n-00015v-G3; Fri, 27 Nov 2020 09:46:13 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0l-0003DS-P2; Fri, 27 Nov 2020 09:46:13 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SlXIFgTmCW7N+F7tHdSltBfFsJYFGlVkUE7mwYAl5ybyWhnwfgS+Plqm7aJ9hFy/H1n+Nh7WLirluJFZKYjITlAYS2acZvnWXgi4QHZzaCuAUwiYaU3Lcta2HKs3nSgmAdZ50L6qDhKoR9cG5JpGsYQgsOfQ6YJX/xYrjwkYsgl/Yz2R2vFqv7itVeFjMl6peSHiBhFRmLSl/c4F70I6Z+/jLZVjY5Flu3TlG2hAfpZzSefqZVXxOj1rGe37k+zpvYtPn8mneJrI2iJwlcKFinL2R5gG7oVZi+lSsduoPgPBeOokSbYuOVM6bIgU2TlkS1AO2CQNp0IV+k6igPMPzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7iZFLPgPECZF7CknnqRNvI34ZzJuGut/W1YkyLmtq/k=; b=nJC/r+lSdQOxVcVfhmQQMjNlwJ8sPx1LbrJ1fyfPI5zgJUKDD45yZ8Jkyatp80DCen2zlvyZs/BbpUZ5NHbNHi5qeQW4tS2sg8ASvGOg74friZ+xHv2b067xE+5HOiCdNbRsUdDUUhmSL4b5AZMTll0j75V4MNxXTzdiz9A5yj17S04ObLxv2GFl+KJrn6pwbyLvydQLE2o9xug0VLJ+zqbk+5oCpToXtXWTP4WkGR+J01xcC1/vcRU9GRt/ehn55QmGN5OebkGazh5nrcioYZTZifu6X/0n1Me9X9bovxpWufPs9sOgDS68RCnsKfWIyO1oUp9Kr9XIhYnWmST67Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7iZFLPgPECZF7CknnqRNvI34ZzJuGut/W1YkyLmtq/k=; b=MkjUZrE5z7Tap4zQJ+QsyTgsgA5HMpacJw7LFQSa4usGAAmFWc2QPRsOAThcUlsQ/A6ycvw9JbBnozEyQe11TI1aQ3DyWEv/USHIQccwslKGT+eFyGPg6wIrNrCNVox7PZF8T4ifFPX8hpoHcOK1jTz3zGLK+bqW0lic+HKJh7Y= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:04 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:04 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 09/36] block: return value from bdrv_replace_node() Date: Fri, 27 Nov 2020 17:44:55 +0300 Message-Id: <20201127144522.29991-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:43 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 97263696-f158-4c10-ce2e-08d892e31e42 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:883; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S6oiKRoi2m9SPElZ9A0I2TaVzzd4zA5E25po0kj7DcB2iHvAl4MSzzIXs1iD8RxRPhR1kV9QXVmLv5IP7aI0ZA1DrBIReXJmXno7UqGis9PE2gn3TQDQVEunugyC3ksvdqirkmVhGsKzpk5jeib0wq1gs+gAkG8p8SQ17wmIf6nqOECnElcgDPMAuz0UgSTKCqPltf8zBHej5JkCwGD9ZxYIg+arOyJQzONoXwWEPVvR42UIcePEA5uMgG8nRj/yo3vAMPjNtCdY/EcTxFcXKZtQV98vBJIvjpSDZ+n4TMjDsEqTWHZGre6XelhtFGdi1Lu1lalRo1WE1P+NjrXLC1qX/W8zf/yewX0KTl8r52g8eJGb8E1sj3+nslld1D8S X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: QSCAAyT/kOvNN1oIaJmMl5uchUwVHwUHnNsCWqQmqkOfH37cTdNWSGGvB9VXIlyNvsfoLE/Hhj96F4FiGFgn8bdb2xxrqzSUlkdpXg2N1NJGD35PSEkZ5v4k4C+NlVFxLCCPSRHmyKj/5YzPWxowxxygj/6YwWBDsTpUcfGsxWDQ1GINyKDg78SmFPfbFVwk1lJ4geVE31gh0oKxuuJoCQzgBFaWA1o9dC/KbYsT9XyOayHiysxpRyDLpxWNPs8JLu9OS3rSz49cR3PWCpEG42yvKAhbpU3Nwtn1swzY/Vaw9+6kDqfgL1muNexz93qnObJ2AAqxsZOst9iEznZLQ+wsq4RuSMCakkzkJKxcCAH/hBPVNgUAsv7HjIH1QuhMldoiFtCPhkq1vc3iAQVBDKJebcNEXcZpgweYEhPoXhvFZS+B0FOHCaNhqluS58/Th39db3mhNaIlbNIgUojtDvS48r0ICOzRkITaI7zq7FUN8PBJyVeHA7+TangOR08M1LAebT4+AlhJuWLRox1JAzoT0JGojtrw0ySj49wGUrb+Z5+0Qg6q2Ik3bpSppialNy3YaK1mJlVdZKdifmbr+Ixk1PIMPqre8hLksZ/6fW6hGGl6faOzTLr2zBmULIPyJRJ/ggp/86q/XNxfBS9odJ4Qb/No6IlnKzvABq/o8UxttKp51ppqQq6HlFnZvHL6Qyvn4yjMdgPNQV1EK9nAHYbmVglSzQJZNHd5sEnDS7sZCYE4xjSqpIijaJ2idOht5k15Ri2iLG9VBkVWR7ZAObCndcoRc/GEl/ar+pYb4RVHsQyUwFqPEF1m1c0pSW+lnWfNpfciUV+ugIXxdNb04PU7+1Cr0k6LJKkk3xyqQ+GNWcSEVN7ZhRnp2f7NBJB6RGVJoEO8BOxmE0oxpZ687goM/26WYBUc3CGiGZb0clLY2JX/I9XdaGb2G7DNDtdYi1b4nJareLNaZcUYsQBEkk3nKebQfF97aO6iHwxGFAayooAneG12cC4rrtrnrbwG X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 97263696-f158-4c10-ce2e-08d892e31e42 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:43.7364 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fbULHv9xRmoL+C0UtIZeqlhJwLZbGWiNTY+3QjR+VeqBdVxZ+TSnk2x2TD2aEdAWkichNPQmKTkNjUkstz72J2Eovi6dBT+/ujZZM64uZOM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Functions with errp argument are not recommened to be void-functions. Improve bdrv_replace_node(). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Alberto Garcia Reviewed-by: Kevin Wolf --- include/block/block.h | 4 ++-- block.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index 5d59984ad4..8f6100dad7 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -346,8 +346,8 @@ int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp); BlockDriverState *bdrv_new(void); int bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, Error **errp); -void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, - Error **errp); +int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, + Error **errp); int bdrv_parse_aio(const char *mode, int *flags); int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough); diff --git a/block.c b/block.c index 3765c7caed..29082c6d47 100644 --- a/block.c +++ b/block.c @@ -4537,14 +4537,14 @@ static bool should_update_child(BdrvChild *c, BlockDriverState *to) * With auto_skip=false the error is returned if from has a parent which should * not be updated. */ -static void bdrv_replace_node_common(BlockDriverState *from, - BlockDriverState *to, - bool auto_skip, Error **errp) +static int bdrv_replace_node_common(BlockDriverState *from, + BlockDriverState *to, + bool auto_skip, Error **errp) { + int ret = -EPERM; BdrvChild *c, *next; GSList *list = NULL, *p; uint64_t perm = 0, shared = BLK_PERM_ALL; - int ret; /* Make sure that @from doesn't go away until we have successfully attached * all of its parents to @to. */ @@ -4600,10 +4600,12 @@ out: g_slist_free(list); bdrv_drained_end(from); bdrv_unref(from); + + return ret; } -void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, - Error **errp) +int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, + Error **errp) { return bdrv_replace_node_common(from, to, true, errp); } From patchwork Fri Nov 27 14:44:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936515 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71C34C2D0E4 for ; Fri, 27 Nov 2020 14:58:34 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7E84A221EB for ; Fri, 27 Nov 2020 14:58:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="akBY+o1G" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E84A221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:46784 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifCh-0007vo-Vi for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:58:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0p-00019Q-JU; Fri, 27 Nov 2020 09:46:21 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0n-0003Ef-7s; Fri, 27 Nov 2020 09:46:15 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PQrZN/pbB71AW7JKH5b3kgCWVMua+ydmOefYa4OFNUTqmNOCvtkGceF26QEi3JFD9bIaow0cuzUfAqqSpYIfE/Sombqkob40AmZsSgeaLzEQdIQrd/B2MECPWgso8tmD9KB4IvitCzbtGYzEQCbgCdKr3sCMFiBmvPAr84l656cblhjqm5gqYLQhmTLbGXtNbO4oxZHKo8y5kkIfJr3RuZt1MJset5gH0/KReXctAQHtiCsaO7AZ66mUOPmKpDmWFcfuFJvm9ps9SKhs/YpZcXzL95FFXJcmBYBV6Rmi6v/PIE+KjWkXmhlvq7AhhJHZjtDa+N9iI58Dhw21KL8eDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rjEFdMnLXLT905b3EAn1qXIZV99TbXSGSGpEPzWsiXU=; b=VXpZYJyh4InBmxTdtcORfuAohLTF2SMSrDyQWNquELnzAdkPdgxAhmp3OtF39EXDPsnDUmiXgUNUsHIGafnh9bh+L5kz83laL6JIzfblErrj2FV3B2YBrOLNndM11K9sv7BJWddxJcYVirH6ycacMOb5xj1CGn3fVHTtI7BKqLK1lP42yrW9A5N2juEte4QI6yqehz2dnx6RSFWD6RFQN1Ci6pAtcjhvZUuW+9K7gKhTD6eVA2BAfGyte5oMRvB+o7GuBpliH2skV45u9UoW1mZEUoiJQp0zSA7sDH47oGnMzpzQvy3gt8Neiyx2fkW8lQr6+T1NdI9Tow5Ne9Kdqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rjEFdMnLXLT905b3EAn1qXIZV99TbXSGSGpEPzWsiXU=; b=akBY+o1GSYWZr4djndF2yoNkQSvogPFsPcHNgrDdwe7FL36eR9WqcqAsZnmBo5fSpXIHeCiR7UFC8uGnsKhVc30NUQ8nkxyLAMWaBEsQQ04ZLei67rNJJztU+vWEkpQOod1aax1UF1hZkIy+FYuBuKhv1QpSzo/BrGbjTCjbjf4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:04 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:04 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 10/36] util: add transactions.c Date: Fri, 27 Nov 2020 17:44:56 +0300 Message-Id: <20201127144522.29991-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:43 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 02e71819-9e86-4ee2-8229-08d892e31ec1 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vmappfu9h9/hwIF2HfTUaqr6GDP+hl3YtFLawJX8dL2tsMtO9V3/OFfGRsMFjWlC2kA0W6q3yaz1x0rUJ5HPcwVe+JQS5zelMENlicBl8nV7BMEed0UxUsvH0QfjVxdFf3sDFrX1f1T6naGBUo07KmDYcpj4mG54tUYna0GZIFQpDZXinBkPKni49FCJRU9rqbxEg3FIRFklM23f/199EevUFPymNcXRqGqpxYNkHbYUQJfoNEtKNu8inxAqdfEmtF+Rd8ML7l2ItKITp0b9KZyFtVg2MvObrP8D84Xn3Xprr4J+nEF8aDmCDSdWeXopNzqpsun9H+d74uPYgCTh4uFBn0UVq3kLGYupHqP/hk3uJuDHin7g0IFKUF6ASDzYSlIDdPV9NmALdjhYM26gjit5ongbtLhXtKw1Lf6/K4wKT0XOmU+4YMLuEr4wcIBc0H8JL0drnP3vFM93l3uyW94fG64gTTJT1Ss9/D+XWRs= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: bLeCXm7c43SkONPVEX08B/HqLOdqiLXHPAnS9cWUeStsXGH++N1sX4WVRWBuQSajGDWrG1AatMAi8FROu2WGa8jjnoJhuepgxVZDG1Pjvs+RD90mKqtsLuWhHWwFhracQHQA7m+YtMvCwavUV77H+AU9ktUfu5JiZyfpBszKPXoimaQ2Z+gzwVqip55i+oHQJfll7ZW+zveK+X4ibrj5ql2HRkDXAnHG+dnTyZnGa7kf3VNT3MgxRa8ArH0Z3xtvAYgw5hzgmnrUWXVUpz1vCwlMpnVoooXKooqqJhpG9jcA/9dYYPoDtWw5PYhWG+OImbPA2006FdFwvXudGyoKqBrrtwGwR8paeDhJiopP40XnA4zc5RoNyTuADWqt1zkAVvGcnYxvK+aV2/8DK6nIGP72Nqa8/RJTl8Y0Od3bIFDb3OSmsatEMxuV1PheB4pVyw/agY3NVStpZYc3+loSEWTPg9wbYe4bLuBtteoWpHdC1jlYdKMwuVKh2VUhvHrznFs6QNVhTfMJZqoHgMX2RMlFrZUqAzhkFLy/Yo9Pt6Spt0b4JPw7olMxpm/JeVr8a4PCx2P9VPjD0HxtO3rUJrP9oD1bI7FKh5zmsQWXukv3lcCFrh99MDV9nuNfdE881bpDGvRNQ3DzopJBKLWeJLUTSEJ9akjg4r5znCxn6+Q8WLcGaTicB26NK3iF/0RlooRYSj3wcjo+ntokbY79s1CoCa+o1MycL9wHkOGCLRnRtXUi6uhVKGf3CYJMNTcmUljeh3DLRB5mh0zwVqW3ltXVV9fa5bKC1qwJx0Gv3z3XgzJgklBDMRFhWN0lNsQ/V2GxnveGberULNHPVDWnqzZRahh3aCwC/n35D1Z+8LzCYlHnQPTjtFrmHRhaZ9f8s6bO6VwfIzS+Rnj9uoKu198qHMKeaxnC3jJDx/NeNVm8WKCm1uCyo5p6B4D+ZvhDbnvqXct+y1knG08L2gebAkjl0FuFxC1lA+iHHYiHOorZHjODtouyumHUGymzAkD/ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02e71819-9e86-4ee2-8229-08d892e31ec1 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:44.5688 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0V91uG04FkDXLY5aX+BZBoTLRUupmLIW8hwZRsEZF7SvEQQQeYUgGqO1exps/4v+IfXTdl2GOlHlD/Uqx6t8U2rWl6knYy387X38SWC5oII= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add simple transaction API to use in further update of block graph operations. Supposed usage is: - "prepare" is main function of the action and it should make the main effect of the action to be visible for the following actions, keeping possibility of roll-back, saving necessary things in action state, which is prepended to the list. So, driver struct doesn't include "prepare" field, as it is supposed to be called directly. - commit/rollback is supposed to be called for the list of action states, to commit/rollback all the actions in reverse order - When possible "commit" should not make visible effect for other actions, which make possible transparent logical interaction between actions. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/qemu/transactions.h | 46 +++++++++++++++++++++ util/transactions.c | 81 +++++++++++++++++++++++++++++++++++++ util/meson.build | 1 + 3 files changed, 128 insertions(+) create mode 100644 include/qemu/transactions.h create mode 100644 util/transactions.c diff --git a/include/qemu/transactions.h b/include/qemu/transactions.h new file mode 100644 index 0000000000..a5b15f46ab --- /dev/null +++ b/include/qemu/transactions.h @@ -0,0 +1,46 @@ +/* + * Simple transactions API + * + * Copyright (c) 2020 Virtuozzo International GmbH. + * + * Author: + * Vladimir Sementsov-Ogievskiy + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef QEMU_TRANSACTIONS_H +#define QEMU_TRANSACTIONS_H + +#include + +typedef struct TransactionActionDrv { + void (*abort)(void *opeque); + void (*commit)(void *opeque); + void (*clean)(void *opeque); +} TransactionActionDrv; + +void tran_prepend(GSList **list, TransactionActionDrv *drv, void *opaque); +void tran_abort(GSList *backup); +void tran_commit(GSList *backup); +static inline void tran_finalize(GSList *backup, int ret) +{ + if (ret < 0) { + tran_abort(backup); + } else { + tran_commit(backup); + } +} + +#endif /* QEMU_TRANSACTIONS_H */ diff --git a/util/transactions.c b/util/transactions.c new file mode 100644 index 0000000000..ef1b9a36a4 --- /dev/null +++ b/util/transactions.c @@ -0,0 +1,81 @@ +/* + * Simple transactions API + * + * Copyright (c) 2020 Virtuozzo International GmbH. + * + * Author: + * Sementsov-Ogievskiy Vladimir + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "qemu/osdep.h" + +#include "qemu/transactions.h" + +typedef struct BdrvAction { + TransactionActionDrv *drv; + void *opaque; +} BdrvAction; + +void tran_prepend(GSList **list, TransactionActionDrv *drv, void *opaque) +{ + BdrvAction *act; + + act = g_new(BdrvAction, 1); + *act = (BdrvAction) { + .drv = drv, + .opaque = opaque + }; + + *list = g_slist_prepend(*list, act); +} + +void tran_abort(GSList *list) +{ + GSList *p; + + for (p = list; p != NULL; p = p->next) { + BdrvAction *act = p->data; + + if (act->drv->abort) { + act->drv->abort(act->opaque); + } + + if (act->drv->clean) { + act->drv->clean(act->opaque); + } + } + + g_slist_free_full(list, g_free); +} + +void tran_commit(GSList *list) +{ + GSList *p; + + for (p = list; p != NULL; p = p->next) { + BdrvAction *act = p->data; + + if (act->drv->commit) { + act->drv->commit(act->opaque); + } + + if (act->drv->clean) { + act->drv->clean(act->opaque); + } + } + + g_slist_free_full(list, g_free); +} diff --git a/util/meson.build b/util/meson.build index f359af0d46..8c7c28bd40 100644 --- a/util/meson.build +++ b/util/meson.build @@ -41,6 +41,7 @@ util_ss.add(files('qsp.c')) util_ss.add(files('range.c')) util_ss.add(files('stats64.c')) util_ss.add(files('systemd.c')) +util_ss.add(files('transactions.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('drm.c')) util_ss.add(files('guest-random.c')) From patchwork Fri Nov 27 14:44:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936487 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EEC0DC63798 for ; Fri, 27 Nov 2020 14:51:22 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7540420B1F for ; Fri, 27 Nov 2020 14:51:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="aqxxRnms" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7540420B1F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:52458 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif5l-00075q-C2 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:51:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36652) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0q-00019U-0P; Fri, 27 Nov 2020 09:46:21 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0o-0003DS-6O; Fri, 27 Nov 2020 09:46:15 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FInYyMMAAYEMcFEzmZ2rOdQSvP90+QlHkCn/hFTRlSM7AAmwjsp3coI+zMA1Ffe1RJc1Jn4EHH5gByfSy6ztrmf9wFBZ5SUDuVgBTKrVLWKWA2kVWGaVjcTW8nudFH0ZZMaINWkJW253iWa7vspt7BdWq2qtFkI2c0Fszp+wPz868O6TovSVYf02zCYFFhXS+IvLxAjD01S4/YMiHm1FxaLfmT9ONWaOQQIr7bwN2U7l1K+nG5RiMexVyFY6FmkjC6ThgFo2slwcGd7WnMg5PZ/G7v2n1EO6IvKI6mtENeKogidGVJGnD+Cmvq8wyS7DdwAcp+KJj4is4CEb3intyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D+nwm6BiwGwz7n5xFL+ZhtE6i+uFSKOf84EMaTTGtrA=; b=MJfkV/TcK8W0Jb3ma6FlO9Z87/Q8N7DRR3MCyd/BDDMryNjkboL4NU886uaVpEeWtPlCqXk2LJPsu27ZBQAvmT/5oYnabInKetTQ4wh7ElYp1UjTJhvT9JzeN0S9a3BUl4ajH1+vNQDSMXG8Jph8iKpWrqEmsnWlUlv9RVthvlOHXVFCmsMueNqdH19B4906r2kVvzJYD51+S147TTgjrh/JOANoaWDE66+U4daNYps27uQqsgpwczbQIH815qRkw7lJGTSgQURYmsSw16pJCtxrXVon7BD5Nhh8Q4Gb5mDjZXfwG0XSc5v0b4RzfSLRL8CG0VM3mdhml0pyUETzpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D+nwm6BiwGwz7n5xFL+ZhtE6i+uFSKOf84EMaTTGtrA=; b=aqxxRnms7L8bAyqaV/hf60tPMU6MyMI9Zh3x7sTn+bVTP4fSXr7tHsLldz1uZk8yNktXnhpljG2HZ26XsYKtDWp0azyYIVpsH2yDojKnZWwV+14JYI2MLWxwt1kQsSh5pBz0HqjPNpyQJqNJSN436bXSyH1Qa7LElDC8K3b2q+E= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:05 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:04 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 11/36] block: bdrv_refresh_perms: check parents compliance Date: Fri, 27 Nov 2020 17:44:57 +0300 Message-Id: <20201127144522.29991-12-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:44 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 70c98a9b-a6df-4fc0-c0fa-08d892e31f33 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2512; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hCKsAY30Vbrou4EQaFu1/F59l5vMsysYNXut5LJaReWCm3Pe3UohMH5865JRpXNUrx409QO/8q7RpD/SLC4w/7g/1hOy5DzzlQVxzlQEET/M4B9Pj2ACw8OPSSsWZHyvve7FYfPmDcaH/6lICZh8Rq64vdfW5/DYl6FQVdZrKI4ImoGGqbaIzNnbDFXlv5erRt5BeJmhmLpQP7VazofXfaQw3CUc2moIoRRDVFvfzd7Vg8ND3JLfgdY0G75b0KaavvBsiPKJxijLdTHlL/X5ikUGzIWJtKvbyCrt5fwEFL/luwd2CE3M9hGOXaHplEXvHYt4K0V2hMjZe4Zbc8GjPBTaccAtD2E7KAkWfs7r8DEfQh5etDWQRTl7H7DjdV+Z X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: AF5IWRzARvBZnIBYgpewVAkJsDW49/gNcGLGVpTtANmof2J1w+TIIBCdVXNhQUd/SByZTLKbv8u3HnU+7EE+UbM0U5M0YZilnBgY0i/9mgem9xLomlIWRanFp6vP/5aM0Hp0mD3ChoC0RlnfK21FsoQicXa87c1HBtmGnYeEDYZj8vUZRxZS67t3vvrfRPynBsDlv8geeDkA4rcNqZIG058kTyYXpQza34LksJTkR0i6OUzU2uVZ41JPdr4KSpmTVs1JAuqZoGt5Sg4hhzNfDomLnAVnw+MA+ej0WYHm2nZ/G1UzCpSIZtBvsXqu5IzqkSpEVFiznYAd/gsBpk1I59mYzV4jEUxU5DosG+Swlh5yungtNfKQVDWd6QOfI11096Ae0aLdcJCCVR/q0Q8Nv/Wq0f+j9WPe2hK2m+Cgy/U8KCyj+A6+th3EWyWjSbuOLVnGVh5PoiD4ETpIMohLz9abrTKp96FQFjOx9s8iPXf3YxvG6CJD67SroJajjbo+TYtEvWdRcIkjd7TblbTFiJerizWyI9Rd/dR132+6Hwyf/cEbNZGip91NB9nVWJCWBwOVRj1Bd+V2h5vQP0Rs2Ev5O6RHVitKNZW4oCXYVWVKB9yclwWZhwgKJH3HxoeUiATBRm+oM0vrdeXj1klfr2A7xu32yvuRxsGhroAG0QBoXZoNS+g+joRt7+w1vYB69V7TxXr5RjQH04R7ShSzYvloOVEBEZd66I74FTtRIYtpY5+fIb3hEGeqsrs0uJYCsKQBboa/yd8EwHyGTgqp4JQiXSlz90yRyWPoLqmMXIzUq4UfiblpwpOFZY1Xc4fds8nvIqJGZ/nRcT/gFiimH3yxy+d8rB80Fj7GIWrWMXyTfg6Ig/WZ4fvLWxKls8vPwka4B8tqkscN0i2ZC9hj9rfkpPkjnd4s0VvnW3GOteemyr2Bsi/kOeMzY2UWKl+eghhmLgosAF6l2kNr45SKqNED6O5Ae/hdxYOR+jyg/In7/LfTm0fT6BRaTTdaLrTt X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70c98a9b-a6df-4fc0-c0fa-08d892e31f33 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:45.3135 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bEsq1JX1vgrxrB91O76glpePHxq1mjsKSpmDYCSEduxioCrz4NqchNrePgt0vIegNgGuC1G20PmHleuFHmrXp/9VPFPp0Wy9j14SqKT5QK4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add additional check that node parents do not interfere with each other. This should not hurt existing callers and allows in further patch use bdrv_refresh_perms() to update a subtree of changed BdrvChild (check that change is correct). New check will substitute bdrv_check_update_perm() in following permissions refactoring, so keep error messages the same to avoid unit test result changes. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/block.c b/block.c index 29082c6d47..a756f3e8ad 100644 --- a/block.c +++ b/block.c @@ -1966,6 +1966,57 @@ bool bdrv_is_writable(BlockDriverState *bs) return bdrv_is_writable_after_reopen(bs, NULL); } +static char *bdrv_child_user_desc(BdrvChild *c) +{ + if (c->klass->get_parent_desc) { + return c->klass->get_parent_desc(c); + } + + return g_strdup("another user"); +} + +static bool bdrv_a_allow_b(BdrvChild *a, BdrvChild *b, Error **errp) +{ + g_autofree char *user = NULL; + g_autofree char *perm_names = NULL; + + if ((b->perm & a->shared_perm) == b->perm) { + return true; + } + + perm_names = bdrv_perm_names(b->perm & ~a->shared_perm); + user = bdrv_child_user_desc(a); + error_setg(errp, "Conflicts with use by %s as '%s', which does not " + "allow '%s' on %s", + user, a->name, perm_names, bdrv_get_node_name(b->bs)); + + return false; +} + +static bool bdrv_check_parents_compliance(BlockDriverState *bs, Error **errp) +{ + BdrvChild *a, *b; + + /* + * During the loop we'll look at each pair twice. That's correct is + * bdrv_a_allow_b() is asymmetric and we should check each pair in both + * directions. + */ + QLIST_FOREACH(a, &bs->parents, next_parent) { + QLIST_FOREACH(b, &bs->parents, next_parent) { + if (a == b) { + continue; + } + + if (!bdrv_a_allow_b(a, b, errp)) { + return false; + } + } + } + + return true; +} + static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs, BdrvChild *c, BdrvChildRole role, BlockReopenQueue *reopen_queue, @@ -2143,15 +2194,6 @@ void bdrv_get_cumulative_perm(BlockDriverState *bs, uint64_t *perm, *shared_perm = cumulative_shared_perms; } -static char *bdrv_child_user_desc(BdrvChild *c) -{ - if (c->klass->get_parent_desc) { - return c->klass->get_parent_desc(c); - } - - return g_strdup("another user"); -} - char *bdrv_perm_names(uint64_t perm) { struct perm_name { @@ -2295,6 +2337,9 @@ static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) int ret; uint64_t perm, shared_perm; + if (!bdrv_check_parents_compliance(bs, errp)) { + return -EPERM; + } bdrv_get_cumulative_perm(bs, &perm, &shared_perm); ret = bdrv_check_perm(bs, NULL, perm, shared_perm, NULL, errp); if (ret < 0) { From patchwork Fri Nov 27 14:44:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936493 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D22DC2D0E4 for ; Fri, 27 Nov 2020 14:54:10 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A1B4C21D81 for ; Fri, 27 Nov 2020 14:54:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="VM6jA+0n" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A1B4C21D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:33386 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif8S-0002L7-7W for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:54:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0v-0001Ah-Nr; Fri, 27 Nov 2020 09:46:23 -0500 Received: from mail-eopbgr60102.outbound.protection.outlook.com ([40.107.6.102]:38277 helo=EUR04-DB3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0p-0003GS-QO; Fri, 27 Nov 2020 09:46:21 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WYjYVsTFyznBmV/A1wG+2bm8r/rMarEbGLi6KtwJPIrxve8QIha/6ntIY8wUWXkiFFMWrNt+D6QzMSe6X98Qz/8hYn2eZZg7e1bDZkkPZYJtWE+KkIolA6L/End6vWzptYKINXU0ZJSCTH9P+LcXdLcjvOtgeLXNHbqZJ5d/YAHJ/1iWLdxGbxwPOOzEzP0ysJHKDgiNTicgccX7ccOotmo7oz8PJLA0FcLALcc8EWVgffY0FAvaciRRxNArO1zKfeVGFElhcX8yTpUwus0yGoES+sWW1G68ou6A8KEMFevTtRoZBz5hGavScniTpJtzTO8UI0QOVD2MAP/2XaAqig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TRaLISq4+K96L4eEq5fMQ8fSA/aWtn18cioyQDXsZBc=; b=KIgsKmucH8zYVBqDEzgysWS2DIBkI+rUV3DHgmGWMVpq/tHFhhQQWY0c7w4XBCXMgABk5fmXmgD5GTw9O6uutrhVvHG6UH0+RR/zIIjsoSt0fqpT6OuUs+jr7TAoaa3FgICI4Y2vMaHb9mnBIAJIh9zzzd27DK7fN1Iy2BML31TIfTUp847TCWQQBBikreRnha2jVruJsaDLG2WHApbFpz3kLLl1M5Mkzy8kMh9js8fOhIUOBb4x6iTaef64eLcbr9H2laFfH+Mhyfd0qY3ah6FyEhoiI5sAw5L3vG6VytSl4uJ0hMReek7Q48ghFzxT2z2K1Sw2wgJz9XgCQQRWXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TRaLISq4+K96L4eEq5fMQ8fSA/aWtn18cioyQDXsZBc=; b=VM6jA+0nVdiOoL+dhRbL5lmh0RWlfiD1EiWTiYCgt2Izn6ccmWjU9QA7VyF2KvHCn8bSO9t46n3oynF9Guvjby9u3w4uEFzVch/eKwERlkNfoKo+IY8PqNywI6hedPbYoDyPn4Lz00b+Hoo2JD1wH2s01tvwhCTb7iKvEOXNe10= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:05 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:05 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 12/36] block: refactor bdrv_child* permission functions Date: Fri, 27 Nov 2020 17:44:58 +0300 Message-Id: <20201127144522.29991-13-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:45 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f6704566-68a5-4ce1-d8e8-08d892e31fa5 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1ynAPulk0yVbxFaOQdmOjQwHaY24CW/mLYDi4K5GOiea4Ln1lK4PnYE1awDvXKOCNYeBwjUOpV2vqRFJ0KDpqoq3MRp3uPELn9+/3STpEBfveu/jkU9MBOqeksVlJRmE7O4aCqyCcGzIMT5ysSmUF/MXaP/vZPV4pqQed0r249rEL/0x6Np1PiiEc+JlfXls5zVRFbHg9xmpH0DbeBXrviXVco3bhWQSRl1kKHJwVuuV5eLCRnJc2QxlEJZythyHmcIhgVTc0OOtxguInVGvCRuGdPmCuQPsqir/M5Lq0n7d6QsJ22LoJk+si9IhBKsFfDLbGXt6vcQDRLxvGlwFkPucTEhyH5moJhlv6XMBTkmhtO2Qd9RK9RasaTCa+KGQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: oWGZwEhM4TtdumkJq9n//FStQfOJM+sbp3sQ3hk4JlpDxhkVc5RbZYfKPA2o9mrKdph/ntZ68pvKgL/nFBfzaYFqp307NK0cQzQEZdtCVIxCuCSvDUU0mkWXnq1VQwcM7cY1fz40bEO1wVtFzR+U7znq9stE3Tj+0mSuZqCAsJjFagGES4K1mRQFOHjELX1nQxSMsSJlePl+/1xqVcJyngcxH/abN/rLhQ/95PCDYgmAPKd7PFuGV91FC2cGCrNPIROziXXVoVZvigStONzqYUtEK5bXl848UCpR2TtmxTin2VXuXo3bTOkcNJyTu1r9+000Ae+hBB86A53w6ZVBtTXCmqedDT5YiYzaeNy4mp1qWuRfZm09fvlqFbNu7cZ+KS1rSDIryHeqHeEuBQ862QrKPcY/2fSi94Is9Z+ax2UZHLKgmLRrov1Am1bVis6ygx4g844uksuoIAY82uz47bCfSqmRGeii+w5LED8qquvFdRsGYHB6ig/iLy5IggRjdrwY8jmOQ67PRRrcA1PdKsT92vZP+MKUVuoftvcWN+0locNLoPwIlmdtw+5Jnf0Dbij9S/XJAlUhDcZwqPE4HXoSoIczhBF2flBAyN1Cd44GAjrjza5e2LmShCJLAsuzu+BIZzyXOCju/NUbPufQLs/LWqX8B0w6+IqPv/XQCCsr/EHEi5sQVIkQOSGK6/h7HvVqDsViVPv5nsN2FIkdqTrP2e6RAdxL5MfcjPaVyXmyOLtLFJ2tOrUKh3Epqidum0nj7CEg2FJGGRA4cDVoohusn5CThT9q1UDTfHMZAoHXmJEUZbYlp2X/btXU0IziJkaUtsw5KSDNJSxWkvxOKb9D+28W9rb3mM4W4b2Etu6AFd4sEnJ65GrRUBpV+oAUzR7e9dlBTgUhycMR1PDtglJmTKKIIGOjafn5BVjVFWmx97MA4in2yGmEoIMwjMNhaOOpbwkR1PpxTmcvzt2T1Rj/VWwNa361oQTivTnYcSDUg2NMoMb+U8IYzlK2i6Hu X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6704566-68a5-4ce1-d8e8-08d892e31fa5 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:46.0642 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sCleZ5WbUZwYPxZa75AMURvi6hP9jQ3h8nSbAfvrSLNUZda13dwDhj798YzlVExn/0pL7nIa8P1PetIydT1Bm1swsiSyynb9yqljfFbdldI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.6.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Split out non-recursive parts, and refactor as block graph transaction action. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 79 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 20 deletions(-) diff --git a/block.c b/block.c index a756f3e8ad..7267b4a3e9 100644 --- a/block.c +++ b/block.c @@ -48,6 +48,7 @@ #include "qemu/timer.h" #include "qemu/cutils.h" #include "qemu/id.h" +#include "qemu/transactions.h" #include "block/coroutines.h" #ifdef CONFIG_BSD @@ -2033,6 +2034,61 @@ static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs, } } +static void bdrv_child_set_perm_commit(void *opaque) +{ + BdrvChild *c = opaque; + + c->has_backup_perm = false; +} + +static void bdrv_child_set_perm_abort(void *opaque) +{ + BdrvChild *c = opaque; + /* + * We may have child->has_backup_perm unset at this point, as in case of + * _check_ stage of permission update failure we may _check_ not the whole + * subtree. Still, _abort_ is called on the whole subtree anyway. + */ + if (c->has_backup_perm) { + c->perm = c->backup_perm; + c->shared_perm = c->backup_shared_perm; + c->has_backup_perm = false; + } +} + +static TransactionActionDrv bdrv_child_set_pem_drv = { + .abort = bdrv_child_set_perm_abort, + .commit = bdrv_child_set_perm_commit, +}; + +/* + * With tran=NULL needs to be followed by direct call to either + * bdrv_child_set_perm_commit() or bdrv_child_set_perm_abort(). + * + * With non-NUll tran needs to be followed by tran_abort() or tran_commit() + * instead. + */ +static void bdrv_child_set_perm_safe(BdrvChild *c, uint64_t perm, + uint64_t shared, GSList **tran) +{ + if (!c->has_backup_perm) { + c->has_backup_perm = true; + c->backup_perm = c->perm; + c->backup_shared_perm = c->shared_perm; + } + /* + * Note: it's OK if c->has_backup_perm was already set, as we can find the + * same c twice during check_perm procedure + */ + + c->perm = perm; + c->shared_perm = shared; + + if (tran) { + tran_prepend(tran, &bdrv_child_set_pem_drv, c); + } +} + /* * Check whether permissions on this node can be changed in a way that * @cumulative_perms and @cumulative_shared_perms are the new cumulative @@ -2298,37 +2354,20 @@ static int bdrv_child_check_perm(BdrvChild *c, BlockReopenQueue *q, return ret; } - if (!c->has_backup_perm) { - c->has_backup_perm = true; - c->backup_perm = c->perm; - c->backup_shared_perm = c->shared_perm; - } - /* - * Note: it's OK if c->has_backup_perm was already set, as we can find the - * same child twice during check_perm procedure - */ - - c->perm = perm; - c->shared_perm = shared; + bdrv_child_set_perm_safe(c, perm, shared, NULL); return 0; } static void bdrv_child_set_perm(BdrvChild *c) { - c->has_backup_perm = false; - + bdrv_child_set_perm_commit(c); bdrv_set_perm(c->bs); } static void bdrv_child_abort_perm_update(BdrvChild *c) { - if (c->has_backup_perm) { - c->perm = c->backup_perm; - c->shared_perm = c->backup_shared_perm; - c->has_backup_perm = false; - } - + bdrv_child_set_perm_abort(c); bdrv_abort_perm_update(c->bs); } From patchwork Fri Nov 27 14:44:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936485 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5358DC63798 for ; Fri, 27 Nov 2020 14:51:18 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EF1F920B1F for ; Fri, 27 Nov 2020 14:51:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Gzve1X6e" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EF1F920B1F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:52052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif5h-0006uY-0u for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:51:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36710) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0x-0001B3-Bv; Fri, 27 Nov 2020 09:46:23 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0q-0003Ef-7K; Fri, 27 Nov 2020 09:46:23 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mJgMSB4w7L0KnnVEYv9uBebV8MuPp1PRG+7KrFRwBcaanTESUPU5QhHuUpYYAPEclmDhYb+QMRwmFYu5wNetd+KmVFdhHi/sJaCp48Z9WCSPwvvzh2ini8qzzHTZtR7EiLuWSTMaa4f9Dd6gUJ4m6tlkUvW6w5ABhyizIYr8iL9h/+nibEtBXzfR6pUsFyQWSqXLc30gnjciek46cIjh0xCIPA+hf2l9QFaWRRzenRkQmnZRvzUx6c+3G5Ql9ZuGkgoHtgfQ4hC19CSmiKO07A1Wy2eqH31A7LSNgqKivCIL21be9c2pxY7iB2m70qeOOOSFJAAMTE5y6kBi1H55nQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uIS8cwgBONL4tI4036tCYRJxD4MF4VPh7HKMzjOLboo=; b=MCbCHeyosAVs8FiGzfcAAQrkAh0hsPa+t9ujgNFVV9wH11ipbcuwHnW9hC3vDdmGvnTKYxEcZIrJn10sUS0dsneeFszl0QZlRYb1zFN/6LZXpyzY9yb7rNWZEMsaFnLdXEEoy1Ia3QVotG7BaIt44XjcFF2fX6+8/DNbM/FIYmRsGBloPeZiOO1mqbQ6DvIuQ0WbsSg4Wz+xAflYB03UWgOWPu+UtDBmnw85rHfIQ1SCKWHulalJofrJQDVHGBaZ4r9jxWsxBTX2ykh7iFA6N9+VHxjXpkoO3AbwV/g9nBuciUY/zNkjCA1Rf4D1AHZzqXaHFveUFMZq30n+cOU45A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uIS8cwgBONL4tI4036tCYRJxD4MF4VPh7HKMzjOLboo=; b=Gzve1X6eH+mu3qDn4uhRhxMNFqMjViwPcHB2E3CptPo6z/vEY5hGJcGYtlg+EH2BWrDeSAIl2kxQI5YL4tv1ej6SD1d76gZa5Vn8xKZJYia3aGgjOoUHFZe0ZekLohUcqtwq+cXDY9tohy4PfNGFMaKAGo/mwTusjomSfdNpY1g= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:05 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:05 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 13/36] block: rewrite bdrv_child_try_set_perm() using bdrv_refresh_perms() Date: Fri, 27 Nov 2020 17:44:59 +0300 Message-Id: <20201127144522.29991-14-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:46 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1223cb31-5827-4cdf-75bd-08d892e32019 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:243; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cu4Te7kaE5Ps9uqS+g9IPisZmEc/hK7cgnnQ0p3Ae3oqI+VCOqgD5j99c1ztfJh2ITrwUGN1ocdjDBtTU5C5kRJ/FPp/mxTRAouIPZORZtjdZ6vGZ2JIYgQR34DZ43nEQ76qWDXzcvvBcYxC3qy+DUVod7gRMf/+snsBXmPabiFcKtf/BQ8O+BGsVtveczTYJblWToM7XKzHnrNFx5HrRkfWRsJnuBMl6EgxaZ7N8jL2Hbx9dDk5xQ4iKtRlbqDdKSGnztEB9pYIcLkJEPqZBx7Ziiej8/no6eOZZPwm9qemrIPzGkv0esR4qKdHKVukauKhHEzbISVScNXoBrg20JYVulmGvRCK1mP6x54lKu1kEjbAs1O73HOSxnZWSNLz X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: U8LP5iE603wSih+cS1PVJYRG1KLhcApSj7QIaMHJQXNjQLGGIm7Z7fOzFs0mqgo+nWO1dOPHypSmcxczvL6hKyMf9z5FXRdG2pjgDV6wDEz8ANI0XrH5A7g8vatOXCvZ7tA+CwB0hLUd8uugy3rJdm/fROKQCfjatIDZv5fCxNrgFMqlOMS0B1Z0dn9rJVpxMGFI5XQWQFE+Ol7ip0nFQeyPOg0fLQv+fiEgIOhDvyP0aWGens1RR2qtWaj5KCc4NzmuWyDTDvkDYYTk5NYPxflhbzCj+tDwNm4Bx9exehiW4P73BBReh6rvMFzc/vVtZhseHinPeO/sEiUVuoJiOVQ4+AzSIObyN2YCOM1aNRtp4AlW2zAogsm4OFJe4GzqtbTZy9hNxSG7VwulIlj31+4nK6iiabVD7LBL97443ncgKUCrCZBIz/ac5dNx/jOWmVMeJi9cQhFXTg/B7/3i/aAtvJsFcgcVcgbIsUMtVN+cNcwGXAnDSx7k1vaW2o6AgeBj4EV9Woay5EZkHKAZPlyBtpEREquGyBndgpfeNBSFSCb+raNV/Ldh7X12ScwBNBQBE+7Ci+IsonQtTyMJ0NsoXPOcAwM5WM86hzKbMhrmtajcy/qRXJPX4yOh0Ev0rQEsokb7xd69ZFtAqC44Co1iQ2MLivoqP66CEMrz3gNS/n2hRTvq7qiIeRqrPgQcRs7kH1d79umxSHhmBCLSpCVVlRTC/4OdTOwYxB4zjQm8Boh//bO7cyX6+wt6HgvjQBfiN4fddJOQxo15AHrDiDEdlImglEvs6OKoqhPJXIFH60ePlniTGu3CuJD9x1yoaWoC/J3xhVtCXDpSbQuikCr6ew1LKB973/aJbhFiY+IhOfx9W0BF6QsQse88shA6Vw57kk+ND23LVJQXVUTxYMNrPCffInUibc+ikhQWi1khy/dcszBgK2PYjOuJCUtQEioqqRBSmTNd0pBdj7XhPQZKqcTYtM1GTBDZFxhAr5ffsUruMeOIENgMh1Q7UnoN X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1223cb31-5827-4cdf-75bd-08d892e32019 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:46.8209 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: q5XhVUz+XqFFrezX+mt+lk7GM3f/GsNUTdsaqhKCDJfC2KdqAfBXakvYR1lNffAD2UmD1tOQ6mQyxzoxhiDUBMlOeIDFfyvK56thfTEJIe4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We are going to drop recursive bdrv_child_* functions, so stop use them in bdrv_child_try_set_perm() as a first step. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/block.c b/block.c index 7267b4a3e9..82786ebe1f 100644 --- a/block.c +++ b/block.c @@ -2394,11 +2394,16 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared, Error **errp) { Error *local_err = NULL; + GSList *tran = NULL; int ret; - ret = bdrv_child_check_perm(c, NULL, perm, shared, NULL, &local_err); + bdrv_child_set_perm_safe(c, perm, shared, &tran); + + ret = bdrv_refresh_perms(c->bs, &local_err); + + tran_finalize(tran, ret); + if (ret < 0) { - bdrv_child_abort_perm_update(c); if ((perm & ~c->perm) || (c->shared_perm & ~shared)) { /* tighten permissions */ error_propagate(errp, local_err); @@ -2412,12 +2417,9 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared, error_free(local_err); ret = 0; } - return ret; } - bdrv_child_set_perm(c); - - return 0; + return ret; } int bdrv_child_refresh_perms(BlockDriverState *bs, BdrvChild *c, Error **errp) From patchwork Fri Nov 27 14:45:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936511 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 242FDC63798 for ; Fri, 27 Nov 2020 14:57:04 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 68DE5221EB for ; Fri, 27 Nov 2020 14:57:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="dbddukpt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 68DE5221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:41826 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifBG-0005s6-Cz for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:57:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36714) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0x-0001Bv-Si; Fri, 27 Nov 2020 09:46:25 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0u-0003DS-5m; Fri, 27 Nov 2020 09:46:23 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QBuQimanSLYibCDJuCaD6dX1blXXFlqWW/vL5VUY8PQ0iDBey+yq/VKUVz4Mefn8urUj3kXeHPhM1bzfb1HzKsH5g41HX8PmSlrRvwkb9IIOzva+h9nO+Tc0ruMiGwKYne0kZN19Hq5ao4WyEgX8HUID7pb3SkppLIYKu/Pv/q48Ttmo2Hq+RT8ZQqBOpnm/Sf+Fdyktc+aOiWL6W/DuO/BFQw0twBD7OrC/4BfVsYuH4UHqBXbOkvULYih/TaBxkD/plHgjKeJAt9ix8oM8aYogBhndgiMr3jEfp/POVcrnMR9xumc38jPCJGSyrwN4jSyXSgz474ynkR3RPAyWqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=heqiku75SA07ndjxJXFWuYz4E46lMrqwqr2xAKf5j3c=; b=RA4i1BT0QHHbY6tYN2BRKaIvOOGavujFGF3r9NMtfeCGMayaSwQDoSEgXbVj+2nSjUC6S+3LmBYIPWps1IxXlDzwZy98bia2AOciEhu4mQdFwtngg/rcHrheDYB30LFg/X9Itud+ahRTfCs5o8ocJs9QHbhoqPRCU5Qa/2jCT5goLyihnE+cjO8w16gLsUD76w9P4rp60NNCcZQpc+DaX4LGWXVv/jaEFR5VuyffN1afcqyrpMhrybuEM+ujyD/rywT4onedSfW9KfZDkxW48IIaKsvhjCqoeF1DSfxVi4uAVYP6X8s80GeJgM7PrnANZUQJumJxNn4MKNELQ5pU5Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=heqiku75SA07ndjxJXFWuYz4E46lMrqwqr2xAKf5j3c=; b=dbddukptJ5HkCL2UOhqxOElHaMO2VPfJVyOkzMp2RAq3n9kb7TiKfRpyuMSoEJK6T1pZV0nKdUrhI9scu+Wzf5AgDYYkCS+KmA1eZrJYBabfH3JhFC7y9SAqIAk+5fusgDZipfJSZuId66BlThRdsqIrGaIP+XIhuQ8HYAORl9I= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:06 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:06 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 14/36] block: inline bdrv_child_*() permission functions calls Date: Fri, 27 Nov 2020 17:45:00 +0300 Message-Id: <20201127144522.29991-15-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:46 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a6d8ed4-6007-4b3d-fbf1-08d892e3208d X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:45; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: h1vm/6TkDgy8UJ89EfXqvFxcOYqFxCUAxA0y7LZ7YJtD4hPCa5i9e5JJZLBR4Irvcgrej2xAfO+e2iiF8uy8I+GvlUf4nkKhvCpUuqEQJA3nxcymxn2r4Yza5l0PgXeNdc4pUvZpfVD9FidzDBnV1H7p1cgGgjyk/xQ03xEK+p+3zQU7AQh+IFqeP33puIYWEpO2WwmvcGNj3qRPoFauxpecnAUhcpb2XtezryAGzvhYLjSJrJpoeDL1Yk0KfhsESPSq4PCJk4remvdhp8iLpAfJPTiEPSriMple020h1VuCag3SmJiH07si/tv+Xl5Jju6r9RoVlzTxAwitsNS4ovtG0f/kVkG5xzJCvd1flvS6QMIzhi59c3+c4Lyf1Bv6 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: GkFlecHRpvwYVFcSXXgv+cuVhHziyrVkaVYQPxvweIZ6SmpjeCG47+ASQ+tYaPc6DrZBqmNpuU3CxCiuW2CnlGmTW0pU/2+8mrkqoDaKWmJSwXZ/X/6A4iq2WiAKLedkF49UwRAHus01H9JAN6zgybXB/4vIGonfobJ+LYi5O12TjsR62fUwtEyQD5ctP/dISIwgqa/n2fNAkCrEfnz9wxC4OkMi8YlFDpd67W0HsXflqiEDEOfRcUJEgdS+kbF5Yv8ID/kmNZ9XlmQscbnt/G/Bu0IejTH+ojoskqSWigRl/diyrCKqfp2bWGZ47DKCus27SRGpc1xp+PsoruRCgLyHhGOxr6q1sZtFIVFQ8k0jVsrFMTzwaoE207Mu69CXkhdwF2hiJWz6KKUf6gof/vaO5Fb5Q6ArQgq4Vu3dYye6sqj2cIQeyVJCckW1PF6sPXD+o9uk/DX7g26COmY2PEV09175bKBIGzBU4rd14ypXIwaXv2XyobFwkqztefughF7XFTW7aCpAa8iEpO+aPU+XBa7GZhOtSdiBetQ22IIRI8wByfqmI5yFiqbU7rWgv58YC0RCyx0WXNVURHO/NUs6D00cpYCujygQ8xg1XwDQl3CPRMFv3oURJd7iyXukfQOFz+JVR7X7kTQQvl9cJr98DrlsEOHmFGaGDuKw8WDAIJT9E2yVImkibqvDEnhrLt67bFDDPmMw6umQJief22H1O5p5lDm6zrkoPJITDVXrDQaK9gv5kZ5maQz6vMdzRgN0QEMzooGMgWHCnKM4Dx5JyMxu8CPjNsqGxlsjb/9yT5oylOe3HjWYd4rwsR6Cw6pHvmCcpgu04BKVwdTOeYeR8mlaBRsPnrOyDMg2Gv8x5zL3HUTq9/S79I7bfMeO2TbqdxcuskyI2ytX7qfTGUgFHUj52Znh0ooZvZt9dQyHsM05TN0yvdH48qTu1BQjk0YbkC72Anv4b0LSTz3oFk1d8PJ4jU19OGTWLFjh1wL/dabcF318zKbNC44TL5iT X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a6d8ed4-6007-4b3d-fbf1-08d892e3208d X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:47.5915 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: c8nvzr+v/P1XDX/yYNwlK2r39AuoJzrnissWswuUI9AbL8voriejF4Tu2sokcXqpdXiSb9grJLi89878Y+yfDpu4wSO648c1bxmZriz0Lu0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Each of them has only one caller. Open-coding simplifies further pemission-update system changes. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Alberto Garcia --- block.c | 59 +++++++++++++++++---------------------------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/block.c b/block.c index 82786ebe1f..92bfcbedc9 100644 --- a/block.c +++ b/block.c @@ -1914,11 +1914,11 @@ static int bdrv_fill_options(QDict **options, const char *filename, return 0; } -static int bdrv_child_check_perm(BdrvChild *c, BlockReopenQueue *q, - uint64_t perm, uint64_t shared, - GSList *ignore_children, Error **errp); -static void bdrv_child_abort_perm_update(BdrvChild *c); -static void bdrv_child_set_perm(BdrvChild *c); +static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, + uint64_t new_used_perm, + uint64_t new_shared_perm, + GSList *ignore_children, + Error **errp); typedef struct BlockReopenQueueEntry { bool prepared; @@ -2166,15 +2166,21 @@ static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, /* Check all children */ QLIST_FOREACH(c, &bs->children, next) { uint64_t cur_perm, cur_shared; + GSList *cur_ignore_children; bdrv_child_perm(bs, c->bs, c, c->role, q, cumulative_perms, cumulative_shared_perms, &cur_perm, &cur_shared); - ret = bdrv_child_check_perm(c, q, cur_perm, cur_shared, ignore_children, - errp); + + cur_ignore_children = g_slist_prepend(g_slist_copy(ignore_children), c); + ret = bdrv_check_update_perm(c->bs, q, cur_perm, cur_shared, + cur_ignore_children, errp); + g_slist_free(cur_ignore_children); if (ret < 0) { return ret; } + + bdrv_child_set_perm_safe(c, cur_perm, cur_shared, NULL); } return 0; @@ -2201,7 +2207,8 @@ static void bdrv_abort_perm_update(BlockDriverState *bs) } QLIST_FOREACH(c, &bs->children, next) { - bdrv_child_abort_perm_update(c); + bdrv_child_set_perm_abort(c); + bdrv_abort_perm_update(c->bs); } } @@ -2230,7 +2237,8 @@ static void bdrv_set_perm(BlockDriverState *bs) /* Update all children */ QLIST_FOREACH(c, &bs->children, next) { - bdrv_child_set_perm(c); + bdrv_child_set_perm_commit(c); + bdrv_set_perm(c->bs); } } @@ -2338,39 +2346,6 @@ static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, ignore_children, errp); } -/* Needs to be followed by a call to either bdrv_child_set_perm() or - * bdrv_child_abort_perm_update(). */ -static int bdrv_child_check_perm(BdrvChild *c, BlockReopenQueue *q, - uint64_t perm, uint64_t shared, - GSList *ignore_children, Error **errp) -{ - int ret; - - ignore_children = g_slist_prepend(g_slist_copy(ignore_children), c); - ret = bdrv_check_update_perm(c->bs, q, perm, shared, ignore_children, errp); - g_slist_free(ignore_children); - - if (ret < 0) { - return ret; - } - - bdrv_child_set_perm_safe(c, perm, shared, NULL); - - return 0; -} - -static void bdrv_child_set_perm(BdrvChild *c) -{ - bdrv_child_set_perm_commit(c); - bdrv_set_perm(c->bs); -} - -static void bdrv_child_abort_perm_update(BdrvChild *c) -{ - bdrv_child_set_perm_abort(c); - bdrv_abort_perm_update(c->bs); -} - static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) { int ret; From patchwork Fri Nov 27 14:45:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936513 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FB73C2D0E4 for ; Fri, 27 Nov 2020 14:57:21 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CF7082223F for ; Fri, 27 Nov 2020 14:57:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="h70qum+K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CF7082223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:43524 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifBX-0006bZ-Qn for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:57:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif10-0001DF-5b; Fri, 27 Nov 2020 09:46:28 -0500 Received: from mail-am6eur05on2121.outbound.protection.outlook.com ([40.107.22.121]:11777 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0u-0003Hm-9Q; Fri, 27 Nov 2020 09:46:25 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FGEO/PaciF/FMhh4K0mClHIz2f8qDANUrm3oqU9hYmihfC3L6RnSOXWHolNXGKWBfId+SJr06z2o1bpo0mVdnhVpMlPEfAQSJTHJpDaD5JMl7QsXXdTyMMOVYZO+BRDxiiIh6Z1vXlSH0J0K1IyoquSa+AahX7uZNdXkyZp9ag2IpPEn08eIm9eYrOF0h8aAw9J8aWXrCEPf4/7W1Xw0cWOUjqHlS5OdhqT2dKJbY3B+qsBfNTOkl2NwOyYL+RIN3aLh3NNZs7zDsNW+YGTiO6vEPcAtKyU6roCUwWt6glvEqg+WxDsF3p8KG731DH9TFvY1KbBnjQv0ktlLDh7wNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tbpsSlq/vuvTGTEEl3QYSt5yHpOFzKwnxsdJQypCbAI=; b=c32Sihu+5vZyC9ykAUMFgTQI3zfgbPLfXJdvf9JnlSqZCCf+WlYyvEPu7baqngglLyTIVhh/P+lT08GfDdIwj9SSDv6ElAeJYf1DhViejh9a2kZYhnxodW2/r/NqHI87eqE5OyUmxeK9AO5KkCdQOTh8JaPOh1NJMAgCPsNYLpO7RBBoDGRV4+wAI2p0eFgufq2VAfaBCImuCqe5Yg0IBCDOKrkIlHd5kQaXVyF1rlu4k4K9bv7+vWRk1KoAdoeBWIzmq2fc6qo9DM4KP/vwmyFFkYzPKAYAabDEygcDe0zSoSthSeRU+0hbFbVDo+zEH9D5jjQS7sLqr4hpis8aIw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tbpsSlq/vuvTGTEEl3QYSt5yHpOFzKwnxsdJQypCbAI=; b=h70qum+KGQAureBEkq/n8xvVYq501KMXA1UmnA8EM1OU37ERT2MzhLMpAjgI/a3vxRLj3BfHAhYP80hS4J82RCyxrT0dGMxwSR5xlyKgRHgFbj9ZftUNZ2rx8zgjPmQRWMpik0BlxtRLw1hYsqPcneX149cVPLj+6HADuVwBpww= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:06 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:06 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 15/36] block: use topological sort for permission update Date: Fri, 27 Nov 2020 17:45:01 +0300 Message-Id: <20201127144522.29991-16-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:47 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5b406005-845b-40f7-9262-08d892e32103 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4714; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Cu9GiE4dFDE3oRn08gsL9HfsBEjeHrvK7zxMk2FCbCdTLq4fjkucLFhdi9BK3x3OdhFDKQS2MQzfpm29v4tKiE7fl611S2W1IeuneqjAHlkc2D3TJL39ohKxdVklkKLKNMMVVycEXjo5449e/KLl4o4sIV1dMmMrX+msbtAsziPZdKPK91DIJqDlz/CLCjh2znyRg4TTULnWzeAg1LgaY9ghqbzx2Nu4+MMNre0M74qsGr7dbcpCv1ao+O/sflK2ZUCQ1IWaxw2GVHTLT64FuatHK3OH7YhLwD3Z1jG5ODFJmGRGX2EXbHLAT24IouWJeIkalMwe9FX52UqjfGEvf0rZuxhJHnyYKpHTB9z9hjd8xeA4LO4wzY4uYqTE5SK+ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(15650500001)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 3WIb7PUWMGalyUq6kGtXzcTPuHwyrtTdxyhUGPmPoPjXxPMFEfH5iAQlxmu+aq85RNEZIiSORUea6W6duT8DlCu4mqF0wEhZsgDZIZatSIBOchpu8OxnS65Kbrvx03Kip7QUVcC6vudy4aCZyaA4AKeFjSpN187d9725OrwmF79TAXz2aYiMjpKUkCh9c3o/RWvC6NPOQnaCT89Oh5Az3dCPsBeLsMtT0u0rXZWX3ymnee00ECVUmJsQONkJLqOVr7K2o6draQUhKd4/iXgv2VHW5wkYNmfcBOszGDsvKutCuzw/HGkIKBoHL4Gc2gs78cVZuJ401VWT4nrHLwoQLDunhOhtTJkGuB5zERT1S55srvh37H9ne8/8eMW2ZvjFd87XULkBsy21s6LEjnIgXK+HLWaWtU7gZiTJS+LVStszBJqKnaWs6esyPQjQFDpHAhVxnC/a1OMA4CpTXt9QyIte8iKlP8s9RVyEVQF45GAjUgVJjxrc8m1IPm48ktTYhAPQ+3JX38YHRfV+u2vXWK4kTgw9+5nSY/IgGKIy1ZX2skfw1ctK4P4/tQzbDMUOXtPvh87TNXFRQjiLgRY0Uc/Eodv+CeMWb0PCQT8ldYQ+5RaJXlwsViOGwY+Fp1xP0N94cWqkknYlF9HKDM06uerpKfnsOXmv2Aji8o6L/bih6XwY8BNW/7xCGyDvpFy7sHNefIMQ9aVE6D0724awfQIv9wzXZ10VmwM1xJuJEAqRxnvZ4BYO4C8BmsyOv6XifcCWbqDJ9ttEF9Zl9eDWUx50ToNOi/zXSW75yUX0KGoEne5tZmTpdw4UciU62o732bqA8ZlGmfVDn/DXi72QmiF/gwvAKWq15HM5l5xgHXgkIkq8ZpgDsezaXizkZYQjBrD74oIVlM65WnV7EaZcIr69A3DLGowWEO+DLTt+91e6I8Mk02+LodGPtrXtuNLlqftMUUUmtYqDCKEkGK9ta/VBbWtbnCBp6PMzywf2Ts2rXslvZYxdgktRvjN8S7jV X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b406005-845b-40f7-9262-08d892e32103 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:48.4368 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wamZWVTTDPb6sVYr3gq8Y7dHD3svrRrshLlgN2WVauak5EDaWH0PIOCeEOfchFZvw/pD5IJmEijvuuiCClOxGKWwPy3eThKL2/roBPeNjpY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.121; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Rewrite bdrv_check_perm(), bdrv_abort_perm_update() and bdrv_set_perm() to update nodes in topological sort order instead of simple DFS. With topologically sorted nodes, we update a node only when all its parents already updated. With DFS it's not so. Consider the following example: A -+ | | | v | B | | v | C<-+ A is parent for B and C, B is parent for C. Obviously, to update permissions, we should go in order A B C, so, when we update C, all parent permissions already updated. But with current approach (simple recursion) we can update in sequence A C B C (C is updated twice). On first update of C, we consider old B permissions, so doing wrong thing. If it succeed, all is OK, on second C update we will finish with correct graph. But if the wrong thing failed, we break the whole process for no reason (it's possible that updated B permission will be less strict, but we will never check it). Also new approach gives a way to simultaneously and correctly update several nodes, we just need to run bdrv_topological_dfs() several times to add all nodes and their subtrees into one topologically sorted list (next patch will update bdrv_replace_node() in this manner). Test test_parallel_perm_update() is now passing, so move it out of debugging "if". We also need to support ignore_children in bdrv_check_parents_compliance(). For test 283 order of parents compliance check is changed. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 103 +++++++++++++++++++++++++++++------- tests/test-bdrv-graph-mod.c | 4 +- tests/qemu-iotests/283.out | 2 +- 3 files changed, 86 insertions(+), 23 deletions(-) diff --git a/block.c b/block.c index 92bfcbedc9..81ccf51605 100644 --- a/block.c +++ b/block.c @@ -1994,7 +1994,9 @@ static bool bdrv_a_allow_b(BdrvChild *a, BdrvChild *b, Error **errp) return false; } -static bool bdrv_check_parents_compliance(BlockDriverState *bs, Error **errp) +static bool bdrv_check_parents_compliance(BlockDriverState *bs, + GSList *ignore_children, + Error **errp) { BdrvChild *a, *b; @@ -2005,7 +2007,9 @@ static bool bdrv_check_parents_compliance(BlockDriverState *bs, Error **errp) */ QLIST_FOREACH(a, &bs->parents, next_parent) { QLIST_FOREACH(b, &bs->parents, next_parent) { - if (a == b) { + if (a == b || g_slist_find(ignore_children, a) || + g_slist_find(ignore_children, b)) + { continue; } @@ -2034,6 +2038,29 @@ static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs, } } +static GSList *bdrv_topological_dfs(GSList *list, GHashTable *found, + BlockDriverState *bs) +{ + BdrvChild *child; + g_autoptr(GHashTable) local_found = NULL; + + if (!found) { + assert(!list); + found = local_found = g_hash_table_new(NULL, NULL); + } + + if (g_hash_table_contains(found, bs)) { + return list; + } + g_hash_table_add(found, bs); + + QLIST_FOREACH(child, &bs->children, next) { + list = bdrv_topological_dfs(list, found, child->bs); + } + + return g_slist_prepend(list, bs); +} + static void bdrv_child_set_perm_commit(void *opaque) { BdrvChild *c = opaque; @@ -2098,10 +2125,10 @@ static void bdrv_child_set_perm_safe(BdrvChild *c, uint64_t perm, * A call to this function must always be followed by a call to bdrv_set_perm() * or bdrv_abort_perm_update(). */ -static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, - uint64_t cumulative_perms, - uint64_t cumulative_shared_perms, - GSList *ignore_children, Error **errp) +static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, + uint64_t cumulative_perms, + uint64_t cumulative_shared_perms, + GSList *ignore_children, Error **errp) { BlockDriver *drv = bs->drv; BdrvChild *c; @@ -2166,21 +2193,43 @@ static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, /* Check all children */ QLIST_FOREACH(c, &bs->children, next) { uint64_t cur_perm, cur_shared; - GSList *cur_ignore_children; bdrv_child_perm(bs, c->bs, c, c->role, q, cumulative_perms, cumulative_shared_perms, &cur_perm, &cur_shared); + bdrv_child_set_perm_safe(c, cur_perm, cur_shared, NULL); + } + + return 0; +} + +static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, + uint64_t cumulative_perms, + uint64_t cumulative_shared_perms, + GSList *ignore_children, Error **errp) +{ + int ret; + BlockDriverState *root = bs; + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, root); + + for ( ; list; list = list->next) { + bs = list->data; + + if (bs != root) { + if (!bdrv_check_parents_compliance(bs, ignore_children, errp)) { + return -EINVAL; + } + + bdrv_get_cumulative_perm(bs, &cumulative_perms, + &cumulative_shared_perms); + } - cur_ignore_children = g_slist_prepend(g_slist_copy(ignore_children), c); - ret = bdrv_check_update_perm(c->bs, q, cur_perm, cur_shared, - cur_ignore_children, errp); - g_slist_free(cur_ignore_children); + ret = bdrv_node_check_perm(bs, q, cumulative_perms, + cumulative_shared_perms, + ignore_children, errp); if (ret < 0) { return ret; } - - bdrv_child_set_perm_safe(c, cur_perm, cur_shared, NULL); } return 0; @@ -2190,10 +2239,8 @@ static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, * Notifies drivers that after a previous bdrv_check_perm() call, the * permission update is not performed and any preparations made for it (e.g. * taken file locks) need to be undone. - * - * This function recursively notifies all child nodes. */ -static void bdrv_abort_perm_update(BlockDriverState *bs) +static void bdrv_node_abort_perm_update(BlockDriverState *bs) { BlockDriver *drv = bs->drv; BdrvChild *c; @@ -2208,11 +2255,19 @@ static void bdrv_abort_perm_update(BlockDriverState *bs) QLIST_FOREACH(c, &bs->children, next) { bdrv_child_set_perm_abort(c); - bdrv_abort_perm_update(c->bs); } } -static void bdrv_set_perm(BlockDriverState *bs) +static void bdrv_abort_perm_update(BlockDriverState *bs) +{ + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); + + for ( ; list; list = list->next) { + bdrv_node_abort_perm_update((BlockDriverState *)list->data); + } +} + +static void bdrv_node_set_perm(BlockDriverState *bs) { uint64_t cumulative_perms, cumulative_shared_perms; BlockDriver *drv = bs->drv; @@ -2238,7 +2293,15 @@ static void bdrv_set_perm(BlockDriverState *bs) /* Update all children */ QLIST_FOREACH(c, &bs->children, next) { bdrv_child_set_perm_commit(c); - bdrv_set_perm(c->bs); + } +} + +static void bdrv_set_perm(BlockDriverState *bs) +{ + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); + + for ( ; list; list = list->next) { + bdrv_node_set_perm((BlockDriverState *)list->data); } } @@ -2351,7 +2414,7 @@ static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) int ret; uint64_t perm, shared_perm; - if (!bdrv_check_parents_compliance(bs, errp)) { + if (!bdrv_check_parents_compliance(bs, NULL, errp)) { return -EPERM; } bdrv_get_cumulative_perm(bs, &perm, &shared_perm); diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 74f4a4153b..0d62e05ddb 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -316,12 +316,12 @@ int main(int argc, char *argv[]) g_test_add_func("/bdrv-graph-mod/update-perm-tree", test_update_perm_tree); g_test_add_func("/bdrv-graph-mod/should-update-child", test_should_update_child); + g_test_add_func("/bdrv-graph-mod/parallel-perm-update", + test_parallel_perm_update); if (debug) { g_test_add_func("/bdrv-graph-mod/parallel-exclusive-write", test_parallel_exclusive_write); - g_test_add_func("/bdrv-graph-mod/parallel-perm-update", - test_parallel_perm_update); } return g_test_run(); diff --git a/tests/qemu-iotests/283.out b/tests/qemu-iotests/283.out index d8cff22cc1..fbb7d0f619 100644 --- a/tests/qemu-iotests/283.out +++ b/tests/qemu-iotests/283.out @@ -5,4 +5,4 @@ {"execute": "blockdev-add", "arguments": {"driver": "blkdebug", "image": "base", "node-name": "other", "take-child-perms": ["write"]}} {"return": {}} {"execute": "blockdev-backup", "arguments": {"device": "source", "sync": "full", "target": "target"}} -{"error": {"class": "GenericError", "desc": "Cannot set permissions for backup-top filter: Conflicts with use by other as 'image', which uses 'write' on base"}} +{"error": {"class": "GenericError", "desc": "Cannot set permissions for backup-top filter: Conflicts with use by source as 'image', which does not allow 'write' on base"}} From patchwork Fri Nov 27 14:45:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936517 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7ABF9C63798 for ; Fri, 27 Nov 2020 15:00:04 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 02232221EB for ; Fri, 27 Nov 2020 15:00:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="LHz1rXuh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 02232221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51818 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifEA-0001jj-Lw for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:00:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36800) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif12-0001DV-6P; Fri, 27 Nov 2020 09:46:33 -0500 Received: from mail-eopbgr60102.outbound.protection.outlook.com ([40.107.6.102]:38277 helo=EUR04-DB3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0x-0003GS-IO; Fri, 27 Nov 2020 09:46:27 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H1haa2QcVXtOGwZLaLQJbWmSe+o39OnXhfztnEpX3eUcq/dEmG7uEFnjGM4bX8eba4/mMXseQZ08RGiEtIxilmAySjKpj8fn6RVrjdk22T4i3AC0L6BIEZTmX7FJV2gXC4BPKX30rdfYb3e/ZNrmMjW7pVRnZkF0QVl2CAJ9jVdq3LE4Pq4epyOKZIioopsN7nPXWyVFODPsXRaZLPH8Qawq+SDAKxeiC2jtSDDCpiky13kD4CJiKRBaXeTkU0XCWgCKpPpmzZbFQAJ/PgoMy2Xe51A21c9+E2CkPTmyiqm4cJoFJT4w6F2wIJKt11G4b2YHDFpkP9VipgPI81RU4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=US44vB8xt3a2G4nMinisET1trchEoLVh4ULYPHbN4Fo=; b=dun4w7hX4cez6sxxfGpN6vRBMkHNeY58JoxP2Ip/1cay3CbVMZ4DeIwPuJK5HYqwUmoYeGnyZe7D/HUVdO8I288Otl7G+dUpgXJIqYwX8imDrqBDTQ8wMYxCJ1MvR8MNGgnVy7gvC+O84xfGaGq+t48xu/csPuAwi/Y/EE48oFjJZcsRcX6dZBCdhtFnWkmV2A0QLICJJNTp4DFiMYWRXvVnTVZcGYlDqAGOaNzsuuquf5iLy4W5GncLAMdpjBzBeRTAaF02BWM1m9kp8MYkml4ZdoskFDLVD7AzHGPTN7CzfRL4nJ9dWNIVZduCDR0fXzuWFMcZYGGCoLWVg2uOfA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=US44vB8xt3a2G4nMinisET1trchEoLVh4ULYPHbN4Fo=; b=LHz1rXuhTNwPpWrILSDfB6k0Hkx/w8HKKtRU93/WurPZH0me3RqaOBpENMZYO1qYkJxKIGWZymvNCKkRzxjprmE21ZL0RCvkUcazSikVAJlUP9DcfWhcjtTfUE3IO1DN2L3x35m2EbInxwxZmyhBKAFZnVD7Viu0c9Ac0AVzqh4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:07 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:07 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 16/36] block: add bdrv_drv_set_perm transaction action Date: Fri, 27 Nov 2020 17:45:02 +0300 Message-Id: <20201127144522.29991-17-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:48 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5e0743f2-bc2b-4649-6d34-08d892e32182 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:175; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4DM2Z6GrwKkxrEQvwOSQkhxjaK/Y9zEHwS4Llj+XTzXxtia+16KLxu1+mt184VznEQyItHg1yt3UBWgvXcWhxskHlVt4wdV0FJxqF5dy03F2Sjbp7IYgQja+SYWWtrlGPccTSGjNnXfcBh4CCnzKCOXZyImpkJv5kxJoCdAPnFX0VCk2Up/SCYMeK3yp5Or2l8NsvmAa/8hiR4HAjRyKcSpnugAvZviqSrb3WZ90sUcle4w/ULBTejCGpQMdSf2QXUKkjE4qnalLlZ+6DfqEw/LdIUG0cQmZmMoSU7WdllU4knKhDSPU6eGjZxMjCpyzeML0DDilmWvhFh8/82cYOigpaRoNFJptbEwcG+vqW8r1jY//PsY+VBa5iAMdfiMw X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: R1Tc4De3oHSZkHTxlu/sRxlR5MW+UCRdqQt3AYRY4kTCeNehgeIJuARncctgkxn/CW/QinNPCJFJ3a1tfe5LiXMVunXwc28xorhtHiiRUlspQzmxb3JnItdxUwf7j3smER+QImhM+mAJ1QDoPSXEh+vMx15mzQiH0jtJabPbFl+NB21IhzvjJkt36UZ1aoDpv5hpyjOyQaxmUlnfbwDbSYfTseJgn5ZhsfRwkqpblrAcslC5yaTNoSK1Z6k747IPmAkEm/F8ZiZj6Q+hA22ykUqw6VhbalpG/kCd/uMcS+F/cV25nKFukXWnhL/R3mL5ddDqV2ACHavnHeDoIEjB0aAyhWQxvb/40CHz5QqCTmR2tsZZ+UUQLsKvxJmIWM+5GC4kB27hkDzTuL12In33V4Iw7qQkQTvLKeQv0K7Sc0XK2+2VnrsEe6OysMUdSEGO2CVmqHip5X8Xq8C1590UF49O2oFoyBsChaRmJN2raq6pRWgCpEWgDBHGV+9LwraIM1sHRjoGRF0WdjqTeAjxQZ5INcnECN8C4u7qU0qtgpA6Y9YIUqgN6+qmaePYY+DVetB2DUuLSyLuH4ZkAP39uueXMCo8HdlUWl4t3P1rgUQkZW6F1ZVjXFefioCfbialY4nWIv+Dt8/lY5f+SoMMWd7tkxcSsErjw2sBuV1A0pUligHHnRrY+SqefTpmgrptGIYyVnEmyQRbWd87oREKfH5WcYjHg02HmMWrfXI0QEHYVVVZQqEdYIT5hH9hKqnidpMkvWIeklv+Ej/3bgKWAjq0UZQHF8R3jobsQKk05bAmDix4f4vy4hQwsC9/AHCvCcEIMjKNYToWzcI/OkIH+2aHeVO3VnTQr2wNV9LpFuGZrKT+C7hBqTRDB3UQqg8/x0ClvDa+PmPbB/VXIpUb6svP4S3sfyh94OGO98Vkp/Jb9hI7zaSc0Vbl4MQ1Tk2gLALtF88yvReLw67zGMZ1Y0JcCnSw7CFQOoJTtN2DydHEby4o2xF9zaX+tKbNCZOy X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5e0743f2-bc2b-4649-6d34-08d892e32182 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:49.1995 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: q4nprg2HyLEvwzB7RigxTMXhLPFUIq8PbpweBx5eYJXA6cq4hc07ja1xT4gyGUQRv5VA1XNdav/RaSL4FrVKVXv4qJ8BQX6Ruwn/OJmvN6s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.6.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Refactor calling driver callbacks to a separate transaction action to be used later. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 70 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 16 deletions(-) diff --git a/block.c b/block.c index 81ccf51605..4a43a33401 100644 --- a/block.c +++ b/block.c @@ -2116,6 +2116,54 @@ static void bdrv_child_set_perm_safe(BdrvChild *c, uint64_t perm, } } +static void bdrv_drv_set_perm_commit(void *opaque) +{ + BlockDriverState *bs = opaque; + uint64_t cumulative_perms, cumulative_shared_perms; + + if (bs->drv->bdrv_set_perm) { + bdrv_get_cumulative_perm(bs, &cumulative_perms, + &cumulative_shared_perms); + bs->drv->bdrv_set_perm(bs, cumulative_perms, cumulative_shared_perms); + } +} + +static void bdrv_drv_set_perm_abort(void *opaque) +{ + BlockDriverState *bs = opaque; + + if (bs->drv->bdrv_abort_perm_update) { + bs->drv->bdrv_abort_perm_update(bs); + } +} + +TransactionActionDrv bdrv_drv_set_perm_drv = { + .abort = bdrv_drv_set_perm_abort, + .commit = bdrv_drv_set_perm_commit, +}; + +static int bdrv_drv_set_perm(BlockDriverState *bs, uint64_t perm, + uint64_t shared_perm, GSList **tran, + Error **errp) +{ + if (!bs->drv) { + return 0; + } + + if (bs->drv->bdrv_check_perm) { + int ret = bs->drv->bdrv_check_perm(bs, perm, shared_perm, errp); + if (ret < 0) { + return ret; + } + } + + if (tran) { + tran_prepend(tran, &bdrv_drv_set_perm_drv, bs); + } + + return 0; +} + /* * Check whether permissions on this node can be changed in a way that * @cumulative_perms and @cumulative_shared_perms are the new cumulative @@ -2176,12 +2224,10 @@ static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, return 0; } - if (drv->bdrv_check_perm) { - ret = drv->bdrv_check_perm(bs, cumulative_perms, - cumulative_shared_perms, errp); - if (ret < 0) { - return ret; - } + ret = bdrv_drv_set_perm(bs, cumulative_perms, cumulative_shared_perms, NULL, + errp); + if (ret < 0) { + return ret; } /* Drivers that never have children can omit .bdrv_child_perm() */ @@ -2249,9 +2295,7 @@ static void bdrv_node_abort_perm_update(BlockDriverState *bs) return; } - if (drv->bdrv_abort_perm_update) { - drv->bdrv_abort_perm_update(bs); - } + bdrv_drv_set_perm_abort(bs); QLIST_FOREACH(c, &bs->children, next) { bdrv_child_set_perm_abort(c); @@ -2269,7 +2313,6 @@ static void bdrv_abort_perm_update(BlockDriverState *bs) static void bdrv_node_set_perm(BlockDriverState *bs) { - uint64_t cumulative_perms, cumulative_shared_perms; BlockDriver *drv = bs->drv; BdrvChild *c; @@ -2277,12 +2320,7 @@ static void bdrv_node_set_perm(BlockDriverState *bs) return; } - bdrv_get_cumulative_perm(bs, &cumulative_perms, &cumulative_shared_perms); - - /* Update this node */ - if (drv->bdrv_set_perm) { - drv->bdrv_set_perm(bs, cumulative_perms, cumulative_shared_perms); - } + bdrv_drv_set_perm_commit(bs); /* Drivers that never have children can omit .bdrv_child_perm() */ if (!drv->bdrv_child_perm) { From patchwork Fri Nov 27 14:45:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936495 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D57F9C2D0E4 for ; Fri, 27 Nov 2020 14:54:47 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3045321D81 for ; Fri, 27 Nov 2020 14:54:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="eEcZZTl/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3045321D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:35242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif94-00035m-8w for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:54:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif17-0001Dg-3x; Fri, 27 Nov 2020 09:46:33 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0y-0003Ef-3k; Fri, 27 Nov 2020 09:46:32 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YpYTpsBB+qlPEOUgNr/c2f2QeysY9hxcFn1L4hNVY0D9JZ2iBL9txKdvoLcaw6sSh7Uak+JZoqZgbKfqpTCgP1daqOIEEejkScAdOVMv1kzUwTiCmftkTpN8OV+bDSkA+E4TL6i/OXeiKUeu7AOjbjtk4EoOPzwJlmuh+Hx0eXGH15ejGWrMRa34eLVNiEhuLg7aGz+I2s6EIAVymmNJ5NwfegiXKtjfHQyFKiSJbtb8E4SJGez6p4CqFU6dFENCNfjKZsyRBW4Tg+Vud3FI6WQrvnBmejuJLuxxIwvSxRuLsdBHyjVQ52YnQ9klKc0vmMGLRqg/S4o02EAlsaSY2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V6Grryz7uauPZjgtaar6dqd38PAQPHov5EWmu9xkFTc=; b=YnH0HN9dHZzkgYDvJCUpfcZuuCfAS6DdRuX3f4HA1ludubY/LtL0DOss6Z658aeY/DkNrWK69c5URsPAfF5HHOMEqheOzTI32VW+3vaBc/WBBNzJmyuF2FmkAN8fsDKY8FAvx9bKncvl02C2lYUKLqwmrIrDbmBihceXDlljGMCzbYZBbDLjeCDFgK8/1zycgor9DBGqrQZhSXBs4ebYvJPmE03YsSTIrgC/pBEuwRkqsS0oB4mNQyjC18RcaiZGosKe6MslTQcUaFhoW2uCQu+FKSfkY7x6LyCWcmIoyL8fENi6uQ8njk4e5S9WWTRdJSUMQgLZPBcreGwreb2n+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V6Grryz7uauPZjgtaar6dqd38PAQPHov5EWmu9xkFTc=; b=eEcZZTl/Vc1edqaj2QDjGXfOCp+4Fv8wZbjtXRhe4bbhtSULPgp1ko6+pGrc/aufH08MxwCPfRejGKOf5FWgZawjfvMwrIHe+UBsZrC04b443/E+k1RjnsywM8Cm/HQigQ/eyGXwoNcq+fHbPwV56ql7y1fiwPRuc0If8lwChWk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:07 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:07 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 17/36] block: add bdrv_list_* permission update functions Date: Fri, 27 Nov 2020 17:45:03 +0300 Message-Id: <20201127144522.29991-18-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:49 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 550a51e0-69c6-42fb-8f04-08d892e321f7 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:334; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rh0zQ/f/BkYRq4Ih6zecWz///GKzl6snpL7UAq5X3/pTPGKB78wRdJX8VFXvVbiLiva4sJWQ4Y7rHXmCRuFhbG0A1mxMreS78H8LlQZAXLdT+YazkDhIIFXvNEWHtgYIRJuz2URVT0h64pwsTlaZC5OLwR4uXxh6qi4dB4uRz2uS/8LQq0V45hF44r20dxNglf+BcJwBLvaSwQ3404ap/HODZ8Gzouxz2hs4CAGITBTLrTQKKhI2r9mU2b9D5Z6DDGqi4srj0Sg4zZRkFzjH6D3eSckyj5lnp4c89QL2lF+ZnoO8N5G3nMIkzmqtq5RFb5bfobc96wGjvbMfiHDNxcR4PgsTXqMgKY8CwNKdmxCKHJbhy6GAtOr2NiV3Y70p X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(15650500001)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: J9MmBBxnrvvx/5pfttO8ikDXRDuab5nPCnPPsBQfCKiwABnOiSLwmBLhbB5rj/mzUTDoBRBJFO/JZwkpg+bJRyHQkCJJ8Iq40wtgXY5uzaEDPBG7dALoMma+0CKJvjmr+6Xva7NIaBrepiovQgnfi6KRwD0hOGO5znAgG+kFrRa8vax7dtdyP8c4EFQgBTPhtfa+ml4nKGMD+j7XAfKl0qka7Lfa4aSWSgZm8FmuBETbRpgyGpBn8GfKeWCJrVZGWbjYVg8u+Qp58ZM+o0+mq4tXmdMuKsHj0pp59HK5N0ZcOtCRm3NxQhfHAkhWm8qOaS/93LYwrahSAVaOJQLVTH/bqUp3lLMyC7ROZGcWqlPoaTAKEERq8ReEYDSAfPc7n9iS0SaKrAXyP3paT/H4WFXjDr4p/aVHaBZASrhTi1vIgG/St3YDrWYtIgn03FmTgpS9X9scUm/vq1F9lJO//ubArrPjG/3hrdqegSW9UqjH7skaXFgtAYz9WvfidGdfIhi+nf5zDaTi03mR7elVo6ReGffFRoqgm2lJL4vv41hLOpEY3d+Q/XYqHKghyDAlFal1NY+Qpi42tSUPA+vdritCDdhPLTjSRiRxj2tv/WNGfqmos1J2+WvAZ4IdSssqPMNx4LD4idJenaiPsg+qjD+rGpW0t6R7nM1hJlsEnR5eBJ7EwdMEMDhnFayU2J5kfO/SrqhGdsb/ehxvjJMRcL+1zpwlGVrgWjQ55qQTIfizXYoC0wPgScLU9nFao2ZBfsgQ9uuA3tQyN8h4/1XgtxVdxuXpYy/YAdG+oXCJrI6ZIu1E2Qetf9b7yxdGmS7xfWv7OsNNdVsNAxHaUewU8ij5ci4Rol00UNhYYOEIdlpSKjfyzuEv0Er8/hEYHGCIKIg2Q3XW3/zV3q5H0xVQebcJI3cZk/Aad8ONCK7HUqftpM1K/GNrfHp6bh5cLDqe7M6yEYhREByR42f8Uz4PSid4c+DnJY/gAbYHsKrn1mxtfn2gcAcmjPmzyiXLB9BO X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 550a51e0-69c6-42fb-8f04-08d892e321f7 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:49.9930 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vx23PScXzFOlREG05doRKGU3YMhbjH7StEfg+6ysY3VbAKZHgPUU5Mwd2DuKyL/EU+EUB3bWalgmK+Hfw0VUeo+3sAF2PfUQvh4Z7aFzdmA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add new interface, allowing use of existing node list. It will be used to fix bdrv_replace_node() in the further commit. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 106 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 35 deletions(-) diff --git a/block.c b/block.c index 4a43a33401..6996aee1cf 100644 --- a/block.c +++ b/block.c @@ -2176,7 +2176,8 @@ static int bdrv_drv_set_perm(BlockDriverState *bs, uint64_t perm, static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, uint64_t cumulative_perms, uint64_t cumulative_shared_perms, - GSList *ignore_children, Error **errp) + GSList *ignore_children, + GSList **tran, Error **errp) { BlockDriver *drv = bs->drv; BdrvChild *c; @@ -2224,7 +2225,7 @@ static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, return 0; } - ret = bdrv_drv_set_perm(bs, cumulative_perms, cumulative_shared_perms, NULL, + ret = bdrv_drv_set_perm(bs, cumulative_perms, cumulative_shared_perms, tran, errp); if (ret < 0) { return ret; @@ -2243,36 +2244,53 @@ static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, bdrv_child_perm(bs, c->bs, c, c->role, q, cumulative_perms, cumulative_shared_perms, &cur_perm, &cur_shared); - bdrv_child_set_perm_safe(c, cur_perm, cur_shared, NULL); + bdrv_child_set_perm_safe(c, cur_perm, cur_shared, tran); } return 0; } -static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, - uint64_t cumulative_perms, - uint64_t cumulative_shared_perms, - GSList *ignore_children, Error **errp) +/* + * If use_cumulative_perms is true, use cumulative_perms and + * cumulative_shared_perms for first element of the list. Otherwise just refresh + * all permissions. + */ +static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, + bool use_cumulative_perms, + uint64_t cumulative_perms, + uint64_t cumulative_shared_perms, + GSList *ignore_children, + GSList **tran, Error **errp) { int ret; - BlockDriverState *root = bs; - g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, root); + BlockDriverState *bs; - for ( ; list; list = list->next) { + if (use_cumulative_perms) { bs = list->data; - if (bs != root) { - if (!bdrv_check_parents_compliance(bs, ignore_children, errp)) { - return -EINVAL; - } + ret = bdrv_node_check_perm(bs, q, cumulative_perms, + cumulative_shared_perms, + ignore_children, tran, errp); + if (ret < 0) { + return ret; + } - bdrv_get_cumulative_perm(bs, &cumulative_perms, - &cumulative_shared_perms); + list = list->next; + } + + for ( ; list; list = list->next) { + bs = list->data; + + if (!bdrv_check_parents_compliance(bs, ignore_children, errp)) { + return -EINVAL; } + bdrv_get_cumulative_perm(bs, &cumulative_perms, + &cumulative_shared_perms); + ret = bdrv_node_check_perm(bs, q, cumulative_perms, cumulative_shared_perms, - ignore_children, errp); + ignore_children, tran, errp); if (ret < 0) { return ret; } @@ -2281,6 +2299,23 @@ static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, return 0; } +static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, + uint64_t cumulative_perms, + uint64_t cumulative_shared_perms, + GSList *ignore_children, Error **errp) +{ + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); + return bdrv_check_perm_common(list, q, true, cumulative_perms, + cumulative_shared_perms, ignore_children, + NULL, errp); +} + +static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, + GSList **tran, Error **errp) +{ + return bdrv_check_perm_common(list, q, false, 0, 0, NULL, tran, errp); +} + /* * Notifies drivers that after a previous bdrv_check_perm() call, the * permission update is not performed and any preparations made for it (e.g. @@ -2302,15 +2337,19 @@ static void bdrv_node_abort_perm_update(BlockDriverState *bs) } } -static void bdrv_abort_perm_update(BlockDriverState *bs) +static void bdrv_list_abort_perm_update(GSList *list) { - g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); - for ( ; list; list = list->next) { bdrv_node_abort_perm_update((BlockDriverState *)list->data); } } +static void bdrv_abort_perm_update(BlockDriverState *bs) +{ + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); + return bdrv_list_abort_perm_update(list); +} + static void bdrv_node_set_perm(BlockDriverState *bs) { BlockDriver *drv = bs->drv; @@ -2334,15 +2373,19 @@ static void bdrv_node_set_perm(BlockDriverState *bs) } } -static void bdrv_set_perm(BlockDriverState *bs) +static void bdrv_list_set_perm(GSList *list) { - g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); - for ( ; list; list = list->next) { bdrv_node_set_perm((BlockDriverState *)list->data); } } +static void bdrv_set_perm(BlockDriverState *bs) +{ + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); + return bdrv_list_set_perm(list); +} + void bdrv_get_cumulative_perm(BlockDriverState *bs, uint64_t *perm, uint64_t *shared_perm) { @@ -2450,20 +2493,13 @@ static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) { int ret; - uint64_t perm, shared_perm; + GSList *tran = NULL; + g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); - if (!bdrv_check_parents_compliance(bs, NULL, errp)) { - return -EPERM; - } - bdrv_get_cumulative_perm(bs, &perm, &shared_perm); - ret = bdrv_check_perm(bs, NULL, perm, shared_perm, NULL, errp); - if (ret < 0) { - bdrv_abort_perm_update(bs); - return ret; - } - bdrv_set_perm(bs); + ret = bdrv_list_refresh_perms(list, NULL, &tran, errp); + tran_finalize(tran, ret); - return 0; + return ret; } int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared, From patchwork Fri Nov 27 14:45:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936525 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7E90C2D0E4 for ; Fri, 27 Nov 2020 15:03:44 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0651F2223F for ; Fri, 27 Nov 2020 15:03:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="pynXQMuQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0651F2223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:60558 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifHh-0005ZG-8C for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:03:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif17-0001EF-Pg; Fri, 27 Nov 2020 09:46:35 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif0y-0003DS-Ff; Fri, 27 Nov 2020 09:46:33 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dDxWdvSciAzzCsA1eqD5CN8E8pMiDcAnxdWrPk9VRpT+7lqi7hI+Sl9GA4M3aKUBo+czV5GbYNBeRzw7GURtavzhHEwHa/l0rqgMXQtSQjZFyrX1yu3J3jCQBua66rehgylk9sTBKCJwYjhGKQKHBt6LakxRVptCXlXOqEvdjhDEfo2DU8rmbhtzaf1RhEf4YoxPLg6B1HFT7khByZ5uzEPjhVod7FMdiqketOXnXPDnZ9/ngtFIaWDpQo+CjV1SxIOhwmXe1YqA/Hg9vb7uYuT5iC6mVqvENN6diQVJxKhwQyGzw9aW/R1hv5XhmL8IUscbvYH2Wp1S2Fg7jedKMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o1U8uFl+7jWP2bNjt0/rStM5LG2dV5tOMAnYyTk/xNQ=; b=ltQnmSYyrzAfzkMcEmIpmk5IEHZCnPvkZ7aFO5tH6a+LHC5uEermwBpU2ImdSlfbCyrJe/uiXWoSwcMu3ktH81o7llRe1xCWZ/5nSFI9FWt2iGd99XVDkiXla5g8V3FwDJJxtXWj3YSNAhoZ4fJnN059rNgJdY5O2HG3vERhxijy3fZVaFrZR69rqLqTE/orLKPgZY5QF57Ypm2DHWjufgUTNdCOtnVn2iUHfchmLhWU+jhvF2igJAgP8DDgEyxnNRfJ6/q9LkRpNXyQ/1CWq2K+RiKPSIku1cpg3xnVgtzAPjYgLSF5xk1VJKDIP8A88jtBkqdJcJAHMGJhLvvGzg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o1U8uFl+7jWP2bNjt0/rStM5LG2dV5tOMAnYyTk/xNQ=; b=pynXQMuQ5vLF81S377kGGYEEVD8LJc3+OTJ/mtL9HPvspzHlTBlMMc1T8JDvZ5NWd1ACXoKnyx6Rt4gonR9t6vfG6+oBgJBRtOvF7Ib4acOczlfquC3Yd5LH+LGX3clcSkqdW96m3tD6rhwHHcrcVPZXk3zjbz2PD2pcTB/eOGo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:07 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:07 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 18/36] block: add bdrv_replace_child_safe() transaction action Date: Fri, 27 Nov 2020 17:45:04 +0300 Message-Id: <20201127144522.29991-19-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:50 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0f892840-f104-4857-6669-08d892e32271 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:159; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: p3Q0/wogLwGc95iAzK0U8j79JFvTRNROP4n2nO889JUKV7bnuJENkmoc/cRuygDZgefW3vWMyFd/ocnktKUD4KDfOYQ/QaRKqItfDm8b0QDGgPAXYxlbhApI7+elqv3vg2OpbURml9fjVmA5aYXkv/kq8wBpJkWJTNRALEHeAePo8PwW0kqAQS8xUvrSBJZUZ9R8OeGO7KLeFy+J8FO/1zYje/yrP+48+NaRC0PzVMAl4EFx51wYqOEw2teBJPxeM8EmLAxzP+E8PnZe8jzfkYr1Vy7UIC5YmeOYH+tYHvmuWdKgoipOscKN+nl1lAuxvTvEXvpBytyUNeQH6nuiNjRA6SfyurIehSTqWCpC9rpG8KE6dkI3xy5bqeZDlzFr X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: iw6N7ymE1RnL3LbgxpdknV2awZuaYW5WBQpVVCGM2H5aA8qZr/pMjpMcRBLizmPJfdaICyLQBaonIQhJZ44c8q4ncWHCphM5ULuLyZ3bAK9nEMlw8JAPi4m9aEleY2ERCrjD/8S5i9tWbu9t7X/7uiKm8n1Vi1pgCQktCps2rZ8r2ODCvWhTt2yJY06aqstSuz7JhQ1MSK6q/FCrZ+9uueuPx0/rCC3+2z5mfr7HnvjnYnSvR2H1zNkrKpnGFnahvqXF1XIMeMtLKg0pkE8edk+e8/LTgFEeB9ZGUwbzNOrg5klY18byOIHg23X9NxFUCMfOlPPldYz5VXin2tfsd+bhyip6XkPFEYZh1bfvfN4QE0h2swwyoD3fwauggJ5fVUhrhum2lB/A9IwBVrVYBHa7/Zf+djru7xkAbupFWc4PB9Pl3EX+OF2+8WvIWPd5XSNWNC19YN+GAMyOboQyhkn24Uv/VVMLhyyHnjpbL0v6ytfpwCTN8vyaXv2L+rSz2U8y/rPcFjJHSxc0NqVEd+uNvboG8Giqyq3+8nSMb6jFwiKYAFSq+BEFYwCqAA4nNYvtfn25AcSbD2hQtGrc0yf7PXs2x34fvJxBtSo5RoeORDfSpLCh3mXmvHHj7PRnxJnTtfrT5HMxavBPtQDab4dH1g12YRenF5V7zLwO8NABevNSVil/XZkDbjAAZ2qOaCVogoh7+mGG1hsmQ36Eea1jkS8VRVCFqyEQHYbFAXR78I8hDsi+0+/ddi/Y6x5eMhlS+/yTBGyuYCzYdoh0nOz4MBs9kBTbEppjYeb6MNXT/QQ7ccdcfLc4qADW2x7E401ASz5O+h623bpjPUIABkc5oIROfcHA8DRlDwD6urjw5W1dDHzhBsDAaAfh9bcn8+XB/oy4FIn4wZUnptVyrq0XfXetEjsmX6yV6jNc9UMGembU5sAg0HBn57TeZQwjABVynzJMMdW5g7xKLwABDOrdTQ/vU+EmMpisZAQ/75xw8AyW3baaHdx8cEhOUiMS X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f892840-f104-4857-6669-08d892e32271 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:50.7746 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: p0gX+TIMWM11XpohZeUbaMIjy8sWhaiy7xqeQI5XJ18j9ODIunJ77A8vM5z5pfPLj+sjqDf6ZJs9AvXgdPQghTTX0PtasM2qRBSgjbZ0lxM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" To be used in the following commit. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/block.c b/block.c index 6996aee1cf..f24bd60c2f 100644 --- a/block.c +++ b/block.c @@ -84,6 +84,8 @@ static BlockDriverState *bdrv_open_inherit(const char *filename, static void bdrv_parent_set_aio_context_ignore(BdrvChild *c, AioContext *ctx, GSList **ignore); +static void bdrv_replace_child_noperm(BdrvChild *child, + BlockDriverState *new_bs); static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, Error **errp); @@ -2164,6 +2166,57 @@ static int bdrv_drv_set_perm(BlockDriverState *bs, uint64_t perm, return 0; } +typedef struct BdrvReplaceChildState { + BdrvChild *child; + BlockDriverState *old_bs; +} BdrvReplaceChildState; + +static void bdrv_replace_child_commit(void *opaque) +{ + BdrvReplaceChildState *s = opaque; + + bdrv_unref(s->old_bs); +} + +static void bdrv_replace_child_abort(void *opaque) +{ + BdrvReplaceChildState *s = opaque; + BlockDriverState *new_bs = s->child->bs; + + /* old_bs reference is transparently moved from @s to @s->child */ + bdrv_replace_child_noperm(s->child, s->old_bs); + bdrv_unref(new_bs); +} + +static TransactionActionDrv bdrv_replace_child_drv = { + .commit = bdrv_replace_child_commit, + .abort = bdrv_replace_child_abort, + .clean = g_free, +}; + +/* + * bdrv_replace_child_safe + * + * Note: real unref of old_bs is done only on commit. + */ +__attribute__((unused)) +static void bdrv_replace_child_safe(BdrvChild *child, BlockDriverState *new_bs, + GSList **tran) +{ + BdrvReplaceChildState *s = g_new(BdrvReplaceChildState, 1); + *s = (BdrvReplaceChildState) { + .child = child, + .old_bs = child->bs, + }; + tran_prepend(tran, &bdrv_replace_child_drv, s); + + if (new_bs) { + bdrv_ref(new_bs); + } + bdrv_replace_child_noperm(child, new_bs); + /* old_bs reference is transparently moved from @child to @s */ +} + /* * Check whether permissions on this node can be changed in a way that * @cumulative_perms and @cumulative_shared_perms are the new cumulative From patchwork Fri Nov 27 14:45:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936523 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CA23C2D0E4 for ; Fri, 27 Nov 2020 15:01:40 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 572EF2223D for ; Fri, 27 Nov 2020 15:01:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="lUz95O0X" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 572EF2223D Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:55920 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifFi-0003Yo-80 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:01:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif19-0001Fm-Mk; Fri, 27 Nov 2020 09:46:35 -0500 Received: from mail-am6eur05on2121.outbound.protection.outlook.com ([40.107.22.121]:11777 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif11-0003Hm-7k; Fri, 27 Nov 2020 09:46:35 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UeCArWYO2Z26XVqxgExS5DukZJlbCprUU4Jit1RzDHtjnstbFmhf81Cko2bMVVHvsBLG6RFyC9ys195KVoQ/FXZhE0m8KH5tPhbuPJ6zMS02rK5j8gzIFLcNddMJgTL1ba9GvJh4x0+CtvbRSqGmI4EUIAAoaHXhjsZV4UcKrZVwZpqu0VgUAENSQ7keAMQpVUuaOaZwXwGbseD4wsBV3wVQE32q1uMSKiFUmSlZurp6CD6+HP+xK2cU9/ks5MUhM6kv8cC+9CESy6hM7ucxJQxqKXNjLXEaqTlVxSsRvs/Ooufex+90wp2Ix7zC2Lea7E797Ulurq5F2iqkE+eoUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7eoSHCwTxml1J3sbAA7EbVhYYbQ/5Yr10EI0EA7CedM=; b=I/6skLZmv19TVPRUspaHIxR4Zo4SPLshqTBK9aS5d8LvgzLHaQisqKUepOtRljzs1r6ze+CnPsxcnd3FLfQ7XeTLJgrNyesDW1MOEazJYkfdn3w0ok0a5dIwpg042DN0yCYNUvW+4EEXMdCNYolXX94YLAd5f+I/mM4xrR5U0qgnOhmu4lirjKvjoudc0+P1WSO1EX9lvpLgFFKSvFvnx5lBTyLUQTWktTRGQOnvd2IDORHh38NufhMOxiUB30oDfNWFrj5RRByKqlv2CZ3la5oisEHbjCBi7z1yOF9iOEZ43siaP+6SNZRHCEmOQjfLJdpoxvD80TGyvo2wBzpIUw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7eoSHCwTxml1J3sbAA7EbVhYYbQ/5Yr10EI0EA7CedM=; b=lUz95O0Xl+zKN5ynVcno1I5+sjQCsf9Hib9KwzgJma1HyGKTVrsBFY9cshiQGaHqC++tOnwhMYtx2jw63OJc7vQqUF5aOpT3tpNuGhDtKsXHn+MmvArSkhamYyktF0jOK1s9qc2/XaDoWEkJ/1pOiAyIzwawSUpX20o8Hfdmoqw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:08 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:08 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 19/36] block: fix bdrv_replace_node_common Date: Fri, 27 Nov 2020 17:45:05 +0300 Message-Id: <20201127144522.29991-20-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:50 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 740ce3dd-eea9-4c35-af14-08d892e322e6 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1360; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lAvojkqKWFzU3Qc4eo9VFV4U07HTNMCCYLvEVIpBWb9/CNNnxHxWiV/M6K1WIJx+ZMm2FCVZtUeaY27EAFJcExGVrhckOyiIl3gnbs2Tl/Lu0Vfdofa79wrGUvHLw2uMnQKRdhGFcWk90Uy/xXPzxrKK06Iv6zjdC0lLlnBKPMoAOsjQp+uzzrkrkQvd9W6T77Fih3TmF6LmC67bNzVM6QWxLXKiaLy9THEyBr7V8cZ9JrY2Qh9fcynywPCUFa796Mcpu+Wg71XkdUNQjH5Cmai5A8xp/58LBtIoSrvY2wnJ5pO51PwUy6M4dTtmSZED6K0fdrbXllZOykxo49AzJkaXRgraXPqr6Nry8jJrXUu75NFjtyb6vBuu4BFooHwR X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: NMRziywCa8E/jVM2WslFZgqwS2jCuxStP2myZynnGpqF0nigIyEbISBHFVUL85r41IsCfkHUJSSHTYhqQYdl3l4cIwRjVpz74M35QGWFEAG+tw1cdLxq3gxRjPDoQ/c76G+rUVaRLkasGaY4VLfgWGV60cHIoVgYJZxJybaQHgMYzBm6/I+VvajHK6Wi5ESvhDcc5gmF0szBV1HTBofEzFfNBrflJmzhgykRtsWAyCOPXs2LfaDB0QD7Jp/0V6HbgTQ3b3pPrT5VqjdTSGGeIVdOvB8PWs2P1E8r8FjuL2xeZ6jdNmsCMsex4soJCw/a4KuaihWBFlBxTx8sjZ/jcJMkguOZZ9/icdom/KNBsdxpL0XbqxAbM0vByXehWQmlAm9pOm9ME/x0GbahbwTkWs7AjIZUcO8RBE7lVM+F2J53iOPp1X1qWxbDS0N8KTIe6RbE3dP3nulATIljt6bFIk+ypS0rXkSPCC23jetwB+kC0dhASyjZdSU4CBf94zpzC4fx7gLXldqaIsJbcDqDd5ihFMxxWWCzGdI8Lq6JtPOfTwToYb4+m0/WvcTdeUmOgzmQQ5uVXpxSPo2oCcB/6nA1yS44nEPXL5yE8j0YiKOAtDc9guUZS/JpZ593KM5vBNGSizBoDuoKZA5aLilzzXR9eiJrluKYv/WAEnqw7AgXxU2OZaaa4MKkZJd83QGwJJh9LU1jwlORryeuSnF7MRPtd/jHg/l5e2tbj7qC6Odi5Qm8/IPoxaqbRDIrbq9WgJLcb1ZAZZxmt1J9skvAqfN2bOpxdSuN3eB7GHTX/9Z6aJSF+Dm2FwPzD5wPxTjRnZhLl/d/bt5yK9LJ/TLlhnIKJWGgfXATeemCEAc1KKG4XTlhJzsHTVIV/LaAJZbeARVgVdx5SWvdkclifeA4xdZXdJyZFmaeHzjnppB7h/pm1XG6erTvXc5uRkMXrxDbLPt9PMJeuOjmPsr4BTi5gslCp88ROxxSWfybrAiO/J874wwhIMsQN4TWxPovFcrj X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 740ce3dd-eea9-4c35-af14-08d892e322e6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:51.5402 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2OuGTPKI1dgS/1PUXGeCPcgAiSUXoBeKVGXUIPcq8pvly68SbWuHvw3m1rLzSSiI6ZynjxEgMkoOJtaNw0V6nBQfEkmkCu6GcdU1XdXqBCU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.121; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" inore_children thing doesn't help to track all propagated permissions of children we want to ignore. The simplest way to correctly update permissions is update graph first and then do permission update. In this case we just referesh permissions for the whole subgraph (in topological-sort defined order) and everything is correctly calculated automatically without any ignore_children. So, refactor bdrv_replace_node_common to first do graph update and then refresh the permissions. Test test_parallel_exclusive_write() now pass, so move it out of debugging "if". Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 42 ++++++++++++++----------------------- tests/test-bdrv-graph-mod.c | 18 +++------------- 2 files changed, 19 insertions(+), 41 deletions(-) diff --git a/block.c b/block.c index f24bd60c2f..f0fcd75555 100644 --- a/block.c +++ b/block.c @@ -2199,7 +2199,6 @@ static TransactionActionDrv bdrv_replace_child_drv = { * * Note: real unref of old_bs is done only on commit. */ -__attribute__((unused)) static void bdrv_replace_child_safe(BdrvChild *child, BlockDriverState *new_bs, GSList **tran) { @@ -4794,8 +4793,9 @@ static int bdrv_replace_node_common(BlockDriverState *from, { int ret = -EPERM; BdrvChild *c, *next; - GSList *list = NULL, *p; - uint64_t perm = 0, shared = BLK_PERM_ALL; + GSList *tran = NULL; + g_autoptr(GHashTable) found = NULL; + g_autoptr(GSList) refresh_list = NULL; /* Make sure that @from doesn't go away until we have successfully attached * all of its parents to @to. */ @@ -4805,7 +4805,12 @@ static int bdrv_replace_node_common(BlockDriverState *from, assert(bdrv_get_aio_context(from) == bdrv_get_aio_context(to)); bdrv_drained_begin(from); - /* Put all parents into @list and calculate their cumulative permissions */ + /* + * Do the replacement without permission update. + * Replacement may influence the permissions, we should calculate new + * permissions based on new graph. If we fail, we'll roll-back the + * replacement. + */ QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) { assert(c->bs == from); if (!should_update_child(c, to)) { @@ -4821,34 +4826,19 @@ static int bdrv_replace_node_common(BlockDriverState *from, c->name, from->node_name); goto out; } - list = g_slist_prepend(list, c); - perm |= c->perm; - shared &= c->shared_perm; - } - - /* Check whether the required permissions can be granted on @to, ignoring - * all BdrvChild in @list so that they can't block themselves. */ - ret = bdrv_check_update_perm(to, NULL, perm, shared, list, errp); - if (ret < 0) { - bdrv_abort_perm_update(to); - goto out; + bdrv_replace_child_safe(c, to, &tran); } - /* Now actually perform the change. We performed the permission check for - * all elements of @list at once, so set the permissions all at once at the - * very end. */ - for (p = list; p != NULL; p = p->next) { - c = p->data; + found = g_hash_table_new(NULL, NULL); - bdrv_ref(to); - bdrv_replace_child_noperm(c, to); - bdrv_unref(from); - } + refresh_list = bdrv_topological_dfs(refresh_list, found, to); + refresh_list = bdrv_topological_dfs(refresh_list, found, from); - bdrv_set_perm(to); + ret = bdrv_list_refresh_perms(refresh_list, NULL, &tran, errp); out: - g_slist_free(list); + tran_finalize(tran, ret); + bdrv_drained_end(from); bdrv_unref(from); diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 0d62e05ddb..93a5941a9b 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -294,20 +294,11 @@ static void test_parallel_perm_update(void) bdrv_child_refresh_perms(top, top->children.lh_first, &error_abort); assert(c_fl1->perm & BLK_PERM_WRITE); + bdrv_unref(top); } int main(int argc, char *argv[]) { - int i; - bool debug = false; - - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-d")) { - debug = true; - break; - } - } - bdrv_init(); qemu_init_main_loop(&error_abort); @@ -318,11 +309,8 @@ int main(int argc, char *argv[]) test_should_update_child); g_test_add_func("/bdrv-graph-mod/parallel-perm-update", test_parallel_perm_update); - - if (debug) { - g_test_add_func("/bdrv-graph-mod/parallel-exclusive-write", - test_parallel_exclusive_write); - } + g_test_add_func("/bdrv-graph-mod/parallel-exclusive-write", + test_parallel_exclusive_write); return g_test_run(); } From patchwork Fri Nov 27 14:45:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936527 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 560FEC63798 for ; Fri, 27 Nov 2020 15:03:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 99CCB2223F for ; Fri, 27 Nov 2020 15:03:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="me/O+BXh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 99CCB2223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:60798 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifHs-0005fH-KF for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:03:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36854) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1A-0001HM-AB; Fri, 27 Nov 2020 09:46:36 -0500 Received: from mail-eopbgr60102.outbound.protection.outlook.com ([40.107.6.102]:38277 helo=EUR04-DB3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif17-0003GS-8x; Fri, 27 Nov 2020 09:46:36 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WWr43XmL6XaSnvwuqhH7QaQiN7Z7D/nq7T7GGlOrsXbEYN4ac/bjpgr97W206HbrEXY8GPSJQIvLQWp+mVP7pLJ0YNQ+5SzZfEYkTCsUgxFZPfQxlSpXKBBFoVg39jfpM/F7BBGsovKGmw0wkmDLNzGsrj2RrnTOytfqwWDqHrTy/QzHWHSaT9ztREdJt0Bpk3kE1uXuQDCKNZbtdVx+ZxiNiwCsY06cXlglyPe35KbAm1xv2fOHJcvDwZwED5P5AdLznLgBOiCcchxeS0lWKTeVh+8G+ksv/DdVJWZ3bZny4RwNm0dNvjbvwHoSUwEMmwIXzh1Um3pJNwH2rA6rxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mhN1TD/4c0akfZwurebUV8jcB5XtT66iazWLi41Dlsc=; b=Qm5PuCwqqwClNJIbnPIi3uvQkB8lX2HyfZeQxeayWFfNr+Tw5KSN7KI0VRaQ7MOfBFlcUI6b68GmET9iJB5TMz68FFjSJVXMUWHNp/qjjaMM4XS125wlkG3Vpa/oQzrWdq6k/R7sw1NYoCq5vAAvcPXeKae4MYH4GvtJsXa51Rt5CI2Z2OYNyMeLXt1ZLLEfDUUsjXnvymG9nLUINVV722mmDczFoF1pSYU/vB8+LGOVQZfsZOiJ+IUmzSJbvydqJ4wYAwWEaxz837jpS6SYgpoQso4J0HLRAE2OE6pcLUjwE1FAp0MEubO7UUqvurxJOEiIO87fIVdPCLzxeEiE+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mhN1TD/4c0akfZwurebUV8jcB5XtT66iazWLi41Dlsc=; b=me/O+BXhDG96fk1fBblZyludELOW7Qcrlu6yBHncJiHK4ukOse+R92ma0m39j6nRkGMYV1vq8sPka4z4RtljjGfrl2+CGPSe2CI6DkXhuQVgcsuTadnT3btgSHM/bJz1B5/aN1CPTfPzQEHAwuZq9dpgiGcW3DXRGDQeGD34E5c= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:08 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:08 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 20/36] block: add bdrv_attach_child_common() transaction action Date: Fri, 27 Nov 2020 17:45:06 +0300 Message-Id: <20201127144522.29991-21-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:51 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b183a8e7-d15f-484d-183b-08d892e3235e X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:267; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6mXTXI7btwRUjlaNLoXIcgh5NR/KxryQMF5ba5JI0fMQH+GkwN8D3WWHAI/uwF69aHHzPb+aYCD8F7gUO3NnH8Dolx3grLuXexbmCV/Z2EPuA04sSLCAbTgpoT28L2IF9K3d6bTnL9bGrUfPetRlZjn6BiVptpslg8Xv3pKrppLQTnr2AJpcNkAT8glLfWIQsNro7XSu4kDu+HdlTaHU7aKqli64OVWIZoxSeRQQLkqGRYHEggxO45+uS+8qc8vC9by0uCJ/heW568dIvp2Ali74Js19V6tvyVcaj8LUTlFizljj9Kb+BlUb65Qf8oK6vmgUK0CIijJannJ7ZyU1z2CuCFcyIdBIifSBMoNKpd3BIORUSp/59RMsPlwxvoyd X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 4FQnXiq/wUc4jkcymfCAz9rZEDcjVEx0SJ49rHgwG6y+T1dzvkadtmBemVGQwX6Dl7MIuWWDw7zH7h5Zl8XGLUE+oDF5VX9Tud3IuDfsmPVcj7Wh953Npsm02KEptO/aYjM+adIvbevyB3QYhGGARbvwg97JDaIsr5ljxUSfKW3n493giNd951WbSSFityccvyn41U+UAOV6xkkw9OUGS8GorIJ+0u7QQohlXkfon7MlefgsV5q7knRXkByhp8/056vgdJQxyOKf8dqcs6+xx4WiZ86ov+dEkrOiNQOhXICBs+3OPz4bYZXqOjp8Y2/daPo88PvZJ4MDxk8GOL5EssdtMN84dDtsx6hD0OVfAAVlO0ydpEBlD0tcNEsIoTVH5yGZVLdPll1UFUUPWG1dIhgBwiA8oCEtIjhnMj9ZOctk+ZKMLupdJs4eV3NCohCnC/+o3IqEzJ+WVULvh5178Yod5ATTDgTelP3/hQhBchkCPXgD0CXE+Xc1RZwOKtLd92s/R8cOe00Td+9lNGqIaYhk+jFzKL+TJmtMAMAVmh2Fr3YFPe8QJHd2sLpBSFH2lolQdQ+6b79Aa7l8LwjZZR57x6z5BBTRut0YneA8WNCxIktsSGP3poiuNoiuv9RgqpQCSdkiLHFUShuvBmg23rIGEIsVf8dgJUUFOb/M05e/DXwW2O3wZ2NeJZKsxui+SBvKefsoJQ0OsjzZWSer0C5EePx0CrJ/LsuvBt/eQ48gxDY+eS/pNO50wcFmVlvmzvJkU8Jt9i7G3T/0bpGze3cbo8nJ0MWmcSBYNqt2ZJ1oN9F2BS2nHt7J+PQuD/c5vA1xILHKM2UYjpzdf7u95MSrN0/XiES58ETI5q7zlWf9GnXpJTVdqNJQRZ6rNyWXrv1blZLKGEuQ1dPN4b1WcNRzD92Pk81m5+lVNQ0jGYyWF22XNTP+/5Wvob+oYvQ3O1TyG4HTeA2VTkhQaNubQsVLPd9/QZZooyvY6uKH49ng79eG913VJIacQLFGRU68 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b183a8e7-d15f-484d-183b-08d892e3235e X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:52.3327 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qXuQVG1W0LPaA9PTmLU1cwmo/OIRyuCbef8owo3TaK/wo48yllLkk2w940k8o9kOTQtVcGAzv0Cxax8Et9sRsyTYNZD7UWWaFEmGyNdRS68= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.6.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Split out no-perm part of bdrv_root_attach_child() into separate transaction action. bdrv_root_attach_child() now moves to new permission update paradigm: first update graph relations then update permissions. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 162 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 117 insertions(+), 45 deletions(-) diff --git a/block.c b/block.c index f0fcd75555..a7ccbb4fb1 100644 --- a/block.c +++ b/block.c @@ -86,6 +86,13 @@ static void bdrv_parent_set_aio_context_ignore(BdrvChild *c, AioContext *ctx, GSList **ignore); static void bdrv_replace_child_noperm(BdrvChild *child, BlockDriverState *new_bs); +static int bdrv_attach_child_common(BlockDriverState *child_bs, + const char *child_name, + const BdrvChildClass *child_class, + BdrvChildRole child_role, + uint64_t perm, uint64_t shared_perm, + void *opaque, BdrvChild **child, + GSList **tran, Error **errp); static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, Error **errp); @@ -2898,55 +2905,22 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, uint64_t perm, uint64_t shared_perm, void *opaque, Error **errp) { - BdrvChild *child; - Error *local_err = NULL; int ret; - AioContext *ctx; + BdrvChild *child = NULL; + GSList *tran = NULL; - ret = bdrv_check_update_perm(child_bs, NULL, perm, shared_perm, NULL, errp); + ret = bdrv_attach_child_common(child_bs, child_name, child_class, + child_role, perm, shared_perm, opaque, + &child, &tran, errp); if (ret < 0) { - bdrv_abort_perm_update(child_bs); bdrv_unref(child_bs); return NULL; } - child = g_new(BdrvChild, 1); - *child = (BdrvChild) { - .bs = NULL, - .name = g_strdup(child_name), - .klass = child_class, - .role = child_role, - .perm = perm, - .shared_perm = shared_perm, - .opaque = opaque, - }; - - ctx = bdrv_child_get_parent_aio_context(child); - - /* If the AioContexts don't match, first try to move the subtree of - * child_bs into the AioContext of the new parent. If this doesn't work, - * try moving the parent into the AioContext of child_bs instead. */ - if (bdrv_get_aio_context(child_bs) != ctx) { - ret = bdrv_try_set_aio_context(child_bs, ctx, &local_err); - if (ret < 0) { - if (bdrv_parent_try_set_aio_context(child, ctx, NULL) == 0) { - ret = 0; - error_free(local_err); - local_err = NULL; - } - } - if (ret < 0) { - error_propagate(errp, local_err); - g_free(child); - bdrv_abort_perm_update(child_bs); - bdrv_unref(child_bs); - return NULL; - } - } - - /* This performs the matching bdrv_set_perm() for the above check. */ - bdrv_replace_child(child, child_bs); + ret = bdrv_refresh_perms(child_bs, errp); + tran_finalize(tran, ret); + bdrv_unref(child_bs); return child; } @@ -2988,16 +2962,114 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs, return child; } -static void bdrv_detach_child(BdrvChild *child) +static void bdrv_remove_empty_child(BdrvChild *child) { + assert(!child->bs); QLIST_SAFE_REMOVE(child, next); - - bdrv_replace_child(child, NULL); - g_free(child->name); g_free(child); } +typedef struct BdrvAttachChildCommonState { + BdrvChild **child; + AioContext *old_parent_ctx; + AioContext *old_child_ctx; +} BdrvAttachChildCommonState; + +static void bdrv_attach_child_common_abort(void *opaque) +{ + BdrvAttachChildCommonState *s = opaque; + BdrvChild *child = *s->child; + BlockDriverState *bs = child->bs; + + bdrv_replace_child_noperm(child, NULL); + + if (bdrv_get_aio_context(bs) != s->old_child_ctx) { + bdrv_try_set_aio_context(bs, s->old_child_ctx, &error_abort); + } + + if (bdrv_child_get_parent_aio_context(child) != s->old_parent_ctx) { + bdrv_parent_try_set_aio_context(child, s->old_parent_ctx, + &error_abort); + } + + bdrv_unref(bs); + bdrv_remove_empty_child(child); + *s->child = NULL; +} + +static TransactionActionDrv bdrv_attach_child_common_drv = { + .abort = bdrv_attach_child_common_abort, +}; + +/* + * Common part of attoching bdrv child to bs or to blk or to job + */ +static int bdrv_attach_child_common(BlockDriverState *child_bs, + const char *child_name, + const BdrvChildClass *child_class, + BdrvChildRole child_role, + uint64_t perm, uint64_t shared_perm, + void *opaque, BdrvChild **child, + GSList **tran, Error **errp) +{ + int ret; + BdrvChild *new_child; + AioContext *parent_ctx; + AioContext *child_ctx = bdrv_get_aio_context(child_bs); + + assert(child); + assert(*child == NULL); + + new_child = g_new(BdrvChild, 1); + *new_child = (BdrvChild) { + .bs = NULL, + .name = g_strdup(child_name), + .klass = child_class, + .role = child_role, + .perm = perm, + .shared_perm = shared_perm, + .opaque = opaque, + }; + + parent_ctx = bdrv_child_get_parent_aio_context(new_child); + if (child_ctx != parent_ctx) { + ret = bdrv_try_set_aio_context(child_bs, parent_ctx, NULL); + if (ret < 0) { + /* + * bdrv_try_set_aio_context_tran don't need rollback after failure, + * so we don't care. + */ + ret = bdrv_parent_try_set_aio_context(new_child, child_ctx, errp); + } + if (ret < 0) { + bdrv_remove_empty_child(new_child); + return ret; + } + } + + bdrv_ref(child_bs); + bdrv_replace_child_noperm(new_child, child_bs); + + *child = new_child; + + BdrvAttachChildCommonState *s = g_new(BdrvAttachChildCommonState, 1); + *s = (BdrvAttachChildCommonState) { + .child = child, + .old_parent_ctx = parent_ctx, + .old_child_ctx = child_ctx, + }; + tran_prepend(tran, &bdrv_attach_child_common_drv, s); + + return 0; +} + +static void bdrv_detach_child(BdrvChild *child) +{ + bdrv_replace_child(child, NULL); + bdrv_remove_empty_child(child); +} + /* Callers must ensure that child->frozen is false. */ void bdrv_root_unref_child(BdrvChild *child) { From patchwork Fri Nov 27 14:45:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936531 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB592C63798 for ; Fri, 27 Nov 2020 15:06:40 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 38A0B21534 for ; Fri, 27 Nov 2020 15:06:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Rk6IzOeh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 38A0B21534 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:40898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifKY-0000o4-Fx for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:06:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1A-0001IG-ND; Fri, 27 Nov 2020 09:46:36 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif17-0003Ef-Vt; Fri, 27 Nov 2020 09:46:36 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OzpwsfPWcbixsL5XZS+3ykSI2DNOnTC4YF10DkgIkA0WwFvgX7Hidw5f7MKRMUgNXfEskU8+CPpA3qSCDXmgK6VqgZmJRfwmXPtMCwQkPCAy7vdrHx4DgnvzfQDLL0SRTjMjPXeGa4NypWNMz5w12nEZvHF9nrARWVv+yx6unGnvEww7lwBCSSEGcXb93YqMcdRANm5U92sG6rMi/PlWJQUet2SAtpjE1mFa1lVIsBJYdzth3zN5CXuTVi/iuUF0eRlgre0I5m3FsJ1fPi0XEgj/VUIz/6Z57uLMD0m+GZ7Ap+VaRDspmnR6FIid+egRlUqPigWRQCR4yAKU1GciPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8YRPusXatcZ/2cnUTTgX7gO6aRBtqcmsjws+q+nBZYo=; b=CNFPd8ze3sHD33yv6ZH+wGiU81N8/4bHhL2XXl9qWn2ixSmAwA3RCik/uisO0PdNmIKmqURwEcqWyhlhrU9W603WKJTm+rVGZX/4bM5rZiYzZ5kJ1/8TnbW9yxXus0yguESE5pLWtPGrrlQMz5ou9j6AcHSCe4SYWhNQ2irz5o0+yBoJndic5zyKvw8Nixpw+oISKcZ+iuRkoHVI/e3HuLRPc5q3JJXPbpJMa8p12U4AAOYXq15LprerY3L6pMavpJlZRvPgMftZhs5TBCGiRuvOl1vo1ljjDW6f+mSQ0eg9aJgd39rUCmNbS1c//jkI2e12Gj0l/FaLRuNvMom+Gg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8YRPusXatcZ/2cnUTTgX7gO6aRBtqcmsjws+q+nBZYo=; b=Rk6IzOehlzX9OaHzrLMUEAni766xBDP+EUvQjWgLIzzc33iAmPU4JR1FbV0RNZyCMU25zlZL8hlB9ZyhZAT9ceL+LZ3JVDsD38ZbZOHgrHL/izCuCPmDvv2HSYafnCXouhA976yYMwG+RH3CyeKQwG35r4Ia9MQubTtnYDLDgb8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:08 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:08 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 21/36] block: add bdrv_attach_child_noperm() transaction action Date: Fri, 27 Nov 2020 17:45:07 +0300 Message-Id: <20201127144522.29991-22-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:52 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7cfb24be-9930-4964-43ce-08d892e323d6 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2512; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hF3r2DgjK2q25QvYFTIASoGyhozKfQEq3gaOct0DrUNn2nghSN7VOtVW0BodAaTugiEO6npMg9dL8WcjSBZGru8Jvk34RExEqeWBSMrJVbp32Eqq/HDL9eQMUoWfChrGzrjs72NqcJ3UT4y1b2HS7/Pb4qHJsCsafR40qti01gQiq9cbx1yd8fILo6sWGv+Zt9XijqyLf6cG0h++gwxea8qVdoPukrkuhF4mpBKU7Pz8wGimYVug4XMMiXoB0Ie6zedhc2HTQfMntb4bHHHi7ECR/teznhmfbxcfeS90VaUK6uilc4P9p/6abezGdgtDBdbGbLLa+kw0HFizqEuHChinHif5f6XneOXnmGmc3xTkRWFE74P929tiLQ6xKez6 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: mxA8pPI/vfT3htGtdjsnjVSY9ntiHPclaaTDYd8In+tHSWojWFzRijG6/45ThUqDrbthUVvNVtaqejAgDjs2egQHdOF4H42WWKT12MSUD4Ep8itxnRjgwVL6oUdxkzzcS7r8ThAzSLYOCEttHKTYinqMeC9/iIWktb5oUyFut5tynKtBjEpuDyjPbWfZ73hi3f6nOoUCP1PhLJPpy6IwuCYuB8REvmSWYT7QCXb/eMO+jdai4G1jK10w4q28dxxs3YsAaHq9xywjPdeUrtcM8Y38KMvq1hlPYIO/rZ505Vsj98/9PGh0dBxA63qJtFjy+5AxzHsyZNFfAMbiprjh+CgQYo5XlM4PW3smCCadpQNszU2NVBTpmSKekY4wIsRT/hEt3qHZLhLry/EORZLgN0DG48YrgwHcaC60R3mA3q/A4Or/bGevcAbt8K+J48aN/9owwmcPvohuDLhaV5QFciGyXpbAzBEt3adyz4D8k5pwQaVaPOzGv04QuMFKHRmRByauwnh9qr+2B32zyhfwLPBPTdk+Ka2MtaPJKKpxwMdzsyanSFRm97t501kNpWeOpya5vIauqmGgtNhkRuRB49hIMe96EKQjsOoOV6cELugvpNmqkk7vE8E++eXMw9UW4TH0gR6an/XRQiHlgK/mwLNBios3p6pZFH6XA7XqMTcHCVEIFaDmbvdnEj5EgtTk83APAJKAyVpiD/jYMnYCdO84FTmjbjPCMMGYPUN2PlASdfJp/OESIGWZqqOQedZYyETIT9m+dZ6RQcnM7uWQHqrA7LK/LHUB5ieZ11f3Oxpenldk9yBtyHBuGTcLZWD31xMkqepGN4mpUT/n8EwnDdw6Vpry1OroW1exj9y3whUH0irX9X1cmex8hvyDrykC3vX+JbAgOWTSEu/T89bePK6GpGj4AeARrkIPWw/BsttMN4fcQHZ4Lyr48yjzn2QMqPwh9SYgeSlMgbK4SchoVBPSHfz81e5bKzRk6XkSZXyXpbObTLQ9OjtWCB56hHWm X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cfb24be-9930-4964-43ce-08d892e323d6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:53.1402 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BrQeI/rh6ypWbZKpcasccomm6Vm/LJaP9BLF3X40Ma/q4iQTWN11UP7oEASFUqfs0XcPqXtAju2TzoLasOD+1Zq3jeSHjJvbFRD/1Ql3pc4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Split no-perm part of bdrv_attach_child as separate transaction action. It will be used in later commits. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/block.c b/block.c index a7ccbb4fb1..162a247579 100644 --- a/block.c +++ b/block.c @@ -86,6 +86,14 @@ static void bdrv_parent_set_aio_context_ignore(BdrvChild *c, AioContext *ctx, GSList **ignore); static void bdrv_replace_child_noperm(BdrvChild *child, BlockDriverState *new_bs); +static int bdrv_attach_child_noperm(BlockDriverState *parent_bs, + BlockDriverState *child_bs, + const char *child_name, + const BdrvChildClass *child_class, + BdrvChildRole child_role, + BdrvChild **child, + GSList **tran, + Error **errp); static int bdrv_attach_child_common(BlockDriverState *child_bs, const char *child_name, const BdrvChildClass *child_class, @@ -2942,23 +2950,26 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs, BdrvChildRole child_role, Error **errp) { - BdrvChild *child; - uint64_t perm, shared_perm; - - bdrv_get_cumulative_perm(parent_bs, &perm, &shared_perm); + int ret; + BdrvChild *child = NULL; + GSList *tran = NULL; - assert(parent_bs->drv); - bdrv_child_perm(parent_bs, child_bs, NULL, child_role, NULL, - perm, shared_perm, &perm, &shared_perm); + ret = bdrv_attach_child_noperm(parent_bs, child_bs, child_name, child_class, + child_role, &child, &tran, errp); + if (ret < 0) { + goto out; + } - child = bdrv_root_attach_child(child_bs, child_name, child_class, - child_role, perm, shared_perm, parent_bs, - errp); - if (child == NULL) { - return NULL; + ret = bdrv_refresh_perms(parent_bs, errp); + if (ret < 0) { + goto out; } - QLIST_INSERT_HEAD(&parent_bs->children, child, next); +out: + tran_finalize(tran, ret); + + bdrv_unref(child_bs); + return child; } @@ -3064,6 +3075,40 @@ static int bdrv_attach_child_common(BlockDriverState *child_bs, return 0; } +static int bdrv_attach_child_noperm(BlockDriverState *parent_bs, + BlockDriverState *child_bs, + const char *child_name, + const BdrvChildClass *child_class, + BdrvChildRole child_role, + BdrvChild **child, + GSList **tran, + Error **errp) +{ + int ret; + uint64_t perm, shared_perm; + + assert(parent_bs->drv); + + bdrv_get_cumulative_perm(parent_bs, &perm, &shared_perm); + bdrv_child_perm(parent_bs, child_bs, NULL, child_role, NULL, + perm, shared_perm, &perm, &shared_perm); + + ret = bdrv_attach_child_common(child_bs, child_name, child_class, + child_role, perm, shared_perm, parent_bs, + child, tran, errp); + if (ret < 0) { + return ret; + } + + QLIST_INSERT_HEAD(&parent_bs->children, *child, next); + /* + * child is removed in bdrv_attach_child_common_abort(), so don't care to + * abort this change separately. + */ + + return 0; +} + static void bdrv_detach_child(BdrvChild *child) { bdrv_replace_child(child, NULL); From patchwork Fri Nov 27 14:45:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936489 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97913C2D0E4 for ; Fri, 27 Nov 2020 14:53:12 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2513920B1F for ; Fri, 27 Nov 2020 14:53:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="KF3VxJPM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2513920B1F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:57362 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kif7W-0000ch-PD for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:53:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1B-0001Jb-A2; Fri, 27 Nov 2020 09:46:37 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif19-0003DS-Dj; Fri, 27 Nov 2020 09:46:37 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OoGilyvn5h5gDwYvd/zVB4VUq6TrJA9HLXaiF/qqCjtm/8aF0CBHT1D1ziEwmSw7r92V2Ehy77xIbmv2ZkMgjAuGa1OWuKJYrr6gn1EubCfsNBuvGtAebGEtN7ejESZaR7wpk1WogNHKYthT0OgS/53dAJ7IGZ6CaYxblXbUhXifWHFhsJwFUmqYrFUIGNMSBo92lqqy/9zhcHyic1Z8h5lmb7N7IUsNTHvtRfPaWYiJ8ARHMIToW/+2p/PKqVRAk8CBRaJHMQzJg4ZSijPXftzZ1hgaM4FZhcg8/OVQWM/5o+8l54KYlJ7wMAs5enZAuO1yhQ+nCTR1S1Y39iJ4Gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xKN9yECXmDsEndmbuaFlWwWXnSInIwqhze3MZouyOac=; b=gGyqoo0KcajIHs3/yR7s+74MWLOC0RBWo0PIlPm2FhzW+oZ/Gga6je/BamQt4X8DJ4Y9wcQrbwi+TzIHvNbFFMj4iNl7MqDMCO8+DM4mlTa5rb5E1OD5qDUjyJCM7jNQJ21iscihaUHlXy8yV3nE4uZH9zbdUAyPaPEaMhhkZnukO+wtGKvGJwU8KELYwySlrRTIdNHZm4oGbkt/lKnbv3X6S5GG8bgCG+AauxM64XItZV7xnSz99E7pR5MvzvrETEmCIqHVCa+/4e9xg0AuE28tHAqImvP7u61axz/kCKLwW/2MgSKnitYwE+iD/GnC5cJ2cckyjOc6nr+G7TmzyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xKN9yECXmDsEndmbuaFlWwWXnSInIwqhze3MZouyOac=; b=KF3VxJPMrN2zedZqkNFogyVEz9rrzGdIcNiqwrKjlNZ/iO/+gB9yW3csN0SUAwtq5gD+WAquwHbSjFj/I+MUoPuSWHCM4Yb13A+wDVE/n2cxd+xh+a1NRr1PgGLjauNg31UUbJgO62gAchp+1k/gxlCS/AtetKMyAd4b7Op/gVc= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:09 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:09 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 22/36] block: split out bdrv_replace_node_noperm() Date: Fri, 27 Nov 2020 17:45:08 +0300 Message-Id: <20201127144522.29991-23-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:53 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 64b6143d-9113-4559-6901-08d892e32450 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:175; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ED0AdNS7FWxHDAN7s0GBZ+QujZTcKNiLrOhaWHense6F+ENZiv0ax7pgWsVn2zAiB7NLBedQ1ctM4/naSrS0wWXRAPc37eL4IITohxAeYiKmYYg5as6BKq3Lfx580gRxchZ+kMHbl0OmssvJnjG1iQMx1voBe5i4K5GSWrKK4MMF1IJ1z6m40eXy+Ebsu0keDw3dBg+EoKOvr6hf6jDELeeyKWC3LKCBaL0WE8nD/vboNxaIF6Oao2C1JL76UcmFH3kgIYKy65DHz0QnkIPd32kXFAge2QZZJ4zEmzAEW5snNc+MhgiovbEKd6UCQ/bGIf6Ef46HRRsCdeHG8Y2ZlridJ3dWfhofCPKcW1Kl0IQwzHTb7XexUMJ3ZHvfcl/a X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: QwpG2OYIYA+McHJHb09AZRaqBrynsvBgg/lW6KR8qZBL4WAkkWfBgBVEs5T5UAOgUbR6dkWL/KtqtKPjnR62S7C2u+1wv5W88OlRuVvmMceUFe7Jy6a7+xCzDM2clVxIz3QZ6nYgQG5l0gmXYJXCdBUTSAR2ovWda2aE/yFhvZXie1izjJlvPEmRcNf2my+Q/uaaR6Iz17HVIgP4Xg63NE0hRTwHAxyYONkc5U6tif4F27lMEiRl8es4lY9Ki8a/DtHuhD+ZTLl/NnyObzYtQPIQT8djk3ofBhtW+jatd6fqiVXFYKjQr520n458F9Pc7gfTx1uhTEokv/UtgfzYyymC69VI7oi2iARO+nMnzevcjd0d2+qFQTOfcA4+QMh3LUjSAHAbvyuHSqbTT2XRknYnr6TqvXciquvpRiUak6vf18xyGw1CI4BgIxgMqR5JWTuHyEePzBUIRR0Hh7HalgS8momhzPp9hT4BXBglIeeevZpeCm1RlqBf6YVOmnXYWLyyEWpjsCORnRUGKKIs8WOh5g0LU7tX2bUtEN9KAmogSdpsmVNCCzAfsthJiZX6PbIMxn22HlSZ0pKUE561fvkhCUEBBCdSiTHZ31K+82gRDY8HPH9CzQAE4xECVZgG9CvGvq64FHgYAC+jFyd8sX1GE3QDwUBxeoKYWb9ODxGJRBPjCjtgsQdRPcPE26xaYwzhhhdlMIM8k8XfWR4283ZLnY8waXDh3qnhptFa9fnk0eguQBKyJiUDMzPL3MbQGGkq2lpykzixuseZZsUya4CkIqnLNB1UlmnD87e8k3taIsxDzAlKLvg0i90Ib0Tu+zxx8e+z6BHItIaNc2rz/R2QKZrRh506z8/qyuC4yuZE+yjqEY6Csw+SRvTYBnZtpLEYqyO2gP6dZb0Gef9AmfdXr8KsB1UGomRb5Bwa6aTWbFbsfg6hD5vqBrPUTyfGq/TguuVsE+OmPHJp3gysmLHnhTLN0LS93xMeAHyl4jpxGElm7Zc/lMudlagtrGVc X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 64b6143d-9113-4559-6901-08d892e32450 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:53.8909 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: i2vcsij7/feogZLaG2q9LnaV58UUtZGGnHu0NoutPyJ0LTD0a/mr3ZPoVeFWhqt1Ebp4QxTFbHLq5LuUbjNvy3bnygcGqBc/xoRZTP7QkFs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Split part of bdrv_replace_node_common() to be used separately. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/block.c b/block.c index 162a247579..02da1a90bc 100644 --- a/block.c +++ b/block.c @@ -4897,6 +4897,33 @@ static bool should_update_child(BdrvChild *c, BlockDriverState *to) return ret; } +static int bdrv_replace_node_noperm(BlockDriverState *from, + BlockDriverState *to, + bool auto_skip, GSList **tran, Error **errp) +{ + BdrvChild *c, *next; + + QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) { + assert(c->bs == from); + if (!should_update_child(c, to)) { + if (auto_skip) { + continue; + } + error_setg(errp, "Should not change '%s' link to '%s'", + c->name, from->node_name); + return -EPERM; + } + if (c->frozen) { + error_setg(errp, "Cannot change '%s' link to '%s'", + c->name, from->node_name); + return -EPERM; + } + bdrv_replace_child_safe(c, to, tran); + } + + return 0; +} + /* * With auto_skip=true bdrv_replace_node_common skips updating from parents * if it creates a parent-child relation loop or if parent is block-job. @@ -4909,7 +4936,6 @@ static int bdrv_replace_node_common(BlockDriverState *from, bool auto_skip, Error **errp) { int ret = -EPERM; - BdrvChild *c, *next; GSList *tran = NULL; g_autoptr(GHashTable) found = NULL; g_autoptr(GSList) refresh_list = NULL; @@ -4928,22 +4954,9 @@ static int bdrv_replace_node_common(BlockDriverState *from, * permissions based on new graph. If we fail, we'll roll-back the * replacement. */ - QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) { - assert(c->bs == from); - if (!should_update_child(c, to)) { - if (auto_skip) { - continue; - } - error_setg(errp, "Should not change '%s' link to '%s'", - c->name, from->node_name); - goto out; - } - if (c->frozen) { - error_setg(errp, "Cannot change '%s' link to '%s'", - c->name, from->node_name); - goto out; - } - bdrv_replace_child_safe(c, to, &tran); + ret = bdrv_replace_node_noperm(from, to, auto_skip, &tran, errp); + if (ret < 0) { + goto out; } found = g_hash_table_new(NULL, NULL); From patchwork Fri Nov 27 14:45:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936537 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E20CC2D0E4 for ; Fri, 27 Nov 2020 15:08:59 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AF6DB2223F for ; Fri, 27 Nov 2020 15:08:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="rl+oMzxE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AF6DB2223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:49596 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifMn-0004Lq-I0 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:08:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36894) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1C-0001LD-8x; Fri, 27 Nov 2020 09:46:38 -0500 Received: from mail-am6eur05on2121.outbound.protection.outlook.com ([40.107.22.121]:11777 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1A-0003Hm-Dg; Fri, 27 Nov 2020 09:46:38 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VH6qX2PkB5iIioMDuknGbwshFfgF+wCqZontN901DJuM2nHWYxLzi8lpD5GlVhvc9rHt/D/Mo1aYaGHg29eOU3Bw2vLbjAkVtY3WOHOG3jk053KLFxnTNym19DbA8fxgA8rSt1LwqtuiQFKPlCYcGJkF8ByFUdK4mVFjdc7tsWTC5DRF08qEqHkBu4h/fZ1UKSaJXkpD1NknEkBP5FWyr9Qjq4Em05ciukTwNzmcZDX7Zuqm0pgfPC/aut5fkCJByXR13Wm0tVypBf6w0X6s216qVG6XX9VQgWfqLM5qIJ0GsHuBAVp2KLdwpr7nUGVq5hR2iAQaigcDa08dolFasA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DdqWO7wOkTjwxDUptEpRMyE/UmFT6wo50Q77C0UtaaY=; b=B+QSmEuD/jEqoAH0H3nWwU5XDOWnnrfmnY2WccpGrnIYTihY6UdYucjYSNqoJPBiF3/0h2DorpxlDGTnZCCJCFvn59k8hr23JXq31WkH7KrSLYUn0fG563a+U62Hcc1pGtir1XvB5A38dYLWQyRVBz61JWLy0w+vNj+5qDQdfzde9j/DVyzAuhztzvj6Sgr4IeUcV/JhB7PzoU5TrChjVBuwcDmRtrY52D1gMRFHL4YSBtlSSU8LICCeb1SNKaS2TT+8XUBOuEazBG10ytn2QscNcq9at9sMUCzgv3J+m+NxnwMKcbOO/48myOcd/YOMcqozOiopihSHHTefN1nK0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DdqWO7wOkTjwxDUptEpRMyE/UmFT6wo50Q77C0UtaaY=; b=rl+oMzxEOVX1fd37KMC72hOy2tvLSy0JHN2SCBeTmM7VJOuff9IxxbJ7mBl3yTUydsWQghgYYqAOXcGCWo2G1Dv2eg5mH3k2RQkz5YrtrsYLPuBowFXkqjZaEfu3U+E0x91SmJxDLudLkSk55URJuBD2nGaiY2zmrrIDZ/I44dc= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:09 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:09 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 23/36] block: adapt bdrv_append() for inserting filters Date: Fri, 27 Nov 2020 17:45:09 +0300 Message-Id: <20201127144522.29991-24-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:54 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 41c7ca23-cc3f-4ccd-2cb5-08d892e324c4 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xI4/Geu4c+Awy+nzGTPgfIiC5+w0U8XGJ6hTMJFRQElrfE8msHJt9eGlhXiDwsuPKhdvNqinGAaHvlHHfo4u3EkEfrNyLLbwt9QMuVMILiauKQVQ3XThV2oX17b/UIuUlAWzxEzx47qfrcDIN6hogD7PqgFfO5CosIqMUx8q7KHywz5rvwHYW65LGgtyW30rc3ahe3/B0odO51q7BRtL0IrfdrA7jd7l+N0AVr3VV8peqJ7b47fTyJdUzdh1v/x3wbt/bpbdTV8LcVrhDR3hvqUd+HfIvHRtnP4YwtjdwmbPdwtA5jOL1xi4DnzCXisqwyoW35bjGDPYTQqAiRjK4RniG7QdckgxxPgF/9uvd0UDmxgWfxB60Ka8iTJv8OFQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: DKABlbfx+lyU8fSlxxOmEKUXNbpM500dFl8C9fMj0478aSBKbFnax3aOQBTZggt6qgDdNdrRWoOBsVTLD2CLePN7UaLV4G5XGMQ4TrKI+ejfmLDIOTwWmZwgL9LJF/KK6U9T0DLbq8XO5O85kLuQPq14XHmpFJ2cf1IP5gEY0yFg6kRu++5bBPwf+1YFOp/kS8Cchk1YFUxkqx9VYmdfeaRke0QFb5Q/yHeBYBV6JVlsbHBY94GUPWyHbAGXwG1uixhttbGK4TxZgK/u6Eg/YZiS0ln5QVoEm1iYch3mnJw5q8cIC4C30o+9xw5lGExawI7zHibzZR+Re6Gwt1vBr6MtYT5Uqem74+4wRWAU8ssdtDsO0HcmS7Zd5Enm32IzCss805zTI7wWSNU3+RLXzbmcyJmFLJwyHoNdAAZhioZPewAeg5m/3a3Qa6NgkkAiNp7nxL32+ygbsNAuWXCfh1pEhaQlQN+rltDcNijR/ouz8FbH+YGCZbniwp9IHG5OYVm0xpQwyJwqmAGVoyqazLeZL1DejJY3V6KuEjDdSYJr4QhlOzmwridoEzovLMJ5qSeBei8Z5NlIejJEpOEPHYupO4xjaAugdzGNNhZFWv6B7BHtcgpRvJbw0g4HAxY1YNUTNIAOv2+KRUb1SGwsPq5HUhpFXTXSdt2GVb/Jg3k2XpLQjM7a8OhcVN6SDyJcNFxvD9mqrlyk4ogRAv/8g2UOpz4dbK0hFDzi31qBTydePxLqBgn4l6A0IGv+63KUN1MOZzTYn0Lpr9N7jnMN0+zgC9d/VoICrY5oxNjrf6+LsYtEZCrP0QuHw4cqlYJA27Qel0VIu1SmP95NXiptq7Klt4UH3LBI15pO0diI2LxiqGKwIk2tuYYMZ7BW6Df1cPy6t/AWEnXyKpVcrguluuX49uUdmpIXuJy/kTomxXWw28mbxe8zpy/0QUyxfs+7UdWtaPZFScTmKZA1JuA9f2GgJmUbZ2/UwibqTK0OVNyLp7x2y9VF/vPi97ZPEdlu X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41c7ca23-cc3f-4ccd-2cb5-08d892e324c4 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:54.6486 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +KTUELnD4sRfvUwJca3SnLwSFmTTsX/mywxl0+mulhHxWDh0FsN7jcOxI1JQxfGdrylXLF8tzvo6lcl1znGiujhV5UWZBZ9S32TT4Yas/gs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.121; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" bdrv_append is not very good for inserting filters: it does extra permission update as part of bdrv_set_backing_hd(). During this update filter may conflict with other parents of top_bs. Instead, let's first do all graph modifications and after it update permissions. Note: bdrv_append() is still only works for backing-child based filters. It's something to improve later. It simplifies the fact that bdrv_append() used to append new nodes, without backing child. Let's add an assertion. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/block.c b/block.c index 02da1a90bc..7094922509 100644 --- a/block.c +++ b/block.c @@ -4998,22 +4998,28 @@ int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, int bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, Error **errp) { - Error *local_err = NULL; + int ret; + GSList *tran = NULL; - bdrv_set_backing_hd(bs_new, bs_top, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return -EPERM; + assert(!bs_new->backing); + + ret = bdrv_attach_child_noperm(bs_new, bs_top, "backing", + &child_of_bds, bdrv_backing_role(bs_new), + &bs_new->backing, &tran, errp); + if (ret < 0) { + goto out; } - bdrv_replace_node(bs_top, bs_new, &local_err); - if (local_err) { - error_propagate(errp, local_err); - bdrv_set_backing_hd(bs_new, NULL, &error_abort); - return -EPERM; + ret = bdrv_replace_node_noperm(bs_top, bs_new, true, &tran, errp); + if (ret < 0) { + goto out; } - return 0; + ret = bdrv_refresh_perms(bs_new, errp); +out: + tran_finalize(tran, ret); + + return ret; } static void bdrv_delete(BlockDriverState *bs) From patchwork Fri Nov 27 14:45:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936543 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F34CCC2D0E4 for ; Fri, 27 Nov 2020 15:11:17 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 56EA4221EB for ; Fri, 27 Nov 2020 15:11:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="wIyTZCXe" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 56EA4221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:55836 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifP2-00071s-DL for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:11:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1C-0001Mn-TU; Fri, 27 Nov 2020 09:46:38 -0500 Received: from mail-eopbgr60102.outbound.protection.outlook.com ([40.107.6.102]:38277 helo=EUR04-DB3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1B-0003GS-3O; Fri, 27 Nov 2020 09:46:38 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X3ucvFxpXt4OzW1ovEK2U4NSPruVEHoI+jFoLL7dPp+cUnTam8x2u1c8S9ASuZaAnyi2B/yC044sQR27sYhpOLBTmZ0nwvixXxhBZxvLyslj9ZjQXb7/gwt1hIYpU0qgxM4IPYsuhMWQA9aaCz3dPNV1lxEAyMUmdGLwGXIcC71OtQeyPbzVobDdHzznZfQYb7kiNyHQBFBG9uV4BzhC6294Joos2uEpksJ4OYc8mSoY32kk0cgyQcpMvXKHQJzriGguIAF4Ks/ynpx1Df8WpilrT2LCWyU7j1GhsqDXFcnojQLwEfEunzXKiiHHwo20Wo8+VAfwPyP6OiDdOu27sA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wfp+z6AnITN1J6/qdtxxEdYSQyioquExT3C4KlKuSd0=; b=JbAh9qBn1ngZL2WnvV/1HXYcRA35hViuAO3i/xj/x8oEtks+HK0y22e5F0dXBI6mJyH7MLm3D69XzsLZWsxl3ByacJWNK6HiTJtkuFUrOsUQt3R48/JE1wh9+4Las/Z+yavxuVKyz3plZZdUSIrQMRx/0grJEZRlvepLPXsYOsDycReelMigQA443Pa03puMGjBYrOaZPgZN0Gj0CK9cQzW/FBSdG5uugHHRhzNrAQukgAuojQaFWp0sewEzMUgl4MjhWtng3GkQtRmFcAzMSIE3plwhdjQyxkcnmyMV8odojlhjbpAk5MrWPuFpwkHd0JUf9KllfGdfuq+08fJhvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wfp+z6AnITN1J6/qdtxxEdYSQyioquExT3C4KlKuSd0=; b=wIyTZCXeLZ5A0KEhevzNZv62XA4j8woyR/fGyCCIaeyG/Dy1wAcqwAYQU7A+Ynr6qXlu91i1IEK6ielFVxQLaWy4tG8kDWH5ic+MxWY00kVyzlYKI0+SYq4zcpuQAYNpSIJtpwsS0D5EvboQk1zJ782iudtfa8pV5WGsQa+ZkLg= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:09 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:09 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 24/36] block: add bdrv_remove_backing transaction action Date: Fri, 27 Nov 2020 17:45:10 +0300 Message-Id: <20201127144522.29991-25-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:54 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aef80d8e-cd88-4ee5-cff4-08d892e32535 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:81; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sobKziAFOvRgbFm00KATuQ3izMPJkbIJbMzExgA4fOl0y6U/+eifTkIsbrcXxwOzM+pmlUFY12sR3DNkBDis9bB4z/+TTBQ86vKHcNW6Hx3jKYyGg6HTQDgHv7HKAyCP7UhI45I3uFmZMznPPHaV2G3kB1b53kbefgRDXzY6kJFr02SS/GSRRAy7Qh8eac9/qhOSUvJfqapcFgo2o8TmIuDL9mqtn2WEEF0cJKry1BdkNwRzGZxbVfQPWJMfP/kHm4MAylty6jJQc0vsNrpNtrMtk0vrbd4zpwgfEx5At932gzFnWN05H0Q/GEtkwQbpKSttdDGe1+3V9vPkYR963HUJKjlwcInTMc+aT9BYOL4GeLZiyS32LyKr92HpZshT X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: jTzY3TL+c7nJUo8rvawic0YZLupQo9yMwkPixSqMJWfd3oOTPHx5hCtB+2YpOVEG3eFbPNJl6+HVQdic6U2u6V3WcD1dGsWt6/pe2/eS4e0LWnyz0eITeSAvTaEZWyw1xlHY/AI5qfqxNMRUq7ven+j6xLqElV+/zsB4ORp5ZD/UcVb1tT66jQXSRa8P374IxFCEd2I1SNTIVEw3ZuwZ63y0k1OH+B4Ooahhc6xfZ85mWz4gn0TnP/AelC6Cswfn83TPZVXsD0mpLfuIpkISd3UEFN3SRX0eNiatINbEGfoCd0IBwMndDywDkxWRb+P4ib4PnJxaazf1OtEGcc1paMfhlEJe6b/aljPqBSfiuGVfBDIMSnNWOLPxhGpBJNEMHzVSvBQofOC9edBNP0xpD0G3SL4ER8EgMX2BzbWDC2rElpqC/35vdh2QKAucyTGHtP7EhKHK6oKAuLEKi/6cYKuRTX5OLbvJzwe2p5LEkPMxHb16gD++35JQkjO6XaG9CvfohvGBcB2JlIyCihIE7RzSFbUPFapJbSN3/N4+/6He76P5spWOViK+n2bzK+Z4s93/CFv2F+kj6QJ24SnfHhmd63BdlVwfqmSAvyk7YvV3XGXXAU9FrYs81+v0ExC/Zan6rVrYrhCxKAtMefoXe1QyvjLqaUAPqg006w5jsBZKnDY79nDD3UYJ/4mPggTB12dnw1tzZ40a98PqFraVbsFbB5johc8u+fspSgCeHD8JhVQDwZiKVe7ZnbXAq9mxYKSX4u9AGzYbtSlN9MRW8jJ5r/YN0BeH0PckTXzjYMqT4HWR0Ad/iJhb/t8HEMobOdbg9IzpW1Zuo4kdeXd+rBhr1Jqy/9cu7mjyjMJgl7zBsHQisc1cdqjqMqeUXh85bA8Kk31Hp/h+TUHc0dB9/VrLOo7bL/ZSn0xbKxOA9kcGSUWotPbUDl/x5YjO5WnauyJ08mxYhLrNMH1iEZiATBMF6PTIqiHkXXhcqU7siAK4wO9mVd3e02hUZvk6m8+G X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: aef80d8e-cd88-4ee5-cff4-08d892e32535 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:55.4093 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: H0QYl6VOCCSPmKI6eSA4ds36QyFXFx67kbQUlq/ivJsRyz6wsnvVSsZKgW+fxt6PPN7bqqLbbHa/NuSGNr5jEScCJrz93WCyltlALXGrvWQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.6.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/block.c b/block.c index 7094922509..b1394b721c 100644 --- a/block.c +++ b/block.c @@ -2973,12 +2973,19 @@ out: return child; } +static void bdrv_child_free(void *opaque) +{ + BdrvChild *c = opaque; + + g_free(c->name); + g_free(c); +} + static void bdrv_remove_empty_child(BdrvChild *child) { assert(!child->bs); QLIST_SAFE_REMOVE(child, next); - g_free(child->name); - g_free(child); + bdrv_child_free(child); } typedef struct BdrvAttachChildCommonState { @@ -4897,6 +4904,37 @@ static bool should_update_child(BdrvChild *c, BlockDriverState *to) return ret; } +/* this doesn't restore original child bs, only the child itself */ +static void bdrv_remove_backing_abort(void *opaque) +{ + BdrvChild *c = opaque; + BlockDriverState *parent_bs = c->opaque; + + QLIST_INSERT_HEAD(&parent_bs->children, c, next); + parent_bs->backing = c; +} + +static TransactionActionDrv bdrv_remove_backing_drv = { + .abort = bdrv_remove_backing_abort, + .commit = bdrv_child_free, +}; + +__attribute__((unused)) +static void bdrv_remove_backing(BlockDriverState *bs, GSList **tran) +{ + if (!bs->backing) { + return; + } + + if (bs->backing->bs) { + bdrv_replace_child_safe(bs->backing, NULL, tran); + } + + tran_prepend(tran, &bdrv_remove_backing_drv, bs->backing); + QLIST_SAFE_REMOVE(bs->backing, next); + bs->backing = NULL; +} + static int bdrv_replace_node_noperm(BlockDriverState *from, BlockDriverState *to, bool auto_skip, GSList **tran, Error **errp) From patchwork Fri Nov 27 14:45:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936535 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2672C63798 for ; Fri, 27 Nov 2020 15:08:03 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1616C2223F for ; Fri, 27 Nov 2020 15:08:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="firMSDma" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1616C2223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:45056 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifLt-0002Vp-WB for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:08:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1E-0001PU-0y; Fri, 27 Nov 2020 09:46:40 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1B-0003Ef-Fl; Fri, 27 Nov 2020 09:46:39 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lLJEbuwlw8f8k+6q0nFLR+0oXk+fuMeiXKggt7GVavUIH9eP5HEDWLxEG87d2Lk+BPZN0JGGF5gq4uoz4cNyfgZE2LNaEGj9ssJ5Yw+QXM2LYinI+7mRpPxvbeW/MHM9JUm2XrdgcCafhA6Rtj6rGZ5mZroE/uCvOkkyRD7ghlkmBaVuOZKq05+4KFZY+VhlbJy21HKImYZPOzuTvWHr1vHGu2aW8ITH13QFIHBNl63zA26CIAMRT45I8bZry8cknWGSDmdZLCkmn+DZIvvlFko8kOHTH0huX3nAqP0J/wNiBDqGHf8l8hCHf3eVaJMeAHHcVFnQwNwfs8oV+Kcymw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e3/jJ11NmJYIGTmvc/E+AaxtaGcjfHbiP48Ga6tajLw=; b=nSoupAB36CIRJGPWNfuzlddQsN0tfa3MjdpnAj0yxstd6PvpWNhzWGgsihzS73PljeXjBFzUdNLkF9H3GMUU3EIyIMR35krIy53JeHJxIkCZBYnaTqEdQ8/kuadU2FwuSrCei84rKj0fj1FbrvS69ATY2AOM8fJ/WVKiNO+7UT5XRf9pO47XmNgL8f6zCjJBOlLtyDPFdnojSC2vzDIweGs0rFEenywOsvYMI1L/00VapsU7hC/yMvTXAfSxqDpz0pJB1c5WtzmMBFWDhQf+e9faF8wV+3Yb+df0PyaXOlneJf0mBNlenv4cV0wq3XrqPIaTDsiBdeEoCFeEOEnefA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e3/jJ11NmJYIGTmvc/E+AaxtaGcjfHbiP48Ga6tajLw=; b=firMSDmadOgBkaCrdXjYkD0zXavWk2aGPfykQeGlUJ3/ALlNKlQp+/kBthu6FRpjX2wClnnKPwuovroKMdTon4fwUmS7I95DOMShOcaPsVP5qLstwwazJocOcaEzPGE6RS0nIpMWzvMds4DW4vZHWCIKzwp5BeKrRzFBpTNeDhw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:10 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:10 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 25/36] block: introduce bdrv_drop_filter() Date: Fri, 27 Nov 2020 17:45:11 +0300 Message-Id: <20201127144522.29991-26-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:55 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7ae10653-b76b-4785-45e9-08d892e325a9 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JixDfZX+m8BIFjdmn/maumd/4lXempl1MyE+3fvm9tdAj9NlSTVGt7mWrigQXfv9lSNk+m6zSGK0KJhavExQh1wqnOb1SEZF2fYhvxOSL1jN+YR0yeS0IkXpDAOy/mpsLA6mYboayPsKitf3e7900uTzrTgyq0ChpJSlLIUZptOq2MnLZXVbq2R0A7poD6Ty6VuWMjZKv6xwhd7/dr15gK66zVBh7+vmwPagG/I4Bfg9PjRwFuAdg5DyM31zjg+BbxdNDRCiu6KjWHmyvTp16k0yg8V4GXenyxzh3AZ9JaYmr9YFcIm/EdbyFQkMyYpBNPpAnOJK7kJkF8eySxIYYgvv8+O2Uz0Tcm0fvsehJ/+BCFEi99EQE2/q9iwm7xBt X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: VI+E9N9keUGti5svXkJRTU/veZbhjFkhgxzxTdZCCemseIcZkb5xZCpom7VMb+3RVj0vvLJZNJC5oM51rgw5zNPZRQBumO3FIMMwQwE6TcsuDGU8TWVcZxFTn1YvQn2zyGy1RUpGjEY4uNnU9BV2pI73ohmaUWxM3mFlEvc2T8MpFhn2kDZ087oyNRLNzYD0zx6XSKsgwqvqVbuu2H4u3ZjWue1tJlfJ+Pa+ks9ljuvX1gXvsjJCo6P1jPNnsnbHtTQKFQGKyCdlaJlgq8F+5On9TzuubY/U5tc/aU9KZ68OBl33yxRSAZT6/78M+usXoLb2KIP1mCy2zyZjIt4AQPOBDAnSE+IDZqY99IpshM57LbpTqQOcD54psbbZ6EjUBlUtXgPau30EU6MTnTtKxSYM5Tvm9h4ot83U2ONZy66h/jVe6sBEVjyZhS978bkwWYOI+lM4OL9dPd5X26plvQyqTFELQi/v/WHF2LKemlRk5GemuHOn3IQtFGZJxQ+R1l7QI6Am2y+mielFj2ccrrYm7maIvxCgHRuF3BIsi2RNUJ8yoUPOB1lwh1rr9swUlRNHmPho6tw3mPe9dJ+Mz4GGtsRQMcJkyKVcEjucQL8QXYiTRZKJZEc8sZp+KmCg3t4LrBVafT/twFRBqzjXZa8bZBn96DWNxJbItCirImwQx6/VgdjBdXvulMf7Yr/CQ+azYjyNnaVMAEc2uGE1YKFRMIoSXB+u8ZyJByHKpM7Wpy2amlIccnrOKxb7ZaeSqNgB8qHeY1ghzVkWswUH6wntVlIRsd3DjC4AskNtel3IQdbpE6WpS/dPIdS0TRFZpzaYOTiOTdGAcnwbhsMeohhvB/+PDupeVCEJt2wuony1XFt9SOW6ACsD1XqukuqS1+wptNZ6A6aWhsK5AunhktYIdTPdMLMXScMMEIdsCgo0kXb+z8gHct6yxjEf+8Ok0jcwr5jtsq9uRePE7H2Gtf+fItve8C6v3oPT50+HA0mtiEJktCBf7jyIDnpGgmAP X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ae10653-b76b-4785-45e9-08d892e325a9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:56.1500 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1um8fenG6bUfn4k4RwPrdItqWZieJGt80nzH9HZm1Qk7kQeQYBrcQMFh+kxU1M9dOGzQEptounwqb1hSY95GdrbioozZHcVtsVadmBX2IpE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Using bdrv_replace_node() for removing filter is not good enough: it keeps child reference of the filter, which may conflict with original top node during permission update. Instead let's create new interface, which will do all graph modifications first and then update permissions. Let's modify bdrv_replace_node_common(), allowing it additionally drop backing chain child link pointing to new node. This is quite appropriate for bdrv_drop_intermediate() and makes possible to add new bdrv_drop_filter() as a simple wrapper. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block.h | 1 + block.c | 42 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index 8f6100dad7..0f21ef313f 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -348,6 +348,7 @@ int bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, Error **errp); int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp); +int bdrv_drop_filter(BlockDriverState *bs, Error **errp); int bdrv_parse_aio(const char *mode, int *flags); int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough); diff --git a/block.c b/block.c index b1394b721c..e835a78f06 100644 --- a/block.c +++ b/block.c @@ -4919,7 +4919,6 @@ static TransactionActionDrv bdrv_remove_backing_drv = { .commit = bdrv_child_free, }; -__attribute__((unused)) static void bdrv_remove_backing(BlockDriverState *bs, GSList **tran) { if (!bs->backing) { @@ -4968,15 +4967,30 @@ static int bdrv_replace_node_noperm(BlockDriverState *from, * * With auto_skip=false the error is returned if from has a parent which should * not be updated. + * + * With detach_subchain to must be in a backing chain of from. In this case + * backing link of the cow-parent of @to is removed. */ static int bdrv_replace_node_common(BlockDriverState *from, BlockDriverState *to, - bool auto_skip, Error **errp) + bool auto_skip, bool detach_subchain, + Error **errp) { int ret = -EPERM; GSList *tran = NULL; g_autoptr(GHashTable) found = NULL; g_autoptr(GSList) refresh_list = NULL; + BlockDriverState *to_cow_parent; + + if (detach_subchain) { + assert(bdrv_chain_contains(from, to)); + for (to_cow_parent = from; + bdrv_filter_or_cow_bs(to_cow_parent) != to; + to_cow_parent = bdrv_filter_or_cow_bs(to_cow_parent)) + { + ; + } + } /* Make sure that @from doesn't go away until we have successfully attached * all of its parents to @to. */ @@ -4997,6 +5011,10 @@ static int bdrv_replace_node_common(BlockDriverState *from, goto out; } + if (detach_subchain) { + bdrv_remove_backing(to_cow_parent, &tran); + } + found = g_hash_table_new(NULL, NULL); refresh_list = bdrv_topological_dfs(refresh_list, found, to); @@ -5016,7 +5034,13 @@ out: int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp) { - return bdrv_replace_node_common(from, to, true, errp); + return bdrv_replace_node_common(from, to, true, false, errp); +} + +int bdrv_drop_filter(BlockDriverState *bs, Error **errp) +{ + return bdrv_replace_node_common(bs, bdrv_filter_or_cow_bs(bs), true, true, + errp); } /* @@ -5326,7 +5350,17 @@ int bdrv_drop_intermediate(BlockDriverState *top, BlockDriverState *base, updated_children = g_slist_prepend(updated_children, c); } - bdrv_replace_node_common(top, base, false, &local_err); + /* + * It seems correct to pass detach_subchain=true here, but it triggers + * one more yet not fixed bug, when due to nested aio_poll loop we switch to + * another drained section, which modify the graph (for example, removing + * the child, which we keep in updated_children list). So, it's a TODO. + * + * Note, bug triggered if pass detach_subchain=true here and run + * test-bdrv-drain. test_drop_intermediate_poll() test-case will crash. + * That's a FIXME. + */ + bdrv_replace_node_common(top, base, false, false, &local_err); if (local_err) { error_report_err(local_err); goto exit; From patchwork Fri Nov 27 14:45:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936497 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 763E4C2D0E4 for ; Fri, 27 Nov 2020 14:55:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C0D6D221EB for ; Fri, 27 Nov 2020 14:55:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="B/k+QyCb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C0D6D221EB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:38282 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifA8-0004K2-Tp for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 09:55:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1G-0001Uy-3i; Fri, 27 Nov 2020 09:46:42 -0500 Received: from mail-am6eur05on2133.outbound.protection.outlook.com ([40.107.22.133]:13377 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1C-0003DS-0N; Fri, 27 Nov 2020 09:46:41 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LdZeuOBz2r0w9zzx84LB4QNCmLquT5u2SzmxNzvpW/g1Mo8EAsSC5nsPGuFKKDk9me6Z2tlTkaBhB1HyGlbTOITD3FbHUYabU6/GQskGpMLEn8UbSfEyrElMI+Z9mrml68Bt15yrNI022YqWLrpjeDNtTbja1L/zS/IzjyagjklsVUQ5Zt11L153x9wbqScq/6aErFvpz02kg0PokIZe4hxAewKwuYUgI6wr5LnpOL14D9ntchJjkJQpb+zrZzFvsqmKHrsmMVWshOvt7ITEyBd3JTNlBQZcSeMfDtR/4iG1nYIgS4NJQQ8LYPoM2DNmgXF5p9rz4RKiurw3OwAolw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OheHyaMRfMYYcR/ah1/njMb6IkLTse8lLLrna9dz2r8=; b=EklFg9aZmd6sUz+FOSnq2y8F9jSNvTV+2olskdeOm185dMLcze9gyyAkwePxn+KFpyFkMC3StJXeuOirfdiLyn31M404Fbz5Ohxh/O+g8OBIxkrbsg+NgRIkTymwXSwNnSv08EWoojFJouR6+M4+XS9aQVRdTfi9Xorzr4gT2snax38vcp54ZrJrFmXLWrXMPT5TB5ZwsVofDl8rSiPfqrHyc70A4dx9w5ZZrzN6rpvMmhUq0rwUp6n5KrvndrWgarxJQqaNq2ev8u5+ylg3EqSZ/w3XzaB8TyzYdH7bB8Vhgssb43VWfIivNDmUaX4bfEZDfgN2H2wpmC9A87vVWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OheHyaMRfMYYcR/ah1/njMb6IkLTse8lLLrna9dz2r8=; b=B/k+QyCbhQvZJba8IVLqa6IjYPtVkhBxMNGZL/nkfXsSsKr/efyRTTcCVSumvuDs3x7dNinvpK0BToNt2niSNas8QHcu2VJxRw759Wyo5DWCfGZrEv7JMxDK8N6QbBOZzYTeB0c6ROWnfhW7Xst8EIzsi7eMJpPLxbYQ2VxBRUs= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:10 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:10 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 26/36] block/backup-top: drop .active Date: Fri, 27 Nov 2020 17:45:12 +0300 Message-Id: <20201127144522.29991-27-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:56 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a57a6b0e-c00f-43ab-717c-08d892e32621 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:345; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Bb1To5Sf698b1K30A6rJ22aFN+0/KLfYCEwcZ1puinFEkFBWGlkeQ4LX9vRhCsymVSb6fxMkqYlxq1V1nvj1NJTSLhgwnz8AxVWRmftE+aBOxhXtAFgqvqFLnItHj9ew3kb/Yyo89M8Hak/2muFOrj9JEu8cjz7XdirnM100K+36Jvy7mRODGwSMHjAt33Md0mcA7PBs5JfXFGuCeOu9bfjZMGy73G4lUq+AZGCTgHRXDjyDoa7KTz+ptkZxST3WI3ynWYLOsTNQBnphHd5FtFDzKrxpd75JiWIT2vT6IuRPPtKdMQdAkZbl6FeiylksP42g8Pf+/2YIxZPJbj+1XEYU/lfU7zQcBYBVcd/E0oK9neO4tJrqkRskoepy9nX5kDi5BETJW5zc6ZNI/j42B9Kwb687nCWLy2gPteRdKsA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002)(142923001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: Dc5FKzn+Msvl8VNEctbnl6daQ2gg3+HcvzkypvjLHwMc6Kfeco7vaLsAvBpTC5m7wR9PjqBINzB6H5DiBacWvT9sqOp6UekOmMjAovPq6k4eT+G9WRqZFxCF/kG1K+/1mJzuquX2DGdNDjtpA1e/mt346ERv+8fYaX7OoJ0cwS5FxVBOaTbzREKoMLrU9RkqRsiW+5si2lyAyHRC7+JF7I3g4ALRJcNfMvL5n7tkYQ85k5t6UsUPgzmHdeQ3ztrerXS2vxEXQ4GjuwI66A2FS4P1Hee8ZbStfKbzZOwagvqeRVYa0O+Rjuc2afLpu7HztqYUYgm7JMQoQiNWdvyDRQS6ReIWTmV55SSu2LaKo3TFfgMaDINEHpBKUv7rUGCB/kBXaMhWHclkOrJ9iqc2Jds0hUGX0b5kek8qbZKE7BT8jo4blYwWtsBLVQM96uKH+pg5YWlgrzuJjnmR5NNH3PY6rf1srvGggXcowKU9m51DVewupRpECl/wz6cTFErEV5AhLlYeOAHEc4CpsQg/mJPbCegFBuzWJ2M+DRgQkPbX1jpcQk8qMa656Nk4lEYBVnwEHNntzL7C4tIyeEfNbheH+TMCmhCi2J+4RaAxTZM/3Y5UhFhOz5OGQG3vUhqsSXRXKhYrkX+e5TbTI0nR5pbpuZb5u0NrvtxnrBR9iQxrhdmk/DT5xz0wD/Jt9gnpQaTAEnH7wx8/kfHqFEdJiO5b3zPLOlXORN62aJMii/q0WCLH0N0JlxET5Kq/utqKK7J8hYRZTvFjbGrpI7/5cap1ijmuhj0snuGC/CYKbhJzFj8dTX7J/AHAKVIedmg28mnS63vK21nJ8F8lZXmSXgwTdgAWpp4pRG4elq7FG7xa8aTklVLgBO5G4Nl4Hcm6pDu6BOrePUeU3j7sz7wElqmsrlHrAOk7HiwOWdyuDAyIg/u8jVoZh94SVtV0TS/Qh/i4Yc10cLwn4wiGH8hRRrJ88P4hxhtk8sLuOteBQto21nyju8LgYBen5jznghTi X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a57a6b0e-c00f-43ab-717c-08d892e32621 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:56.9475 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iFZZEvOvmLjjvbBSNZ6Y3UywPqJfMGFBa4wuO7UvL+z3J6iPC3bHU4DulMQycgxZTYfhcp5v2gpBv/pF1hz2hFjTrEjNdbZMGSeDqn60+bY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We don't need this workaround anymore: bdrv_append is already smart enough and we can use new bdrv_drop_filter(). Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/backup-top.c | 38 +------------------------------------- tests/qemu-iotests/283.out | 2 +- 2 files changed, 2 insertions(+), 38 deletions(-) diff --git a/block/backup-top.c b/block/backup-top.c index 650ed6195c..84eb73aeb7 100644 --- a/block/backup-top.c +++ b/block/backup-top.c @@ -37,7 +37,6 @@ typedef struct BDRVBackupTopState { BlockCopyState *bcs; BdrvChild *target; - bool active; int64_t cluster_size; } BDRVBackupTopState; @@ -127,21 +126,6 @@ static void backup_top_child_perm(BlockDriverState *bs, BdrvChild *c, uint64_t perm, uint64_t shared, uint64_t *nperm, uint64_t *nshared) { - BDRVBackupTopState *s = bs->opaque; - - if (!s->active) { - /* - * The filter node may be in process of bdrv_append(), which firstly do - * bdrv_set_backing_hd() and then bdrv_replace_node(). This means that - * we can't unshare BLK_PERM_WRITE during bdrv_append() operation. So, - * let's require nothing during bdrv_append() and refresh permissions - * after it (see bdrv_backup_top_append()). - */ - *nperm = 0; - *nshared = BLK_PERM_ALL; - return; - } - if (!(role & BDRV_CHILD_FILTERED)) { /* * Target child @@ -229,18 +213,6 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, } appended = true; - /* - * bdrv_append() finished successfully, now we can require permissions - * we want. - */ - state->active = true; - bdrv_child_refresh_perms(top, top->backing, &local_err); - if (local_err) { - error_prepend(&local_err, - "Cannot set permissions for backup-top filter: "); - goto fail; - } - state->cluster_size = cluster_size; state->bcs = block_copy_state_new(top->backing, state->target, cluster_size, write_flags, &local_err); @@ -256,7 +228,6 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, fail: if (appended) { - state->active = false; bdrv_backup_top_drop(top); } else { bdrv_unref(top); @@ -272,16 +243,9 @@ void bdrv_backup_top_drop(BlockDriverState *bs) { BDRVBackupTopState *s = bs->opaque; - bdrv_drained_begin(bs); + bdrv_drop_filter(bs, &error_abort); block_copy_state_free(s->bcs); - s->active = false; - bdrv_child_refresh_perms(bs, bs->backing, &error_abort); - bdrv_replace_node(bs, bs->backing->bs, &error_abort); - bdrv_set_backing_hd(bs, NULL, &error_abort); - - bdrv_drained_end(bs); - bdrv_unref(bs); } diff --git a/tests/qemu-iotests/283.out b/tests/qemu-iotests/283.out index fbb7d0f619..a34e4e3f92 100644 --- a/tests/qemu-iotests/283.out +++ b/tests/qemu-iotests/283.out @@ -5,4 +5,4 @@ {"execute": "blockdev-add", "arguments": {"driver": "blkdebug", "image": "base", "node-name": "other", "take-child-perms": ["write"]}} {"return": {}} {"execute": "blockdev-backup", "arguments": {"device": "source", "sync": "full", "target": "target"}} -{"error": {"class": "GenericError", "desc": "Cannot set permissions for backup-top filter: Conflicts with use by source as 'image', which does not allow 'write' on base"}} +{"error": {"class": "GenericError", "desc": "Cannot append backup-top filter: Conflicts with use by source as 'image', which does not allow 'write' on base"}} From patchwork Fri Nov 27 14:45:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936533 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8074C2D0E4 for ; Fri, 27 Nov 2020 15:06:46 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2D5F421534 for ; Fri, 27 Nov 2020 15:06:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="EPTTqCxS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2D5F421534 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:41460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifKf-00011z-3L for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:06:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36940) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1F-0001Rn-0g; Fri, 27 Nov 2020 09:46:41 -0500 Received: from mail-am6eur05on2121.outbound.protection.outlook.com ([40.107.22.121]:11777 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1D-0003Hm-2a; Fri, 27 Nov 2020 09:46:40 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bsNfWxT8nvgMj87GwIVcKHmB0GpEya9SUKIJFh7HytOsLH2dlB86AHvDn5qG0om/sDdvYMyofdMuF1zuAeQVfyfj5NmUe/uNW7glBydnSEDHfY3wasp2ky5H1k1nPRDh9PN6+Yhsely8Uuf9s5yLIuYpbNPdYvaKiJhb1L0h9XJtQI7Us4ER9Nq07TkCaubospykuOS++KbwlloZdvWG8yV/NySENft66Fx3gXqINanbkVb99yI9BCygP/P87a79eu+weDwm4HWfU15kXLduAKa3tEfPL1QZS+KY8gghrLtODC7wRc3LjZGgbF+FXq5/GtptUSPzbwSViLhXkkTVPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xB3T/KkLKWsrPZVheEQXOV4bic1dR0RSBknv9x9sjk0=; b=FWMZ6HKNRsrBmayyYL5bFvUPv1RLJKknW7Qs5v7SWuhF1JS/IhDTEPDwsXHbPpFZA+WpTXYXNvQwhRXhkWSQid5dl9IjgJmde4k3dezrAae18EmB3SQjLGHjbeS6W/LJfPM/QG2BUm8wbg5JObUM7z74OsVfCSbA9FQbDlDxxBl3hHsVBiHryeheZMcdZ6SHJv6HbBih4p42JmcfbEnQ+bhOZaGDAi4V6hnqCiBK+eCuQXtvgK4XiHVAThl/wIpgjIUa5SWYa62NNMn33kVIIrTlhYLcCbYFl/xOR0/TljyDoLOxHwy06XzVRlYTl/Zs5Nm26IPQk9+QMQMNYvfBTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xB3T/KkLKWsrPZVheEQXOV4bic1dR0RSBknv9x9sjk0=; b=EPTTqCxSEWIT7XhwZaz/U2SlAK0OqlaBHBrJmuQ9d5QgwwuGmMpGjHt+hKcBIyfg8DteVnTcS1L4mqHOgZU5qYgKyAa6gL0rl6yXGA26IO/ZlxyrsTgVwnG3c5Oe9avkNzFYHFD20qWFfwWOyBKZlqGGnm3sTMgQUmT/jOal08k= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:11 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:11 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 27/36] block: drop ignore_children for permission update functions Date: Fri, 27 Nov 2020 17:45:13 +0300 Message-Id: <20201127144522.29991-28-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:57 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 36527453-aaef-4a1c-6c5d-08d892e32696 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:529; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ftLmDpkbMFlwKUzZcoALnYzZRbXo9HC5ps5kzUBtLE+EF58EKYkXwFkaA7imum0U7GZ3wa7yhQAd1MNP1GpuuRIBKS2H9JTqIBmAuDGnJ02Hq3hGf6YQuQSFclDgasUgLuLGtd7Y0ABwWF0YIBRqgLGlkuTKA/57Vu/C2TuxISgUn5DDO9K/cjgcw3K31Arv36IQ7QpZOQaQwllox0DreWjjNzOPACRCwGGvR+d4D9lihz5Aa6z9LfLvT4WpbPgJeT+PoJsxhd7+gWvw0S59r29ZokBtYQxKiJWqPBgwW7BU/opbJyYw5mnYFkWilHHwUZ03nRyksCZ4hgN+g4N4kL7Bz4yixEnnb3FlW1AJyhvONIHCIOkQacOOAF3f/FmW X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: OdZ2d/m9F/wh2uVh68ALTjgbrOhC+XX/7eQHVvj4N4iMVtH6mLtLUP0XTq8PQ70JKMTkiXws7U5Byavffyt6/XlnTyDxD1BRfg/9eKALV8XYudhbyDH1nUk5SOZkUpV2pbtmIfBmPqtvFbuJJKDHHDPVsxFBOgzqeo4wkRhXXc++xC4/gHaY5JEE3oSMJla4AD+yuM7CQRuhssEAGtbstbJtArjjWEzS5tqo5mF/h5ohPzcd5gagVuBZZfdB657xhTsiLHvr/PddkDnY+R9Zr1Wn1eRsB0E3SdgDf667YgAj7xgmUrlMxRfkpUgXb4QammY3MqlzctlOwHVNoV/uyMdXg0uPinYfUG7GVTEFh01K6VE1bN98B184DSj0b6HmRvrBMBXO3sqEIO9u78YS+FcAkyzJYnWC5ltVraJh2q14i4QoR2IQUc7cMQnDr0u6/IMiESEGnwuZXhK/dHNvzskut9FRa61/CVTGTlRCOWR0DPFCyS2slpAt5oKR8ch/gqiRa/AJsUO/ioBzcES8vevs8sFuiMShobcSZvvAhjssCO7aR/YaC6j+fO0rzrNVHfZq3S/92RbQS5a8hugqvwyHAoddoIKB5ZQz3scymgYbHF+e4aJeW8qQCkwBBekcEOwbrncwdUzlD5S5Opt/9z6zlG9SAkHObSpoOMXiuBg6pDcYZPujNw7j2rVOMudujulYXEeUFcupQhKyDQ8PgqESGkBuzz8spQ7y15fqjqltjUnzLoEdtUigmCzdpiqiXm8XZXM2fKP3VqbSjDsbVDHnnQowZ1+SJEkQctzwZp6M8jaybE05ARWDiKpU0QCAulEpD4tietn/eJQOEu+0vRWhCJebg3PojsgfWFvn1ZW2kCDNVkC5W/Nd5wJhAWpWcQXQ/L5GK6+lRFTXAj/Gyq2uWYzWecrYgp2a/KsS6LzyapK9OqbTPRuh8XIQkxLwH3khIrxmTGL4sZeqsallaDYYuXEWOC3T5ML7XkYU50u/3RdZArmBmTkJoNmbtk5e X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36527453-aaef-4a1c-6c5d-08d892e32696 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:57.7410 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qfbtQWEiRFWfC9iBHrPutYp9ARQF9760oy9MIsIHL4Hs0NISUFAFh84xX5ACgdSKrvuZZZ7bdwGzgNqXg71odh1CU+HsXoqBm4+jdqwNiiU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.121; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" This argument is always NULL. Drop it. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/block.c b/block.c index e835a78f06..54fb6d24bd 100644 --- a/block.c +++ b/block.c @@ -1934,7 +1934,6 @@ static int bdrv_fill_options(QDict **options, const char *filename, static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, uint64_t new_used_perm, uint64_t new_shared_perm, - GSList *ignore_children, Error **errp); typedef struct BlockReopenQueueEntry { @@ -2011,9 +2010,7 @@ static bool bdrv_a_allow_b(BdrvChild *a, BdrvChild *b, Error **errp) return false; } -static bool bdrv_check_parents_compliance(BlockDriverState *bs, - GSList *ignore_children, - Error **errp) +static bool bdrv_check_parents_compliance(BlockDriverState *bs, Error **errp) { BdrvChild *a, *b; @@ -2024,9 +2021,7 @@ static bool bdrv_check_parents_compliance(BlockDriverState *bs, */ QLIST_FOREACH(a, &bs->parents, next_parent) { QLIST_FOREACH(b, &bs->parents, next_parent) { - if (a == b || g_slist_find(ignore_children, a) || - g_slist_find(ignore_children, b)) - { + if (a == b) { continue; } @@ -2243,7 +2238,6 @@ static void bdrv_replace_child_safe(BdrvChild *child, BlockDriverState *new_bs, static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, uint64_t cumulative_perms, uint64_t cumulative_shared_perms, - GSList *ignore_children, GSList **tran, Error **errp) { BlockDriver *drv = bs->drv; @@ -2326,7 +2320,6 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, bool use_cumulative_perms, uint64_t cumulative_perms, uint64_t cumulative_shared_perms, - GSList *ignore_children, GSList **tran, Error **errp) { int ret; @@ -2337,7 +2330,7 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, ret = bdrv_node_check_perm(bs, q, cumulative_perms, cumulative_shared_perms, - ignore_children, tran, errp); + tran, errp); if (ret < 0) { return ret; } @@ -2348,7 +2341,7 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, for ( ; list; list = list->next) { bs = list->data; - if (!bdrv_check_parents_compliance(bs, ignore_children, errp)) { + if (!bdrv_check_parents_compliance(bs, errp)) { return -EINVAL; } @@ -2357,7 +2350,7 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, ret = bdrv_node_check_perm(bs, q, cumulative_perms, cumulative_shared_perms, - ignore_children, tran, errp); + tran, errp); if (ret < 0) { return ret; } @@ -2368,19 +2361,17 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, uint64_t cumulative_perms, - uint64_t cumulative_shared_perms, - GSList *ignore_children, Error **errp) + uint64_t cumulative_shared_perms, Error **errp) { g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); return bdrv_check_perm_common(list, q, true, cumulative_perms, - cumulative_shared_perms, ignore_children, - NULL, errp); + cumulative_shared_perms, NULL, errp); } static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, GSList **tran, Error **errp) { - return bdrv_check_perm_common(list, q, false, 0, 0, NULL, tran, errp); + return bdrv_check_perm_common(list, q, false, 0, 0, tran, errp); } /* @@ -2509,7 +2500,6 @@ char *bdrv_perm_names(uint64_t perm) static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, uint64_t new_used_perm, uint64_t new_shared_perm, - GSList *ignore_children, Error **errp) { BdrvChild *c; @@ -2521,10 +2511,6 @@ static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, assert(new_shared_perm & BLK_PERM_WRITE_UNCHANGED); QLIST_FOREACH(c, &bs->parents, next_parent) { - if (g_slist_find(ignore_children, c)) { - continue; - } - if ((new_used_perm & c->shared_perm) != new_used_perm) { char *user = bdrv_child_user_desc(c); char *perm_names = bdrv_perm_names(new_used_perm & ~c->shared_perm); @@ -2554,7 +2540,7 @@ static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, } return bdrv_check_perm(bs, q, cumulative_perms, cumulative_shared_perms, - ignore_children, errp); + errp); } static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) @@ -4149,7 +4135,7 @@ int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp) QTAILQ_FOREACH(bs_entry, bs_queue, entry) { BDRVReopenState *state = &bs_entry->state; ret = bdrv_check_perm(state->bs, bs_queue, state->perm, - state->shared_perm, NULL, errp); + state->shared_perm, errp); if (ret < 0) { goto cleanup_perm; } @@ -4161,7 +4147,7 @@ int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp) bs_queue, state->perm, state->shared_perm, &nperm, &nshared); ret = bdrv_check_update_perm(state->new_backing_bs, NULL, - nperm, nshared, NULL, errp); + nperm, nshared, errp); if (ret < 0) { goto cleanup_perm; } From patchwork Fri Nov 27 14:45:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936549 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D32EFC2D0E4 for ; Fri, 27 Nov 2020 15:14:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E90A722240 for ; Fri, 27 Nov 2020 15:14:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="oUmP6oev" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E90A722240 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:34640 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifRk-0001XN-Oh for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:14:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36944) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1F-0001TO-H4; Fri, 27 Nov 2020 09:46:41 -0500 Received: from mail-eopbgr60102.outbound.protection.outlook.com ([40.107.6.102]:38277 helo=EUR04-DB3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1D-0003GS-KW; Fri, 27 Nov 2020 09:46:41 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KUKeXZIrtNiU4vW21cboE2Ps0rvcxKy7YM6aTf//C+70b2U62BLeNJeLimK232SpKqeABvhEWhDpNMLg3u4j1QQqI1hS9hDWm2/olGkW9kl/Z0ofOaH2dE3rbD6vD6vbssb57DO6Ut8+UQ6FLaaakODW0ofydmnE23lT84739zRvBzB6ASPcxQOr7uKQL+TyQ5j/ILBO3j+UkI28SA37FVWOu93E1tmHNZBfZvzyzWvdNQtkpL94LB88S3yfGuxoMV8ZbPB+NaK6tDb5Ey8Kd7tDBFvTp3bDAFwlpKdBnh7fYrItFpxCB1mF//7Ipxf6MPlY4vtjcvnG+YNpo4tJow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=z1cALyComlxfq7PKFLnsGDpc6xfov/LkzuMRyu8hoYA=; b=A7mY0Byh4e9TZvZq1CHkj6gYJu12+HD0yHnpJydpaH+Hpf7zRtu/2G0EGFw1nU/ZziEDgEIHl465WPREEjr8gk19PAU8FcGPFPbBgOCub5lSiVtfcN/ntDzIlwNdbHvjxyd++HYVOhCoMU0pMefYkBfRGDBn3y4fas/Kwnm/qOGrZNvFKsD5M7bUUXaBJYcRTc2SF89VUbAzrRV9DI4eqfEYm6U77idSYOlzDTmoqV/3i4jH78QrfL1t0mGP1dY7ppNLUZgb31DHiiSr0TBUonr23aF/8vq8Rm9+4d6HWe00NI8iIqxYw4MDsJSQgWuBo9wdIj3+IFb5lLZa6BfrVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=z1cALyComlxfq7PKFLnsGDpc6xfov/LkzuMRyu8hoYA=; b=oUmP6oevyOLw85tyj5nQ1wJH2GdZb0kGfLyHWTZJszvhM3rXDKWVzW0ptdKxA178NUY724qpvgVt3tmf1fK324N1x06Bpjh22bc11sVzoeGzv2jsJxShCBE/nqolz0d7JK81bG2Ukcs9cRSuuacVOsNVMRHaOWQcZmrK0+qo4g4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:11 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:11 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 28/36] block: add bdrv_set_backing_noperm() transaction action Date: Fri, 27 Nov 2020 17:45:14 +0300 Message-Id: <20201127144522.29991-29-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:57 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5651aaed-6b19-4408-fc5f-08d892e3270d X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:128; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tUnEJaRjSxdkKsBExmReWLO49+x0YGy6RLTjWJFZE8PyK+WHiL9mJpTVDIwQmMWDJowblesxn3sTFxi4w0EMpaw9d5ahOW0UXgvZMifNgBapCYsr6rdYDrjVhiz6stiUrccO90lKCi7mWxsydTTHgqv4qLi5ZHU4ZtbHNSzOqBNGtjkDYZmvaYeOWq8byuTVNh2GhuFdX2MRjZNKIKyAoJcE8udFpdu8S4iBLiA52AcI4xpBrtHzAD1K/5gzjMhHXHEMcVKVCwSDK6GQoPegn3JPlmdJu8rS21NTsruKGaT25ohg11xrukmcPxiWad6zpmM1xU6f2Vk11TWgQ8oC1Jd6YoAwSR4dzn0zC/VTb+5eGNAgSeqYO2j6MCkcbEzU X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: wUoK7VU/x8fLxIRSdHQcJaudDeBD6LDWslbaz5Neuo4YBfQGduS/QI3KzTG/iVKDvSvfArXoOGLm+/e0tLAsSmVdnFYCVfkQMTsiRiAvt1RMlWov1FwO0tbTPsBH5KghwQSkf8YxKnARdkpAi4rjva6a862QZA2OWMAnDQVKDEYmlYrDd9USx9K87TbxiZVy6E8tAFeyeSMsPG9ai2VWjIOd4e24j4GTH+ink1lJ0Bb8XgSmafWpN91AfRt1Bn1rgJDk+roIgCuLmRF+o0rkuirF0hSpEacro2wwC2nHG9lzuLmK1o5CJaOoPeYyGfzr1GxXXFc54BV2tJPZl6G+iYvX1p0nbWc0Fmy/do4JpErD9gPJOkz8HuV78wYoQyUQpDEaXgcoyHtE0pD/lfilmRhnHedhDji85y/HAmsxvLigNmxUbWQdl2RBFj5m1dYH61wDok+hLtJAQfgANh/+NjjHj0YFKNPeXlaVS/0W3Y0qb5njBtXme6ARaxVxDUB2B4doC9qZhqfDDO4z2CdUJkQLaO0YZ4npUrgVZDhERlle45yiifH2yLNkJqGgeelqY+wrdSb5OdS2xVDJ7EraGlc9oLDpSldSnJKGP3xfIcFQQl6lhLw1XJRqCMmz1Ty6vdoq6v0fxMbIVPwX1Syh52pU4I5FUEwbLPEUzJlUVt4I+zOGOi6zi5VNIJsfjD5/FI/+RkWVghwHEL3XOdXx1SQTJ0qaK6n0fLrsG8tsrrOnqUZj5gdjm8gKWxqVa1tQ2Bl3yJRw2hRa7E9SDut9NXazpMUl6jU3DI44XIk+a7UhN/SdCBHRv7+yBsVQYjWs/b/Dv+IR7PuVaNCEUS3Ez7CFdbUYS3glyZi9CAYDfiHwesOEUYJolmLyIvMOG/PqRQVk05/fI9HprdWePlR23vxfx+g9NLjorWz9ypiLhMbrAx8qFW8Ia6FTZ2268nxAhfGyUzM713LPeh4isWmUFW6ZXAxh8cIdZ4qr3oNr3swtBrF9cyCbURSKpshV8ioB X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5651aaed-6b19-4408-fc5f-08d892e3270d X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:58.5136 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Kdtt0DD83YX3hVldzFv3aRnsZWkzaPBrtUnLHuDDEiqiNCLejZW8dMp6Q1q0rEWeYGpJt1v6YdzBNA1qbTn4+9WZmck6D5MYDPsiNRhDiBU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.6.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Split out no-perm part of bdrv_set_backing_hd() as a separate transaction action. Note the in case of existing BdrvChild we reuse it, not recreate, just to do less actions. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 111 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 22 deletions(-) diff --git a/block.c b/block.c index 54fb6d24bd..617cba9547 100644 --- a/block.c +++ b/block.c @@ -101,6 +101,7 @@ static int bdrv_attach_child_common(BlockDriverState *child_bs, uint64_t perm, uint64_t shared_perm, void *opaque, BdrvChild **child, GSList **tran, Error **errp); +static void bdrv_remove_backing(BlockDriverState *bs, GSList **tran); static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, Error **errp); @@ -3194,45 +3195,111 @@ static BdrvChildRole bdrv_backing_role(BlockDriverState *bs) } } +typedef struct BdrvSetBackingNoPermState { + BlockDriverState *bs; + BlockDriverState *backing_bs; + BlockDriverState *old_inherits_from; + GSList *attach_tran; +} BdrvSetBackingNoPermState; + +static void bdrv_set_backing_noperm_abort(void *opaque) +{ + BdrvSetBackingNoPermState *s = opaque; + + if (s->backing_bs) { + s->backing_bs->inherits_from = s->old_inherits_from; + } + + tran_abort(s->attach_tran); + + bdrv_refresh_limits(s->bs, NULL); + if (s->old_inherits_from) { + bdrv_refresh_limits(s->old_inherits_from, NULL); + } +} + +static void bdrv_set_backing_noperm_commit(void *opaque) +{ + BdrvSetBackingNoPermState *s = opaque; + + tran_commit(s->attach_tran); +} + +static TransactionActionDrv bdrv_set_backing_noperm_drv = { + .abort = bdrv_set_backing_noperm_abort, + .commit = bdrv_set_backing_noperm_commit, + .clean = g_free, +}; + /* * Sets the bs->backing link of a BDS. A new reference is created; callers * which don't need their own reference any more must call bdrv_unref(). */ -void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd, - Error **errp) +static int bdrv_set_backing_noperm(BlockDriverState *bs, + BlockDriverState *backing_bs, + GSList **tran, Error **errp) { - bool update_inherits_from = bdrv_chain_contains(bs, backing_hd) && - bdrv_inherits_from_recursive(backing_hd, bs); + int ret = 0; + bool update_inherits_from = bdrv_chain_contains(bs, backing_bs) && + bdrv_inherits_from_recursive(backing_bs, bs); + GSList *attach_tran = NULL; + BdrvSetBackingNoPermState *s; if (bdrv_is_backing_chain_frozen(bs, child_bs(bs->backing), errp)) { - return; + return -EPERM; } - if (backing_hd) { - bdrv_ref(backing_hd); + if (bs->backing && backing_bs) { + bdrv_replace_child_safe(bs->backing, backing_bs, tran); + } else if (bs->backing && !backing_bs) { + bdrv_remove_backing(bs, tran); + } else if (backing_bs) { + assert(!bs->backing); + ret = bdrv_attach_child_noperm(bs, backing_bs, "backing", + &child_of_bds, bdrv_backing_role(bs), + &bs->backing, &attach_tran, errp); + if (ret < 0) { + tran_abort(attach_tran); + return ret; + } } - if (bs->backing) { - /* Cannot be frozen, we checked that above */ - bdrv_unref_child(bs, bs->backing); - bs->backing = NULL; - } + s = g_new(BdrvSetBackingNoPermState, 1); + *s = (BdrvSetBackingNoPermState) { + .bs = bs, + .backing_bs = backing_bs, + .old_inherits_from = backing_bs ? backing_bs->inherits_from : NULL, + }; + tran_prepend(tran, &bdrv_set_backing_noperm_drv, s); - if (!backing_hd) { - goto out; + /* + * If backing_bs was already part of bs's backing chain, and + * inherits_from pointed recursively to bs then let's update it to + * point directly to bs (else it will become NULL). + */ + if (backing_bs && update_inherits_from) { + backing_bs->inherits_from = bs; } - bs->backing = bdrv_attach_child(bs, backing_hd, "backing", &child_of_bds, - bdrv_backing_role(bs), errp); - /* If backing_hd was already part of bs's backing chain, and - * inherits_from pointed recursively to bs then let's update it to - * point directly to bs (else it will become NULL). */ - if (bs->backing && update_inherits_from) { - backing_hd->inherits_from = bs; + bdrv_refresh_limits(bs, NULL); + + return 0; +} + +void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd, + Error **errp) +{ + int ret; + GSList *tran = NULL; + + ret = bdrv_set_backing_noperm(bs, backing_hd, &tran, errp); + if (ret < 0) { + goto out; } + ret = bdrv_refresh_perms(bs, errp); out: - bdrv_refresh_limits(bs, NULL); + tran_finalize(tran, ret); } /* From patchwork Fri Nov 27 14:45:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936557 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5ED7C2D0E4 for ; Fri, 27 Nov 2020 15:16:46 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9B2E0206CA for ; Fri, 27 Nov 2020 15:16:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="kbYQf8up" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9B2E0206CA Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:41048 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifUK-0004G1-I4 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:16:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36962) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1H-0001Xf-8S; Fri, 27 Nov 2020 09:46:43 -0500 Received: from mail-am6eur05on2120.outbound.protection.outlook.com ([40.107.22.120]:28961 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1F-0003Ef-HM; Fri, 27 Nov 2020 09:46:42 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b6WESaz9lyjcLYVuN88sAQDFcKivKAhT2RlQ3SaGK6nrF93+nw8J3GDWw2mnMoY29ukS+8cL8H4xyGmmHI5Llv8qjqP1mm+NZnFtQjYGteQE6M1rt+uVtgVqKc8ZZrl5FsXDlgHhGWr5r0rc2+a0rPm6fEbGPjjIcjSFoxkSu+jb+amIYqxUozQNugujyWTsPOzcPECd4be5CWiwvhsQtMTfV/Rj4Hdv+5KzsqBBDGMxdW1LzCVg4f0zHf70zozR+ZekBTuW4MnYbvDfg8PKrFGm9P4UGs9Kbv/MqlN3Y9zgvKlO5qgRMz8vuclUWHu+28/EjDF4/vzDx5XUMptQtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fwaqD+hyd1Vd+fW6ZI7JMGYdt3V8aUmP/LogfrlTC0Y=; b=HzVnjY0bK3GVOFPcX06r4WnV2JFlzSY1h4dcHsN7WrZ98vHFC66Egox4dnvMLQ1m0sk6TEyJ7mR34Cd7THME5xgwp9bknHfvzlMptdAtRMMg70Tc0U7B1PkahG+wsk97rnskJxGM2BQ9YgHGVC5150wOXy1s1LD2tCoi8hIb6wPwI+3cuIk3mWQA/pNve8iRTuGOY/bc3iM5jsiWRuZdQgMj5RvgYbkPHdSdtbdz+azOjITWQ0SGiPKsYVL9B5HBZ5wpB45gKdlZQyJPWnlVPImYY9ECUtAFVM3hRaYm5+xuuwNw6qXa4R2h0SJfo+CqjrZqNLfDG/MWfMgIgTw3+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fwaqD+hyd1Vd+fW6ZI7JMGYdt3V8aUmP/LogfrlTC0Y=; b=kbYQf8upQPQ72nTd92P/hqdHw/hEwzDhlK5l0vr0GzSEFjPeUP69oQ43Tzve7GCQcTqkq1DCwQa95u8ez1JdZ5zt2iD4aw2tlKaEAvwh6ii5q2ongW5zL+L106pZrOOqZWKkgmrNvZIhh0CUhmsr+md95lNTZjluivJ0yCME4sM= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB5078.eurprd08.prod.outlook.com (2603:10a6:20b:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Fri, 27 Nov 2020 14:46:11 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:11 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 29/36] blockdev: qmp_x_blockdev_reopen: acquire all contexts Date: Fri, 27 Nov 2020 17:45:15 +0300 Message-Id: <20201127144522.29991-30-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:58 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d3bdeb4a-6700-45fe-c38d-08d892e32786 X-MS-TrafficTypeDiagnostic: AM6PR08MB5078: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qOgepWtu+WiogXvhLvYShumMhsMwA9wsWIfEwBVsejuYKEv/mdR+GLTDISTFoI+MXBimacerjBqlf/Dc2UtFvrAeA3pn/Cenuuey9x3YTbDnhU7TwxOywkutAKhlCxvlMGnnFXa7R767HJeyndN1VZN8fLt4juKCD/vnYc41zX5oCEF8qCAsxdfP0hzMsnSqbmZ/C2E+a6B9mHBivB2WPpPdCnW8jDM7b42M8MijoFay8SjWY366U1tmHX9DhCJqCX7ttJBH3aHC9R/9h17Q9r+cu7CYn2NTcSEVy9rGqvHdQuOopGkV4X2lIvOFVmNEk6XGlsdqaJU7Ow/R7OmLwTr58kFJWrv+vTmFrzxZ/AucejeeF4tQOf/kppYsdyCa X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39840400004)(346002)(136003)(396003)(376002)(86362001)(16526019)(66556008)(66476007)(478600001)(8676002)(186003)(66946007)(26005)(52116002)(83380400001)(6506007)(69590400008)(107886003)(6666004)(316002)(4326008)(36756003)(5660300002)(6486002)(2616005)(956004)(1076003)(6916009)(6512007)(8936002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 4rmhEIw+cqbhF+EBxeeIcHWSLr0jdqQlqlw7wRacwJeEwHraO3i3QlB8imGojznXwjdRIiMe1ecpgtiaskPX6qIVBMoFS1fD4TNhhjGzSeqRzJqB3C5CR8ws6Db29Z3F1nN5wuxdUulJ74STRhIAiVknwghxzQY5v9QLzAwFpWAOF4vxjEgBJWebeFXYZSgtBf1W6bb6xBhhIckR4Pzulb/WMoBc5ber6/gY+JfqQwGqUdHNdxdeaQUHKhI9U7Lao+ekWvLQcueDRmwXP+o19N7bF/YCEU8XW7hQ7q9k8imVWBmCdLBmcWLbqXDGx622Lq5ikSg/pvNvO5CQTh3GXuiLDoBhMmuicS5x/nxQjkD16ynzzpRcY52OZ4MQwUYJYyLaVaMNCuJg7e7g8fDOiwXKd9z4gzaD7iCiylMXJBoJ2aPbC3CYIuJdJpn9z53tlSfD1eQwiLsMqBnOw1X4v3SZiB8IN8FSus6X68IfcEmF8iMm8COjewHL/KYBPLQleYxm2ZqHDxLNBz5ZzxLzC9COrYoBcfhMEEdtXNRnxhj5iNq7BBUPsnm1RRDioyiIcRDpyUmvl5w1ty3IA8yJOCr/qOt7zsqV52SDm4ULmQezk2TcGXJscP2vqnGikOI6BiyTvIZC533LbM77RPkp9ZjGc/aVZXNGtGro1qT2iRSU9e2ZQH9JCmF1GjvexsAKG5KwpX28WRxVWfYI+nuEvy7qzYxm3LXEzRskt9cZBzV2MiKS9rTni2qhG/1A1idmI5eCS/YJYx6xibM1CNEEJ16zXmbJbOib5nrApm+owuFZYBAZkybD78Sjq/hTAPgpkVaKujbEPTBXsbuQej2Xn42KTzTeV0MmRL/VgJQNnFZOkTXsLqcuAzaZC72YMt3ncmBeVZrFnrvKeXkX2+Wj86CA+XDcM5RrZV2Hka7vTpdwg2s/lI3IVBbkfFfECJPW+6OCW33QSzRnlJ/Agoug6W2GgVggKYjIit+bkA6DFMiKj3lpB/X6CxSE+vn5RKMh X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3bdeb4a-6700-45fe-c38d-08d892e32786 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:45:59.2873 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sO+uiLZpZGaI1W/Mwpo6m7sTg7WUUEySP2cja+EH2oiDd7mSi4LmF8c+QZ1DGBAkmO/r8n5JpucGwD1KwhOzAxwWLssiXZTGipv8JSmsIXk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5078 Received-SPF: pass client-ip=40.107.22.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" During reopen we may add backing bs from other aio context, which may lead to changing original context of top bs. We are going to move graph modification to prepare stage. So, it will be possible that bdrv_flush() in bdrv_reopen_prepare called on bs in non-original aio context, which we didn't aquire which leads to crash. More correct would be to acquire all aio context we are going to work with. And the simplest ways is to just acquire all of them. It may be optimized later if needed. Signed-off-by: Vladimir Sementsov-Ogievskiy --- blockdev.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/blockdev.c b/blockdev.c index 2af35d0958..098a05709d 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3531,7 +3531,6 @@ fail: void qmp_x_blockdev_reopen(BlockdevOptions *options, Error **errp) { BlockDriverState *bs; - AioContext *ctx; QObject *obj; Visitor *v = qobject_output_visitor_new(&obj); BlockReopenQueue *queue; @@ -3557,13 +3556,29 @@ void qmp_x_blockdev_reopen(BlockdevOptions *options, Error **errp) qdict_flatten(qdict); /* Perform the reopen operation */ - ctx = bdrv_get_aio_context(bs); - aio_context_acquire(ctx); + BdrvNextIterator it; + GSList *aio_ctxs = NULL, *ctx; + BlockDriverState *it_bs; + + for (it_bs = bdrv_first(&it); it_bs; it_bs = bdrv_next(&it)) { + AioContext *aio_context = bdrv_get_aio_context(it_bs); + + if (!g_slist_find(aio_ctxs, aio_context)) { + aio_ctxs = g_slist_prepend(aio_ctxs, aio_context); + aio_context_acquire(aio_context); + } + } + bdrv_subtree_drained_begin(bs); queue = bdrv_reopen_queue(NULL, bs, qdict, false); bdrv_reopen_multiple(queue, errp); bdrv_subtree_drained_end(bs); - aio_context_release(ctx); + + for (ctx = aio_ctxs; ctx != NULL; ctx = ctx->next) { + AioContext *aio_context = ctx->data; + aio_context_release(aio_context); + } + g_slist_free(aio_ctxs); fail: visit_free(v); From patchwork Fri Nov 27 14:45:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936539 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E654C2D0E4 for ; Fri, 27 Nov 2020 15:09:27 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 67FA322240 for ; Fri, 27 Nov 2020 15:09:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="C5/dHuyb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 67FA322240 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51042 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifNE-0004wr-Ss for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:09:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1R-0001fi-AQ; Fri, 27 Nov 2020 09:46:53 -0500 Received: from mail-db8eur05on2099.outbound.protection.outlook.com ([40.107.20.99]:45281 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1J-0003QT-5u; Fri, 27 Nov 2020 09:46:52 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YEWeHOTR5hTa9OrqSFIjI2KfCp+5Y64EIqLJh0f33zEIYanCfEL2X9MGBrBgED13LI6cjwnU/LcXhK3syK4z9VOcDBxArvjXFOidbhET0nIVFdRDD8pxg9YLl42K+yPVcC+U47kqutXx6YNM5hW8H2iJKXFXJsqD2nou9CINktRm3RVKMO7jr1KvgI97kyuz2ResD0CaLbukJ4lDJjcpH2eUaATDOEjxMdD7YDoek8e2Kqo3RSmVBqxDOZnUv1v5R64Y3ROj7WClhH2aK3hktFqkN7ZzPNJG5u9WNJGn9sYc6Jv5zgjjuRdb8vkalaqHcf2rGBMtt8pq9LACtfll5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dYlvZS0uriRaQVqJbTJV5SLr2ZYh0DH7YH9xOk7aAZw=; b=GxfS7feLQAY2sNLQ/wG9/e+2ChRLEzVo2hbrGrtBwb6Pk5P4X6KPU6IoIbqpwgUXhtR6Fh3LcOWRjjQOhy/A0v9a5ILOp7SimS9gIr57gdNMnUhgXx4nALuAQ0bYCFl55i4BaTmLRLECj1Uuhq7hq0sLKTFg0UFOxJETlBrjOpYWBsA12+11izjyLddRdtVIvTvLn19OBmJkdE+i/C2XzybpyKm/hNMt4PXtbSa5CWvSB8l31C1L62VcU+GuzoRmlvcs+X43qARvtCTjbYUGFwPvfp9zXOCl4vWfibI7s/r39II0CvL/hEMnmDokt1Khb/G4YyM55FV0+KQq0ULqRw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dYlvZS0uriRaQVqJbTJV5SLr2ZYh0DH7YH9xOk7aAZw=; b=C5/dHuyblh3JKMUP7ClDP/jpZr7LYXvtiIbYMxvqt+el3SNOd87cXMgWTmWbo6vu9j9e0c/0YiTMBpS6xr8FmvxG2K5IxwVsEY1pIMqXvCsJI5GjfBGa5Ix3vv0LpEga6kPZ5ngJu0zEQzpG931Ev1MlN3ieIRGaOV+vmglTdzs= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:42 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:42 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 30/36] block: bdrv_reopen_multiple: refresh permissions on updated graph Date: Fri, 27 Nov 2020 17:45:16 +0300 Message-Id: <20201127144522.29991-31-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:45:59 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cb44ea51-38f4-41af-dedd-08d892e327fd X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:114; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: r5c50EFxl7K2TlEqatZWBO1nTmOOrDdUv7ZhA+49v9qhu+vbbz6mMsJsKwuY+zjdn+NYl1lPmMVLBzD+tkk6Myz3JMRL3PZHQjXSMRqpVxeZylLfb0NkexEezj8N7ZsVTipLOShvpurmO1F1kNaWkW0bKHmFCwNYA+HxJbvc6uxMFBppu3s/H1nX23uRb2POtQ5dnyhhdTR2eNQOFt3XC27TKVZGWA3fArZWm5dG+//u9kMeYVaX20RQV8p19Qp1dPXHiKZoAwuVNRsBT54k3DGaEF94JT1ZUb4yA2fuGzp09TcXLpCljkXIZ6+XnUmLjc7hPjE8q4Of+LjNgSm7lj1rS4y43DpRZXD28wkWTSUE6GvW2YXvsXTdizqphnUy X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(15650500001)(66946007)(30864003)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: rkeC+gC66G7b3puZzuGowDyr22wXMTr88i6vikmgy8FrlRyQtJlvm7nIuwJQorbfC1bCDkopIgQrsJtuzPb/Ra2of5DCrjt0Lg39IdgrwXSTXtyKlBJ87RyVQbTl1T/6Vwf3j3RAUnXwKAba1Jl7+tmVP+30Cdg0pNQMHfhDbAhlnEXeFTqnvnS0tH7epFTvoxBg7ZDnHTsN5pAXJ9AO7mE3/r9putQcUWLlo9AKaSLB5zY+i44IHuU4E5McjMqgzd4Jxma8hHGY+leeqMV++6fdelKoGlTCi2H3Ny8AHXbU5IS1oah0viRpycRljSwlkjYrQTArridtisFe7zUN3Pqx9mi8KTk7PQWduB4RpoyO+dFBqbUzOt4GKODmqVYBA9T+BfO9u/9VlTEeZup8s66TnppnNXDjj8Y10pogPnuMack3kcjuK7vdNP5jLT6puHTBDCNJbw5c/zymVVFOTIO/f80Y6pWBg8zfDW5XaXnTdTtumKVop+m8v9fBOZBhD2ZUFLz1/JJ6A9Ca+DuyqaJdQlZy0BPurIgsMWtYEYqY3a7y51yO/nNrEcVoUJdO71edS9dfKaq0pHFpgJ8BKwF4/vpJo1Kj86l9fmM1AIeDQte4wV8xu/ipxpD2aDXbJ0oToMIpmADP7P+hfyoEVTxrgxm+OIqRQTEIyVSb6q/jMwHycdat0OlvVVmuVb7xv6TFVkOZuj3IgItqfKyI/ez//tVZqp4I+I3PEwy5hfQw2toR7tfG4LjRq94xsjT/QULt0FryaieLWuW8ZEB1fQ2Nz9xpRM10WhU1iiuIF8fp9xqSQKyglaw4/nG2xsIHysF4Y4/snHLKSL/4hGWaQvqjpwgG7pqyqEbw6k3hqBbW3rfHyO9Mkxbnt4IzIAMXcVBW0KDF8ePzaahoHTbHye1HfzScSGfIZkkgOZU+8FAdzwp2xbJXcr+tQYX0z+G15maU0qIVUVxLURXLp068QENa5rNng/7xX4tXDJheutXGBmAPKcHUm6IzPQizjMUw X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb44ea51-38f4-41af-dedd-08d892e327fd X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:00.1296 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iGzwGoWwg0KrUjC5IKdtLoMDp0txKJhx79Hu2WQgp9LlemZRwfLYPk7IAzd9qwBioJydgkZ6f5GyojbaRcaX1hghPhlLRZIxrjjSRcQhmx4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.99; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Move bdrv_reopen_multiple to new paradigm of permission update: first update graph relations, then do refresh the permissions. We have to modify reopen process in file-posix driver: with new scheme we don't have prepared permissions in raw_reopen_prepare(), so we should reconfigure fd in raw_check_perm(). Still this seems more native and simple anyway. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block.h | 2 +- block.c | 183 +++++++++++------------------------------- block/file-posix.c | 84 +++++-------------- 3 files changed, 70 insertions(+), 199 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index 0f21ef313f..82271d9ccd 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -195,7 +195,7 @@ typedef struct BDRVReopenState { BlockdevDetectZeroesOptions detect_zeroes; bool backing_missing; bool replace_backing_bs; /* new_backing_bs is ignored if this is false */ - BlockDriverState *new_backing_bs; /* If NULL then detach the current bs */ + BlockDriverState *old_backing_bs; /* keep pointer for permissions update */ uint64_t perm, shared_perm; QDict *options; QDict *explicit_options; diff --git a/block.c b/block.c index 617cba9547..474e624152 100644 --- a/block.c +++ b/block.c @@ -103,8 +103,9 @@ static int bdrv_attach_child_common(BlockDriverState *child_bs, GSList **tran, Error **errp); static void bdrv_remove_backing(BlockDriverState *bs, GSList **tran); -static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue - *queue, Error **errp); +static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, + BlockReopenQueue *queue, + GSList **set_backings_tran, Error **errp); static void bdrv_reopen_commit(BDRVReopenState *reopen_state); static void bdrv_reopen_abort(BDRVReopenState *reopen_state); @@ -2403,6 +2404,7 @@ static void bdrv_list_abort_perm_update(GSList *list) } } +__attribute__((unused)) static void bdrv_abort_perm_update(BlockDriverState *bs) { g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); @@ -2498,6 +2500,7 @@ char *bdrv_perm_names(uint64_t perm) * * Needs to be followed by a call to either bdrv_set_perm() or * bdrv_abort_perm_update(). */ +__attribute__((unused)) static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, uint64_t new_used_perm, uint64_t new_shared_perm, @@ -4100,10 +4103,6 @@ static BlockReopenQueue *bdrv_reopen_queue_child(BlockReopenQueue *bs_queue, bs_entry->state.explicit_options = explicit_options; bs_entry->state.flags = flags; - /* This needs to be overwritten in bdrv_reopen_prepare() */ - bs_entry->state.perm = UINT64_MAX; - bs_entry->state.shared_perm = 0; - /* * If keep_old_opts is false then it means that unspecified * options must be reset to their original value. We don't allow @@ -4186,40 +4185,37 @@ BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue, */ int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp) { - int ret = -1; + int ret = 0; BlockReopenQueueEntry *bs_entry, *next; + GSList *tran = NULL; + g_autoptr(GHashTable) found = NULL; + g_autoptr(GSList) refresh_list = NULL; assert(bs_queue != NULL); QTAILQ_FOREACH(bs_entry, bs_queue, entry) { assert(bs_entry->state.bs->quiesce_counter > 0); - if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, errp)) { - goto cleanup; + ret = bdrv_reopen_prepare(&bs_entry->state, bs_queue, &tran, errp); + if (ret < 0) { + goto abort; } bs_entry->prepared = true; } + found = g_hash_table_new(NULL, NULL); QTAILQ_FOREACH(bs_entry, bs_queue, entry) { BDRVReopenState *state = &bs_entry->state; - ret = bdrv_check_perm(state->bs, bs_queue, state->perm, - state->shared_perm, errp); - if (ret < 0) { - goto cleanup_perm; - } - /* Check if new_backing_bs would accept the new permissions */ - if (state->replace_backing_bs && state->new_backing_bs) { - uint64_t nperm, nshared; - bdrv_child_perm(state->bs, state->new_backing_bs, - NULL, bdrv_backing_role(state->bs), - bs_queue, state->perm, state->shared_perm, - &nperm, &nshared); - ret = bdrv_check_update_perm(state->new_backing_bs, NULL, - nperm, nshared, errp); - if (ret < 0) { - goto cleanup_perm; - } + + refresh_list = bdrv_topological_dfs(refresh_list, found, state->bs); + if (state->old_backing_bs) { + refresh_list = bdrv_topological_dfs(refresh_list, found, + state->old_backing_bs); } - bs_entry->perms_checked = true; + } + + ret = bdrv_list_refresh_perms(refresh_list, bs_queue, &tran, errp); + if (ret < 0) { + goto abort; } /* @@ -4235,51 +4231,29 @@ int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp) bdrv_reopen_commit(&bs_entry->state); } - ret = 0; -cleanup_perm: - QTAILQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) { - BDRVReopenState *state = &bs_entry->state; + tran_commit(tran); - if (!bs_entry->perms_checked) { - continue; - } - - if (ret == 0) { - uint64_t perm, shared; - - bdrv_get_cumulative_perm(state->bs, &perm, &shared); - assert(perm == state->perm); - assert(shared == state->shared_perm); + QTAILQ_FOREACH_REVERSE(bs_entry, bs_queue, entry) { + BlockDriverState *bs = bs_entry->state.bs; - bdrv_set_perm(state->bs); - } else { - bdrv_abort_perm_update(state->bs); - if (state->replace_backing_bs && state->new_backing_bs) { - bdrv_abort_perm_update(state->new_backing_bs); - } + if (bs->drv->bdrv_reopen_commit_post) { + bs->drv->bdrv_reopen_commit_post(&bs_entry->state); } } + goto cleanup; - if (ret == 0) { - QTAILQ_FOREACH_REVERSE(bs_entry, bs_queue, entry) { - BlockDriverState *bs = bs_entry->state.bs; - - if (bs->drv->bdrv_reopen_commit_post) - bs->drv->bdrv_reopen_commit_post(&bs_entry->state); +abort: + tran_abort(tran); + QTAILQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) { + if (bs_entry->prepared) { + bdrv_reopen_abort(&bs_entry->state); } + qobject_unref(bs_entry->state.explicit_options); + qobject_unref(bs_entry->state.options); } + cleanup: QTAILQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) { - if (ret) { - if (bs_entry->prepared) { - bdrv_reopen_abort(&bs_entry->state); - } - qobject_unref(bs_entry->state.explicit_options); - qobject_unref(bs_entry->state.options); - } - if (bs_entry->state.new_backing_bs) { - bdrv_unref(bs_entry->state.new_backing_bs); - } g_free(bs_entry); } g_free(bs_queue); @@ -4304,53 +4278,6 @@ int bdrv_reopen_set_read_only(BlockDriverState *bs, bool read_only, return ret; } -static BlockReopenQueueEntry *find_parent_in_reopen_queue(BlockReopenQueue *q, - BdrvChild *c) -{ - BlockReopenQueueEntry *entry; - - QTAILQ_FOREACH(entry, q, entry) { - BlockDriverState *bs = entry->state.bs; - BdrvChild *child; - - QLIST_FOREACH(child, &bs->children, next) { - if (child == c) { - return entry; - } - } - } - - return NULL; -} - -static void bdrv_reopen_perm(BlockReopenQueue *q, BlockDriverState *bs, - uint64_t *perm, uint64_t *shared) -{ - BdrvChild *c; - BlockReopenQueueEntry *parent; - uint64_t cumulative_perms = 0; - uint64_t cumulative_shared_perms = BLK_PERM_ALL; - - QLIST_FOREACH(c, &bs->parents, next_parent) { - parent = find_parent_in_reopen_queue(q, c); - if (!parent) { - cumulative_perms |= c->perm; - cumulative_shared_perms &= c->shared_perm; - } else { - uint64_t nperm, nshared; - - bdrv_child_perm(parent->state.bs, bs, c, c->role, q, - parent->state.perm, parent->state.shared_perm, - &nperm, &nshared); - - cumulative_perms |= nperm; - cumulative_shared_perms &= nshared; - } - } - *perm = cumulative_perms; - *shared = cumulative_shared_perms; -} - static bool bdrv_reopen_can_attach(BlockDriverState *parent, BdrvChild *child, BlockDriverState *new_child, @@ -4392,6 +4319,7 @@ static bool bdrv_reopen_can_attach(BlockDriverState *parent, * Return 0 on success, otherwise return < 0 and set @errp. */ static int bdrv_reopen_parse_backing(BDRVReopenState *reopen_state, + GSList **set_backings_tran, Error **errp) { BlockDriverState *bs = reopen_state->bs; @@ -4468,6 +4396,8 @@ static int bdrv_reopen_parse_backing(BDRVReopenState *reopen_state, /* If we want to replace the backing file we need some extra checks */ if (new_backing_bs != bdrv_filter_or_cow_bs(overlay_bs)) { + int ret; + /* Check for implicit nodes between bs and its backing file */ if (bs != overlay_bs) { error_setg(errp, "Cannot change backing link if '%s' has " @@ -4488,9 +4418,11 @@ static int bdrv_reopen_parse_backing(BDRVReopenState *reopen_state, return -EPERM; } reopen_state->replace_backing_bs = true; - if (new_backing_bs) { - bdrv_ref(new_backing_bs); - reopen_state->new_backing_bs = new_backing_bs; + reopen_state->old_backing_bs = bs->backing ? bs->backing->bs : NULL; + ret = bdrv_set_backing_noperm(bs, new_backing_bs, set_backings_tran, + errp); + if (ret < 0) { + return ret; } } @@ -4515,7 +4447,8 @@ static int bdrv_reopen_parse_backing(BDRVReopenState *reopen_state, * */ static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, - BlockReopenQueue *queue, Error **errp) + BlockReopenQueue *queue, + GSList **set_backings_tran, Error **errp) { int ret = -1; int old_flags; @@ -4582,10 +4515,6 @@ static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, goto error; } - /* Calculate required permissions after reopening */ - bdrv_reopen_perm(queue, reopen_state->bs, - &reopen_state->perm, &reopen_state->shared_perm); - ret = bdrv_flush(reopen_state->bs); if (ret) { error_setg_errno(errp, -ret, "Error flushing drive"); @@ -4645,7 +4574,7 @@ static int bdrv_reopen_prepare(BDRVReopenState *reopen_state, * either a reference to an existing node (using its node name) * or NULL to simply detach the current backing file. */ - ret = bdrv_reopen_parse_backing(reopen_state, errp); + ret = bdrv_reopen_parse_backing(reopen_state, set_backings_tran, errp); if (ret < 0) { goto error; } @@ -4767,22 +4696,6 @@ static void bdrv_reopen_commit(BDRVReopenState *reopen_state) qdict_del(bs->explicit_options, child->name); qdict_del(bs->options, child->name); } - - /* - * Change the backing file if a new one was specified. We do this - * after updating bs->options, so bdrv_refresh_filename() (called - * from bdrv_set_backing_hd()) has the new values. - */ - if (reopen_state->replace_backing_bs) { - BlockDriverState *old_backing_bs = child_bs(bs->backing); - assert(!old_backing_bs || !old_backing_bs->implicit); - /* Abort the permission update on the backing bs we're detaching */ - if (old_backing_bs) { - bdrv_abort_perm_update(old_backing_bs); - } - bdrv_set_backing_hd(bs, reopen_state->new_backing_bs, &error_abort); - } - bdrv_refresh_limits(bs, NULL); } diff --git a/block/file-posix.c b/block/file-posix.c index 37d9266f6a..42c60c8a02 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -175,7 +175,6 @@ typedef struct BDRVRawState { } BDRVRawState; typedef struct BDRVRawReopenState { - int fd; int open_flags; bool drop_cache; bool check_cache_dropped; @@ -1062,7 +1061,6 @@ static int raw_reopen_prepare(BDRVReopenState *state, BDRVRawReopenState *rs; QemuOpts *opts; int ret; - Error *local_err = NULL; assert(state != NULL); assert(state->bs != NULL); @@ -1088,32 +1086,9 @@ static int raw_reopen_prepare(BDRVReopenState *state, * bdrv_reopen_prepare() will detect changes and complain. */ qemu_opts_to_qdict(opts, state->options); - rs->fd = raw_reconfigure_getfd(state->bs, state->flags, &rs->open_flags, - state->perm, true, &local_err); - if (local_err) { - error_propagate(errp, local_err); - ret = -1; - goto out; - } - - /* Fail already reopen_prepare() if we can't get a working O_DIRECT - * alignment with the new fd. */ - if (rs->fd != -1) { - raw_probe_alignment(state->bs, rs->fd, &local_err); - if (local_err) { - error_propagate(errp, local_err); - ret = -EINVAL; - goto out_fd; - } - } - s->reopen_state = state; ret = 0; -out_fd: - if (ret < 0) { - qemu_close(rs->fd); - rs->fd = -1; - } + out: qemu_opts_del(opts); return ret; @@ -1127,10 +1102,6 @@ static void raw_reopen_commit(BDRVReopenState *state) s->drop_cache = rs->drop_cache; s->check_cache_dropped = rs->check_cache_dropped; s->open_flags = rs->open_flags; - - qemu_close(s->fd); - s->fd = rs->fd; - g_free(state->opaque); state->opaque = NULL; @@ -1149,10 +1120,6 @@ static void raw_reopen_abort(BDRVReopenState *state) return; } - if (rs->fd >= 0) { - qemu_close(rs->fd); - rs->fd = -1; - } g_free(state->opaque); state->opaque = NULL; @@ -3060,39 +3027,30 @@ static int raw_check_perm(BlockDriverState *bs, uint64_t perm, uint64_t shared, Error **errp) { BDRVRawState *s = bs->opaque; - BDRVRawReopenState *rs = NULL; + int input_flags = s->reopen_state ? s->reopen_state->flags : bs->open_flags; int open_flags; int ret; - if (s->perm_change_fd) { + /* We may need a new fd if auto-read-only switches the mode */ + ret = raw_reconfigure_getfd(bs, input_flags, &open_flags, perm, + false, errp); + if (ret < 0) { + return ret; + } else if (ret != s->fd) { + Error *local_err = NULL; + /* - * In the context of reopen, this function may be called several times - * (directly and recursively while change permissions of the parent). - * This is even true for children that don't inherit from the original - * reopen node, so s->reopen_state is not set. - * - * Ignore all but the first call. + * Fail already check_perm() if we can't get a working O_DIRECT + * alignment with the new fd. */ - return 0; - } - - if (s->reopen_state) { - /* We already have a new file descriptor to set permissions for */ - assert(s->reopen_state->perm == perm); - assert(s->reopen_state->shared_perm == shared); - rs = s->reopen_state->opaque; - s->perm_change_fd = rs->fd; - s->perm_change_flags = rs->open_flags; - } else { - /* We may need a new fd if auto-read-only switches the mode */ - ret = raw_reconfigure_getfd(bs, bs->open_flags, &open_flags, perm, - false, errp); - if (ret < 0) { - return ret; - } else if (ret != s->fd) { - s->perm_change_fd = ret; - s->perm_change_flags = open_flags; + raw_probe_alignment(bs, ret, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return -EINVAL; } + + s->perm_change_fd = ret; + s->perm_change_flags = open_flags; } /* Prepare permissions on old fd to avoid conflicts between old and new, @@ -3114,7 +3072,7 @@ static int raw_check_perm(BlockDriverState *bs, uint64_t perm, uint64_t shared, return 0; fail: - if (s->perm_change_fd && !s->reopen_state) { + if (s->perm_change_fd) { qemu_close(s->perm_change_fd); } s->perm_change_fd = 0; @@ -3145,7 +3103,7 @@ static void raw_abort_perm_update(BlockDriverState *bs) /* For reopen, .bdrv_reopen_abort is called afterwards and will close * the file descriptor. */ - if (s->perm_change_fd && !s->reopen_state) { + if (s->perm_change_fd) { qemu_close(s->perm_change_fd); } s->perm_change_fd = 0; From patchwork Fri Nov 27 14:45:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936561 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF0F6C2D0E4 for ; Fri, 27 Nov 2020 15:19:55 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0759722228 for ; Fri, 27 Nov 2020 15:19:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="uMBlv2AL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0759722228 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:48334 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifXO-0007KU-1K for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:19:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37038) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1S-0001he-CN; Fri, 27 Nov 2020 09:46:54 -0500 Received: from mail-db8eur05on2103.outbound.protection.outlook.com ([40.107.20.103]:20897 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1K-0003RM-7A; Fri, 27 Nov 2020 09:46:54 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B1HhFFpwhlMRok8VdzJreT0xawZwBDpqa3AclVncD1cZN9C1fq2EiGLGfp/44QFhYKuIFuixmqMjkcbqy3O4NptXRbszGMjwkegVR80MhbFlTYprYXZQ5Fu6p6AfefrLk1ZAsdvI5a/s1G8+lLZV7oaV3ql1dhBGLdmv5AbDfsuUID27tdxLNqaDF3ty9ZVdv1VhxuVKFbOgLaI087FliE2TuD5/yJV3zJm/poE8c/QvSYJzMqCf0P2IUYznS3s71r7Nj/baxxJkSg+NsAv1HfPXCQGgBCtbQooZVwvHG/R6xF3H80+tDn8UK4+XZe7xI5g1HXTLCoKQONEZ6etiWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=05KA+XBCAPFxK7wF9bpUh64Oi8Gomrc3kIexIpQqP1c=; b=ETDKZOSSJkHahu9b9rNZxzaze8t6DpJg11b2vBCbIiozxIlBzp2znTofxy8T53WFdVnW8ow3QXZoRJ4T+478UG3X/NZNMdHIaE92+/YFqtYsi321zlnIaSvdejKNcKTbcrU8SijlKkSQ5Z6j2hOykPI/4wEEEqQHQX2olO8TEmjLSFzVhBE+NmvfAjA9YMH1j+jwXcZoTyMEqIZHRMhjWihzfqQx5tO1NsqYT+QfCQ6MlVpLTHv4sBsFwgCJPfYEqNqjjTs7HpdwD0tVJKpKFBQqS4vSyE6NcTr51CGzqy8rQmd1vCV7nDmIuNZ2Drd+DPTo7xCCAtq/2B8+XEaZyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=05KA+XBCAPFxK7wF9bpUh64Oi8Gomrc3kIexIpQqP1c=; b=uMBlv2ALCn1jbJD3rzm5mIu0fc1AIh9cdH+tnXLkM6nL2HXZ42FnIXVQjzIF1XcKN1Xn3YLhYmFm1dDwKhxElWTMnlQND1VOUqEB/RSnCaX10cCNzEmZ6b6kIL91ryKcPD49Oon89isv63uLtnvZDKrQ8jnakWc1Lyh28Mkdq+E= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:42 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:42 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 31/36] block: drop unused permission update functions Date: Fri, 27 Nov 2020 17:45:17 +0300 Message-Id: <20201127144522.29991-32-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:46:00 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ad0ba914-0263-43ca-afdd-08d892e32879 X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2803; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: s96vAOwagChCEiWm41hDa9zqjUxm/CqvRzauTsi7XZx2G3zAjsN4KZVBvbmdn2CQbPddwPcrZOC3bf67wvrhD6+BAQ+0j06HLkSGhfbiYpuDbGFKrp6js1251rtppK6Fz2d72UDnyrSlM6IRc6DzfzXi4lJLcSDdyq9vZ5kOQI6uSvFf57z5jvwPKzAqn0PLAb5tSQ5+hFuCMl0HnnYwReiB7a66kD4u+Rt1wyjKdc/Jye+NZJqktKyy3TSFxDIk3rzo2yyoedie2mvyTIle7sq4N9bu0PkV/wCFNDGkDBtEotEbCLpf01xHyNANYPqmdC8F++9ms10gp75b70X+qzW+Z/HdWni7PCOojd47Hwmr/pWd05j+sDv830YYtLB0 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(15650500001)(66946007)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 95q/NUkaELdhW28NXGgoALpHomyvH85PDVbqRU9tAU/VyOQyLspb1p1hQriAN2zEViwPHwIwLwWv/r0sYvYeBZD0kWMkSBKV5/iNH3ShAdqWqGvV/6oD+BsQH2hu33eSDFODnyC6/wWDruQTAvXoWLBwVTm/rAxjWo7Uvu1TKYtujtgYKu0XsJHANaMZkZzLidz1V7AexOSuKhl7PoP9pDhHfrNpWlvIZk0EWsuoHATf5quA8ZqE0MGk/6KFwlQRlpTXAHvqfOVB7b9imaNHDjvqM4ijP+vVkFEe0z3Twtyy0TslPnMLRMP+xta1k2uHS9m74TvcFh6wFNr2UgSqifjM/BKVwtG1Lfxzb1gSzpRy/00lkBoRyhKesEf2GKYBdcuSoYgw2zoEJyJYKySeE0vcQ08kCY7NaN03Co285LE7fGXA2bY1dJNvN2pvlHoMgjF6YSptd9wlAkSPU5lWrfcqY72bSOnmlA8Cme8SAsF/4Pr6y8JCch5vbY8W0wnl6dxuwe3i2Cze0ZKox4GfFcwNh4ABLplmQxbUbK9Ne6E2wbNB8U4fz5P9sHNfB1+jTYtw6I9x0tOOs5qOt9QS97K+r9VzXwfxoivdZniR9BkHv7lrYZLNrU2lti26e07wXv2wgoIDdmYkrQMOye7k49sJNp31RuaGUVZDkFotU2EWOO8amis+2hJ/cc4TaneRFYhMKhVNDfBNEynCB18OGx7yfUncoYjXtt+hSM3Oao7WM67J1de4oLhMAdR2GsfeiKPC0YHbrRzmI4NBA34IP3fcsgL6XSY73+F9QiC3Y5g9Pkrln9z0KarFwpNgF9cxHn05o/Fcf4su0OgpdMOE6PVopJVA7e8sJ2J+ggFtOeAa/Cbkn9B3Tj9+3IiaquW5n8n4VMgVN9lYkRfhbeYZBO1/XP9TUzrUz0rqNkvCU0PrNAAn1toKaZ3X7aVgKlBFS8VwW2TMXcq3+b0zbFww86AQRJ2Wxkt+To75YvUFW6ie9Ep2tytzotMOdCAgqJh7 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad0ba914-0263-43ca-afdd-08d892e32879 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:00.8783 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jO/jSFVVAJ2hoHv5Fs1ZF1EzVHYhSd80m6vdJ0sh0tugD+BYYzNKC7ovXmfWkkH3XgI1UwIzBM9s61FOuKAvmkkEf6oQM0ir1Lk9vtORkns= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 103 -------------------------------------------------------- 1 file changed, 103 deletions(-) diff --git a/block.c b/block.c index 474e624152..3ea04bbd8f 100644 --- a/block.c +++ b/block.c @@ -1933,11 +1933,6 @@ static int bdrv_fill_options(QDict **options, const char *filename, return 0; } -static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, - uint64_t new_used_perm, - uint64_t new_shared_perm, - Error **errp); - typedef struct BlockReopenQueueEntry { bool prepared; bool perms_checked; @@ -2361,56 +2356,12 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, return 0; } -static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q, - uint64_t cumulative_perms, - uint64_t cumulative_shared_perms, Error **errp) -{ - g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); - return bdrv_check_perm_common(list, q, true, cumulative_perms, - cumulative_shared_perms, NULL, errp); -} - static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, GSList **tran, Error **errp) { return bdrv_check_perm_common(list, q, false, 0, 0, tran, errp); } -/* - * Notifies drivers that after a previous bdrv_check_perm() call, the - * permission update is not performed and any preparations made for it (e.g. - * taken file locks) need to be undone. - */ -static void bdrv_node_abort_perm_update(BlockDriverState *bs) -{ - BlockDriver *drv = bs->drv; - BdrvChild *c; - - if (!drv) { - return; - } - - bdrv_drv_set_perm_abort(bs); - - QLIST_FOREACH(c, &bs->children, next) { - bdrv_child_set_perm_abort(c); - } -} - -static void bdrv_list_abort_perm_update(GSList *list) -{ - for ( ; list; list = list->next) { - bdrv_node_abort_perm_update((BlockDriverState *)list->data); - } -} - -__attribute__((unused)) -static void bdrv_abort_perm_update(BlockDriverState *bs) -{ - g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); - return bdrv_list_abort_perm_update(list); -} - static void bdrv_node_set_perm(BlockDriverState *bs) { BlockDriver *drv = bs->drv; @@ -2492,60 +2443,6 @@ char *bdrv_perm_names(uint64_t perm) return g_string_free(result, FALSE); } -/* - * Checks whether a new reference to @bs can be added if the new user requires - * @new_used_perm/@new_shared_perm as its permissions. If @ignore_children is - * set, the BdrvChild objects in this list are ignored in the calculations; - * this allows checking permission updates for an existing reference. - * - * Needs to be followed by a call to either bdrv_set_perm() or - * bdrv_abort_perm_update(). */ -__attribute__((unused)) -static int bdrv_check_update_perm(BlockDriverState *bs, BlockReopenQueue *q, - uint64_t new_used_perm, - uint64_t new_shared_perm, - Error **errp) -{ - BdrvChild *c; - uint64_t cumulative_perms = new_used_perm; - uint64_t cumulative_shared_perms = new_shared_perm; - - - /* There is no reason why anyone couldn't tolerate write_unchanged */ - assert(new_shared_perm & BLK_PERM_WRITE_UNCHANGED); - - QLIST_FOREACH(c, &bs->parents, next_parent) { - if ((new_used_perm & c->shared_perm) != new_used_perm) { - char *user = bdrv_child_user_desc(c); - char *perm_names = bdrv_perm_names(new_used_perm & ~c->shared_perm); - - error_setg(errp, "Conflicts with use by %s as '%s', which does not " - "allow '%s' on %s", - user, c->name, perm_names, bdrv_get_node_name(c->bs)); - g_free(user); - g_free(perm_names); - return -EPERM; - } - - if ((c->perm & new_shared_perm) != c->perm) { - char *user = bdrv_child_user_desc(c); - char *perm_names = bdrv_perm_names(c->perm & ~new_shared_perm); - - error_setg(errp, "Conflicts with use by %s as '%s', which uses " - "'%s' on %s", - user, c->name, perm_names, bdrv_get_node_name(c->bs)); - g_free(user); - g_free(perm_names); - return -EPERM; - } - - cumulative_perms |= c->perm; - cumulative_shared_perms &= c->shared_perm; - } - - return bdrv_check_perm(bs, q, cumulative_perms, cumulative_shared_perms, - errp); -} static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) { From patchwork Fri Nov 27 14:45:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936553 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E84DC2D0E4 for ; Fri, 27 Nov 2020 15:15:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4F7E622240 for ; Fri, 27 Nov 2020 15:15:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Lb2CubDu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4F7E622240 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifSi-0002q1-5j for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:15:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1U-0001if-4p; Fri, 27 Nov 2020 09:46:57 -0500 Received: from mail-db8eur05on2099.outbound.protection.outlook.com ([40.107.20.99]:45281 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1R-0003QT-Vq; Fri, 27 Nov 2020 09:46:55 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UYQMyjOA/25+PE5n7kV6f9+Xov/25SaN6imJEVtKUQTI3/DABlGVfFfMcV8ct0Tyb54UtVkO1CZ9o2gp0SOXk7EVhULLN59hsk54FqNdjzwLmR7VOi8kWdPnbfLhxgUZPO0/C+DdlEYa+e2baFGn+qEbjP03kCOg5Qd9x+x/UDNAJY2XxsNOvoBCS2tKADOi5XkafNuO4un3sPdNOf/Qke1qfF42Q8Zgm2GUhRgLtN75v0z7wUbPj2GqJ/n4O02JsaqfTc8TDgIHx72oXeIFPWMNOJ76WhxrojmPzbTjGor4ob9b6HbXXiV24Raenyp1fu+YEVT2pKOzKhGxACAihA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tMcuknVbKw3kNTGWPyaqfp/oGc87QtBtSY3NYoK/T1k=; b=kWR1oAitYjJXYH8M/BA1G2deuj8K5uZuP5CcjN5RCOVKQoW2c6UcDgTmFkMTF9r5HQ0aY2elYdxRFgV/Q7MJRW7LyRroJxrM2G5CB6ZF4pyr+wKKIvhqfxPBaG0eYL2PuuZg+2l2K+kVJKYiq4Yy4LW3RYoHitZMvVv/sBgHl/m5TPzEM8y1OGyu5EY0vNlDSc5XPpL2dHHUi7bY67xUHELpOwzi2IbdS3dpXGXTB4TFnu0r855NmnqcqsyXF60p4WIZR04D1EKdrqYtED72dxkySjeCkBtUfutd1RyM91ZyXxdH6NsEFvtv1aYZyimk1VxH4c80aMZyE55gi7qf/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tMcuknVbKw3kNTGWPyaqfp/oGc87QtBtSY3NYoK/T1k=; b=Lb2CubDudcHMvgLasjKaOpLLZzwGgPQUStBIPE+6kPfdiugvW6ECUdseqTr8/Ep2VgeHUULJfL06QTajC7kl9KF+wqxhqaqn4ilFR+VgqbeASEg6ZcHYoRLYTQ/msnQzowtc97H5WLeSijVDURFaqENY1HApqYjExPrbOt8VH9U= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:42 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:42 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 32/36] block: inline bdrv_check_perm_common() Date: Fri, 27 Nov 2020 17:45:18 +0300 Message-Id: <20201127144522.29991-33-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:46:01 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f284125-0810-4bad-3c79-08d892e328ec X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2399; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MR9s69ePN47xUaQQYXPK96F2FTWksly+HcTvDn3XCBJYZUajU7qYp3Yw+uM+XgNz1L2OP6hBZY9Nd9pQ58aVmYSc+6Qh4lihBD0HGlnaV5ww/rRnlwOpYcjkaUqgZdeHE9cNpSs2o3a0oEs2bkRe2pGCUC6VrhT8v8Q3h2yo0DEXCp039bi2IdASwKn0udMAgU64W3zmxvcrYtNHTf5/+HT8B4/7r06U+t5rpPQzA0qnjTXDgekPlvUEEiC5hhSSxLbVDJlGePnrzYsG6ElO6neu/qtMTwcFgeJ4Gw3R+J9qUDDTB0dJPGXm6+1Jf6ga0cEcg3ZCHr2tnXqv/YEOZi2cP/X8FTmEoV5VZec/aC45Z50tni0tXszAWdSS/Uh6 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(66946007)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: Cx59FXvEgVcg7aahLS0MScxSckKObrK8P9d80O3c42hZVAI9Lc7UsNHAIBvwy8JxNb3lYBCsVnH2u1ZDxGzQqpVt30j23dhwWpjpkNeWW8Nt+YTE1pNGbWpqplPjiFmJ90MUKgcSdqF0LNNXhAluSKCNl9x8lQc1zukoASw7pu+KnWczfPZAUAX+3Nm4LSTfVGpT+EZ0QLci+RKb1ELRx5du5HgasGjq+J1v1KDXTxJo90tT4FHFTqsEXyRs2ThmvHR+syySQSk8EaYqJ0bljUl6ucymRLvuvBkz5pBmf2gsCOIaWz5CC7wg+hvSM2uhTc8PRvbKGI+nwWEKl1e6CgCqmcAcjV3lOVPruyma4P197OU03/1EnXstuFoBGkGoTeicQjSdYjASky4F3eq0FFMhrEJe94qayiVz6QiEAEHTp/93P2k2pltzZ8t5mpq2WHvE0yh/8sCkDX1zVGwiF7WODYaAdk19U15zAmvwJxZlYWYZKX9J456ZgZaKNSX2ge5NmZDToiGEPk2MalRrNEIfyHvdkNMFnY8htVQqEeq3+yRJ6IIj8hq/+Vi3XHDqWtSw6zl92mSw/XqwWQh3POW03xZpH1+GrVnyUHJo0btM9PZN4zimcn692IX4eO7+vwukn2w22M+DLXhKCdwYUB3UifGGz19wNOiynJe5+TGbngR5bTD/WKpRcmQZDEJRnV5uyIh0BibBo1KcldSgJ3YxN7WiYkY0NJxjrpI+cXjcmbDPEvJOk68nGcGWwyOWw8stclyhKa/RHh3R7+4gRsGU8+EpGRwWxZTKDfduWtowpWi61tvKgXRNSvoze9hYldgkLbZVhXej315ymRF+r3hdQRYZWMYxMZOVc6fr8+OCp+tcs33SoA8pcXbQDganAGTRbuLwGcgV/FQXrgRqc69SsQIgIdjTVOOvE3DGpah3RhQUhJ3tvD2AXcyfLysG62+UeStxOVWtP3Vq1rCnIob53zr/ZlZgpf8kuBhuFfrftlP9N5dLMIWDKV8Htc6F X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f284125-0810-4bad-3c79-08d892e328ec X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:01.6370 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3EGV/pbOlWDM4xTv8H6/s8BUVBamIyYrvLZk1mkvt2FGY9cdrPNHu9/+udp59AX+pxKATBYnUYtoYIm2ELfo5nIIUkTBkzbd1KNmW0D50/U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.99; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" bdrv_check_perm_common() has only one caller, so no more sense in "common". Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/block.c b/block.c index 3ea04bbd8f..6c87ad0287 100644 --- a/block.c +++ b/block.c @@ -2308,33 +2308,13 @@ static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, return 0; } -/* - * If use_cumulative_perms is true, use cumulative_perms and - * cumulative_shared_perms for first element of the list. Otherwise just refresh - * all permissions. - */ -static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, - bool use_cumulative_perms, - uint64_t cumulative_perms, - uint64_t cumulative_shared_perms, - GSList **tran, Error **errp) +static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, + GSList **tran, Error **errp) { int ret; + uint64_t cumulative_perms, cumulative_shared_perms; BlockDriverState *bs; - if (use_cumulative_perms) { - bs = list->data; - - ret = bdrv_node_check_perm(bs, q, cumulative_perms, - cumulative_shared_perms, - tran, errp); - if (ret < 0) { - return ret; - } - - list = list->next; - } - for ( ; list; list = list->next) { bs = list->data; @@ -2356,12 +2336,6 @@ static int bdrv_check_perm_common(GSList *list, BlockReopenQueue *q, return 0; } -static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, - GSList **tran, Error **errp) -{ - return bdrv_check_perm_common(list, q, false, 0, 0, tran, errp); -} - static void bdrv_node_set_perm(BlockDriverState *bs) { BlockDriver *drv = bs->drv; From patchwork Fri Nov 27 14:45:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936563 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 426D7C2D0E4 for ; Fri, 27 Nov 2020 15:23:10 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C3E00221F1 for ; Fri, 27 Nov 2020 15:23:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="hXLeNLeb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C3E00221F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:56704 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifaW-0002Ue-Bm for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:23:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37082) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1W-0001jd-3q; Fri, 27 Nov 2020 09:46:59 -0500 Received: from mail-db8eur05on2103.outbound.protection.outlook.com ([40.107.20.103]:20897 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1T-0003RM-0p; Fri, 27 Nov 2020 09:46:57 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gg9no6ccQ5dFFjTTTpK8CVG9R+gUqaIgJ7gCh79/NfQJmiMAVikb1wgxpfWv0LMBWhpoahfpgoYbH473KnAxiVpJcwBgKCIdYFdznTMc+7EB94rs5+ypMYheL2gjrCcWxyGlulxgyYCnvKCkf+UHsWcfBqLwISFQzOJ9cg8DTOp/stsv9yj7eJfJrzvfBEZBZTmlcfAIAgXHe5nUdbNiNHcaZ9//BNLYL7K8NKx6dhVgD7HwbaGnbP+Ni/qzqrhX2tQeVMGppchtNEun17Uhl4LT+3K2Ls5gHXHgZUd8b8CDEyr/1h/ZwSZ4dc6Gp3+GNl0Ab97cGpTVKKG1N2xxPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=B9AbPK1v3nYwEjHS358SNuG4zwCkc34Um7nmW4zQP5Q=; b=XhpkOBXfqCVgJgzdpM2jcBhe+/P+U6R/9AuwR4gF0w5Gix6OR62pCLfv1K+Pd+/hklj71XGISvo9bFZGzwZ8hklNIquchJAZCmK/mz/yhu8StcAycuoP0cHLjkc9C16irhD2yfQTGXUERUaPcpSUmbzwxm9jQAPXhzb2sJdIF3tn/CRhP/lIZlDS7GSlCmduiAnooaftLemmeem3IXOKVvKZy9/XiTgKIBzK/hLnclYrvtgos9dhE76aljYtpYVsY9ucYspOCKslt9jnXVNB8bKxbTjlp0boKCLRgcVnlU5/vJdr8N87Ky9RNDujPk58qZZIn5ZNNQ9lVF6LLZvzyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=B9AbPK1v3nYwEjHS358SNuG4zwCkc34Um7nmW4zQP5Q=; b=hXLeNLebtPAtrRYeXZdtlR8W+zjWKeEH3oMrG+Sv2UdER0yqU/HpWwDuXuTfvW79Oa6sz59MUI1j4CFZ2F9gUPMfckAytpcB/XxjKVr75wwqyQpjfsJn6GBODlcdWoDJOAm+NrICCZC6x1fYywWBGC2oDxhB9GxuLltcNQj1NC8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:42 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:42 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 33/36] block: inline bdrv_replace_child() Date: Fri, 27 Nov 2020 17:45:19 +0300 Message-Id: <20201127144522.29991-34-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:46:01 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cd3a50ac-029d-4e69-03a9-08d892e32965 X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bENxrbYnfmqtP+8fSZdQAegx8p8in8V06IOXv8wWCHqO0vKUt1ZNeFGfmH7FGRvvoAc9rItFZzEtRUWOgkqtFyCsChNF6FAhh11QUf0A2eUDHQb6xcjQF6xSSlJiBnRsfpjZcCIrxt1p/po5XCJP5mRDGKu8YTbelMISVoANm0vJ06EiDWVD+1gT+q+zci8V6Az/EyWnwDgFlRGpOlcevxXFk836NDhqQ3lHWy5HZoL0Wrmxv+OG7XyjF62qSgPx0aEh6SBtT0zDOq55sbhDIdsD0/Cpv1E49o7FdCU0C+loKsixQjg7+hdL85v96fjN/mhlgMVyOm5FtuxlnEwPPZ1MvUPtwpfW/m8it3AKmQH7W9U59Ekgekn2yzZ+SiLh X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(66946007)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: YrtJa3eciC1aVDA2LX+jMmgEIG9b8U19IjZ5YrcPscg7L8V6YFLL/kVZlNOFbquL7ugbOBUuVpqki5J0uwq2URcnR81SVXGq58bU6wkQ/lKDtHr19nJhs2NA9oC9zdg2vpmb/XpDYGYQdvTkzsl/hB/zMwAp6JP5FZ0NQco37QEhYun/1BSKr27627l/c1OYt2wAXrst27XdXZ36cEy/+393balN4KDmlDYFYhvfNC5euJ880SQGuI9qesLIBXn3/JcFeSRmIzND/xzQlSBaq4ZSuMCnlaOQr5u3Ut3e1BX+CNqz9jXd1X0UCASp0gTmm6wWhzDFnnMH3K0vvEMn2ONaVs26oenwacQ8rQEm+IblulyofsZUxA4kuj14SQ43te3fRYicW1OjO8YXLE1ylO/vAd9MFpjdyoKdjGE8TUL/cygyZzuKanoul0o+Brpf6rUrZOqiHykt5AqNrgPHYIz7OGJxtjqU17ado6iOaubyIFqPfkxa845bKsRjzWXPVK6n+urT7rOqXl7KjBjIEMlv8VfsZUzBMtsgDuqQK2+3Y0gIqclHqMCU8XBGFE4vngffPRGNMaIZw/5xgv9rmYjXULKHUwcAlwCoQJg3jlXuWhX9OjotYOP/MgxuqW94ZWmMxe9Pn43fo4q+8YzobJaIHBeyWqSY4MHr0zsbs7qD7lgaJ2vpxngDJhwQqmpCp+34ZgirNrchJkyt/OX1hdGk8Q/16DiY6V0rEG+vsHQtSfw194yIWBICC0TnwmTMNjgtDLVxloL0oDSUg1rzflwdIeth2T1zaxHnhXN23y7pDBC6WJolY2Im+9BIk66CGdwEzJ6KQ7iBX0KiGo1REBayveXA/SjyujvD8N75z2/j3PjhpTdpIFvmzk0Uqpr0sZs6VguSMemL+CWNaU4PXi2nVb0oReB3xMxejQv5WrpcmwG4rfh8pbAaF9j/TKbDG/rCJgWbjhWbbWCEqoe5fS/hl84n7lgSaaGgRJrLQ1XyJpUzsdbqTKu3guI6u1Mb X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: cd3a50ac-029d-4e69-03a9-08d892e32965 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:02.4265 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5OXWV8h5nCzr4Np313JqwAC6nF7deZxW6mmUHh1rcNWYUJyAGbg/BdYzh1pTBnBdWXWahgEMzjrtj8qGyAM+8niaCv2YQC/mV4sTd4VEXjs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" bdrv_replace_child() has only one caller, the second argument is unused. Inline it now. This triggers deletion of some more unused interfaces. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 101 ++++++++++---------------------------------------------- 1 file changed, 18 insertions(+), 83 deletions(-) diff --git a/block.c b/block.c index 6c87ad0287..3093d20db8 100644 --- a/block.c +++ b/block.c @@ -2336,42 +2336,6 @@ static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, return 0; } -static void bdrv_node_set_perm(BlockDriverState *bs) -{ - BlockDriver *drv = bs->drv; - BdrvChild *c; - - if (!drv) { - return; - } - - bdrv_drv_set_perm_commit(bs); - - /* Drivers that never have children can omit .bdrv_child_perm() */ - if (!drv->bdrv_child_perm) { - assert(QLIST_EMPTY(&bs->children)); - return; - } - - /* Update all children */ - QLIST_FOREACH(c, &bs->children, next) { - bdrv_child_set_perm_commit(c); - } -} - -static void bdrv_list_set_perm(GSList *list) -{ - for ( ; list; list = list->next) { - bdrv_node_set_perm((BlockDriverState *)list->data); - } -} - -static void bdrv_set_perm(BlockDriverState *bs) -{ - g_autoptr(GSList) list = bdrv_topological_dfs(NULL, NULL, bs); - return bdrv_list_set_perm(list); -} - void bdrv_get_cumulative_perm(BlockDriverState *bs, uint64_t *perm, uint64_t *shared_perm) { @@ -2711,52 +2675,6 @@ static void bdrv_replace_child_noperm(BdrvChild *child, } } -/* - * Updates @child to change its reference to point to @new_bs, including - * checking and applying the necessary permission updates both to the old node - * and to @new_bs. - * - * NULL is passed as @new_bs for removing the reference before freeing @child. - * - * If @new_bs is not NULL, bdrv_check_perm() must be called beforehand, as this - * function uses bdrv_set_perm() to update the permissions according to the new - * reference that @new_bs gets. - * - * Callers must ensure that child->frozen is false. - */ -static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs) -{ - BlockDriverState *old_bs = child->bs; - - /* Asserts that child->frozen == false */ - bdrv_replace_child_noperm(child, new_bs); - - /* - * Start with the new node's permissions. If @new_bs is a (direct - * or indirect) child of @old_bs, we must complete the permission - * update on @new_bs before we loosen the restrictions on @old_bs. - * Otherwise, bdrv_check_perm() on @old_bs would re-initiate - * updating the permissions of @new_bs, and thus not purely loosen - * restrictions. - */ - if (new_bs) { - bdrv_set_perm(new_bs); - } - - if (old_bs) { - /* - * Update permissions for old node. We're just taking a parent away, so - * we're loosening restrictions. Errors of permission update are not - * 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_set_aio_context(old_bs, qemu_get_aio_context(), NULL); - } -} - /* * This function steals the reference to child_bs from the caller. * That reference is later dropped by bdrv_root_unref_child(). @@ -2979,8 +2897,25 @@ static int bdrv_attach_child_noperm(BlockDriverState *parent_bs, static void bdrv_detach_child(BdrvChild *child) { - bdrv_replace_child(child, NULL); + BlockDriverState *old_bs = child->bs; + + bdrv_replace_child_noperm(child, NULL); bdrv_remove_empty_child(child); + + if (old_bs) { + /* + * Update permissions for old node. We're just taking a parent away, so + * we're loosening restrictions. Errors of permission update are not + * 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_set_aio_context(old_bs, qemu_get_aio_context(), NULL); + } } /* Callers must ensure that child->frozen is false. */ From patchwork Fri Nov 27 14:45:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936559 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B586C63798 for ; Fri, 27 Nov 2020 15:18:23 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DDE142223F for ; Fri, 27 Nov 2020 15:18:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="CPD7FQYG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DDE142223F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:44452 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifVt-0005fz-PI for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:18:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37104) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1X-0001kY-J3; Fri, 27 Nov 2020 09:46:59 -0500 Received: from mail-db8eur05on2099.outbound.protection.outlook.com ([40.107.20.99]:45281 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1V-0003QT-AI; Fri, 27 Nov 2020 09:46:59 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lmGug+wn8S4VPn8Gj9qoQD7JuK2YFlXPIZIHeR1VKsuKln6CavsJp4Fi6fe1S77dLnh42oiZ79ujDnUdjNx2GefrbKMYHmqvjnPDXFmfbM4cMCkR6bBbLk67088IIVWzGnLTMUMnVZ44aM1uo1ODWhf+YQ1D6XUHdIS4jucIoK9mlwSOgvvoIDoaDD3J3hV995XGHSGe+ErtzSlYRbK7SbAokiWM21m0Wf/3j1kEbFSrQ+va7/hXFx9X7fEY8GbYwithSdSx3NVEBki9JFIr0Mj+lldnXmNGUTn+Apt96dKPtqgij+U1pkmeavbcZPy7imdG/65C7a1vshjB3tNfkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3Wi4LZ/JF78wVhSNOtMLL0OBzm15MZU84ROQWPq5D84=; b=E3KiajKMzki/Vj56xuyUa7jbcaPyTjQsE7+EgeWnCf06ysozfAoxI7YUD5C5FACHFrm1wmM+RRsc7CFuWzfZTSY9Qhu8VpK9j05U756AgtanOCybu7YD9MZ9ikbBbEWNM8OUp65F/iEd1O7lxQL8wf33I4p7YwuJn327+n3UDbftucWjTOp7ULz+P19uUHoN8Lai0s5Mg9w8+fVm2s1EvYSnugfl3OEB6W2P9A4jRKFAmI2LUIWHW8H9TAR17bcHhU1aOE5Dr2wxSKzKFoXV2OjPhQYy8570wAHXBxP4XBnpGy60vZ8cX3b51BWMwzfY6Ro8aek063E7nByn6fQ6Xw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3Wi4LZ/JF78wVhSNOtMLL0OBzm15MZU84ROQWPq5D84=; b=CPD7FQYGTBem/55ZxTdGtMMtQYz3379v1apFtpVa8AQfXRFiOLdRwJ+bW1Du028PIfkpAV84EqTXAoROJiOkkLgUO2iNq85yQp6nEkmuMsYGvBfDiVFHY7DoF9cTfexE8rgwOpR6jJfX28sHFdLentKrjmcfoGTNJA2rNXoHpzo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:43 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:43 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 34/36] block: refactor bdrv_child_set_perm_safe() transaction action Date: Fri, 27 Nov 2020 17:45:20 +0300 Message-Id: <20201127144522.29991-35-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:46:02 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f044c396-2d38-4c84-1eef-08d892e329dc X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:161; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CJcnO7pcw/tO/Tsp5zZsQ1GTylThxShNN2Z5Zv2wDMIF7C7QOjjmNPOftQgSJpzDNGMm3KcEgAwPDcV2uiQzyRJVL6T4rwh8e3AphG7wUaJDe54CVMvmdrttkMkLwk62ImUkLPAC2+wN4R1o8Q2kkhsZyE4UNtVDjk+UYPnp5xHlgT0TuTT465wAu9pukAiD0Bed9qG5OjxnfP4nFyFpi9aJgcSVZDAMH3vzdre4NMdPIxoJ8+QDfreh11VPFtEK7fYZLBWJWtGA3Z+DD5rTg17BQb4aRLQEiGCPQFTbV4zScdBYH0OrZKvs0ASDQtZkwKcazDJ/Wi4NqdzjjMxdsRw7DBEzKkYTYTGMHa9JACmTjwKK0d6TnlCV1G2uwpi+ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(66946007)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: /MGdlAzjNfUtfFSVE2yHgRD1LTucBgUPD5BXMY0G3qVMpmURHFLzEUFg6YidmKfueq3+ZIaYpA9Sd09IwVtPmT/AW36Wm7J0o4bxCDnhw3uQB5ErGzMnbwKoItvTaBETbvdHe4PtSc5v7/W4pdc6GMWY8ot+oIDvPxTGGa3Eo9axLGObCgUKegUF+LeBNkrOGMXtIFPdzwZkDw9DlwPKg/SfvG1IlDr+poy6dSSvpkBCKLOkJxidM6n9bBSCMKqSc/jewxjv1VA8C6YairHR5qDB499soNOq7toNUtj0MdQUr3WOFOYUBezBbW/NB/3k5RF7PagqjcoO1HcJquYF3SLj8OQK6m7l5Fvo3LDQFKNDx8G3VWiw4TWzn9YWXBegl3A8fBP/nAU7JNoEcQpy4PWMr3BKALN1eRPEvzycuFdQYF9ZFadIwr6LU3b6Stf0BR3Y9GKlW8iS1rT4h+shPBaVVGIEHyFOhXETq3v0zDXer6m7rIPSb+HOaneQfD8/LmCCwfan+tjcx8odR9C2zXdxGyERSM0Cdm7FKR6XDfqNUbf/aDZ1+VTH4ohs0r45uK3sQhqG2OZh8EUezcIZTXnTm9EiMFsXHdL3zA1RgUcuFQDWGUbtq/dcf9wDP92YpF78W92m2/dSjHQRagrgQC3umT3Auln8wB2yr32YzIt6mIv/LYlJF4DFuy0MYwuxDbjd27ZPzF922UqZHPFGvDH/2uhhpj4LKEwzLdo/srZi0Ab0cW0M/WI611zIRyaxpUR9frkRMJK45QscEesm1pGpO1Wvb1sonKvi+n7H2pM2VFAfTcbDxDVvdD1vpmHpQcuLlVYOW9a4xFcMLm5Nt5LxOEa1Xlt+sTwCVhPndb/PtROj1a+STXQPMO4WjrFbBG46dFeTlCH7bH/1Pxw1AfmWLUepFH/oE3ntIdbEgqWJqJd3nWmYOYVn9ZegBR6mwBKJFWisF3p5pzLnCI8NQYPy1Aoy7BIxNZMu5FsKN8Lt+GNETTdVj/budEfBP5qX X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f044c396-2d38-4c84-1eef-08d892e329dc X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:03.2121 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: U3QHOwzbU7T3L8dDndJlK2l54hfyy7JW5broBM3QKrELouVK2IXYow8h8tGrKRfKI8cO8CtV1BGlW5PReAExmvUvK2he6PwEOeW+XuHDxDA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.99; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Old interfaces dropped, nobody directly calls bdrv_child_set_perm_abort() and bdrv_child_set_perm_commit(), so we can use personal state structure for the action and stop exploiting BdrvChild structure. Also, drop "_safe" suffix which is redundant now. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block_int.h | 5 ---- block.c | 63 ++++++++++++++------------------------- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index 24a04ac2dc..1e509db867 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -796,11 +796,6 @@ struct BdrvChild { */ uint64_t shared_perm; - /* backup of permissions during permission update procedure */ - bool has_backup_perm; - uint64_t backup_perm; - uint64_t backup_shared_perm; - /* * This link is frozen: the child can neither be replaced nor * detached from the parent. diff --git a/block.c b/block.c index 3093d20db8..1fde22e4f4 100644 --- a/block.c +++ b/block.c @@ -2070,59 +2070,40 @@ static GSList *bdrv_topological_dfs(GSList *list, GHashTable *found, return g_slist_prepend(list, bs); } -static void bdrv_child_set_perm_commit(void *opaque) -{ - BdrvChild *c = opaque; - - c->has_backup_perm = false; -} +typedef struct BdrvChildSetPermState { + BdrvChild *child; + uint64_t old_perm; + uint64_t old_shared_perm; +} BdrvChildSetPermState; static void bdrv_child_set_perm_abort(void *opaque) { - BdrvChild *c = opaque; - /* - * We may have child->has_backup_perm unset at this point, as in case of - * _check_ stage of permission update failure we may _check_ not the whole - * subtree. Still, _abort_ is called on the whole subtree anyway. - */ - if (c->has_backup_perm) { - c->perm = c->backup_perm; - c->shared_perm = c->backup_shared_perm; - c->has_backup_perm = false; - } + BdrvChildSetPermState *s = opaque; + + s->child->perm = s->old_perm; + s->child->shared_perm = s->old_shared_perm; } static TransactionActionDrv bdrv_child_set_pem_drv = { .abort = bdrv_child_set_perm_abort, - .commit = bdrv_child_set_perm_commit, + .clean = g_free, }; -/* - * With tran=NULL needs to be followed by direct call to either - * bdrv_child_set_perm_commit() or bdrv_child_set_perm_abort(). - * - * With non-NUll tran needs to be followed by tran_abort() or tran_commit() - * instead. - */ -static void bdrv_child_set_perm_safe(BdrvChild *c, uint64_t perm, - uint64_t shared, GSList **tran) +static void bdrv_child_set_perm(BdrvChild *c, uint64_t perm, + uint64_t shared, GSList **tran) { - if (!c->has_backup_perm) { - c->has_backup_perm = true; - c->backup_perm = c->perm; - c->backup_shared_perm = c->shared_perm; - } - /* - * Note: it's OK if c->has_backup_perm was already set, as we can find the - * same c twice during check_perm procedure - */ + BdrvChildSetPermState *s = g_new(BdrvChildSetPermState, 1); + + *s = (BdrvChildSetPermState) { + .child = c, + .old_perm = c->perm, + .old_shared_perm = c->shared_perm, + }; c->perm = perm; c->shared_perm = shared; - if (tran) { - tran_prepend(tran, &bdrv_child_set_pem_drv, c); - } + tran_prepend(tran, &bdrv_child_set_pem_drv, s); } static void bdrv_drv_set_perm_commit(void *opaque) @@ -2302,7 +2283,7 @@ static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, bdrv_child_perm(bs, c->bs, c, c->role, q, cumulative_perms, cumulative_shared_perms, &cur_perm, &cur_shared); - bdrv_child_set_perm_safe(c, cur_perm, cur_shared, tran); + bdrv_child_set_perm(c, cur_perm, cur_shared, tran); } return 0; @@ -2401,7 +2382,7 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared, GSList *tran = NULL; int ret; - bdrv_child_set_perm_safe(c, perm, shared, &tran); + bdrv_child_set_perm(c, perm, shared, &tran); ret = bdrv_refresh_perms(c->bs, &local_err); From patchwork Fri Nov 27 14:45:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936541 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0215C2D0E4 for ; Fri, 27 Nov 2020 15:09:42 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6936E22240 for ; Fri, 27 Nov 2020 15:09:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="nkh/wXG3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6936E22240 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51988 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifNV-0005Kp-D4 for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:09:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1Y-0001mE-QI; Fri, 27 Nov 2020 09:47:00 -0500 Received: from mail-db8eur05on2103.outbound.protection.outlook.com ([40.107.20.103]:20897 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1W-0003RM-Mt; Fri, 27 Nov 2020 09:47:00 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ug19V9Wrb3EMQRCP0kV+CXNpXoJAYohoNP+XuJyrcUt0L2QC5UasLF6HVagD4dfw+Ftd2hBcSOHh60Hax1ADQ4Zb67UjJJvD4U/QaJie0eAkuUeyyDQXxnILYMrVHasyNaGWW5VcfV6lvbAIQU2J/BQcqnOwmzXCTIT8TjJ/63BIJ1gtTiHx41jmDqLY+Wtlg3seFVIX4F6JDOwcMye1Us4Csmq+Z1DeWG1GbkshwkK1F69fWdlpIXMae6iawLpj2SVDwJDgTmkZf2NNwfHKTBG6vC4XGYu7MVbY6hkHUT22wQWGUhbiv16qhhezNc04AQiAnCWw1kY7ZVai8BIOXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M5vhHNC0SzknuMB21V7D/0Q2Rwinu0Pe2SDsP/ILyNo=; b=m8ZY5to4a6C/CcWJ7vLtl2Qb098Uk9A9z5aqxE9fCYSvoN7P+ZtC8x2vZdaUdAAHZ8eV642RfKfM/SodjUd4lC6arYAtVWcRCaA0OgQj1YBgkTqM44VWm+Qofu1ZFdOEn9Y/+RASnWFKmysPPzyz66OfyjI7NFmenw4uSU01eMGRP95ns3V1c/VRu6mPAJhQEh1SqtTxl5f/8/07OUY35UiO4aujmdzrZTF9rBs4NbrfUr1kukqk1C703ElfxUNo6DwSj6lS8NFqy7fHzZ8Qs/XYTwm5OWNaV5WdI9t5UwJrw6XlFgsz9oBUM62UAam4dSrc/hhkoEIekRw9jeuciw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M5vhHNC0SzknuMB21V7D/0Q2Rwinu0Pe2SDsP/ILyNo=; b=nkh/wXG3HqkRpdrllf/Ut7Xia3Wc7cE67+vlCbKPvyFLVSDCTFMYZ1Bb/vQgI2x09UQbCN76RUPk1kpN2HFP45ZeON6Cd8JvFGeOMIPHcBOB9W/rrZNhe2IExbVXrYZLVixXkGVgscYycyqXYoYnmrniWo8TRF5NhGJRtGFMuQM= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:43 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:43 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 35/36] block: rename bdrv_replace_child_safe() to bdrv_replace_child() Date: Fri, 27 Nov 2020 17:45:21 +0300 Message-Id: <20201127144522.29991-36-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:46:03 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6fc86d2c-564f-432f-3dc0-08d892e32a58 X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:119; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bZH2zg6pMp6cnSkzuHMJE7jaKLJjbi125LyJoUDMM8o3qzO6Pk/C4I6cCuJx6Qe7dTIxus90sP3E/4BDGjfrv3P7nPnx3NBZjnhVfcH8yTS55QG8vhwaHoENw1pu9fiINnwCsMQ1L6NQHWoXi536v6MGjjaY1ewMzbypxHJufFge3SQR5lgKpozZHYNBu93UWf3Bx64Ot5myTPMFX+oaf8/9R5NqymYvAVIALOA5AmKrAwCOhxNvc0hcLrWcmaHo5s9+/thRlqHlRUhzdxpC9YXoBxzIoYgXvzP/iIP2rOFsM0buDRFVV7FvM+q2/uxmk3Ln+adyqevbkDFfQwCPxwngMoKSB4Z2KD1XXHLfahPaTEOnPthCRtENlXCy+84Q X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(66946007)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: QcidW3k7ezAz2onITdrJSUa780LRE5LAlY0OgmErpOcN+tCzQWdGToLzqxpRx1RR/prQWMs1/hyQt4YnKddnpYqghPaTr5MoP5ouJXd06Z7ur+RolFhtzTBtBfqy+pOPQt5HxGLhW6zUDacXHeaINSqInJqyey57ggygx9JzbrghRTKJThpDC9kvpMYYj0U8G8cdZIkNobB6vrep3noRddrPvkiEXpo2gQdzan6pflK2Y096Pj9lstkzE4KPicgvEHRG42pi5agdSU5wOcROELPNs12m6t8Oc2YP1WA/WbWALe3IPQHkhR4qfpimgfnekDt5Zt8j7icFSYku4A7NNPfrMAU6IgironBiBlqpx/n51J4zXRlYI7ORY/cZQqRlBXgkeWUwa5sXxsyH+ktO3iHuB+tmebbmW9G8isJdoYUC/ji9E5ZA7xKO4kKChT++GaWoWIxQq+P5M1AHlD3TQQIaGkNhMKCCR6cgGQoHo/sdLcEhaspKpq8JVOPcNLPSY9EZpUa10Wsk4OhHJ/lc9vQ4FdWmloB6BXHSE0Z8mp6tF/mvxMStjbYpc9EHNBrI8No3K6kYRaAW9zbgybhLGUaHg0HsrMqlKB6xCx3miRD1qZ2OxJ0QpxK6N8amxZVc9VuD6uQ7pZvmZFzW2ZDOuFJ0qG5cx1d8Nzj/5GX8+T33/5tfRiBa3uB5NAvZwPI3i/eWxB96Gi7muu4BQQhUvr6E0wjAdgK+gDtm/KKpXBMaOZ+YW62vY7ZMVqx0s8TenRcKUkiuAJYysGUiN2FVkZ8pPUFngQgQuvfzrOu9wx1CCgltYuLYphGkCYgDPq/hOsXe8ZVXRVP6qhhtHGlAOscXYynBXdqO0X6n+vVxeyWjxvgXe0OC/vIkTKzWcUeMfQ0ILAKoNg+pnLgLdrSubudX3EOrEuI+Wr0ZMJTmrTmaVwuYY48IKBpa0zsgEPP8qnPWX7eoVqRTcJ85IXFA16fylRqxnn0ZZBEDDEqYryJcPuFPAensfBkQEgqX3jLr X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6fc86d2c-564f-432f-3dc0-08d892e32a58 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:04.0056 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BeFy7Wfw6OQ+xZ33zZMnLkv92IS06nnd/PzrcarLCBqisK2rWG18sj2oYjCvUXfOR8NZ25jlhnOCLE+SZYCcuLJs5zUVtGr6gI9qx007V0A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We don't have bdrv_replace_child(), so it's time for bdrv_replace_child_safe() to take its place. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/block.c b/block.c index 1fde22e4f4..20b1cf59f7 100644 --- a/block.c +++ b/block.c @@ -2183,11 +2183,11 @@ static TransactionActionDrv bdrv_replace_child_drv = { }; /* - * bdrv_replace_child_safe + * bdrv_replace_child * * Note: real unref of old_bs is done only on commit. */ -static void bdrv_replace_child_safe(BdrvChild *child, BlockDriverState *new_bs, +static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, GSList **tran) { BdrvReplaceChildState *s = g_new(BdrvReplaceChildState, 1); @@ -3040,7 +3040,7 @@ static int bdrv_set_backing_noperm(BlockDriverState *bs, } if (bs->backing && backing_bs) { - bdrv_replace_child_safe(bs->backing, backing_bs, tran); + bdrv_replace_child(bs->backing, backing_bs, tran); } else if (bs->backing && !backing_bs) { bdrv_remove_backing(bs, tran); } else if (backing_bs) { @@ -4679,7 +4679,7 @@ static void bdrv_remove_backing(BlockDriverState *bs, GSList **tran) } if (bs->backing->bs) { - bdrv_replace_child_safe(bs->backing, NULL, tran); + bdrv_replace_child(bs->backing, NULL, tran); } tran_prepend(tran, &bdrv_remove_backing_drv, bs->backing); @@ -4708,7 +4708,7 @@ static int bdrv_replace_node_noperm(BlockDriverState *from, c->name, from->node_name); return -EPERM; } - bdrv_replace_child_safe(c, to, tran); + bdrv_replace_child(c, to, tran); } return 0; From patchwork Fri Nov 27 14:45:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 11936551 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D204C63798 for ; Fri, 27 Nov 2020 15:14:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 09A6A22240 for ; Fri, 27 Nov 2020 15:14:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="nbzW4l1m" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 09A6A22240 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kifSX-0002Vk-1c for qemu-devel@archiver.kernel.org; Fri, 27 Nov 2020 10:14:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37140) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1b-0001no-8A; Fri, 27 Nov 2020 09:47:07 -0500 Received: from mail-db8eur05on2099.outbound.protection.outlook.com ([40.107.20.99]:45281 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kif1Y-0003QT-AK; Fri, 27 Nov 2020 09:47:03 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TsZw9e3WA50FjbzzBBxOgT9lQkBaLKzH+S6lcepRQzqW8XWZR3vc/1HqYV6xPIqcpcxGthwBSWV69P/EwQi0QvGojfzdptvZNMCwOBBU3NDvypzRaHcXDmngI1c2ixqM/zMuG7fXQ4HVEyI0rWN4rM7bfwCsf2BSBaQsl2HQrTbuouY81wZUhr4DTGGf3uAw/XWu/KrGMlvbsRxqzGzPo/cT5VOgZnqfvl1DJzYck+eqpGcVnxFn7ehvtvWlyh8sGE1DMFzwac8i3YSQ3GjStt53pGrAYO8nwiBxp3zNYYjnGD3iXEQONQJ8s6Npoi+oFBi/n+JpzOPb1qjrTtnveQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P106dAQ2jVkdzBj/g1QlgvIhycpj121I9rl/opg0/Ls=; b=TcOptyo9Iu7iVPZiZqGwGRDyha5Xfs46EX2VE30synLfUlGIZPhKZWjKSQAm0vX1h9XEA5JSqhi3A2bpN69zjA/Rci3yXTpfO7P55S3gNS9UjQYxtiwfPGyN8AgGSjw7Ls2+xDeoxs+vhv6Qkgzvr2/1xozJFl60LRlQgOoQrPt72Poogl9GXR6L1jIIqdyXwQSGPT5H7aQjQmzOkdf61ajfyEejgJnI7bLqeAjPM1jK2PlraZMdFccEfAso2AxuOtn3ZVuk/7n12k51bkokkrFBMNVzaR3h9GrVFNqb0OCDNWyHVtVhmDcdQFllKGmZlJTZOmG2XRf16n4QXqcSyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P106dAQ2jVkdzBj/g1QlgvIhycpj121I9rl/opg0/Ls=; b=nbzW4l1mczOA9HUukz1mwu4TOoCYhffdJMZRvdAE4p2pdfW5Ht60cgi5ZGafYlaMog4CGSjeCU0DUAvJB4qjHe8v12D23Wzxu5tDim/1ZymTGP3bOtXwpQRmCr/pQypQvLyDXu+pxsrsz39ZOj7zvsowIkKPy65ABoP8NIk5yXE= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5990.eurprd08.prod.outlook.com (2603:10a6:20b:296::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Fri, 27 Nov 2020 14:46:43 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3611.025; Fri, 27 Nov 2020 14:46:43 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, den@openvz.org Subject: [PATCH v2 36/36] block: refactor bdrv_node_check_perm() Date: Fri, 27 Nov 2020 17:45:22 +0300 Message-Id: <20201127144522.29991-37-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201127144522.29991-1-vsementsov@virtuozzo.com> References: <20201127144522.29991-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.91) by AM4PR0501CA0052.eurprd05.prod.outlook.com (2603:10a6:200:68::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22 via Frontend Transport; Fri, 27 Nov 2020 14:46:04 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fc99c12c-f924-4337-04e1-08d892e32ad1 X-MS-TrafficTypeDiagnostic: AS8PR08MB5990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KmM/Rvj2yxhJfTQ8MtD1rkgRVXtBoU3mUM94ObxFO4UefwryOQobieaBDnBFan5Jgt+x7jME52b6nqMYsgt3dKi14QaCpZD/SYk64AL3fXZoACKasMsGc65e3HO0YOCG1omXVaHUc32cdwMiV7xpoK46V3CZuwUProv4//SX2B32lYsNrZHdnT7XgfxaAEfoj7bqnOTHA613QKtj7a1SnK0tNxhd7uYn84/vNNNPtPOXtTCCi+melzop7N/oO4T0bfbxPsu94QL37CeG+nKIg2MDB7xRJze6p14aKG8MeXMNdBDjYvBqF4oBSbrZydUPICv+QXJR7R9TXmhJ1TQBUqAF/iKOHYBuUNw4cTwN86OdX1IIcY6MvNDULayxYKo0 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(366004)(39840400004)(396003)(346002)(83380400001)(26005)(956004)(6512007)(52116002)(2616005)(66556008)(2906002)(6666004)(8936002)(66476007)(186003)(5660300002)(6506007)(107886003)(316002)(6916009)(1076003)(66946007)(4326008)(86362001)(16526019)(36756003)(478600001)(6486002)(69590400008)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: KLyPIukZKagwrHIxVVzOqXktKYy/aF7xuX2BFf1FTT4fM0Ih6/nKSYr58ecyEbendcdPt7hcD0aRj8BqvUZ+TDwTFmvZUjN8rr531iIwB0mF7bv1yiqyrsYBS63pWuX0ktGQLzOxFbT9ci4w90eLT/5coWxwaHajU9dupYhiexbCLlUQ+EUxJE/cXvhCEr4KTJMorA5DzYPwo82xIlc/jlUpI2m1/RMbGjvjXYd18iGFUquCH+ggRqiZvd2Bo9vhTs5tXb3o56UqvJRlRAOyRfNPP4vcwEWHeN6MknfT4667OQ7ByRH9/Jojc5m9A8KsCyjivScZ95g+9tmzYqB6DOu95fMnLme0F+WHKxCIflpmobFN/3KopFgSu/QfjTP+v3ZsL6WaMKkKYar+q5oTarUMH13J/HMhGcqAV1m3ySYYfkkgbwt7k+nZeoLqHNjC5RCpgnLuIY5kJhStqCzxeDlU7sM4zsAcdkEQF95XhHj14Ihfbj/EWt+G0r8+y3Nz9V4A9VL75pEk/8NIvU3j6g2AHG12dSfMaCfnogpoM6ybFd9ZJGvXossE7A7DI2HXaUmvyG7GvbMm3rPcy/CVGhkPde1hkCiUrvi1iT1Gg/ooQzOvgTjtcoJj8FvAIhuQFBYw3jkK1bVR5Vqbl2eRaZdJDtyWyoiFGOW9e32XTJMYm+QngusiyjFDxNJN8KF9XnpHfRcldeeGoxJzCqCu806Mca6oM9pAofF3j49LYO5tMvFXXhxKi7t4VYrWM/i6Pk5dZ34nhQtc/ed8W/k7qTEcyYIzc8vmLqFOOJkMTLNXEka05TV3coj4IKBXVMvVOH7kKZ6RJwQHcokEtPjb8CSc/t/OpclDwHG42ifndZ0u6RdcmI398eHJF9SG6Rw2LpbaMjhVEnJgaB6yalE0DVVc/QJUufBETYpT9v9jIHhBpkmXhseSk7pkK4jwDnA7AMNiOAk0tysjCHOnYLX+DT4vnM1ZLieYRrwfXEzDw4k4jSCWWpZde7vXyGDfBeK5 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc99c12c-f924-4337-04e1-08d892e32ad1 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2020 14:46:04.8240 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vLcRUHZaNAIa9A3kwNkkG6NSK2RSTn4Jn3VqdWy9E3nji6lbOZ8oTtrBBGdMYQB4qANo/2bx5gUKMMbgUpdXJgdlFa9We0M2CxW+TJvncX0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5990 Received-SPF: pass client-ip=40.107.20.99; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Now, bdrv_node_check_perm() is called only with fresh cumulative permissions, so its actually "refresh_perm". Move permission calculation to the function. Also, drop unreachable error message. Add also Virtuozzo copyright, as big work is done at this point. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/block.c b/block.c index 20b1cf59f7..576b145cbf 100644 --- a/block.c +++ b/block.c @@ -2,6 +2,7 @@ * QEMU System Emulator block driver * * Copyright (c) 2003 Fabrice Bellard + * Copyright (c) 2020 Virtuozzo International GmbH. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -2204,23 +2205,15 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, /* old_bs reference is transparently moved from @child to @s */ } -/* - * Check whether permissions on this node can be changed in a way that - * @cumulative_perms and @cumulative_shared_perms are the new cumulative - * permissions of all its parents. This involves checking whether all necessary - * permission changes to child nodes can be performed. - * - * A call to this function must always be followed by a call to bdrv_set_perm() - * or bdrv_abort_perm_update(). - */ -static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, - uint64_t cumulative_perms, - uint64_t cumulative_shared_perms, - GSList **tran, Error **errp) +static int bdrv_node_refresh_perm(BlockDriverState *bs, BlockReopenQueue *q, + GSList **tran, Error **errp) { BlockDriver *drv = bs->drv; BdrvChild *c; int ret; + uint64_t cumulative_perms, cumulative_shared_perms; + + bdrv_get_cumulative_perm(bs, &cumulative_perms, &cumulative_shared_perms); /* Write permissions never work with read-only images */ if ((cumulative_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) && @@ -2229,15 +2222,8 @@ static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q, if (!bdrv_is_writable_after_reopen(bs, NULL)) { error_setg(errp, "Block node is read-only"); } else { - uint64_t current_perms, current_shared; - bdrv_get_cumulative_perm(bs, ¤t_perms, ¤t_shared); - if (current_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) { - error_setg(errp, "Cannot make block node read-only, there is " - "a writer on it"); - } else { - error_setg(errp, "Cannot make block node read-only and create " - "a writer on it"); - } + error_setg(errp, "Cannot make block node read-only, there is " + "a writer on it"); } return -EPERM; @@ -2293,7 +2279,6 @@ static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, GSList **tran, Error **errp) { int ret; - uint64_t cumulative_perms, cumulative_shared_perms; BlockDriverState *bs; for ( ; list; list = list->next) { @@ -2303,12 +2288,7 @@ static int bdrv_list_refresh_perms(GSList *list, BlockReopenQueue *q, return -EINVAL; } - bdrv_get_cumulative_perm(bs, &cumulative_perms, - &cumulative_shared_perms); - - ret = bdrv_node_check_perm(bs, q, cumulative_perms, - cumulative_shared_perms, - tran, errp); + ret = bdrv_node_refresh_perm(bs, q, tran, errp); if (ret < 0) { return ret; }