From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163555; cv=pass; d=zohomail.com; s=zohoarc; b=U06x5t90KpdNzMRphYlEs9yVgBzLzWVRkdeR0uhpgy6pDhsGUPNpUjFvF1sN4AAcj2GUE2eP9Vxj1FfIxmIFUtCCPm82rS0NcUwsH9uICrO4v5+Zj73HyQRkozf30+pKuiLAd0P6Eq94ztfNDqv7jWyrzb+bv1sD6WaXeKyTd6M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163555; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lcJJOEbqu4yHarlC96vOfIQCdQa3o4nLmn3cJ1c2fTY=; b=YNPPhrjDZHlkAPJyK5HRCJ2KaGSqgd2W+ZJvSA/OixsDK2ywjcIIUtV+eDg0BJ0VHHplrBZuANOBLhond+MZ9N1CPZ7HX770qlCBWRMwEeHqfs8kpv/dGqPeF+sUjZNW12mu+kX9wIM6s0UI+NiPbpjcpOyt3vdqdLqhW9kjg30= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163555464154.94233837421132; Mon, 23 Nov 2020 12:32:35 -0800 (PST) Received: from localhost ([::1]:33262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIVm-0005io-8k for importer@patchew.org; Mon, 23 Nov 2020 15:32:34 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38230) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICr-0003pe-0U; Mon, 23 Nov 2020 15:13:01 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khICo-0007NS-Tf; Mon, 23 Nov 2020 15:13:00 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:49 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:49 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K1tTrsWNvzvl5dMugmZ7piuK4CT2eBjPEspPHnvw+hpWQjLIQwRa7e/ST2f39V7cRk3BGMEcXIQxtcIYESuKPdv7czXqQKZOgbBphCVsVuU7tYP/zulwtwvC6cj0W2OWDqeyE1MvxIr3/NCpzcZFv0AkbetxIv+7Nk/+ZAGCdStWqr7osMLLzo1/n6+tmX0HFjl4ZMIrdbJC/Aj6M3ZktGMnkY0/NFLyLXquLJST3N7DaFOc1CMWbcGW37ff7osLv4S5/5H3V7f8NQhRLUZhFQeEY/+aHWvpQT3BJ27CttTmRFbQ4ysYSt2eS5H+g4aADvgLrxUcfCuRqNmHF508Cg== 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=lcJJOEbqu4yHarlC96vOfIQCdQa3o4nLmn3cJ1c2fTY=; b=gaxs/26KW6ylsSBYE2+xU0CVPiIqcRUGtQ1vnytaQDvPblu5ZUEpj3KqSFfEeCfOB4HpuSGReV9pLG7JF6pj1gnfvCT9mVf6/nikYaeloxArFL6u/2tt+9J8+ELs7wKsqk44YBX2j4sm0OM0txCwms1wkdn/NDf2u4Awx/L9CpekcjI1aZ+eKy+zgGDNdOQYCuduJD/I51GJluexWI5mMN2IZVizN6a1ekKPtMHiBMDyDlRQQZ4XHhF0fblkmXLCv7+TwzxLFfXcEv1T3RaEZpfFmmgmHy9ZU0CXU13kQyHCR2vDoGArvzrLjNvQIOX2ta2CEvT5me8vt9VBvd/0vg== 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=lcJJOEbqu4yHarlC96vOfIQCdQa3o4nLmn3cJ1c2fTY=; b=LlFrt8TZxQFpRUh9qpTC925pswDuUn3nYjEgPRp4y9aJR8QXuGjcc0uTJB9lZvwyS5oWxn2uoghj7kY0/lZiz/ZpIbMVGSXAKYqThx++/fYdakJANPPejIEqpbyKhGsdfSfmD3xIE6EXHGcHphXSPrQxzQ//UQAnbfgPCv3wkXw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 1/2] block: make bdrv_drop_intermediate() less wrong Date: Mon, 23 Nov 2020 23:12:11 +0300 Message-Id: <20201123201233.9534-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0c471b22-716e-4ab9-afd1-08d88fec2604 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: 7VNe5SuilSldth4O9ZpKVks9fsC9mflhkAxwepfZYeStrfvHDwWRLkNiJH08vVV0BrO6T4CTbiENxwce6h2LEtgDKNqbfof7NwqzgJcHfgnfu31fD7pK48Y6S+R3zC+SoOc6M72QsdBfgpwFJeN1dNsWDyJ88Sk5u8DJ/PBFPHmOAD4mZaPn69WkgrmBYnR9DQcsVmzXTSzCG3rpwIwkdCp/sumtrh3+OKS8uEZNFoMSPHFTeFhsH7TZzy6FJugP36cc1Jn8L5f3H0Df+YETIJg6ItNF7CFXrPCRBR8jegux5qnScGqNx3/mFO0RIoXvRHpSeJyog9RBgJQVPMpkKQ== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: aXwUiPwr2uoUjxUx2iTUTdiyHCGWXw+yGhE1cg68uO3aHMzjl2UG5twYNLPz4k0bLhASKs86m8UkvvkLfobNtZnMju0ZuzAsxU6GbEH71hU5+h7SQyPbVpsVvxF1Fkp+aFB5t0ntaH57gwLvVITzLIfHslcEJiMic9SDoFAcujsu5J+0c0wxrs57DYFZxF6+okee6Vt/+trOiL6aGmpWICZecvQPttrJ+73e2MeLyRnohGYdXLkfufcUgG45YWYKx2RKcyosU9ojBSDfCBA1xgKEQSTVNjzwI4G8kkxbTfUfMjtJAxz5ttzLZPiHn+1X2bLSj38l8QZyIyZEUus1T/huEnhxvRfpKB+iy9cIwl9KXgKph4Xy8p0Sb0w1wPHwVhluh5h93gHjwY11r0IBHCnDIgymxlgKpXK1zXzox129Lac4wuAbCIW/VjLoFjSPyWR8XUegke12hMyKX3iXTu6r5OCF8+zVmFdmSpLaUAwmsRsm7HF3CXZ580vh/COKIJr1o9xqw8FQVVORaaA856bTST5CPFGmlSaAPLN74IF8W08ZOb52VKRqcPuuSSW/xTl5h+mWh0w7CrKoo37HIPtwMo3qYmVyCEn3vybo4ifRgllJ7zL+cpgCiYnuPftpeV+qrWNzJ3olMDCt1s9v/mMEX2ABNKm1vDVe5PCO/152wD/6uu3oSMNF0GXkQhCh+/tsXg+K5mIImzP+84mzwqoG3YYjC2w1CAyU9K88TTRVqwaFYI0mVbSC0hPkZc9Bf+Q4qvx1Nmm9Hvn6Ns0b1WhxQUWrdVH6O3rbNCg1qyK4rlusJCoX5HXI7mnszNi5EcqAfWcSx6a+ebKzeLKBdKxvgvk0Og0sb+aQXZXPKxIfiMu3NmabvD56q+V3ij1o+LVRyQLEDXuAjsKLLgcaKw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c471b22-716e-4ab9-afd1-08d88fec2604 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:48.9812 (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: d9tL6YAR8P4BVz7WpSC2SAJNlNbiSs6HBqkejyJdkYBmB6A+tiHRzOkB/CoIGDu8asxNzNDpDvCPAKGlZi572exBL7nK752fZiuPkD1+qJw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" First, permission update loop tries to do iterations transactionally, but the whole update is not transactional: nobody roll-back successful loop iterations when some iteration fails. Second, in the iteration we have nested permission update: c->klass->update_filename may point to bdrv_child_cb_update_filename() which calls bdrv_backing_update_filename(), which may do node reopen to RW. Permission update system is not prepared to nested updates, at least it has intermediate permission-update state stored in BdrvChild structures: has_backup_perm, backup_perm and backup_shared_perm. So, let's first do bdrv_replace_node() (which is more transactional than open-coded update in bdrv_drop_intermediate()) and then call update_filename() in separate. We still do not rollback changes in case of update_filename() failure but it's not much worse than pre-patch behavior. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/block.c b/block.c index 9538af4884..bd9f4e534b 100644 --- a/block.c +++ b/block.c @@ -4958,36 +4958,30 @@ int bdrv_drop_intermediate(BlockDriverState *top, B= lockDriverState *base, backing_file_str =3D base->filename; } =20 - QLIST_FOREACH_SAFE(c, &top->parents, next_parent, next) { - /* Check whether we are allowed to switch c from top to base */ - GSList *ignore_children =3D g_slist_prepend(NULL, c); - ret =3D bdrv_check_update_perm(base, NULL, c->perm, c->shared_perm, - ignore_children, NULL, &local_err); - g_slist_free(ignore_children); - if (ret < 0) { - error_report_err(local_err); - goto exit; - } + bdrv_replace_node(top, base, &local_err); + if (local_err) { + error_report_err(local_err); + goto exit; + } =20 - /* If so, update the backing file path in the image file */ + QLIST_FOREACH_SAFE(c, &base->parents, next_parent, next) { if (c->klass->update_filename) { ret =3D c->klass->update_filename(c, base, backing_file_str, &local_err); if (ret < 0) { - bdrv_abort_perm_update(base); + /* + * TODO: Actually, we want to rollback all previous iterat= ions + * of this loop, and (which is almost impossible) previous + * bdrv_replace_node()... + * + * Note, that c->klass->update_filename may lead to permis= sion + * update, so it's a bad idea to call it inside permission + * update transaction of bdrv_replace_node. + */ error_report_err(local_err); goto exit; } } - - /* - * Do the actual switch in the in-memory graph. - * Completes bdrv_check_update_perm() transaction internally. - * c->frozen is false, we have checked that above. - */ - bdrv_ref(base); - bdrv_replace_child(c, base); - bdrv_unref(top); } =20 if (update_inherits_from) { --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606162571; cv=pass; d=zohomail.com; s=zohoarc; b=dfmP3b1ijhXnqkBuoBWRfO6bAHmGB2LalgiIRzRstxzEgOc8qr89w3P8MY2m1oxelOd1vhG51IysAQZFrcA+yLhekQaNmsm3L5Gl5s/hBZoNosnFYwuIuRv8veKMg4bTnftjqFa+Q73TTIcxWwOmJ89H2pG3iagYqyKGF/6xvsY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606162571; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Wge4ZgvegXxFD6ruH4YaXHtuKd01qth8OrBLxBhBQtQ=; b=gIERYleSA43Jn8V+6XZOGv2mMeHPL95YcLN87XdL5iZ+XDSTan2d2Xc6w8bAg9AKGNEfsJXN7Apv2/LdQPHFYkMgSECmoTVG1PeLdaY/clK+OhUfZkaCU98HMn7eE1eLq2fBUIpGNbBv0jVkUr2I+lDkYf5DbrE7MnMXzh8IXMo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606162571967759.3748786269423; Mon, 23 Nov 2020 12:16:11 -0800 (PST) Received: from localhost ([::1]:51540 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIFu-00062r-Rg for importer@patchew.org; Mon, 23 Nov 2020 15:16:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38236) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICr-0003ri-UZ; Mon, 23 Nov 2020 15:13:01 -0500 Received: from mail-am6eur05on2135.outbound.protection.outlook.com ([40.107.22.135]:5972 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 1khICq-0007KY-1L; Mon, 23 Nov 2020 15:13:01 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:50 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:50 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zx0g0+Mhfc1QRAra5aKYIG3IP2uL6ghgZrGlTm+QT54UFWno8Yu/ArktPe2Ncnv0Jwi6PiIF3Yx67iWsEu/Dd1PDd3R87gyBnQ8HkWuk63ryX1YtI1Ct4b36JUbevoKyYaguRD0oYHWZsXL+1OrCOJ7qNTfQdUifx9x7GQSWMQNZueN/gdFIK2FdNG5bQrB1zr+LDRwPM7mau1hSeC8GSkI2Y1bn+9dO+X/gf6/yOgBEmZUEW8NhpXTdWjp7kM/iUwSSimEkkTSJuLJ9XmRW6tu6QgCy/ndzZrfU12p38N9qLhTcY8Cyv0TzpQkxrL9QcsTkoRIe4bfPC5OZ04uL0g== 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=Wge4ZgvegXxFD6ruH4YaXHtuKd01qth8OrBLxBhBQtQ=; b=mE92bMj8wqi4B42jYgO1G9K1DlOWiIgCrnCLZPBZ7xIFdvixekmgatiYeXTGmS18aETTqkosfJIcMEg4I8pC6V29sszuS2c7oC2eCPjzyEPxj0KECjVUXB+vrSWW+TVPCzVN3GeNyZ0xL0BmFAVE/aKpIon0oTseV+oTP9D8/2hOHkFycQH9SWcx4LPZnzRm/dWYkCJTnMWJVe/eC/mXHB2990kaf/2f+iFAXiFMgAc1KjZwSgiotsy4VJMZ7juMXXkO3MK5aEhY4SAYpGAQVWCKzUf8MyudNmlMIIBHw1Ytd5AoLgyPCESQqQn7ijd+IJz+Wk0c+iYGwXgCJ7b9aw== 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=Wge4ZgvegXxFD6ruH4YaXHtuKd01qth8OrBLxBhBQtQ=; b=gdBQAApX97CNNBRLXDraoFmWf5gSNx1cm/a5lHIhcLM8jZQeAX+Y83gegUACWVtIzfMgXpSg44aATgkKv7N+/gyhnimJe6st7CkO2vo37sN20eB/8Oh2Fc23u3e/g2WSk9g7tAp36c5Sy3g9fixVn8FbFkrKsQOxfvYVPzNEjUU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 01/21] tests/test-bdrv-graph-mod: add test_parallel_exclusive_write Date: Mon, 23 Nov 2020 23:12:12 +0300 Message-Id: <20201123201233.9534-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a214a04d-a2c7-481b-bb93-08d88fec26c9 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: cgfifS0jH+7DX/Z0EWT/2J4/4hpnbn/M73C3oX1YPWF9UcWZQ9CfQ+OPsHEmFbPf7dCib6Iqawijx3Wx7CO3o39A/fXn3bpzkQGZz+1gxjaClKjuRQqkVxGN3lo7ntO6Qa0o5jkSsSFdYHK9nhDj7wOkPOzUQ/E5XnYw7S/mxnk3Uk0HikCTNLjoTrIuF5/vvgjudNEzrOfi5p2oO3pOjKYubOUzwizWfrOa+UTe0FWsi7rLxeRGP/IX9TK57F2cGNdVzQWHe+TGTgsET2hCycab1VDDPDR80oIQrouf4bYsrgSBI41MemCVXMrppF44vvj6Q3dJqmC5lKupR09OXw== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: baXPMohUAZmbOhBEdPILqK6cVgilYmK1x/QfXcjkeq2JjSOyDsN32LCLDy5RuJtiR4WCL8ARsiDYchJKNntB7gqiWzjmvLgX/h3AuDNTj8xMsFjpARfm3mEQZk3GAAfcLzkpOiKxPWy0UqqH/34+QKynqZCDTDy1QmcYAMe7o/ZZQiaH2BRz+LWSIktKDUpbcrB910p6UB7dKUUKjVyyEmMPHPz1NS6JwDuTR5SpxTjjiCrC2qw3o0WVqem6wKYsbac3oW/zn15GfnJ2YS0qaR84YX+sYGMbjNzCuR/9BZ5PLu1xkPGLzDXBYHgrEwtroJAkG3x1zoImF9B4Of3hQIbxnzuTG7+lJ2S4PBdJpZ2MWO5vcNkXA5zLe6H2Ai4adUkCebuB3Tc7TzfGDXWQWsob0Kn9Wjn+GQzbsoz1e61jME+z+fXv/ybZ3wh6St9EW+A28N8pqd4/oRnohWFuxYL2P8sP1w3gaSSB++55vZU8a1baYmz7WD92UqJVCngNiFfoqwofKVVRbWVXrjg6qgShtfrXxmQA4pJN+qORQ5KBxPlIthdblN2/6hhMH7Zz2IRPBJyVhHKxrVW9KFlqZq7JAO7F3kRCA8uQdyozBuye5NSnivyDTLEGyTpTgOgFeKOic0ID/8rE30zksuysUTqD7pxnL5rumAQC4spi6MBwziR/YK5CET27Ze1NIEI/H6cVkBflUj435ENNBVC2XFARTs7D2YNw+Y0BbUgH4O8Zmp0Y1IvhFr/Xc3X0jaAPeMuHFsjgEQae/eSfcR6ZU7mHt1rTn3Lu0Qz0LfSp3vjWfT34ks6F67Oi6MKWDOf9O6jnddi+1/DJBGAxgYZbl/VWyasftXszVCBXI8ideqaKTjrf7UyKRaVnnAfQKyH8lAKqnrTM3U+lkn+4JwVn+w== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a214a04d-a2c7-481b-bb93-08d88fec26c9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:50.2059 (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: 7KTbAOzGGai3efZS4UCpJTy5fo+aIEerC44x6MIDudbRnhIrGIpgaSIkDhJDXQJDv+jikaTvk6/QjWkqHwAeQ9sdpVhwAd4WgnayUOqb3vM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.135; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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. No 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 b= ase" 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 =3D { .bdrv_child_perm =3D no_perm_default_perms, }; =20 +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 =3D BLK_PERM_WRITE; + *nshared =3D BLK_PERM_ALL & ~BLK_PERM_WRITE; +} + +static BlockDriver bdrv_exclusive_writer =3D { + .format_name =3D "exclusive-writer", + .bdrv_child_perm =3D exclusive_write_perms, +}; + static BlockDriverState *no_perm_node(const char *name) { return bdrv_new_open_driver(&bdrv_no_perm, name, BDRV_O_RDWR, &error_a= bort); @@ -55,6 +70,12 @@ static BlockDriverState *pass_through_node(const char *n= ame) BDRV_O_RDWR, &error_abort); } =20 +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); } =20 +/* + * test_parallel_exclusive_write + * + * Check that when we replace node, old permissions of the node being remo= ved + * doesn't break the replacement. + */ +static void test_parallel_exclusive_write(void) +{ + BlockDriverState *top =3D exclusive_writer_node("top"); + BlockDriverState *base =3D no_perm_node("base"); + BlockDriverState *fl1 =3D pass_through_node("fl1"); + BlockDriverState *fl2 =3D 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_FILT= ERED, + &error_abort); + bdrv_attach_child(fl2, base, "backing", &child_of_bds, BDRV_CHILD_FILT= ERED, + &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 =3D false; + + for (i =3D 1; i < argc; i++) { + if (!strcmp(argv[i], "-d")) { + debug =3D true; + break; + } + } + bdrv_init(); qemu_init_main_loop(&error_abort); =20 @@ -196,5 +253,10 @@ int main(int argc, char *argv[]) g_test_add_func("/bdrv-graph-mod/should-update-child", test_should_update_child); =20 + if (debug) { + g_test_add_func("/bdrv-graph-mod/parallel-exclusive-write", + test_parallel_exclusive_write); + } + return g_test_run(); } --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606162549; cv=pass; d=zohomail.com; s=zohoarc; b=da1Ju8e6MHcRk8z/xde8zno6zLlBDEqRogF4K+IptV7Blz4SfzHaz/HhNVEaO1DHEkqckCoj9i9ed1bApqOKvPqX49+mpPozSfzJWj95JTPjR5bgvkeaDGe6HyUPjSuG1uzwBHLfO9BFdzLYNTwfYneP8z4d87y7TVUS5hjNmrs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606162549; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lhvF4ktTDTUOtmlo8SyG3lrw7VrpYcNC4hi6c834yOE=; b=gnjBdaHxmrzpBEmKKXCI3oxVXjptQiB3fzETvIKjRdwXmfeHODyowhbPaEdJajQwaIjBDA8hyPujeYjB9PeBM0Srndq0vmngtkVYppYzu2/tg65bgnalvQDUj9z20DYSH2TWw3Fhyura2QnmzcW1TqbbxExV6cVjVCmU1UXayEE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 160616254934989.56832752385583; Mon, 23 Nov 2020 12:15:49 -0800 (PST) Received: from localhost ([::1]:50558 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIFX-0005b8-Mu for importer@patchew.org; Mon, 23 Nov 2020 15:15:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICt-0003vg-Fw; Mon, 23 Nov 2020 15:13:03 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khICr-0007NS-KE; Mon, 23 Nov 2020 15:13:03 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:51 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:51 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y+18s+I7FxT/Mb21xcAzOrlHFoFR5x1I+tXmogkHexb7HKX41B7Kwmj091OXoc0ohh8mD44F6tyWqsKKi1UrKanmzeDeEy9ebv5FU3VsVUVVDy1sy9S/k8XfP166t7Z5LXB3Ps7C0tk28Mr9QgoNVjoS41vCSDMyynyuiq7z8vSe9KaETIm0SuKKy28f9xw7lPLZOSIC/VhEiR22/Upu3BFMi7dE+o6rh2JAFyD26ohXxc9gEHkEbov3MuqNKdtbPNDmLdAHMilgdv56JwbETF2tR2mcHZvBh0IBGGvm3ZWgzE6KL3Q3frb7b0U67Vzq1hv95AHHAMif/U2oNzehYw== 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=lhvF4ktTDTUOtmlo8SyG3lrw7VrpYcNC4hi6c834yOE=; b=JvSHPl79pTzIw7UxP3MGviO5oUiwQvxTduS9qB1oDLoxoq/gifpOq4PweUKVsZIK+RbSsa9eBWULW/vsywYo7JzkU8uVH7aV5Nsiduug9OBEqV6setHR5DEi4EYUecSoh17KHmp44BsXCVLQn0O57LQA3g9ip1KYDokf8P19TZow9FrmwhodWUIKOXkHFsbQ5r09tEiRI3thvI7aIfNr29V4Egogr7/JYkAM/sbzIddJJKl6bEYA7wvg2IyfNzAN5f2SePMmAAq/EEGPMMuzqr8TPQBIu1/CaqexXFuZCc84/OLv+R+iQ9XB5URcoeEGI59D7+aHq/2SG22jgRsp2Q== 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=lhvF4ktTDTUOtmlo8SyG3lrw7VrpYcNC4hi6c834yOE=; b=jPE5TF17tRN/1HmVhpBG13Iq/2dUeQmzDxlXC9wpnLCqC8tRV12wBZReufDj3DFPZ/7GZ4Hh+r4tO9pan6hVqIo8EoCc4S+EIGHF+jrvoqdDd+0Oxy7ZOkhjFMF7fGy1uR81aIO9qn16vMIGftb85DOru7yoWdmS6e6nr1ZXWx4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 2/2] block: assert that permission commit sets same permissions Date: Mon, 23 Nov 2020 23:12:13 +0300 Message-Id: <20201123201233.9534-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f60617d3-041f-4b99-8b26-08d88fec2764 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:165; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sjZ9L0zUVEQNyKpCKa6jU476D58b5GdGVUDlNdJAoMGsajS/snncK03+OZLs9qkbh5mluivkVg/xDcBsCxXXZu1LlTzfmQh/wGwgheDt8fN1iwqleghH10JEwjSSXJS4fKBW91jEqiF+9QZn1p2+LJ5bHEOSsw4rmJOlcGE/QUNWPuFgkazNNBNQq48ZZ0F1dv/ikwAA14GD8rzBuFrlwb9tUUgR8f9Qvak+Ryf5bOzeMf9ZXcNRghMYhsyYRb5dTastk02TDPasGRAN9BYOSNxDG8gmuaRyiT/J3j2aVtrGtW54F8juYDsxxgSHYHrP6oI/ALJrLepIr9yIH5oKqw== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: gs5YpFHFxkjeCXkLtXwb/I2yZW7bjmF8Sm8kKfaDkiXrevnPMVm//q4aaTWWE0p3t+4nLbrs9FAS27Swq9Br+P8ZvILNTNHmRNyUnLNeCrM5XEG/QiFORv/XUsJsvHT90IWVTp6oDW61Sb8PTZHXkUY4ZVJwKKhJvOmN5i4IZHAs9EeUc6oiApJNiDJJYXdE/BzIz2HnMRPoLqeJ24mlJdSYiPjaVbq+fefZ0umtst/Ew/ySq+2wz3eiXuvmsHlra075z1YSGUgTarwUx7Nt5W8ofmNjyN+wCytLotSce7fYNdOZJh3ehc4BHdMdDOaUfebVSUiKsBO3h5vl9BWYsKn9l51NaajSbxsWhk6UCFIebzo5pWkCHGPRQINHgciA8dllLt9cr3Qf69ierGL1cG97gZyrUzZB5qQxmEX98AcpA/tjyoHn1cJP8G7bIzB+xOlsCWtYOzR56dqkYmiN9ozAMz6AM4+coY2rTFAWe78k2XQCCNXOoaC4VwWVgm/Ry6n8odwZz97xbeJUraNjcCRojVW4TaDdA3NyBIvwlOpD4zWVIBa3DszA3oOeLzVGyXmN+3O0SgvQw9Bv29F2dcSR52KSSl/wrysq/gj8t7jpbW4wJGXCVTZLjK33Ho8DU7ZwkXcViZ7lOiFetQQW8LtiMn0UJwNX+Tj0htY0EPFcnFWSuh8H88Vws8XaN+xyIPNOsm4nhVMYDQjqxqijRt2CJ2AQs5XIe198SUHFDmm9e04/rOOwMb43cmMxC7+7mf78WkuRPlptr9YQHieJITbGd2yPDzKI43vEcymBVxNBF1sh0GQ8+T3DsKH2BJ/Hcb/PuETfnMHi5BSvGknTjYu0dxImbFqdhW+Ye957spEbs7UPSmyqk271igZ5EQ+uljuVSzoEZ7zz8ucqpmFHRw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f60617d3-041f-4b99-8b26-08d88fec2764 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:51.1657 (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: DX8+1E6f4W2GBIp0TPLtdwGPk6upP++ahxBV+vzu7zIkZSCDUO/kEngJshv2gbGMhLE1bgjmVGcUaJC0yL+roBF+lHnuAwtW68IMTAkkQtg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" On permission update commit we must set same permissions as on _check_. Let's add assertions. Next step may be to drop permission parameters from _set_. Note that prior to previous commit, fixing bdrv_drop_intermediate(), new assertion in bdrv_child_set_perm() crashes on iotests 30 and 40. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/block.c b/block.c index bd9f4e534b..0f4da59a6c 100644 --- a/block.c +++ b/block.c @@ -2105,9 +2105,10 @@ static void bdrv_abort_perm_update(BlockDriverState = *bs) } } =20 -static void bdrv_set_perm(BlockDriverState *bs, uint64_t cumulative_perms, - uint64_t cumulative_shared_perms) +static void bdrv_set_perm(BlockDriverState *bs, uint64_t _cumulative_perms, + uint64_t _cumulative_shared_perms) { + uint64_t cumulative_perms, cumulative_shared_perms; BlockDriver *drv =3D bs->drv; BdrvChild *c; =20 @@ -2115,6 +2116,10 @@ static void bdrv_set_perm(BlockDriverState *bs, uint= 64_t cumulative_perms, return; } =20 + bdrv_get_cumulative_perm(bs, &cumulative_perms, &cumulative_shared_per= ms); + assert(_cumulative_perms =3D=3D cumulative_perms); + assert(_cumulative_shared_perms =3D=3D cumulative_shared_perms); + /* Update this node */ if (drv->bdrv_set_perm) { drv->bdrv_set_perm(bs, cumulative_perms, cumulative_shared_perms); @@ -2301,6 +2306,8 @@ static void bdrv_child_set_perm(BdrvChild *c, uint64_= t perm, uint64_t shared) =20 c->has_backup_perm =3D false; =20 + assert(c->perm =3D=3D perm); + assert(c->shared_perm =3D=3D shared); c->perm =3D perm; c->shared_perm =3D shared; =20 --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606162829; cv=pass; d=zohomail.com; s=zohoarc; b=k4rd5AJpdoPO1Eo0QdsL1SLgTPtCGjz3Hm/73DerJ8Cm/XtuRIBm3jAyssdsTyzgi6wN6DyZzy2FDuI1W8fGhmJAVc6QYAmhiNjjA0pz+/R8YTxIgUGLGuGK+4K8VsIXg/efJ2gM5hScJcp7L2GYeJ2AmCC6XPzSyvwgiZLmljc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606162829; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gz5aFpP0pFNJf+XRHJeM2GHXaL6TNAk3uERb3fkjda0=; b=PUFTy2I3Ft5JqTYFS+sEYhyt0JfxTGCfxKt9zTjfm+an83/6JDYaETs6/BAIWvbXmXJzapTUOQZQgBJzxmBr56izGZViHwa2P8vjCMiIy7yMBB9yU5l6C7fEAciQHpy3D1QW4ivBdv9VhOdWqLg+xCpOuvSpho5WuSGBb7AUC/8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606162829666844.675751057904; Mon, 23 Nov 2020 12:20:29 -0800 (PST) Received: from localhost ([::1]:60520 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIK4-0001aX-AR for importer@patchew.org; Mon, 23 Nov 2020 15:20:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38290) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICu-0003xi-L0; Mon, 23 Nov 2020 15:13:04 -0500 Received: from mail-am6eur05on2135.outbound.protection.outlook.com ([40.107.22.135]:5972 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 1khICs-0007KY-Q5; Mon, 23 Nov 2020 15:13:04 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:52 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:52 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TPBYlj2B/YFwksn+YK3ezRwl3hyNLd8fPkSaC4XWPAC8kWZS7l9yaeX/f9oev5hasspTB5eKlH+Zj8kESNlCYpApFBumm0Th/kTXEcgKqCUDH9HW5enSMuo0mdgo1vpf4lK+/HbdUetf97i03oPipmpCzjGf4hZtstccnx5XtyvKWQMVJQ+JIjipZ+lusSEvSl9Jh8kqmUAHwQHuxf5ybHQ+uXwDp8shVP1eqkNZS7cVpk0zbeT2LlMqVO8E1BeQFA1FJtygNGR6phpGV7JkoxUKEVMJwWmAVvIOEjr7QZmRUZ5SR8GE0XGFjE3SYR2oCTEyQJXDuGuunVF4M+tNYQ== 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=I61WiLV59KRtol9LZQ25gaXx9GTIqQmwbBq7YL6kox0lFD82GAhGYjpRJsshDLAH6szqpjKDsM2OSfIsTdAFwJ9AkXrCpbBbWM7raS8ita+yvzFYZ7ze7vIVpTdbDRaBDS+fcCJRItZQ4zNEEYdo0u/O3fH9vstZIgY6XbBjBIHnpjxwtJBQOEjyh9Rok12MYjX8zX3pgc84PU5pSItK+NPRLk74h0+ZBVFuZnBbh2vERDA3fhtka3W0ISscvzoU4qYON0tBap8DUVEm9nc1AG8IOUTxEXQhk8DcdYgNmhGY9FRC2Ctfev1x9yy7hFaZk1NfzY8YZYpV/kPyyP7dog== 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=mEST9runa4LolnCWHlwO6ROyjwmfKIMlg5OWA/nn0VRHMY0+S//DFZLZObfoCqgzXGOq5g5ttrGAcn/HI73FBUV7Dk+mxtlCGUMZJn5I2FPsHhxD9GCs2aHhYNbhhcwySexv7BzrGxvCdtvJZkKc6u7n0OY/i4zsTsMmF4wFkEI= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 02/21] tests/test-bdrv-graph-mod: add test_parallel_perm_update Date: Mon, 23 Nov 2020 23:12:14 +0300 Message-Id: <20201123201233.9534-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c2e475db-b727-4ec5-12de-08d88fec27f1 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: GxQfjEdt40M47pf6bzPPTNpuWrYbmYBNbyUPHOGIy5qjfqBukeBZO9cpepJdXP3qpURaLQHuL4PnMDiJRcGwMz7GfLyS6fCGeZNDdAuY3I20P1Kv4CO5QWWmhFnrAgqJgn9zavE9LT0W2YZiMuxy/y3cze2HgvTES/9PwvJlDFnrJBAVECetvSqmqO9amcyMIU1nLT7wMzH5iIRpEtjCHvDnxJFWjh9Lz/s614Wiq774pUrSN/2CUQiReNiDT/Eane+Zxbc+kY4BU60KU9aPQ7J1Phbw7Nn33d47U/2kPMRwaaDGKV0zUd7usQ7GqcTsbMxjxqagej+Man6OEbnU9w== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: dYhVtJY7XqyhG55ZZgfzE59AVZlRWLVt6RP5kUUBfn0ATJNHHgnWH7CBgKuYhsLb21KlwP+USanmQuPGs2MiL4Px7/OYmoq89j/KMZJIbj9N8OruBxTU+Q4mL9MceKbEkjCA0bS6Lr+VhLmg+AyFVbRkEln8lTHIkobPl6kqJJDWVrx4tiX4RZasovECjGePqpT0M/w04t1JFR8i2MHDT0S2S7K8Hkr0JM5n2FAQAdfRwmSy5ApBJ5fhGVhgWc/p7vL85yqUswvf8EqtCkbjouo94BDl6w59xp8KRh2E0AppYICCz/TeJ/Qje3+/pICx6gIK2dV1ZLgcxXIYillnnMdyvjpHjyMs3HzLkXXZSoUt01SOQCzNWvlYmzfA27LPhkW5fh2SoCqMhysQB8PoOEyz4x6hNLPIC3RIKDfOB64S8Lfzljcs74fe9bSMLitDr5j6HruA6AwKGOwuJ8Cc+lcee8cRC5N+6/0bSBDKNYMDIfzcvAcNHGCjpVQH8kgWSZmmhAdXGFJJ/ugLZnA3h+oh5PmokAYQndqT5EZMMnPCCOv9W3uDu5bBZ4kORQ9a0Oo/lw6IekRdvKUuKumzHJKHfnCki4naAHBk4a6X+3VgnMKSTfR3MbRXubsTmTctrt8FHrpB6TEsYLDmDbkDsTHs4LY1EZ62IJLEZGh3O0H2QhTtwxD2b0DH+MyBU3IVOiaNrqAt5onlH0yUs0xTUdbSAzJZ5aboH6d2wFrQM2bCtXWumqD5tvAkad8Xlw9NrPW9fT4S8jNBThDFrJ0u/mr8j+xU/tXPL+ShWLtc0zBU80ebHWM7BRTR9bmZuogxobWOs3tGSf4xKqzWmo1XdiTqQV++TujBrldKVvAZusz5NZm2ZduarCg0og5wtp1xmdHTEf3VTWv+NPvfe4l5sQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c2e475db-b727-4ec5-12de-08d88fec27f1 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:52.1315 (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: VoP0yu1ngUHQCWSdDeIWFZty4//aSOTvGqzdp0TxP1paoOZK5jVK3v5oI482az68Ivz8D5dDeY2mEU69uJ/qE8S+D4tDHqF2HEM/ssCs1hc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.135; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) 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: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94= =8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 fl2 =E2=94=82 =E2=97=80=E2=94=80=E2=94=80 =E2=94=82 top =E2=94= =82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 =E2=94= =94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 w =E2=94=82 =E2=96=BC =E2=94=82 =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=90 =E2=94=82 =E2=94=82 fl1 =E2=94=82 =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=98 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 w =E2=94=82 =E2=96=BC =E2=94=82 =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=90 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=96=B6 =E2=94=82 base =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=98 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); } =20 +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 =3D=3D bs->file) { + *nperm =3D BLK_PERM_WRITE; + *nshared =3D BLK_PERM_ALL & ~BLK_PERM_WRITE; + } else { + *nperm =3D 0; + *nshared =3D BLK_PERM_ALL; + } +} + +static BlockDriver bdrv_write_to_file =3D { + .format_name =3D "tricky-perm", + .bdrv_child_perm =3D write_to_file_perms, +}; + +static void test_parallel_perm_update(void) +{ + BlockDriverState *top =3D no_perm_node("top"); + BlockDriverState *tricky =3D + bdrv_new_open_driver(&bdrv_write_to_file, "tricky", BDRV_O_RDW= R, + &error_abort); + BlockDriverState *base =3D no_perm_node("base"); + BlockDriverState *fl1 =3D pass_through_node("fl1"); + BlockDriverState *fl2 =3D 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 =3D bdrv_attach_child(tricky, fl1, "first", &child_of_bds, + BDRV_CHILD_FILTERED, &error_abort); + c_fl2 =3D 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_FILT= ERED, + &error_abort); + bdrv_attach_child(fl2, base, "backing", &child_of_bds, BDRV_CHILD_FILT= ERED, + &error_abort); + bdrv_ref(base); + + /* Select fl1 as first child to be active */ + tricky->file =3D 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 =3D 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 =3D 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); } =20 return g_test_run(); --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163028; cv=pass; d=zohomail.com; s=zohoarc; b=kI9QlHop1RJrzFsMG5mA11zlALfjo0XMUufyEzO5U1RnxPAejBGONzk1Ayn/g3B33rs1TChmO/V5cu95hhjzYR2ultg4ldlzmTM8qu1zVJCjcZV80OF+1sQeyHVM/rPiprz5l9UH263ldd5W3/Uyw2LsHNBec3vnwuJdiqU8r8s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163028; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/F4rxbNHyaITdJSM/s/2gRfVFUABqyp+LzyoDzuihvg=; b=mw8i1Plr1+rpZdEphafRIgAojgKLuVLA3JoXwgvV19SttfVLS8RmCVvugpUziINjiKox5n/EWFvMpjwO9b0GXcAzFEeWoKEpAIRot56kZAEKcjUqo2q1JOgBTyEQssh2dpLRW82WKW8Dg8sK412MfUYouZkk/mwLslmMa/2I34c= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163028627868.7491116322981; Mon, 23 Nov 2020 12:23:48 -0800 (PST) Received: from localhost ([::1]:40876 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khINH-0005EB-Fx for importer@patchew.org; Mon, 23 Nov 2020 15:23:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICw-00041w-FZ; Mon, 23 Nov 2020 15:13:06 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khICu-0007NS-6I; Mon, 23 Nov 2020 15:13:06 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:53 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:53 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L4J+4tWRdcpH849X4hdTB+ydUPcV272HK+YMXiAc696SoSCsSCYXmiWnng4hrLKGRPqhIi+IBU/Avdxpmb8927TFXkuEk+TIvbvQrBU7Fap6PQXiXn1ZQb6RZWkWNgug8kVOFBdfqj5gLpErdldbvLsx+W2AblVlfLpGefYbPhu36G5QXqaeRZ1oITFTAoc/Bfk3fx/JRyECK57+eys+ASRHu59eaVGG8xOrQz6uOcDId8PLEXD4roqifMUesLu+bX6X19bdtHNDA0mRzqzyS8SFI14n4R29y66AfmbMO9InSwhh/UYIa1HO23ubd4vjcRf+uss2SchAgjxGNeb1Lw== 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=/F4rxbNHyaITdJSM/s/2gRfVFUABqyp+LzyoDzuihvg=; b=kp5rYVdgBu1TrmLcvj/bD39di4FnperZbC6+Ru2nShr7DbYS0tJbI3VLO80scHsUp36gpXy4eRZivJc2ITR9sUtCl64tG8wa+4PImCsfXQveXrAZlvDd3NlkvMIbnfjLuOJTfPi9HKh8uzQ9KtPyQh+mqZ4pvVv+iNaAIIpytpkQ38rAZDRSbuCiHs/I7NVWjQg+s1sz8GKhcexxYKaXSjX2u26Vgu5uM9fbnJqAqRao9XuI9GrtAA4TYq9srGXjMsFSb7wyirp5A0dZ5MjaFclO7N44M4PwYNSZ5mOW865oukxQgfewn7Zkk4uCe0/9WUufyUqmAzUMOiwYYiazPQ== 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=/F4rxbNHyaITdJSM/s/2gRfVFUABqyp+LzyoDzuihvg=; b=QDKdoB3vpaPlgFHNsWCA+CgPzmJgJzsghG2TmDdCvFlf5d9u2dyOzbb4U4A5hknPxVG3cjJ9dm6LZhbVyVKD6IVCUjWfJKSCa2s1dv5HwHwSuLIiqhjYBGKRsxbh1vlq2xrDramtuV8CFqnhszYKZPaytyTpWFJFUSNPMhNYdQs= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 03/21] util: add transactions.c Date: Mon, 23 Nov 2020 23:12:15 +0300 Message-Id: <20201123201233.9534-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3565cb70-d264-4694-17c1-08d88fec28ac X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: 14YqtUftCAXwz+TzXzLnMLXl005rgnC+r2Ngxl3QWa94iTE8ZL1dybMnPgcdFDNi+rAvgvzddSQg/GFHAba7gZzHO//1QyYbnd/LBUEjZk1iPS2CG2YsDlpRjq1aieu5aIOG2hWx70Exadfxg4IbD12GQQr4CARyK7UF5G5W7pzRZSqAWISQf9x+vFkTscUZAqibeXg8VmdDi6w20fmcOtsWZ8aFrD4Sud2mekvn1ujLaHClA1FwnvIAhP0zw+k4Xbela58yiwVtIRUarhL9lUBx+zQCISc7KpBRhAWZZ0d6CnCMO3kqSW7T1LECu6rLm+RmLLkuUlBiv9CQeGedqyTz13XJ2R8L68XU9BFV3W/nm+GI+Hc78RJaRDvSjE4hDU5gfkLzN+2mSk+pzM///YCn1PxFlY8aTHGGxkBDfY74C2RXX3KX2TmCkbVjGUjEYYCrYSJgL5g0WAG7ksvAXg== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: baEVs7mviz2Zzb6YIFTPLc+N7oBQHHaBIGSJUK8NT26ZCxEE5JfTycA+ziXa3stQCL+ON5qzMv3yFZgFoyRIwrcMyyjpSJ+3CvmaynC05ZDySlU7G9iE5YMKieFpkQh1NP41nAEfSgNoolluJDWHXGuQerELq5AogrWcM01aiP4krZ3RJxwh1issXd6CMilgdvh4R6nkItdidF0mUZ1PxEahYG85UQHuqPfvQczxW/6VWdzR1FNOhEkBu3STXCGth+Rgg1XxmbGt65CbD56WpurejWHY4IM/Xh4M+TYXQkPij6FWMgZWfMMA/RwILsCfDxI8RshZSu86AGml/tmM6QMc/RbOKKtL9+X5UyUvfgK6mM36cQkO6wObWpN86inAIs6D3EJT3eqvO11XmTWaxE8+hp3kU6GHDfnv/Z09I65IElaAmxkNPLntsTy2PXZB3YtftoMYPbgW8v8YVhhnkRKL4oU0N49/VvtcgkF+Z1L8YL+UgQVpA9dT4bmj63XbyFckvgwc6WrFRtAbwPdKOs9H/KfU/j+DFddY/LYBSSo7gnLx9ydMwnxo2xSyzGDwCPi1srd+xIQTZORYbOhiAwA3BmGWdWqQb5jk3CCE9kLQtfJtIIBFFQjaxrTJzj4K3K++JDCAwEgSi7+4BJKPR6XJVPCiYXqb7Osyb1O0gQVA7fivqrVAC8FDRaF5ZYE8VE89VAH4g6ZzirrNG8KF3MWXTKlG7J/NpF8q+10proQsx2j8myV3p2FygSCSQuzpCe0FUl0RfZeUFxVnMcbxt9aE9OKH+qZuIeh5Hub6qXT97Ja/LTn7z6CQffdgGzvBsiI/kWJCwbRnP2IIAz3CN0rUKvYR2kzr+z/t1tt55rCxTJK21I1dEU1AdadqXDKQU0nkK1azvERcSCr8Uyi1dg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3565cb70-d264-4694-17c1-08d88fec28ac X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:53.2118 (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: 6emYRQvzF3jxwfh+G8aBIzPbXqmdiqDU67nmI8p7hg7dEUxNRX49ftHfEkRYlO7Y0wiFfn4+ZEcopTFuoroBo5k4QfxuyC5s896xPgC5Hvk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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..db8fced65f --- /dev/null +++ b/include/qemu/transactions.h @@ -0,0 +1,46 @@ +/* + * 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 . + */ + +#ifndef QEMU_TRANSACTIONS_H +#define QEMU_TRANSACTIONS_H + +#include + +typedef struct BdrvActionDrv { + void (*abort)(void *opeque); + void (*commit)(void *opeque); + void (*clean)(void *opeque); +} BdrvActionDrv; + +void tran_prepend(GSList **list, BdrvActionDrv *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..845d77fc16 --- /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 { + BdrvActionDrv *drv; + void *opaque; +} BdrvAction; + +void tran_prepend(GSList **list, BdrvActionDrv *drv, void *opaque) +{ + BdrvAction *act; + + act =3D g_new(BdrvAction, 1); + *act =3D (BdrvAction) { + .drv =3D drv, + .opaque =3D opaque + }; + + *list =3D g_slist_prepend(*list, act); +} + +void tran_abort(GSList *list) +{ + GSList *p; + + for (p =3D list; p !=3D NULL; p =3D p->next) { + BdrvAction *act =3D 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 =3D list; p !=3D NULL; p =3D p->next) { + BdrvAction *act =3D 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')) =20 --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606162891; cv=pass; d=zohomail.com; s=zohoarc; b=CAqz4QtJMeYcYqCnlPSxgGz1M5/UXI/JHMmdIV3VQOvq21L1Sso6JiKSYovzoZNvkaV6ulfJjVNLH7Vg8VuAbVrvoRGprdrXBxeO8RzhPPWA5bf7a9mXHsi8DbrByHF/EaroPCYbxcfK7xuU7gAMBJSFy0WBLDPVl/pcqxN1Ihk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606162891; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ikvWuy/50WHkt7/yEFRUZB081hvYavkR0VrqWqm2/bs=; b=N5J2r5j8y1CweNctGpCgsxovZQuEGPMMQk18Tju7uDKC1ul8KU+kINE9gtcAjaymVSN3trl2qnvL594I5sgmgoKE2tNLGdPyaDPmndqg0DdvmNCZnM3rmQWyTLboyPpm23O4o+y3W4BAveHpDk86sxcp33hbR5rASM76eUftj34= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606162891524693.9795250876848; Mon, 23 Nov 2020 12:21:31 -0800 (PST) Received: from localhost ([::1]:33196 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIL0-0001xa-Be for importer@patchew.org; Mon, 23 Nov 2020 15:21:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38332) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICx-00043Y-3V; Mon, 23 Nov 2020 15:13:07 -0500 Received: from mail-am6eur05on2135.outbound.protection.outlook.com ([40.107.22.135]:5972 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 1khICv-0007KY-8s; Mon, 23 Nov 2020 15:13:06 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:54 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:54 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E176dOvaG5I99NmclEW0oqz0ZZ1IpM03ntwJTDqqJLzZPub0unRgbFAaBZpmTTgiuhTaiSPSy5yfyGHvVpIILaCN7+l7NT3XUnu+i0sZV+kzhe2UJIVMySiP6n0kJF0T6yQ8wy7aXytfVvcxrDyTETdu7jTmUfA5/+IV3NHZxiJxZbW85zM8Py0nFglGwpP5cE6XRGDbSrrN27Vpodz/pYBHA4JQVsOJytQrAS767oljLun88Me1tcSXjFuIlJJnuAxyycBcAvlTdP9XVPiHBQqvdMyDEMA83pSqUTfQ0rhA2fIk4uwvlWvwhhPLmFOTrwJmX0SxDdqS0HkGGEUr/Q== 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=ikvWuy/50WHkt7/yEFRUZB081hvYavkR0VrqWqm2/bs=; b=eO2xB66udPkCYhJdbkeWqu46770oNYb7LQFGGI4k8bUNyU2L3VozaOwGcT4B+pMvTB8zcxjshs/ICBn6mNC11OwOqPTJ4y25IxOkP5i8UYKsm7lIYf6GDTlqPcrcJtw02v1P6Nn41QfuukQlXDgVfa2aX5XLSR0q7WqcRu0oBrkp/wovfJA9RWd31wXGdZZRf1ya5IyDrgL4e0A4oH0Kc+YiHr8O8IVe+vUlrlnCm0LwjMYt4KOR7aysLHsol4eAH3+3mTFKlMJK2MRpO+lwlmnI17dprKRWIw3R/e6AX8gHPXSR9qHdo4jQ5FakBUHjQuLt5lNmHDKh5NswJX8V9g== 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=ikvWuy/50WHkt7/yEFRUZB081hvYavkR0VrqWqm2/bs=; b=wMRGlx+sg/GDwJxhvn5GEehlpOdmyMt6ZZGFBvhxiVWFXP/hmNzJ7IoINpayTTdALovaTHTQ3eTefYdDmLWelDBCLtkOpwq7G2bF6WNHKFJOA9dYpV9h39cP4TBjvyUjB/sZJARApleGQBFe2guxk1uy52yVKYJs9jOWZzbpe6M= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 04/21] block: bdrv_refresh_perms: check parents compliance Date: Mon, 23 Nov 2020 23:12:16 +0300 Message-Id: <20201123201233.9534-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cf6d0841-62cc-4f2b-3d62-08d88fec2926 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:127; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RzwZziEqQe08BEj9pJGA0YSMcXsAhB94XKoyCoVdkgDWBI7UAEDI1JSuZ+dU22lQtm9sTiq2ah3DZkkvj37mM5N1P3n+Jfy/HOWtBOlxZfhlpynsKJp8Yrn/yJ8VruzgCseeF04qb76RPz7jy2P+fwBpqh2ay3iaIctR523AL8mJfDn9VN8KEGWnF4TFQpwSOfYpLVzEGLhwKU+ri4W2wGrwDgOxSb3BRPC42qVPwMFdqcGuI1sg52HT81FQ2SaXtNt/mQYdltIBqtUF+Z0M+843ziThdE453mFvcIOKUCJNscEwFR/IfpPYUQZdO20A 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: r6H4Mlq1yPoAor9WcY+QqqN0tf8QsmrtKaXQ6RYGlhC3g9A235U1ZVwA6+DkFQqMgwAmvzIiZGzjKCQN7YE2muItZPOtPl++RKoSXRtTI7kB9xMkv4xl/xV7qhdgab/z7T0/B9R34dVIkwZdog2p6uq1RLCdk/gKrYnOJ5CrtvO5wBA+0Lb51Y5MmNhrOIUVS9bQkreMkAFrLTZ1aZc2FtURBumoyv3JlZvMacaulBx67STc/vkew8syCi6lhF25+dbJ/CCxgh1ZzuqXhhoew4sVgznHFnmQ6EPLvAzeNgIu3AkacthEs6DyE8W/OcJ3XNRThi5KOWBS+khwNc5w1MYeowFpy90lko00Pd92ZJKbOY4wk1mCmT5R0ftb1m2O55tC1k4klZniinyerLFL3CYX6Hk3tu/8hrD1Bl76b2uwtxdHZw4IByOxPzjlRll+wETJlgr6pBLEuOly/sRMW8US5txFHBVl0n14rmPZzMWU4e+/yl0ypcanNAkJM21yEJnUyRlthaTArm0SZRMJXUTE252NsCEss/twKT5xSBkqS4oMFl1EuqYs2xAUwYtIejcg0Ru+kBgnkUVW5Iscgso2pWrGaABwtOh/GGdxJWv2vEQgybhqE+LQqC9fth4fYl0ClbGrlI2SlNUkTau78MxDmh+GGcV36kEOGBF1nENsbG12Uv9JFHByHeZGf4mWvl1hBkaZi6sTv4/ODC5bo071ykWK1KHrayWiCvR+jft9rlqm0Rb+0TO7yao5M6HIUHj9Zn1JfjqLneZRLvAjpKt3X+qbYnpSAG9ZS3roltK4U0lUDylHNCiOBn8Xi2OrVpNTStnh8CcZKsHyFwqL05Yo0XrnKPWpH4OSJDI7p0nYuL3n5fmr7/I8yNEsFmAcrxRYBuQYrztA/qX3kPtXdQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: cf6d0841-62cc-4f2b-3d62-08d88fec2926 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:54.3438 (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: obwXVjw3LbuQHNTjJ/5QXtZPoxE2l/mKdA+FF3Boi+de6yv6poQUfUpzXaXtz+wWMpD/9OTjj21ZNKm5lv75c8sryOKOR/Gn3BiqKMsIeBI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.135; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 | 62 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/block.c b/block.c index 0dd28f0902..0d0f065db4 100644 --- a/block.c +++ b/block.c @@ -1945,6 +1945,56 @@ bool bdrv_is_writable(BlockDriverState *bs) return bdrv_is_writable_after_reopen(bs, NULL); } =20 +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 =3D NULL; + g_autofree char *perm_names =3D NULL; + + if ((b->perm & a->shared_perm) =3D=3D b->perm) { + return true; + } + + perm_names =3D bdrv_perm_names(b->perm & ~a->shared_perm); + user =3D 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 **er= rp) +{ + BdrvChild *a, *b; + + QLIST_FOREACH(a, &bs->parents, next_parent) { + QLIST_FOREACH(b, &bs->parents, next_parent) { + if (a =3D=3D b) { + continue; + } + + if (!bdrv_a_allow_b(a, b, errp)) { + return false; + } + + if (!bdrv_a_allow_b(b, a, errp)) { + return false; + } + } + } + + return true; +} + static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_= bs, BdrvChild *c, BdrvChildRole role, BlockReopenQueue *reopen_queue, @@ -2122,15 +2172,6 @@ void bdrv_get_cumulative_perm(BlockDriverState *bs, = uint64_t *perm, *shared_perm =3D cumulative_shared_perms; } =20 -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 { @@ -2274,6 +2315,9 @@ static int bdrv_refresh_perms(BlockDriverState *bs, E= rror **errp) int ret; uint64_t perm, shared_perm; =20 + if (!bdrv_check_parents_compliance(bs, errp)) { + return -EPERM; + } bdrv_get_cumulative_perm(bs, &perm, &shared_perm); ret =3D bdrv_check_perm(bs, NULL, perm, shared_perm, NULL, errp); if (ret < 0) { --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163888; cv=pass; d=zohomail.com; s=zohoarc; b=HaIUVGV0ehw1QXv7JpvmyKXzrVyAWg5K+WeTp7fOk/z8BSgtZkNfLpzjmtHJ63hZAotju/6pXt3Umlixym6xw/z8bQFr+POhzNtXmytixNh83MKy570Qy7TeZ85McGEwqhQRXVSmD1aOH82txdPFz2+0Y6zCEtNGK8pSdIR0ziM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163888; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=E39AdESKaVJgCcNKxM07XQTAAzrGJOqgSHyxU2eTy28=; b=QZT+LFTqd/8qjTbqfmYZQ163GtvY1wGdlJVYOyG/YRsEwkwobOGGmAOU6LF8qJ98fRS7v3cQlras4z52nKkGiLiD91xhKTcGfu63oAzgA70wMhRz3cRYGBu3TroFS1907guV5lwhnV4lFsotLayKq+YWAu/hB9g9BEqf14G7NBI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163888553232.63128713625372; Mon, 23 Nov 2020 12:38:08 -0800 (PST) Received: from localhost ([::1]:44018 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIb9-00020L-H8 for importer@patchew.org; Mon, 23 Nov 2020 15:38:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICz-0004Ad-Uq; Mon, 23 Nov 2020 15:13:09 -0500 Received: from mail-am6eur05on2111.outbound.protection.outlook.com ([40.107.22.111]:23809 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 1khICx-0007Ry-5q; Mon, 23 Nov 2020 15:13:09 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:55 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:55 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XAeuxAGtVWH8tnO1E1UjULUAufgK/AQYJtc8d3TiI0dlFCsd9l7GBA+BRKAHMa1qXroEuqEsJGEwOmoeLmFLeOYLlt1tvgei/LsZ0x1NDHIszBgN91th7HPfWHyF2nCDdrgz6co6PAF5UoMsp3qDKgjMNLS6imr6KCXRC6PazKTX2jbUHZlgNotyETCjTdo5j/cIb4DJxuXrjwzoOCdAPGXSe1nbXm7EM1uTMmWDF19BD/dSheFF3Crju0NbX5KAPXU86JXe5hwwOWVNQMWWXDOjB74Qb3we6hyjsnvSoE2WK5JD4Ik51rTn6DwsX7uqwg6ckdbgFbh81yfm98OpgA== 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=E39AdESKaVJgCcNKxM07XQTAAzrGJOqgSHyxU2eTy28=; b=cxTxgpfYmhgIljYpjbRIzRqztcmpSDKoF6/a4h/OvLT5njDh5lIHZbLfCuMKXqfsnmpmA/eiT4sLDYQGUAvEcVucBTA9h+dbMNgRetJrW4x9Ia9oLkMJ9Xu6snNM9lBjUXlRiWNSklRBHQmwVP01KY18US4WUDXt4Tj6RdGjCiCYptF6gmuf5Bva1xys96P5ZX/jJbHDnV+w9s+WM+ODL5LkHhR1bjfrgLexJ5eOxGNGiE0AA4EBQKQ+//OnW4VTYYbFLZZB0BamA2mmTRSNIlnkJ7foT9Wiz11ZE4mjwfVVOezeGb3rdzg4HoGB5y94CAmVvHdg2Z2kNWscwTG4wg== 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=E39AdESKaVJgCcNKxM07XQTAAzrGJOqgSHyxU2eTy28=; b=l26LnOFl6TnSK5uGPYOBTH8kIUrh7nxPC6HrsuXJkJ6kryTR1HbGoVRpofVuLQ18AnDt87NPEYRHuDfhKuTfzqaLxTHa5YjqNVI3XeVW3LNhlkbgziRh4i3iN2OOLnnRhBZUHo16NQuSob4e2iRsnqJDDCdinaURjsFsvzETxds= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 05/21] block: refactor bdrv_child* permission functions Date: Mon, 23 Nov 2020 23:12:17 +0300 Message-Id: <20201123201233.9534-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3922d055-88ca-4037-6c91-08d88fec29e6 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: w1MS8TgDwUhjwhM4W2mJUUFh5w8rlsHIGOEuvDpS1GgfG6EF9RqiqhfQagnQup/EjYZJtm+7Hcs95FCJQKPH2kpjuXqsZZkqeB9lfhvU25bV0SBtGmN8lUTE+tSIB82Czi2KUCnRhuC0y5Rn41q/T2m1aiEehjBXJyRpFOEg/Mj35ot9LGjRtsVOw4/d6l1i8UqDp2UQ/1HX+IM0PlyZnmwyB8JY1V+wJ9S3+HimayB8V6XgN41HH1OnUzImrfo1EurYZ4gTCk0e1LRFNy//crkzmxVwURuhaRFqg2B/4h8Rf2VJ+UoX0Q2ols6Nm6TizLUORoYjaIdUA7zoeGD65Q== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 4Zo2OhT/LyA0T05TgC74jOFBLOUGC/Ymw/XeerrngJGsRIR1KZyxZYelo3lUwPTd15o/x9XTst92H/husV0wx2ptC5mRFs2VJFdSJ20VvIcpbW5LeQ9N/RWgUB5/UCVem7KEEeL3ca4OdR4eehtakPgddtI4sYKXV34lDmOfZO7EIuW97Dqt6t2yEKynUI21AJiwnaiqa7eZWCA+SGkAO54OSX6HSODKOtz49Yh5oaTdH+ARP7/onba1RI45IOUZo1pP5DTi8gnLAitiFRSOn39WUnBXMLGXvrKu66EqRBxdROjF4wJpmYUYKB3oZTIjN8HJRjZOqJdzmUNaNXMzJV18uoHlmuumbCIoM/LQjlar+rTSUnohgSWIBSNIDDeezk6bbJZACiVDWs+buZNZYDiCZCKKh/2UGlBITcN9s/A3rwWztgESA3+oAArn5rms1gp6Q6UiZpVnWaiwB5nDbmc4rFw0pQMf7vQGPZG9BV2YnebrYu5Xs+Atx3ELxxIuk5HbJ1rHw2CtyhLBHQP349m/6T+OPeCQxBtUlM7PKY8QPvj2neWqA4JyS5MEd2YPh54JVMUWrMF8nrhZaWycD3iqzIK3x96cq6k7E2DCR1IGk9jFMdZ/D7oTL4LTab3H8OPBrSpKcIHyPPKTQ9s3EG3WY1smarJxmiMDOl114yVsVMp+bOvzzNHnEuYEQ+ZLpZIx+WypaClpRIRZUY2Kcn1Nlj5TKYrO/ywDfVr1Mo1i+/4cDgZQBNfc55PR8JmJR9ttZ07MKOCDPwQ9qYgfJyPntRFhfV4jbyCy0mC3Q7NGXI9UEx5cU6Fa5wMP/0uoquRjaKKIb1sZ4BgXsWOo2hShUCn2c/D2Mf57WuufR8erQwfLHuFxl1ceKBBJ7i7/4D7F7yl1D7Gu/ZumavPCiQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3922d055-88ca-4037-6c91-08d88fec29e6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:55.3245 (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: 4c8YZr+KMhaco/YuBLks7xmULMAXAv00+W5vNEUhUWLUU02jzMIajKMzst2uNci/OCicQu88tLvZ8vUgi5idA6sfYkeIbBlNbxXl5M2tdKY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.111; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 0d0f065db4..e12acd5029 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" =20 #ifdef CONFIG_BSD @@ -2011,6 +2012,61 @@ static void bdrv_child_perm(BlockDriverState *bs, Bl= ockDriverState *child_bs, } } =20 +static void bdrv_child_set_perm_commit(void *opaque) +{ + BdrvChild *c =3D opaque; + + c->has_backup_perm =3D false; +} + +static void bdrv_child_set_perm_abort(void *opaque) +{ + BdrvChild *c =3D 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 w= hole + * subtree. Still, _abort_ is called on the whole subtree anyway. + */ + if (c->has_backup_perm) { + c->perm =3D c->backup_perm; + c->shared_perm =3D c->backup_shared_perm; + c->has_backup_perm =3D false; + } +} + +static BdrvActionDrv bdrv_child_set_pem_drv =3D { + .abort =3D bdrv_child_set_perm_abort, + .commit =3D bdrv_child_set_perm_commit, +}; + +/* + * With tran=3DNULL 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 =3D true; + c->backup_perm =3D c->perm; + c->backup_shared_perm =3D 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 =3D perm; + c->shared_perm =3D 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 @@ -2276,37 +2332,20 @@ static int bdrv_child_check_perm(BdrvChild *c, Bloc= kReopenQueue *q, return ret; } =20 - if (!c->has_backup_perm) { - c->has_backup_perm =3D true; - c->backup_perm =3D c->perm; - c->backup_shared_perm =3D 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 =3D perm; - c->shared_perm =3D shared; + bdrv_child_set_perm_safe(c, perm, shared, NULL); =20 return 0; } =20 static void bdrv_child_set_perm(BdrvChild *c) { - c->has_backup_perm =3D false; - + bdrv_child_set_perm_commit(c); bdrv_set_perm(c->bs); } =20 static void bdrv_child_abort_perm_update(BdrvChild *c) { - if (c->has_backup_perm) { - c->perm =3D c->backup_perm; - c->shared_perm =3D c->backup_shared_perm; - c->has_backup_perm =3D false; - } - + bdrv_child_set_perm_abort(c); bdrv_abort_perm_update(c->bs); } =20 --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606162781; cv=pass; d=zohomail.com; s=zohoarc; b=lI3tGoAJwnN6ISlt72LifK9QS3ros/fp5M+lBH2cLc7o/19JXalkfjZuyUmaj8C6zEuenMFmtDGfUhbfBzcW52PXMxT5hGfvAHW1E9XCWViuxHLBiem+dS7VoYsUZFpD9uwN1XOLFNCAtwrrj7YY5wqTfXDIneTMgHx+9KwuX9k= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606162781; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lgNMRIdVZo0C7muMANm8EVXSSryH6Ha4YtaaP7/967Q=; b=N7unQavrKHzR2GzB7xRAhBl+ti31mkD/VrPm4xtv/vfqO//Sw701mxAuKdHaL8StMwCSnfAoBuVMCp/V4uVehfFmyutd00bvZtu/KYD9BudO0xdGE2sIZ+muG49uwn0NR2p0C1UYEUWFdQZKwqZRONQFP8VVx7925+7ec1niv3s= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16061627811581023.2210394829383; Mon, 23 Nov 2020 12:19:41 -0800 (PST) Received: from localhost ([::1]:58152 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIJH-0000Zy-TV for importer@patchew.org; Mon, 23 Nov 2020 15:19:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38364) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khICy-00047w-T2; Mon, 23 Nov 2020 15:13:08 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khICx-0007NS-8q; Mon, 23 Nov 2020 15:13:08 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:56 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:56 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ka96NW2vt0GFYkgxEIyKeTuKaNFNKjx6qSsJhJEe12jyo6/MoJejKHlgSs1JLL06SJwt6wys6opDusKTp4Tqu/8ScilVt0hGRyODecNuCrz3WNpVnjRanO1MVNZeIa3nY27ELOdsTLcRrYVSw2t/hmiydmiBXSTSyC+CRFrg4+9mfyqY8OVi4mP+j0oIH3FkfwCad1PIXYO+8tztp+f7tAdWLV2dGY184Sx9uMvwcPWubn3oHhIl0LG4bvAwnCureEGxNwfAk9wOvKL6gVl/vo1a1QX9XPYGK3UfO+BGaIeJC3lFoDJgptG6BDBAkkeCleeB9mdOFVrTc8uVXSKefg== 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=lgNMRIdVZo0C7muMANm8EVXSSryH6Ha4YtaaP7/967Q=; b=SCs56DxJGPqTtCegXtJ9CcNezQCLhMN0c/qeoBsH0k6G8yxQFx4Ut3dr1mwxWf+9h1A/xs+p2bNZd9WHSXScZ8lrgmDH8kNvs/cao6AhtLgwg9X46FFVeu8lqRcPYjl2mZeVmg8aBt1FjEx7gRVpSFyTyVYZYQa5G+DJYA0iVRqOzJ/fXaB+2zW20gyxlTE86TyewnPMf7oWTKShWdilT2XPB0i73X6Sdrx/2/zYqWVLT2dJoYbDCbgUy05VqXPM/6UgIV9ur9j+CJIsiR7zHqmAXKy5MdJJe4w+xvTtZA/GNtihlHu8navpSoH/LytsZ93Go4oC2u73E1BCMlT6wQ== 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=lgNMRIdVZo0C7muMANm8EVXSSryH6Ha4YtaaP7/967Q=; b=DJwVTZQATg7AJ146czVlL6tYUQPX8vFAFMIGoWjdQVlHwR0asgWsWssVjLDG0A7dMxqqUYOaqKD3O5rRFBNu2hOzZr9bfpiGuCsRuD/yJCmNd14bDgUj+iHl2qaiv0n40OKhYZwxywmfnLflQ5YGJncZVjvY2lnrPtGr5cJwfk8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 06/21] block: rewrite bdrv_child_try_set_perm() using bdrv_refresh_perms() Date: Mon, 23 Nov 2020 23:12:18 +0300 Message-Id: <20201123201233.9534-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f8b533cb-6344-41a3-fe97-08d88fec2a81 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: QHbXixcm+KR/0XAs6/Qhhgy+aknkWkvARdsvOp76W+VP8C6a0RjianlUu8wbeZC5tW/bfJvOT2XLxfVNZTjhT4c28taAkfBLWWd1F5qK7ZVifD06ju5XSrUy2deALEGKLz4Kp4lsnraCiG+eacRifIJFvH/4VzQZTbvIWC20c8dP2W48BlzGO3QBAEWUSdCCY9sI4X8H7/rH6vOD42Y51T3kw+WuJM6ZuRmVmoTsv417pgYrgC4/mLVixEXFNC4vKDtjRPuOA/h5nognQfQHaOZG53C5FcOQMKhHbtTHw503KcKTpDVKwi0KRT1vlMfYKd16gQBE7t0ddZzpeJlmFw== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: epkJTFZGzU+V/OAYE3lJ8X4ikoZaBw09bRzlzBz2YWqTaxloH1o8/vhBXR23VklVgkwgQlctzP2L/tbHJ8rRiIhXCdoHMv3Roc38j/VnbjprRjx5wMvZu8OrpPx8VWXbL3qdhZpUPBvzC3A9PsDxh97j6TScY38ZAptpWqw3EC3BNQ4e0wTjTbEr5qiE/ElgmzqxbEz1lxHnmk/r/GV4td/C2sASrpGlKquHQ2sxW6yBum9CVbYfOLXV+9/RmS4bp5j3Q/VhwPVz7nS3uDEe8u4kvQxcrZKTaweFhZI0JKjzVtimFJ9SQJBR74Etz3qVWCaUsXlXPtIQ2qoE2jkfnpH5qLfYmfi0j78w3SVcidCb/j9qffyCx5zcAiwo4/unJq+3ovPSpe01HlUz6uA8z0wXJ0o2Im3/H8S9DX+BaYKXBCb8Xx3zjzPcIQtZfr4gRlUGQStGd1iMoWFWqxyF57MGE9JT/GGIKgBV9FV8BT4n6c74jL6V/W8JzngqyV1dwSmX/21t+eHLSOZldrnPD8zmhKFCMlKAt8cp56mFYSdZCLPlu0dVdjKeOiorwl8PdRV7D5NF91LeAzYUpH8vHBeBVUwp31RlPiJG1Ag8WNnz54Pl4m5yHBg1utri6i2FznkggFw5jur0Nl7raFZXsSk0XacmqCUUA2pwpqQRyQMwQuYpWlJObB/GXEJ3QDz8VG5TOFU3/dMkUuln5BX8M4V3f6Y7BtbCWgfz4aVP1wXfR/y8UrFL+s8T2p9/hQR3YaOW+jKQ30/i3Uqj5EcIJzzdl9EyPKMP87S3jAgDYn5CrbqmlHwbOlmdvj7uwGInqQRsux/nBEXU/T6MP8aQvipwCwO0qDBEYVaA+MaMHP46im9921LTXwmDrh97vWatFbvq67Fxc3vM6HoSfwUszQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8b533cb-6344-41a3-fe97-08d88fec2a81 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:56.3182 (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: Tzk9d0hvRe9NUktvEUIubtLQUD0th5Pv3fJwbdHQif2D8XbIF08LqkiEiypcGW5IKbxHXuF7abLMlr01A7U8oGJ/+R1cFyj21DYNYu6foPc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 e12acd5029..a9e4d2b57c 100644 --- a/block.c +++ b/block.c @@ -2372,11 +2372,16 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t = perm, uint64_t shared, Error **errp) { Error *local_err =3D NULL; + GSList *tran =3D NULL; int ret; =20 - ret =3D bdrv_child_check_perm(c, NULL, perm, shared, NULL, &local_err); + bdrv_child_set_perm_safe(c, perm, shared, &tran); + + ret =3D 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); @@ -2390,12 +2395,9 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t p= erm, uint64_t shared, error_free(local_err); ret =3D 0; } - return ret; } =20 - bdrv_child_set_perm(c); - - return 0; + return ret; } =20 int bdrv_child_refresh_perms(BlockDriverState *bs, BdrvChild *c, Error **e= rrp) --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163233; cv=pass; d=zohomail.com; s=zohoarc; b=Yzuf5TklbgGZGRrPhlghtjnqRnyAAUpCxVxBly6YvOfkqu7amlHelgS9pyH5aac5+d7HBBueG9YWDQftaPtYUkakgXX3knW3l2rR7iZLbkYd5eTvu5QhECDc2ajHt89bsBfTSzWZEyVldU4Bprrt14AtsFGJrOX/TlGk5GSqHYs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163233; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QSZyEDF+S8rmF+qAPbopWLxnIJXl7pAn2tDAYBVvQ+4=; b=IY0SlzJOFa38m/cB17A+HT80n3CkgZTwzsPCAeMV3Fj2qlDc7Jott0mDzZkCVo4g6FFXlGNQGseKT6NKFLvw1YrwHLHlUZmIPovPC7EfLX02jEhQ6H7LE0icROb7Oqw1kJ26ZN5gPvYgTzZ4UmDye4a64MUBmV687f1PaeJbnrE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163233814410.25431464356427; Mon, 23 Nov 2020 12:27:13 -0800 (PST) Received: from localhost ([::1]:50302 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIQa-0000tR-KU for importer@patchew.org; Mon, 23 Nov 2020 15:27:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38406) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID0-0004Cb-M5; Mon, 23 Nov 2020 15:13:10 -0500 Received: from mail-am6eur05on2112.outbound.protection.outlook.com ([40.107.22.112]:43328 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 1khICy-0007SQ-NV; Mon, 23 Nov 2020 15:13:10 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:58 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:57 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IUFF75HCX7+iT8NJ9PI2O5iGvUE9tE6CfJDzLJd6+fmfe8NilSqHDdvBrp1njK9fg6SdBZ2zr4MKvMyN0MgyTY6x7WOLhJ0IXK3dP1aDmJDZxQXcvx3CbugHV5wGy1prOYbK7wG+ONTAhArJnO0OVbOw6tuP66GweRgGk/bOC2g9eM96CqbjWhF1FAWtGzrPoo0B1jF0gkPor1mLoYtFCqDhaByuk232h9HQ+pSZFBxcJHeEZAZ6XV7oM9KFIsCFMb0E/mR5k0ilfgbGEuGy5wydXVGj3m4g3sn1EgZmMh7tHTJ9vUWMygtW9dhTU1WoRvSA5y20FvlXckjTzwX78A== 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=QSZyEDF+S8rmF+qAPbopWLxnIJXl7pAn2tDAYBVvQ+4=; b=lMswskv8ec0w/SIDDJAlKa2ojdMvDDSriyTQvHvMKn/H3fyQIBjgIC1RbbSTThqlo+vy8kcHiciFKfrr8tKT57FdEVtysWXFAHEFa77EX4zHIRqiYUd9BZ5RuxkAHbMPgtCngbZ/XYL+5xUcY6B60B6VGOo5CvQDh0iaedJys1QRfad40Z+0MslTUXnAxYAp2rkZ9k5YHRKtKOyoQ3spdIAq8eAEVKPX1ldGix7jxn3BTHdnEriMYJR+NhYGRfZpdxTsN8DG+qr/GtLSXsOGMfeeYG0zJOINWvER9LNMf/OMwgi94dEmJvcXqvaF0pz0QrK0d6dP9mI7SRV8gBAjUw== 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=QSZyEDF+S8rmF+qAPbopWLxnIJXl7pAn2tDAYBVvQ+4=; b=iCasUXjM4AAL56P7Jo4RtWTNmdGB6hsPupw+5sSGQmdG3W++2vujnL9mjA+tM531ObgdturQhKhrSByUfO5/I/5uhZey7tk0XGYNApghTPvP1xO81dUa4LG1qsrqdkqTJSc7nc4B9MiUp/uHlOwOyr3XWxqchiZbUlotD7yxnwU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 07/21] block: inline bdrv_child_*() permission functions calls Date: Mon, 23 Nov 2020 23:12:19 +0300 Message-Id: <20201123201233.9534-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dae53fa2-384a-40f8-b602-08d88fec2af9 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: NpWR6Ld5WWPG+98yfYWAQmns+vychp4tpZ8ZNsOdvqwKGQZqENQ3cOGlbPELwWBKkpN2cW0pZ1hwLl/aOQ0RbBt4JOHH8zuwUavebjSjYDBIRMh7DNFIa92MBfqBAK2hxgMOKTrxs/ON4Al55w2sFSczd+LrPuK5eyDaIrgAMkCFNWoEEwEuCBm/qoM7vw9Wstk5cYQLcYXb/wE0opx7EAAQWmI8g/wXx04LxUpXo6Ir4C13b+uWz6qMX6Kck3LOZYfF8swyi39McNt9MjmeckKPDGaZaZNlaQIngBdIpuqRHTtJGaSw1t5FTJockrL0 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: nx6vmBPxxydYWJ+hX46q2Z2gqlRugw2gtAyYdfLm1SOVurlKq4kIpNRk5xEN5NsmfarDf6NaV/7IQs7E/C57/CbdXrT7vhqMzd+7BWqvQVinIu4fHJJyrC5zE4YZVd3UvyxKEnBk1h54OyNnPbIC1RQ8aCDNy/G6goW8O0uUX2O/bkcsnxBjHOvQd2POxCSor53nFqgEDI5b1K8ipYobhAli4T6tOPFsXxJnr8bs7n5wzRlsLHrTgkcGH80GDgjl9D9YhWX6fUMBXdK8vMrOit0UGQu7iWlwRMCl36O+EtUZFD+7030U3FWd3JqD6ti3ie0wRd5oD9NcdP/3ZyfYGGZHtOHNp0k3yfqO2ABfrws6Uw9jhW4/KXkf8wBrFg6AowoD2m4wI8/DUSsoq8i06cxe9AyTRElU4acBxdwPUZf7o66jgELYfbgQmEIGRpLv6qfaGaNS7yIs7iPauoQoTm1lFtfNOnsPI6zVF92niqnIbj7JY04hs1+KROKlm4s7N+yda+/d82b0CE8XjldAKstK3r+BNJQLdsrZ6ExAmoKD/3NX74bH5LR5Ic5hiYJJCeqGEdNOTRk8JInKKs9Z0J0qDMJWXaCd2hioIamXr8TYtwf1RUwDIuZv/TlAJXP/NLROpDW6hu05UhPMdKxnHPXFdNPzWJ+x46RT7LKMVbyb6qO4dfsqdr9kcwcMmt+GijQXmBgjx4QmwrkSmrKT6alz7RSYInRS9St0Qat0SAlu8NVsRy1SydeBza/kKnu9Dw3B0PVut8tnVAtqbWsNt/a7lNIUYcLspKWc791GWIwfnDu6HQ4G3sY3e6q4W64dwoBcx/D+tJRB8wyYUgGKPqVVvwGQHW4UmZoN5VHinuPe8V6LRtHjdEkyIxvKs577Q2NlPZW+c8SGbEKyBZG6hw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: dae53fa2-384a-40f8-b602-08d88fec2af9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:57.1077 (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: T9QWdzlvPxGBvwbKXxuZoM/0gRe7aS+cmrE9Uwmz+cYCiKGx5mzDaFtbFBz+mJ0fTIK2kpVGQkcY02A2kn1c8Rwnh0zvLdgkaf2fhh6SvuE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.112; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Each of them has only one caller. Open-coding simplifies further pemission-update system changes. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 59 +++++++++++++++++---------------------------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/block.c b/block.c index a9e4d2b57c..22498b5288 100644 --- a/block.c +++ b/block.c @@ -1893,11 +1893,11 @@ static int bdrv_fill_options(QDict **options, const= char *filename, return 0; } =20 -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); =20 typedef struct BlockReopenQueueEntry { bool prepared; @@ -2144,15 +2144,21 @@ static int bdrv_check_perm(BlockDriverState *bs, Bl= ockReopenQueue *q, /* Check all children */ QLIST_FOREACH(c, &bs->children, next) { uint64_t cur_perm, cur_shared; + GSList *cur_ignore_children; =20 bdrv_child_perm(bs, c->bs, c, c->role, q, cumulative_perms, cumulative_shared_perms, &cur_perm, &cur_shared); - ret =3D bdrv_child_check_perm(c, q, cur_perm, cur_shared, ignore_c= hildren, - errp); + + cur_ignore_children =3D g_slist_prepend(g_slist_copy(ignore_childr= en), c); + ret =3D 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); } =20 return 0; @@ -2179,7 +2185,8 @@ static void bdrv_abort_perm_update(BlockDriverState *= bs) } =20 QLIST_FOREACH(c, &bs->children, next) { - bdrv_child_abort_perm_update(c); + bdrv_child_set_perm_abort(c); + bdrv_abort_perm_update(c->bs); } } =20 @@ -2208,7 +2215,8 @@ static void bdrv_set_perm(BlockDriverState *bs) =20 /* 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); } } =20 @@ -2316,39 +2324,6 @@ static int bdrv_check_update_perm(BlockDriverState *= bs, BlockReopenQueue *q, ignore_children, errp); } =20 -/* 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 =3D g_slist_prepend(g_slist_copy(ignore_children), c); - ret =3D 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; --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163492; cv=pass; d=zohomail.com; s=zohoarc; b=T5rLGozGPkLfCavBGHgdYYyZrBaCWPTStSANCYuL2r/+9YiQpBDXsyxTH42BvlCZrL6knCeeaIf94yhWEUEF7G5/Z25abYN2hksEGTJGZ+TUUb+MzJHwmmdbBpEdDTwPHk3MAKPHH1bz2957cizgEeH0itXcPUhNBNg0XpbsP0Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163492; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7/6mHFxXzwcxhTMvjU3/1HWt8z3O5G6pz+WouTb1CKo=; b=JIOnNlFwz3q5nC5rp75AjAb7lahZ6xxQptYkQ80TZT6JRAwGHF6C7xCGKSrKBxC0bKKn91DcOMVBkgBBzKKBmkI8EX6XVcdFQOIcIKIy5NSOp9PxaBguX0JX+QPbrKokn7GwDbCTGaFzhwQk5+TZv2maNI7rip0hiKIGngTnHa0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163492782406.62444875483936; Mon, 23 Nov 2020 12:31:32 -0800 (PST) Received: from localhost ([::1]:59814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIUl-0004s3-Ck for importer@patchew.org; Mon, 23 Nov 2020 15:31:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38438) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID2-0004Fm-1H; Mon, 23 Nov 2020 15:13:12 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khICz-0007NS-Fg; Mon, 23 Nov 2020 15:13:11 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:59 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:59 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EYLXk/jrV5FuP64NCtaNCJsEK9cEH8wUhmmDIFKCConn5/AzXPnO4aU78kax8EpjYEyrzna9MttvRdyM0mVHUXdD7DOq11lCLlF8ZDfEPDaadlBY3FEsrOWuljsmva8XE69Vm6yXkhYQYIPLGKav8/uDaIAKdeo7KqN/AwjgfYfZZjgNB9fpEtC3tladi9W6NpoLfMNHJGImqInJMdH4AL05K0nHevvYIQubEOHs9FSoWy+SLMeAolvAHtZajUE+FwmZsMySeFN1WBQC6x10DA3QTPAdRpV5b6E9aN5NzFb4wfigd5n71LpcDJwCSQ00g6wGorwqL2WYQ8Kmy9K6Yg== 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=7/6mHFxXzwcxhTMvjU3/1HWt8z3O5G6pz+WouTb1CKo=; b=gSkcfaeQT0TMHELrfTo/BMfjJclCeHSJdQkFSm+ntN9nOhrztdbWptuVLxmp/mDhALTbWhttw2glDfDneEtJZderEdjocsXgi26r3HJe5eJ2Of9a6XFrjh0R08LDyeX+Qc7MrLKMQx9oNvydDtxSbuzipqeuvnqFCGQC0XdJkTjZg2mb2CJY5vZwLr8fbifBShT00v4ac2moiLpl6TSJKtRHur/bJ0Eftpx85l773MkN1l7hjLnvvEnyiDVXir4INmdDP6D9qDoHbIgfXjH/NhnXXkT6jAGlE/r2p+h5PLvB3UbOPcmru+Ai5s+CQ21BHOUMKJuitiCjZYVcawWKfQ== 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=7/6mHFxXzwcxhTMvjU3/1HWt8z3O5G6pz+WouTb1CKo=; b=LShF/VVcSCb2jnNbZaZqTuJUVmibWceSDf9qld+TwcPH10Ta9LBP400b+25zBTzIjRqvAHigYzmmEFBluL7oVavkfXr702xAFKqiGTpe22uPmof73Ep3IJE3e+vSc4+ReoibO6uhxXB/uXqO1miHTYv417jsJZakrdeRaGdgaUk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 08/21] block: use topological sort for permission update Date: Mon, 23 Nov 2020 23:12:20 +0300 Message-Id: <20201123201233.9534-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 058873d1-89f1-40cb-8886-08d88fec2b8d X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: l7AXEE6bygGNLHAtV8PNWbYRD2KwsDZTPMWJFfVcurM0kF1OdysSIBMvNhWAra1aGQv2gFDFtxJAjh1QgVVA/JkzI546O8OLB4LVb3I94wugjXkJrbyB1CFseP54vpIZMlTd2HoOjeIgYbsBSmvOeJraulZZhMy6kiQJ32cQFAVadll8mgxHxOXCg67ZJn88o0mjP9XoTPuyJ25mLNf1qTo1Q3Y94X9LFW81k96k4SaGxF1vJhyJHfkIV2syVOm5bwpjBQCJv0d2JrB8b49vgopqrsx0PyPS9n197q+B6CZZLx4AcE8n/q/ckab8Vrq7Sp1p1eM+cmt49DPLvxNuUw== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(15650500001)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: GU/BpfPmE+7Yduq5sTEImvNz47LQgZ+WvsFwBa/EX3zcUTEgCFaN8Osp+p5mnG6YMq1+lKshjDIDlYv4yFOeW03w3U/OxmCKZcObMFPqT/MfUAC6Itpsv3MZnF4f6n2TYQp2JnedrkMCE+RfcqwKoe7kZcj0PcDosDKihpKPE9q53mFRYpzzAR/GbRqCVGdL3fjoL/6x1IxC3RRRuQGkwBgBP3Rsz9x3oZMLxY+PCvsEtrKDbFc2hq2c6oqyD6kiPGViNieM9oA4vuv9mYfH7P5K33gxajTzujbZxQeOeg1wzqjZ9b0hpauSxCI4tfG9J/DcDYW5sU27Ga1rbBembTTW0P80mqWm5Culg3qNwzA5ymrVdULU+VryJQwXi8KDKbcdQVHStpOFP3+h5rCjZqw4c+sBUpA9KQbdaEz8WHJV/zoIRw2ao5xbBzdJgsUSbSFYH+Jt+GGnrNnd9Nifv4+rsFVz+Q/tHNwnlwvKc5OeG5enbPW3Y6+ZoK6Y7ie6PcYKX1U7bAl491Piyd1+qETlkLJMe8CVvBd+hPGpQbGAI+a9zQGsvGALk0xs/jfxy5tnBE5SY5NgjPQcQVGQvEPpDpMXf2LfVqPTyg94zAFmu24dYH6aohZ8VEXWh8lhrwxngPe2CPfpY/EsRG+Rmpd0MQ1FOBFngmXwJMzoT5thRM3L0bVbbSeixlv4rgqTh7cfMhGFNSf/4fVPhcuQbtvICoB6ISqVWTFi/vP5iHezR6r+mDk2TcbjrFfRJFwZVbE7yO80wLz+EZN/qvVAYWi5+pGHZxyPNqVwKP7Cs/DDD3gP3PN8FLEhbp7MchwWNAEaESTIMmzfnxGQCZckb6QKqbLv7VuQKZ6BQgQdBVqSeEfM9sBuJBepqwyan2HduXe3byLmoKsKbRV5dGtlWQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 058873d1-89f1-40cb-8886-08d88fec2b8d X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:58.2020 (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: nnl7OOtAuDc3A8oXe76I3bxI9m4LK4Idj/tUCG0OlRYamCnDYurWP6iD3pU57CJD+nqbxk0tVF1FCYX792gFeKdm7B76xDSXTM3+wAK5xKs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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". Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 108 ++++++++++++++++++++++++++++-------- tests/test-bdrv-graph-mod.c | 4 +- tests/qemu-iotests/283.out | 2 +- 3 files changed, 88 insertions(+), 26 deletions(-) diff --git a/block.c b/block.c index 22498b5288..56263407e8 100644 --- a/block.c +++ b/block.c @@ -1973,13 +1973,17 @@ static bool bdrv_a_allow_b(BdrvChild *a, BdrvChild = *b, Error **errp) return false; } =20 -static bool bdrv_check_parents_compliance(BlockDriverState *bs, Error **er= rp) +static bool bdrv_check_parents_compliance(BlockDriverState *bs, + GSList *ignore_children, + Error **errp) { BdrvChild *a, *b; =20 QLIST_FOREACH(a, &bs->parents, next_parent) { QLIST_FOREACH(b, &bs->parents, next_parent) { - if (a =3D=3D b) { + if (a =3D=3D b || g_slist_find(ignore_children, a) || + g_slist_find(ignore_children, b)) + { continue; } =20 @@ -2012,6 +2016,29 @@ static void bdrv_child_perm(BlockDriverState *bs, Bl= ockDriverState *child_bs, } } =20 +static GSList *bdrv_topological_dfs(GSList *list, GHashTable *found, + BlockDriverState *bs) +{ + BdrvChild *child; + g_autoptr(GHashTable) local_found =3D NULL; + + if (!found) { + assert(!list); + found =3D local_found =3D 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 =3D bdrv_topological_dfs(list, found, child->bs); + } + + return g_slist_prepend(list, bs); +} + static void bdrv_child_set_perm_commit(void *opaque) { BdrvChild *c =3D opaque; @@ -2076,14 +2103,13 @@ 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_p= erm() * 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 =3D bs->drv; BdrvChild *c; - int ret; =20 /* Write permissions never work with read-only images */ if ((cumulative_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) && @@ -2128,8 +2154,8 @@ static int bdrv_check_perm(BlockDriverState *bs, Bloc= kReopenQueue *q, } =20 if (drv->bdrv_check_perm) { - ret =3D drv->bdrv_check_perm(bs, cumulative_perms, - cumulative_shared_perms, errp); + int ret =3D drv->bdrv_check_perm(bs, cumulative_perms, + cumulative_shared_perms, errp); if (ret < 0) { return ret; } @@ -2144,21 +2170,43 @@ static int bdrv_check_perm(BlockDriverState *bs, Bl= ockReopenQueue *q, /* Check all children */ QLIST_FOREACH(c, &bs->children, next) { uint64_t cur_perm, cur_shared; - GSList *cur_ignore_children; =20 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; +} =20 - cur_ignore_children =3D g_slist_prepend(g_slist_copy(ignore_childr= en), c); - ret =3D bdrv_check_update_perm(c->bs, q, cur_perm, cur_shared, - cur_ignore_children, errp); - g_slist_free(cur_ignore_children); +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 =3D bs; + g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, root); + + for ( ; list; list =3D list->next) { + bs =3D list->data; + + if (bs !=3D root) { + if (!bdrv_check_parents_compliance(bs, ignore_children, errp))= { + return -EINVAL; + } + + bdrv_get_cumulative_perm(bs, &cumulative_perms, + &cumulative_shared_perms); + } + + ret =3D 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); } =20 return 0; @@ -2168,10 +2216,8 @@ static int bdrv_check_perm(BlockDriverState *bs, Blo= ckReopenQueue *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 =3D bs->drv; BdrvChild *c; @@ -2186,11 +2232,19 @@ static void bdrv_abort_perm_update(BlockDriverState= *bs) =20 QLIST_FOREACH(c, &bs->children, next) { bdrv_child_set_perm_abort(c); - bdrv_abort_perm_update(c->bs); } } =20 -static void bdrv_set_perm(BlockDriverState *bs) +static void bdrv_abort_perm_update(BlockDriverState *bs) +{ + g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, bs); + + for ( ; list; list =3D 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 =3D bs->drv; @@ -2216,7 +2270,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 =3D bdrv_topological_dfs(NULL, NULL, bs); + + for ( ; list; list =3D list->next) { + bdrv_node_set_perm((BlockDriverState *)list->data); } } =20 @@ -2329,7 +2391,7 @@ static int bdrv_refresh_perms(BlockDriverState *bs, E= rror **errp) int ret; uint64_t perm, shared_perm; =20 - 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 27e3361a60..594a1df58b 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -314,12 +314,12 @@ int main(int argc, char *argv[]) g_test_add_func("/bdrv-graph-mod/update-perm-tree", test_update_perm_t= ree); 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); =20 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); } =20 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 ba= ckup-top filter: Conflicts with use by other as 'image', which uses 'write'= on base"}} +{"error": {"class": "GenericError", "desc": "Cannot set permissions for ba= ckup-top filter: Conflicts with use by source as 'image', which does not al= low 'write' on base"}} --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606162990; cv=pass; d=zohomail.com; s=zohoarc; b=ifnTW+tvfuihzU+N7sjDfsxWbhZFk4MiuBJOKoBZYmsqRAEizxd4BZj/S9HnqrMSUTbCysfQky0zS3cxQ5U2wyMBWcZZPtqB62sLQooLirn+Cz/qn9pgAN1xesnLHEpNAH2W3cAxJHV/Mgy6I3MRp3Ny29Rc/5+gUga3/8vlws8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606162990; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OibO7qRzS7yhOUf9eyQuia4mFhcUb1qd3FSliT4bVj4=; b=hex18YCchAKELeHDfFYSCBPVfz4Kz0jrY80q4dRtympiQKflkS72e5cZf4wXbMAXHPtR7RGayjN7d6ki5qIg46q6twT1XptzIh9a6hO5/QuzBVY3vLbZXKeEPTnlcT0+S0KUrIPgFZFKzIWKheX34v+Xwgv0x9hBXtGzQFR0Wvg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606162990811634.4287314743142; Mon, 23 Nov 2020 12:23:10 -0800 (PST) Received: from localhost ([::1]:39206 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIMf-0004Y2-HA for importer@patchew.org; Mon, 23 Nov 2020 15:23:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38440) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID2-0004Gj-EX; Mon, 23 Nov 2020 15:13:12 -0500 Received: from mail-am6eur05on2111.outbound.protection.outlook.com ([40.107.22.111]:23809 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 1khID0-0007Ry-JL; Mon, 23 Nov 2020 15:13:12 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:12:59 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:12:59 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GljubWxVCp47Zw8iVYY004eqrCUX2P+rsVyfxuvBKSuQu+/8KeLrcLnxqiVFhAFex4fEAoK9aNtC+pcvHuDM4H0U2aZ6s6oV8vrJk922eVsOmyeR4thXPrKXrRpEMrYbop+kR3iO1uHzF4O6BsTREZ+l5rZ2VlDofus1/kdaMRwNj7kMAOGJbyYlzyEvI812VjXtpXQUAaMQKY9Ht8d6Qv/UTAk+Ki9XUhglkKGWTv8it8jtXOiJQfAXS3lTjhlD4PrIIFlGCvklIEco8Pn96ClVcHbAsdTlAUoyhbyvzjzQQ0OjY7qodgU7CxrHr/COKy/fWbwfF80daZIipLEsUw== 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=OibO7qRzS7yhOUf9eyQuia4mFhcUb1qd3FSliT4bVj4=; b=mUgCvMbFHMu0+k7cXemo0er3c8kD4d8Vmddapyn0LoL4Gmg+OMnSyBY6Z38TtZJG+rFijbjT/pOCdPvcnyCm/zAr1vjfExa5DfnRBD244fIVNDqZ+KgALG4XGb/nMMayVUYDiAn0QZ6PoLq8ZBlrgeuDz11rLJelRPYt8Z1oyxhmP+Yh5urty5EQAyAGpWmumx8afGmkwzy8r1J9r7jhs3vw9C/+M0EuUrzFTB2dYwgji9dOg3jIoe9dxRlxeV6/vzcEGpVZBRxcBnM6tHha54tC83ZaX/Qj7e0UmzsYfQss8ZjcwlHHe4prGgYhXkzsVmt0oTCXZ1i8odMzfvR3Jw== 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=OibO7qRzS7yhOUf9eyQuia4mFhcUb1qd3FSliT4bVj4=; b=ccjD3KeuJxtTPrJN37NDKcss1ovfq1L2jDOg4coQm9WdjeGvUm1xShlbdiTJbChvk3XXFs16DnQxxMxsnpf39+r6ARHC/8io6ldYZNUKsLkjDCPRpUFCAN1ESoxs1PsmdSEzTN2RPPLmpWSToDxuAmOWS8NVMZ0d8QW+TholjlY= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 09/21] block: add bdrv_drv_set_perm transaction action Date: Mon, 23 Nov 2020 23:12:21 +0300 Message-Id: <20201123201233.9534-12-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 70fdb5ef-f84f-4a3d-4b52-08d88fec2c2c X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: 1LbXvLqH2zgsTWdOykbggqR0utxQxPJLt7R+oQw1zahwzgbvv3NbBySMrBQ2Mim0+WQGCE3/srwXb+qf/00V4wav5snp1BI8HchWc10tV7Dpj1QCTdpXOfsQrTm/gp6PW1/duY/Mi06zKroY8ZjOKOEvcAzWmLeCj79/wR1aCo5OpGebyBdNXfX8i5TkOKC5Fw+YD+9XmBJ/blbBIU3nmLeHDB0UpJkT1ifVmDuVP2udWtUnNAm4IffeXMcC4k4HvBXdeL3X0hhP4idQjKBx80TqMXSuSzLqGkqJES5AdL6/+GKDKO6xVnssj9avxhxp 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: n7DXcS11gd2NOolnistXzY17jSK99uOz7p1W+3bkqPCBdzcrle+iG6NFUptM/P6vfs14OmMumKMSw5WsCzkG+6Anj8zrPyw75lO/ZGuBGtTAK9ez7FFf5Jg1Dne/1OQxRBrd/uXGfZu6N8Um+e9+mN3TlDwU1BN9QK/SWhXC+FdAuhtIrMxmMNz58NRfaUBzBPTXLRHBP5FP/0P0SvhETmYnzDMW5xUddHVanAyQCnxPe6r3vurLohVsiSOwa0z49GXvOpt6kgW1YUN5LF6vSk/VKNepaG0jsz3b520a7brl+15kYmFidAww+dRwkTo1yIr3sC3j+Fd7oz+vwGrhdsXpQMvRYxex7uX8iBtuS2QRn0fwV2cNu5CJU8nLg8zGbqC1455tJl7vKI1Klm5ZR6jnlikIIv4gCQ8yTc1KhcmV3FibBJIs4imtseTxr56WCpor+ZmjxISShlOOuQs8rY+GHOuu0EWjZ3RQmjX4Bn5Xq/YxDqtJVVmGE20u95a0JtWSQiPHSrKNTg+fUX895PM8grMdr4k5WmcEnmxdFsGx6JphfqJZS+TCVzc3hNhl/pPHqMhIWH+ouAhiTsV8W8awqUs79hvSkRxYePK7ijubkN3KnEohAyO1cMxI2yl0FrxG20VczL0zyeR8eg3WVs2pwPXyRcNgQCQdkFfhLPMFqtIN7SLOvNwwIWVqDNXsvC6T3PO0+XD5AHDlVQZjsF4iBsCb0G2gsIkhZeKDFByw/kYy6POz7uMMf2TbwLsE9oPbAzjgVeu0jJ/cuXwqHmkRhYnU1aGblxkfHVAdQZdEYqE9SH8FUW49EswIwzGOErIkta8GtOzijx6NVKP+NZPjyQHCeK6yHPcbU/ModIHA3E3/5glCB6YqmNtmmye/7xOOYDa7CHd6IVRO5QKsIg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70fdb5ef-f84f-4a3d-4b52-08d88fec2c2c X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:12:59.1857 (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: VPoOdfHnWMMMESfDd72NAvWseCd5xMUJmklWb6lIvMiqIvW4Pu8fJc6Hw5MvPbw1OF72iYbWytnAPm5pfzU1/s2tfPsOPYkBZ1gfSEPoXW4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.111; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Refactor calling driver callbacks to a separate transaction action to be used later. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 71 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/block.c b/block.c index 56263407e8..799c475dda 100644 --- a/block.c +++ b/block.c @@ -2094,6 +2094,54 @@ static void bdrv_child_set_perm_safe(BdrvChild *c, u= int64_t perm, } } =20 +static void bdrv_drv_set_perm_commit(void *opaque) +{ + BlockDriverState *bs =3D 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_per= ms); + } +} + +static void bdrv_drv_set_perm_abort(void *opaque) +{ + BlockDriverState *bs =3D opaque; + + if (bs->drv->bdrv_abort_perm_update) { + bs->drv->bdrv_abort_perm_update(bs); + } +} + +BdrvActionDrv bdrv_drv_set_perm_drv =3D { + .abort =3D bdrv_drv_set_perm_abort, + .commit =3D 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 =3D 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 @@ -2108,6 +2156,7 @@ static int bdrv_node_check_perm(BlockDriverState *bs,= BlockReopenQueue *q, uint64_t cumulative_shared_perms, GSList *ignore_children, Error **errp) { + int ret; BlockDriver *drv =3D bs->drv; BdrvChild *c; =20 @@ -2153,12 +2202,10 @@ static int bdrv_node_check_perm(BlockDriverState *b= s, BlockReopenQueue *q, return 0; } =20 - if (drv->bdrv_check_perm) { - int ret =3D drv->bdrv_check_perm(bs, cumulative_perms, - cumulative_shared_perms, errp); - if (ret < 0) { - return ret; - } + ret =3D bdrv_drv_set_perm(bs, cumulative_perms, cumulative_shared_perm= s, NULL, + errp); + if (ret < 0) { + return ret; } =20 /* Drivers that never have children can omit .bdrv_child_perm() */ @@ -2226,9 +2273,7 @@ static void bdrv_node_abort_perm_update(BlockDriverSt= ate *bs) return; } =20 - if (drv->bdrv_abort_perm_update) { - drv->bdrv_abort_perm_update(bs); - } + bdrv_drv_set_perm_abort(bs); =20 QLIST_FOREACH(c, &bs->children, next) { bdrv_child_set_perm_abort(c); @@ -2246,7 +2291,6 @@ static void bdrv_abort_perm_update(BlockDriverState *= bs) =20 static void bdrv_node_set_perm(BlockDriverState *bs) { - uint64_t cumulative_perms, cumulative_shared_perms; BlockDriver *drv =3D bs->drv; BdrvChild *c; =20 @@ -2254,12 +2298,7 @@ static void bdrv_node_set_perm(BlockDriverState *bs) return; } =20 - bdrv_get_cumulative_perm(bs, &cumulative_perms, &cumulative_shared_per= ms); - - /* Update this node */ - if (drv->bdrv_set_perm) { - drv->bdrv_set_perm(bs, cumulative_perms, cumulative_shared_perms); - } + bdrv_drv_set_perm_commit(bs); =20 /* Drivers that never have children can omit .bdrv_child_perm() */ if (!drv->bdrv_child_perm) { --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163206; cv=pass; d=zohomail.com; s=zohoarc; b=aLhoqqJ/+gz/WLyr0CoJiywmIrsUDntFTPZe5UCDsR+HRqHcGI2i3iuL0OOau72I9fKvqV4RVsx/6YvP+nFeyN4prDN6Ksx9/ZZbqhjC4zmpaFtgfL/BbtCjxCGCARSLogWQYjcgnP1eemCWKVuNLbH3am4SAeg7iU7tg971RV8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163206; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yNApFnlITFJCxcfsefwL3RIss+ldxxk+P/80GeIqGSc=; b=fmWTkDTAlnf8bZ9Qh9odebL62aIKocVj1RI9K+4Q1IfqiyCQROLMih78LiBGdKzmH+lsfxR4fnG1w6kfba41US+e+YgGltCyZpF5AzkbxEL7z/TmQQsnuQ/D08QbBJKOoltDPqwM7f4zg2dGWWqQ+DAdvnvtQOHBhZxNtTb3aTI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 160616320646198.98972531001493; Mon, 23 Nov 2020 12:26:46 -0800 (PST) Received: from localhost ([::1]:48746 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIQ8-0000Cj-VU for importer@patchew.org; Mon, 23 Nov 2020 15:26:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID4-0004KE-0p; Mon, 23 Nov 2020 15:13:14 -0500 Received: from mail-am6eur05on2112.outbound.protection.outlook.com ([40.107.22.112]:43328 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 1khID1-0007SQ-C8; Mon, 23 Nov 2020 15:13:13 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:00 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:00 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:12:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LtKuO/vxl/NWnZ3MkmpMRZwYCTHQSPIF4nNCFRnFb2RjnKO3OnKZ3FLt4to/osdGgn9hiVMuskmp5jezhQ+2vzJF32NoNNkC0/gMLx7jyC4aSR7TYp9bO7UQHHmOXgGsSnovAA8NqQ+dnNh3xo05Tim1qdfq3v6/mqeABMARXPICJHkrqqFxJZTbq4z2xbcvW0+2tT7wCKupgZ5AwXusUHPEjWKLbTKZ2E2819vGpgZWurGgufMCVHdH3ju8AWXCkwm+O/ax8zIvfg4JGSahlet/6C6gucZFOJL2c3odeXbCUkyA7ADF/wDOVSuPS22Y38O/gS7FgN2PGLd5u6xC5A== 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=yNApFnlITFJCxcfsefwL3RIss+ldxxk+P/80GeIqGSc=; b=XWWy78dFDwad2t90Lg/ssaIDCt11O7WIF3p8Q6+huKz4Pehtn2j/FsBPU73T2Afk99Xl7LDuaOIqmZWuD5YGoTsP5L7bMeGVau5Ulz4y3aJ3Q8Jv3nB1E3Q2g1BGD/2zvJbb/rAzMpUWK1V8iuWvowLRgIILO3U/oWyzUsI1GZsBi8hv2MrIFIbMB0tTwwOre+Fx52fFf34ZNqBICGfnb5pKZk8FxG5vViGq3oElhwPIcgddcOWDjaBS26s6c+P4cY53+uKCzZLW8PbwG0sswEAuO0fr2ILSb6WyPRke8LmJhFhuc8lrnWV6hDXKqpLNicnfvtOAdN5oAMnvgHeLlg== 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=yNApFnlITFJCxcfsefwL3RIss+ldxxk+P/80GeIqGSc=; b=uwRtuQ+E0TRxHiqYdclwlJel0in0bdxPH0YUp2q+k3MhOnW1NWPbK8pNcsyCuzQN2u5kAQdnpOqpFkO0mDLtFkQthmZepn37plqj/vUMriFuOF33xZO8MKjpMK1fN2sFFWBVMYIfC8p/B+JRFUD/q1N+/ivlbOoC366X/HjWFY8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 10/21] block: add bdrv_list_* permission update functions Date: Mon, 23 Nov 2020 23:12:22 +0300 Message-Id: <20201123201233.9534-13-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c0bd09f9-df8e-4625-3a5a-08d88fec2cb1 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: C8ArIIitDnxoarwQ6DqSAj7S+IC2aWj/U7x4GZuZfTLD0xllm61m6WMpGs0qQFybybekvv+WVUfAzzXzjMYf3T1DUwE+I+etxKZxpJI2VxqkzXK9Efiq4E3HV6X1Lfqb/4UFk++ry5ljPHD/aYbC9mXUwk4DuSCaNlbKeIX6wXUfISLIbCf8BYmV78T4T09DxjrXjS7zaEX0ha2lJYZ/7dnvmELrsXs3SGJl2Y1VsMXVu2Erd0q2MKSCsR1gRKyizs1nCNbcRqZONUdvHMtX/o8RqXWPeO0jbL6RvT2+baNd0cqjdubqlfy/qObsmLfbTaZ9pqqcRPCpqnNSUqUftQ== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(15650500001)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 5kgO8V4BagGX0WWYHrnAFHIYRtNH1Ria8Uya4hC8qXZx9wFHfrf8fF4OlI393mhOj1/YXlbZDQN4CV6/d4UY37MmxWAxlZ9YAjXbiO4qI887iTmuyOCLJH/Sc0xUYW0Lex4mx46d1r+r8ZPN3QZmq3Q3xLrBzZITBvhmZzSTmq3+wo3bNail9QhNmh30zyfWzIPcSOKs3v1aB4pLA7ACXWqr7YdFRdVT5RQN9LVD41oywjV4wAn1uJ5F9+n+Q78qnMcZ/R38t4pGpWUIKd7+M9iYxcrrY2pY7HU/l0P+IzEWanQGkCgoENjDFQNnNIANR/JDz4HzsbqjHR/KUiAuwisSWn0Xc+xlUhb9VblJsSUoWMCapL37B/YGuHvaWH2ngkZvS/wQ7BkYvwG7Ef05lvT7C7baa/8qr/1nEAX8H85IUoEQMjrwLGva2LfhICAT44uv/JDWfwaj6ioOmbqPQ6Wz6pvwI5naftVb71Ol343+7JoTFVD0fbF3UjMzYdylinqIESkyLzraOO2KLiGc0AgPHpT1svgKsSDnckAsvGXKDJvU1YdqTHMou8hBEkdldfhn/ZAZv4S9RdFkrem7uEajWXjIZgOoa00eoBGzb/TqWo9ygh0rp8bsPtGdrUdObDUl+caJ7YgNRmnRMPyynpZ4UTVrUEehMr3CwwJtELLzDentbkRACQebGw5JgJGDafIfwbwhn4tRc0td28nOqJ+C4TisSEScf9ipfY2Delq5fXT6QMxiZ8IBlq7wuOVWnFsz7ZqZXmW72qr0HtOug0gx+368AO2JNfmHxqrDFCjYjFJmlopK4Nxipit/t69xwi3AK6/w9bGvoJQTd8grLzn25v2SfrBMA1U+onuoak0cgXlHUvc7q2b9a+eDVXc931EaIUKij1jo1Izwg7xMkQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0bd09f9-df8e-4625-3a5a-08d88fec2cb1 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:00.0220 (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: BW7e1sbGYINYCYaSMGhPVwm0C8X8h1bApXf6Fj5LSVwO8/CzzUk1reu3gM6S8944y/HjASY0d7TkFSjZPE38VyzRgyzRl6yvJ6PIXpuLZEA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.112; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Add new interface, allowing use of existing node list. It will be used to fix bdrv_replace_node() in the following commit. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 112 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 76 insertions(+), 36 deletions(-) diff --git a/block.c b/block.c index 799c475dda..d799afeedd 100644 --- a/block.c +++ b/block.c @@ -2154,7 +2154,8 @@ static int bdrv_drv_set_perm(BlockDriverState *bs, ui= nt64_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) { int ret; BlockDriver *drv =3D bs->drv; @@ -2202,7 +2203,7 @@ static int bdrv_node_check_perm(BlockDriverState *bs,= BlockReopenQueue *q, return 0; } =20 - ret =3D bdrv_drv_set_perm(bs, cumulative_perms, cumulative_shared_perm= s, NULL, + ret =3D bdrv_drv_set_perm(bs, cumulative_perms, cumulative_shared_perm= s, tran, errp); if (ret < 0) { return ret; @@ -2221,36 +2222,53 @@ static int bdrv_node_check_perm(BlockDriverState *b= s, 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); } =20 return 0; } =20 -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 r= efresh + * 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 =3D bs; - g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, root); + BlockDriverState *bs; =20 - for ( ; list; list =3D list->next) { + if (use_cumulative_perms) { bs =3D list->data; =20 - if (bs !=3D root) { - if (!bdrv_check_parents_compliance(bs, ignore_children, errp))= { - return -EINVAL; - } + ret =3D bdrv_node_check_perm(bs, q, cumulative_perms, + cumulative_shared_perms, + ignore_children, tran, errp); + if (ret < 0) { + return ret; + } + + list =3D list->next; + } =20 - bdrv_get_cumulative_perm(bs, &cumulative_perms, - &cumulative_shared_perms); + for ( ; list; list =3D list->next) { + bs =3D list->data; + + if (!bdrv_check_parents_compliance(bs, ignore_children, errp)) { + return -EINVAL; } =20 + bdrv_get_cumulative_perm(bs, &cumulative_perms, + &cumulative_shared_perms); + ret =3D bdrv_node_check_perm(bs, q, cumulative_perms, cumulative_shared_perms, - ignore_children, errp); + ignore_children, tran, errp); if (ret < 0) { return ret; } @@ -2259,6 +2277,22 @@ static int bdrv_check_perm(BlockDriverState *bs, Blo= ckReopenQueue *q, return 0; } =20 +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 =3D 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_check_perm(GSList *list, GSList **tran, Error **errp) +{ + return bdrv_check_perm_common(list, NULL, false, 0, 0, NULL, tran, err= p); +} + /* * Notifies drivers that after a previous bdrv_check_perm() call, the * permission update is not performed and any preparations made for it (e.= g. @@ -2280,15 +2314,19 @@ static void bdrv_node_abort_perm_update(BlockDriver= State *bs) } } =20 -static void bdrv_abort_perm_update(BlockDriverState *bs) +static void bdrv_list_abort_perm_update(GSList *list) { - g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, bs); - for ( ; list; list =3D list->next) { bdrv_node_abort_perm_update((BlockDriverState *)list->data); } } =20 +static void bdrv_abort_perm_update(BlockDriverState *bs) +{ + g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, bs); + return bdrv_list_abort_perm_update(list); +} + static void bdrv_node_set_perm(BlockDriverState *bs) { BlockDriver *drv =3D bs->drv; @@ -2312,15 +2350,19 @@ static void bdrv_node_set_perm(BlockDriverState *bs) } } =20 -static void bdrv_set_perm(BlockDriverState *bs) +static void bdrv_list_set_perm(GSList *list) { - g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, bs); - for ( ; list; list =3D list->next) { bdrv_node_set_perm((BlockDriverState *)list->data); } } =20 +static void bdrv_set_perm(BlockDriverState *bs) +{ + g_autoptr(GSList) list =3D 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) { @@ -2425,23 +2467,21 @@ static int bdrv_check_update_perm(BlockDriverState = *bs, BlockReopenQueue *q, ignore_children, errp); } =20 -static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) +static int bdrv_list_refresh_perms(GSList *list, Error **errp) { int ret; - uint64_t perm, shared_perm; + GSList *tran =3D NULL; =20 - if (!bdrv_check_parents_compliance(bs, NULL, errp)) { - return -EPERM; - } - bdrv_get_cumulative_perm(bs, &perm, &shared_perm); - ret =3D 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 =3D bdrv_list_check_perm(list, &tran, errp); + tran_finalize(tran, ret); =20 - return 0; + return ret; +} + +static int bdrv_refresh_perms(BlockDriverState *bs, Error **errp) +{ + g_autoptr(GSList) list =3D bdrv_topological_dfs(NULL, NULL, bs); + return bdrv_list_refresh_perms(list, errp); } =20 int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared, --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163043; cv=pass; d=zohomail.com; s=zohoarc; b=dyCaakHuU/mufjTgu17CByWwDoVJ2rVIV9kjCtw4ONaL1vRkNfXc5xIDDvlb9GNnp10pO96f3hZ87KR1QhB6fgE9E1b2yInT45+zND4QajiTe7yismUMQQCylyrfsEfkF8q497UFQVS8Kmmui/Bp0x3ekAZSOOxmCqzIV81G/rY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163043; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=oNCoRhP8oEjzRjd+MYxnTX2/tsj4+lJZEDxvlWAojfA=; b=crjxn+bauXG6luL8spWbNDZWF6EKGMCLr9Af+apFJArxbUZ0ODWd6+UwU2KsL+43maRoCYaVdMOe79TPBfE9uPPH09gXzVHdTn7ucZk0az+86K6Jv+X+63Ow3xNnb76SWlVxqa6g5ip2Vxhr33i9ISHrxJuehJOxqdL6C7e2XaY= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163043447317.1829299197201; Mon, 23 Nov 2020 12:24:03 -0800 (PST) Received: from localhost ([::1]:41930 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khINW-0005gT-DN for importer@patchew.org; Mon, 23 Nov 2020 15:24:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID4-0004Lm-IW; Mon, 23 Nov 2020 15:13:14 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khID2-0007NS-OS; Mon, 23 Nov 2020 15:13:14 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:00 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:00 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CyEPCMuDVaLWo7+djTxC1UtnLtA3Jma2VGOEn4rJCfYkswYWzJCftNDO6/woNwPhkxyOrCjTm2P04noZ+2ytsElm23s7bULppXBb1fTt0yHUoqKawcgxhAFzi/sxMdYfKP79uaFwbOTYTo8L8xv5TTOovybNS/WNk1UADcGsvgtQF30LoQ5tUSmlsn/4dST6ESPxHCW8p4O1K5IRNaRGI+YBpRuYhjYAKNRA8MNB78cT+7DN1pIp/iWxRSAusbSolAAbH+vqBunWXiaM+REdaVqjjP+UFdISDeWeO7YlrNLv5u7pVGG/gw2aBs8NDA+jwIi3caryRfN2psPFsmNyuw== 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=oNCoRhP8oEjzRjd+MYxnTX2/tsj4+lJZEDxvlWAojfA=; b=O0OArckP/NGuR0aZtM7zloBy2N0uGglTwsNONkbM2J5+rMavTDH+Mfm8R86O9uo2jHa5XybW0+7UHgPGT89/IeFGpMMAdKkBTn42wv7X2yJVh/ZusbjDtRGsl4YgBXgjvC5X/BOABn7utP6U0XeFac0UNQrsROZ/9yxUXQtP9ov1itSpLTPhYIXSQDcGlyAB0ntxjkUEJ3wK9KrfmOgMgsTc+9caedljtaujYmYegop1DIbJSovdYuO1mWGcKa+sGrx0fT8hbKeNWnMeahIiYiThgAlhkX1HoPSTsUMS9lIh4SNUfoE2V/LsEwKo/g5nDfyakzDBevdc/G1hevCc3Q== 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=oNCoRhP8oEjzRjd+MYxnTX2/tsj4+lJZEDxvlWAojfA=; b=W8DGfarrb1cy+NfoO2zVODwGXoliNrvCKE3pC8oaX58rEaqn/O0fFebCiNN5DAOnqPxIGIaJHHY8HOozR71n97OHQUVCwBiiYTCfBQ2gQ3/ymixqgym0+tGMYF1U86wjBjkyn0WdoMH75uDsx4FfFy/y83Ap7G1EsSTZU31dmUY= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 11/21] block: add bdrv_replace_child_safe() transaction action Date: Mon, 23 Nov 2020 23:12:23 +0300 Message-Id: <20201123201233.9534-14-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b74f7318-4cd3-4150-1f8b-08d88fec2d33 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: bmT4JpcOg3Uw6sycOIrO5ahnSs/QRj7EDsVwj3eAyGkeADOakVufmIiFqT3QMczrsIEWOZi4uZqeiKdWSxIlk8x2dBhzqaY3dfRAqEPHNY1hfVOn928bmb3sTHg7PZHEnXTPtTe0EqzzsrPLgJx1euKB4qoGzNc+8e6tRNw2N+d1E+U9PPyFVtlPyU5J8IrIwzUjYak4kCXRbJ2QFsnSSU9O+g3hL0n+wBfvoa7RZXAFGwwURZDFGIYOz0DlYF3FYnPSFLuKLWMlXgE8PLNMyCjrk/vzH9M4OxuhInf4nJelYD+0pThIVNiipECTqrpl5Pw3khX5Z5b90qXX0AEryw== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 7OJ+Zs3iM+vmruzh+1+nfszgD6ONLpo5+IbhUTmJDCB2h642atBscNqefCNIE1nxjyC1QOs/03iPhIi5s7nnVtb/l5NgatICeJvUmmKOAwV4qEpJzBwwysb6DmzNdDGZRwPDDHH9CouQaSNVzdrYyAGkdDCeyYsmduXw4GJFmxRmG+Y0DsTNn3dQYAA3NbfOGeo5zdp3ywxFMrLIq5ZrfWPf3V+twZVSb5neDBO0Z2iaYzM7kxU6F7hVmwNNo+7N+PblacEhiD50k+ZHx60p8tFdPjndRtHGQsLgbkAhgsNZTADT6mYwkhcBRNfjl5jcB0J0tpBxdZgFlGhO+cIJt+50hREpsToT1N+mToNHfULjnjN3b6Tk4AlNPszqALzGbuEJjKStGw0B5oSzLY52Qz9/kZ8rJeFk81K9WPAoVz0pNdT8EaI4xmhbv/9S/8UI5icQ86SH5hjG5cGzyHFOYH+PN1BEt8uFjnDRTfwAD0MQ3rF7Pk31ueMvjr5LqsR4bvTebcz/2QcVY0A+fZvukJQRRW6S3d0ZLAGYMRYmmQxjQij+ylTgvjDH55IlO2XB8fxX0Oi04YmQ8p4qDnteeexP70XYJhNMZ8niBZ5/zYYB8VbVw3ha1D2204uzJGpDFhPuC9dzkFw626vD0yUZPJD95VzBDxwyy6d/nbmEP/l1iGIhvtArFRblgCem5O3gbaZXfqawohIUSvj6txfqNXIXojGNKwN+cBhs5wQWi+Rwr7Q3FFRVmY94CNtcPccRUHwzc1Fikr3uafAzAHyMNTh7ATIT2sMh8fa+JgSFvJjR/rj0uLb+Wt6IQGQriYBXTMcuxGDfHqpQcPep5QNXzB2g5HFT4/Kdmtk1Ny8/zaWjmgf+Xh98PNW+SEr2JLdwYCNCq7zmRlMU1oelh+IgLA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b74f7318-4cd3-4150-1f8b-08d88fec2d33 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:00.8434 (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: CBXb7KF6uHrJ70f+fQfTKgaP3M0BDB1ZHN698Uzxr7smIPCSiR3ntrFUBpMJWQYhEbod6PetSsgxBic3SJa+eXmcIR10FRquBICxQB4Ss7A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" To be used in the following commit. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/block.c b/block.c index d799afeedd..1b10b6fb5e 100644 --- a/block.c +++ b/block.c @@ -82,6 +82,9 @@ static BlockDriverState *bdrv_open_inherit(const char *fi= lename, BdrvChildRole child_role, Error **errp); =20 +static void bdrv_replace_child_noperm(BdrvChild *child, + BlockDriverState *new_bs); + /* If non-zero, use only whitelisted block drivers */ static int use_bdrv_whitelist; =20 @@ -2142,6 +2145,57 @@ static int bdrv_drv_set_perm(BlockDriverState *bs, u= int64_t perm, return 0; } =20 +typedef struct BdrvReplaceChildState { + BdrvChild *child; + BlockDriverState *old_bs; +} BdrvReplaceChildState; + +static void bdrv_replace_child_commit(void *opaque) +{ + BdrvReplaceChildState *s =3D opaque; + + bdrv_unref(s->old_bs); +} + +static void bdrv_replace_child_abort(void *opaque) +{ + BdrvReplaceChildState *s =3D opaque; + BlockDriverState *new_bs =3D 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 BdrvActionDrv bdrv_replace_child_drv =3D { + .commit =3D bdrv_replace_child_commit, + .abort =3D bdrv_replace_child_abort, + .clean =3D 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 *ne= w_bs, + GSList **tran) +{ + BdrvReplaceChildState *s =3D g_new(BdrvReplaceChildState, 1); + *s =3D (BdrvReplaceChildState) { + .child =3D child, + .old_bs =3D 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 --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163394; cv=pass; d=zohomail.com; s=zohoarc; b=KIVlLHTqFyC4oK6CTt/Zhj3HTmW1L1Lz7nryQDAxd8ZchMlDBLCoGTXof6l8d1eEA3WkYxxrAOMcEI0na9BdHp7fgOMq9XUOTM5+L7i5YDzalBMqhpIuBJVVEIRgRrVuK4NlTNpnAMOQUDtCIfqbVvOf2wW12rKjxR4bj3TSRj8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163394; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2WvSpmrgm2lxnns+bF8wGlC/aFTUS5p2RYKVz4J67Po=; b=NXEb8zY+5+mokHid1sK5sxlC3BapxDW00nHaLdpxYrkHZgV5X25W02Fap9jJ0TB+Lb4TtXxISxDcDKrnIHTxfGiTboVgKn9E65FXpU+3/qz1mBUwzHdfiKXRnfbnWE+OUtBwx+0tt/drBJtn61MaWKARtICQ43uWaUlgISA/bg8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163394784874.6580229545293; Mon, 23 Nov 2020 12:29:54 -0800 (PST) Received: from localhost ([::1]:57296 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khITB-0003oA-He for importer@patchew.org; Mon, 23 Nov 2020 15:29:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID5-0004NM-5t; Mon, 23 Nov 2020 15:13:15 -0500 Received: from mail-am6eur05on2111.outbound.protection.outlook.com ([40.107.22.111]:23809 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 1khID3-0007Ry-92; Mon, 23 Nov 2020 15:13:14 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:01 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:01 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LmF6liD+PYJPkcUaMJffxvBpR+t5TPyU/h/GSbBd9fbK9D5IZBfOpGcXcFpbOhTtO75Ljij00o8q7AQBpyYnc7nFqVG5ygbK18iDW1ZlwFoDIUbCRe6NTn0UsZk43tPOCSXIVh+7wJLcqu0bZqKs03n3ZLR+cv0Dw+Hg0tQt/uOOU9sOYM59oDQYGnBUf8lb8VAysYV5N4qkhSs3DtNguKJu+esAad41QnXzQcpd+vZHeIZoKOGtre3W44uKX4zzv88KBUfb/sM5RQrqxSE/3U5mKQJARa/j54qs0DYxHz8dcK6bff/OfcBo/hQ6D9x1VBA+6BIeMHU4UDGY8mHRJg== 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=2WvSpmrgm2lxnns+bF8wGlC/aFTUS5p2RYKVz4J67Po=; b=PjhmeMSPEdL0bnhr5X2cr6+jUz0xjHvS/ueaCPfhf0DiGWagBOoDdL8ZFPGM6fKI8IfDFSC9ZUaAfAT8V2m8D8XDCfG3fEMxP7cf2Spy3aAdIKKe0o3DdCstsMz+UjVOCGzlWerouaLoCsSgrDeg1VPT4MxrGveQEmP7Vh05Jet9hbP9odsUmE8p0rbxLvekuZuNXt10sejYbCPz1sxWHakTBB+jc1WPppPGii4YMCcU6MpMgPkWJ8opCzfds1XLMX3V4p70h1j7fGEro6vBmOwJ04o4K5TP89nmSdxPgfIms6C8WtiudRN8UGnyqmCNfElzLEnZqu3rO9l4q3Z72A== 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=2WvSpmrgm2lxnns+bF8wGlC/aFTUS5p2RYKVz4J67Po=; b=CXJwi+qBrhe6lnMv9XMPgL3LA+C5KxSQxCDxyESO6X3joC6NZKLiw087064/gKl8E+OgxhmhdPx8nL6SU+Yjn/yvf6odXceV9G/aH+HAXj6o0GUQB4m36J0vkhRbTNljWZyCgFuA8tSONSKWP/Up6NEkh+N6ci5Mdg1cExnUbmg= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 12/21] block: return value from bdrv_replace_node() Date: Mon, 23 Nov 2020 23:12:24 +0300 Message-Id: <20201123201233.9534-15-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 568518ab-658b-4781-3200-08d88fec2db3 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: PTVBiBt6EmtfQyOFL1Q2v0cfeoblu9G27ig3ZvmfY+o91Z5O+lEGy1pE3cC1v5rdQ6F6iV4rB7RVWfe3yx5kbBG0bqIE+roPJqC825kWgGcoyCddStyVsZ54ZU2jSwJeEmebyjpt8gXJYyHb4PHKTWgNRJgXp44gC5Ug+to+NlUSTNKY0BqL0+OQIpmwdsWGBJns7OYniP08B4fGaCYAEKltwnQ27ck4A3WqdQEEmvYZMR/qwiSvgwOV2oQWMmVbUcGFVPOTyDBh32eh8MzTsJryln5fVOAjSJJB26ckTqeV5UaC1MTzSklSR1Enbx4TFVqqhkj5glCwEcIkJDpUBg== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: gTLbxZiXjlWh8aWx7R3PPr2MlduCWngreS3DbnisFmiB9r+80aJinWmVv33oAbyQvbLPa8SR7XF8VbFBOg4+H7prD5PbgXNDPTd2jxHmPhUBmxKgs8q6kmOnYIzQkt4hW9rDLGdmwHwoUn1uvWw1TpzMR+Qyg4bMsYzQk9se7kj+J6AQ2n8V94SHtmsIAKg8/sX0DBqRKbWg4j0nAlEavX0RqNvRjVr/lHA76SSQm1+UWMoQyDcyKm3ANJBC1o/IlDIrNPZtJa+GF2Aslf4MLcd6W8b7PA39b1Kqgct7w402d2s89m1iRcpXpoXVRMRwK8BJD6AKPhWylO6EHxHoVwtpIWeIpToIgl3mTXUaIkqj6eCiTqTJNPOYA2nArahplQSCgUT5TpWpXNgubsNP540e9wnSej/EYQNPhem0drKTRd+48lrCiJeP0H0NJ+Pw1US2zt2o/PKLV/oDlhcGn7nSVI2enC2OziIvLSy8uxn1dPh29H0mrVHoP8NzWN+IQpscO861faF6G07lQT/P7SpW2fukNdvKU/id/SJuYlWPo5mUhWwc4ev3Ahni1amkD0LMnuXjEsx8rmjOr2+2HNjaZy0ujBPOeOiTZybEdVx+QTAhoG8rtJ1DSEl2g2Gtho8rebBwgmdCfaN2oxwkzo3sXgKx7eekuet1r+TENltSNbNBP0lsCZskPFsTqNO63++1E3IzoudbQkIcTDATk3ZJi5DY2v+iACCej9BJtTbJViwziUSIm+7tWDx4bZS8o1CcC8AJiTDDIe728e7jtbdmCqOh4jWcdHGvth2Rp/EfJWIAjU5OBnsf+6qj844gVDvWQgeL+VuLdW1QMLCxGtDrnDbHO4gxQH+uJYTKWVdamMGuzkaW7n1+Fb/ko2bX1WTUO9+IaWTQ6zw3vnYDSg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 568518ab-658b-4781-3200-08d88fec2db3 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:01.8640 (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: 7H6SHOMdIzodgXC7coeCvlWuP8l9DBq4DgzOUo/9tk8vVMd0ej/JjUAjATGiNkHyZpJwKIFsF+ilpBxJy20Bnx8LxOL7y3IdQelJyDyH7EU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.111; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Functions with errp argument are not recommened to be void-functions. Improve bdrv_replace_node(). Signed-off-by: Vladimir Sementsov-Ogievskiy --- 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 db37a35cee..ab812e14d8 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -346,8 +346,8 @@ int bdrv_create_file(const char *filename, QemuOpts *op= ts, Error **errp); BlockDriverState *bdrv_new(void); void 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); =20 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 1b10b6fb5e..5c94f5a428 100644 --- a/block.c +++ b/block.c @@ -4781,14 +4781,14 @@ static bool should_update_child(BdrvChild *c, Block= DriverState *to) * With auto_skip=3Dfalse 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 =3D -EPERM; BdrvChild *c, *next; GSList *list =3D NULL, *p; uint64_t perm =3D 0, shared =3D BLK_PERM_ALL; - int ret; =20 /* Make sure that @from doesn't go away until we have successfully att= ached * all of its parents to @to. */ @@ -4844,10 +4844,12 @@ out: g_slist_free(list); bdrv_drained_end(from); bdrv_unref(from); + + return ret; } =20 -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); } --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606164181; cv=pass; d=zohomail.com; s=zohoarc; b=GnrlI+KHWz+LPfxkRka3uhtbNXkn9+H8nuXS8S9aZh7KObpo/j3ANT49IbLREo826mgxFOhwFYIyjuj1+Qj1WhaOVGA7OLquv4OuXjx7JA/03oO0hrQcH1UMTIxbd7ZqygZJzrKHJaZz7StX3RD/KlRgpIVIRvPIfMlfLNTBTWk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606164181; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0LKvv3D2eLXNrYTw8OiSQmbhM9Pm/snzN9QMbHasbeE=; b=RI8+WdxBcaFtDztGIdGek/45yMTjl/Nw2fqSFYw9J2oX028Vcxgns+2pcWbQ7gVPXoEVFBVRpCF3EiBCt7KaOU5M38VB9aEMm7P4OUKtgzbyPrfHBqAs2o6nKRc5sYQEBzvvnp0Q3cAQ37IJs2gX4AnPIOgPWP2m0Y559fYXBjA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606164181823748.4050471315023; Mon, 23 Nov 2020 12:43:01 -0800 (PST) Received: from localhost ([::1]:53158 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIfs-000627-Kq for importer@patchew.org; Mon, 23 Nov 2020 15:43:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38520) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID6-0004Qt-KL; Mon, 23 Nov 2020 15:13:16 -0500 Received: from mail-am6eur05on2112.outbound.protection.outlook.com ([40.107.22.112]:43328 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 1khID4-0007SQ-OM; Mon, 23 Nov 2020 15:13:16 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:02 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:02 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d8sQs99gfCn04x/0rmfabXyFZfdC/dLEE9LWrktsQeiD0VHar3l67AC67H/d1KfTwdl1RF47/rhTGa9RXNVvXWPqVEKMjc7glGMju5zazL6crLvKj6S3sdJcN49RKiwUgzytFJ5aGPm5SH+acovy+7bR24j+syH3h95sBe3IPKLpM1jpaH1N360gC9DkMFUXFm9sKAkChV2MHgFAdb/3RToB6an61XbdFXbtc2BUNJfSYH4hw2cEJynyVGShP2fMESCJ20nnotWZRtvQ/ZR1ZyGKIAa0glMZ58YK+Cz1ZV/cTGMmw4jVaJIqWQtnNXk4k5X/oHDEjzvbjgLhNONTLQ== 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=0LKvv3D2eLXNrYTw8OiSQmbhM9Pm/snzN9QMbHasbeE=; b=ZgUsx5ZA+9YjYzMP3khbtHKTvwhFAe/SZKyaxrw/AuSWJZ8qWjrtbMD9v2Ay6nA/oBSClaz0oLHLz/jNebLjHQMsxhghNi4ySnfqpYNQz6NZJ+RjSpK65fA9XO0uDjG3MOKqsZUx3WpnoC1ejqaXRaT0nhH1Ee/JAtaglJFhaA7F64Y98K7P14hpZ/xJEFAdXSWcqvEe2Jz5V4xygwtH2r9FYIMDXxuzRXbzeALFzZjx94H63j+HjN/lVC32vvK2CA9XtJ4Hp3hyCnTtUkfgPgB8fl/ghVflZtVoBhwjAZXJMKztmfHediyMA318KHGQyVw6kQ91lRGmW4FeizcJ4g== 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=0LKvv3D2eLXNrYTw8OiSQmbhM9Pm/snzN9QMbHasbeE=; b=OBgkW5gdK7TnvzyKsW0f2sKvSGQKInobFERY4Sy0e0i8DiS8eLglHmCeugOZd/6/Dlc4Of4iIlkpFj0o1znvJL/3HIndK+mL+gbdS/Fnl9z2l//FIwnvFP7K2olk3Jys1LfWE4UIXqkrFGCOQz8F/e8EqkPlY57x7WjCW/9syKo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 13/21] block: fix bdrv_replace_node_common Date: Mon, 23 Nov 2020 23:12:25 +0300 Message-Id: <20201123201233.9534-16-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1e3459e-3d77-4f26-0e52-08d88fec2e4a X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: N+XXMZhjyts4SAi+JSkS/T1/XRu0H0uR3Zq2uEzaZxS0K+hnq3cVDGCFHvVReKrFD0gPr8j8Uyd76q3l0u9yG9mPBPcdA0E/YwDpYmbVKYsF/RK6FMMUaVmSHfxEd/gZ99Q0k5zL4PMbNGEhx/TQjKKotGcJiElEWjAunYBCsdr0WSqsmDdXn0kQhvq97UXspdk6GQQ+zr7FAfyreoPl2bkcqxnfVYYzULgzsQGSuODDd2Ose6wWI708D+mX+cFBj36KPe/JrCheY+ahfUeK3VGmR6nO52mOR9vy6a/OYw7uwEyOYAqxuU6nE0APiBb134APJMp9rX5MGRHOa6ogdg== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: JJ1kUQ8MAiP0Da84I90U0VukLnC5FuviXg1mb9Ima7MFm6UTbjtR8Swh+kRda8veXr4sI/oXzAZRLVCrrtJ2eO7GM8Tp+BzUSFlURz9AUBO5b37i88ZsClMaC4QfAhc6BUCbYTjw7pnHlO96yJJJ5djLyy4xA5sTNuRQC/hv6ylhX/hTJ6EiVIdKla2GF7EyXbByXalb9KzG6UtrZxbpjkG22jQmk2u1kD27PiWF58YiqGliONwyCYgHRWyRqkEDK+gWUWcBYgk6Zw+s1Fg3bOLft9UqA4CBntiMQNNjNRBjHL38vR5R9UbPp7cullZMUo8h883KqJOYH7mRmhkwq+0nmOA4wyag3RxWPHLZn7cyO5Dy8pllrBiFFS5lHKMs+QhciVbRF25z6RqRN5hTHVpunswWdnW06KbD7Sa1yCHzerrwgbfbuswz4Yo5AnalOH/no6Nh8BF317Iwr9F2Y8cm21AaAgmH3iwiWNZ1eFsiZPQg+8G1jA9gEFl5uoLXB4cKCW0GBRYqJsKTBuT9rKkQkcaMaljA7nWww+1EPTWaShVColczG5ccTu1Vv9+Peddot/LqIUA40A590OkeBSKvodQNGdwXb8Cm7HHF4nlcoJSwcdKLWsQZkn0AdPbCshh1EqL1ji2s5iTtJqkt8UO64IcTqbLXvWwKmebGTeBVQ2fgkaVDjO1FBK4yP1f3L1tZy/LUwjdiOWrEQ4wtN2U7VyTdfkcjkr7j1t+/WsSLJ2TBnzwG2TgbXAaKFPsD5ScSIFa32s/XVt60I3gh2C1sO+fgus0Zu9WyVYyTf50aXtV/WcnHpsnescipUvhGg/ZGdXeUx/2ZWdeS4YxfwJ11FKQdiIu2ckcfLc2ZWn2llUusPmQtL2QWYWnYYZATXob0eU4ITYvMCtKE7EvXUw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d1e3459e-3d77-4f26-0e52-08d88fec2e4a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:02.6734 (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: ETGvWafUkQxEWldeg8K8L+vtdJMLYwKIdtmaxr+0WnKomFv6YMVw4Vjm8chPyEDw3hffPYdRuAiLlQmndPt8nWzfDMYAXrVFnEVq8vzMxIY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.112; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 5c94f5a428..08501350b7 100644 --- a/block.c +++ b/block.c @@ -2178,7 +2178,6 @@ static BdrvActionDrv bdrv_replace_child_drv =3D { * * Note: real unref of old_bs is done only on commit. */ -__attribute__((unused)) static void bdrv_replace_child_safe(BdrvChild *child, BlockDriverState *ne= w_bs, GSList **tran) { @@ -4787,8 +4786,9 @@ static int bdrv_replace_node_common(BlockDriverState = *from, { int ret =3D -EPERM; BdrvChild *c, *next; - GSList *list =3D NULL, *p; - uint64_t perm =3D 0, shared =3D BLK_PERM_ALL; + GSList *tran =3D NULL; + g_autoptr(GHashTable) found =3D NULL; + g_autoptr(GSList) refresh_list =3D NULL; =20 /* Make sure that @from doesn't go away until we have successfully att= ached * all of its parents to @to. */ @@ -4798,7 +4798,12 @@ static int bdrv_replace_node_common(BlockDriverState= *from, assert(bdrv_get_aio_context(from) =3D=3D bdrv_get_aio_context(to)); bdrv_drained_begin(from); =20 - /* Put all parents into @list and calculate their cumulative permissio= ns */ + /* + * 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 =3D=3D from); if (!should_update_child(c, to)) { @@ -4814,34 +4819,19 @@ static int bdrv_replace_node_common(BlockDriverStat= e *from, c->name, from->node_name); goto out; } - list =3D g_slist_prepend(list, c); - perm |=3D c->perm; - shared &=3D c->shared_perm; - } - - /* Check whether the required permissions can be granted on @to, ignor= ing - * all BdrvChild in @list so that they can't block themselves. */ - ret =3D 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); } =20 - /* Now actually perform the change. We performed the permission check = for - * all elements of @list at once, so set the permissions all at once a= t the - * very end. */ - for (p =3D list; p !=3D NULL; p =3D p->next) { - c =3D p->data; + found =3D g_hash_table_new(NULL, NULL); =20 - bdrv_ref(to); - bdrv_replace_child_noperm(c, to); - bdrv_unref(from); - } + refresh_list =3D bdrv_topological_dfs(refresh_list, found, to); + refresh_list =3D bdrv_topological_dfs(refresh_list, found, from); =20 - bdrv_set_perm(to); + ret =3D bdrv_list_refresh_perms(refresh_list, errp); =20 out: - g_slist_free(list); + tran_finalize(tran, ret); + bdrv_drained_end(from); bdrv_unref(from); =20 diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 594a1df58b..d0e0f56ec3 100644 --- a/tests/test-bdrv-graph-mod.c +++ b/tests/test-bdrv-graph-mod.c @@ -292,20 +292,11 @@ static void test_parallel_perm_update(void) bdrv_child_refresh_perms(top, top->children.lh_first, &error_abort); =20 assert(c_fl1->perm & BLK_PERM_WRITE); + bdrv_unref(top); } =20 int main(int argc, char *argv[]) { - int i; - bool debug =3D false; - - for (i =3D 1; i < argc; i++) { - if (!strcmp(argv[i], "-d")) { - debug =3D true; - break; - } - } - bdrv_init(); qemu_init_main_loop(&error_abort); =20 @@ -316,11 +307,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); =20 return g_test_run(); } --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163236; cv=pass; d=zohomail.com; s=zohoarc; b=l37VrwzKDC0iFH99nVBITuS7dVgprro1Dy6aE3bUVRa4YcEu+K357ZGmgBEnrxkxkNHMIlW77OtIP1ayD21X1Ecm48UHUrB1HGwLli1UFbT/X1cpTsM1ObJRdy2hDj3CylcYM/+0aKArxY9uKZJHc7yXRBPbLZ5PZ11I7k+8xfo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163236; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/gl2OmDZ+erNXtSQ1/rSKY3s2VtNapW2WBp6BAge3Mc=; b=OT7fy1Fd1ELc3njD9TlMy64CB3t5MhWJkt4n8z8dlRHK46hzeoV76BWp8Np2a/+Sk6qdS6d1/BeJFDPr8FNQq1JOa/eRd5q/6kAU4I2+Rzj4We3k2JpI4WMJJ39kN37XVZd5kZunTNe4sEveydzgDOm9gTd9ftXnovjLz84Q64g= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163236816788.6293565632294; Mon, 23 Nov 2020 12:27:16 -0800 (PST) Received: from localhost ([::1]:50668 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIQd-00012e-Gf for importer@patchew.org; Mon, 23 Nov 2020 15:27:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38536) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID7-0004S8-4F; Mon, 23 Nov 2020 15:13:17 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khID5-0007NS-7v; Mon, 23 Nov 2020 15:13:16 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:03 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:03 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gelzHn/XON5by3zZEW0lRFlwlpWL4NP+3R4mv8k67QF49zbPa0n3hIM8uyg7uIc6G1vMJmydKJGUeuZBmte4RQOJz3SJxtBKjLpclsQFOk+JbvqhSoKsSm96nekJ+kjdp8oBf8BKwB/d4hg4n91S1J3tNO1MV9jrTxN7yhejj+aefCbc/cZhRwGxUp/qQmDuPG3STg06w8gRVtt/dDb1p8aRHPQejuSSZG/g2dGVegORupZQSyp7QHJ/OoGPyO80YudiwRWm+aWzJo8yqRPHIW4VIuSXOLZiEMkKr3m866cXSk4gA/DlUqYscehS4lOQALXsB4KtELG3Btdx5Mn1Lw== 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=/gl2OmDZ+erNXtSQ1/rSKY3s2VtNapW2WBp6BAge3Mc=; b=MaDPmtPCaMYs1SBeQp1weY+E7xd2h3la/l0fjXGmi/z9GnqNS85BmLheIqiMRYTyUDXxnFCUT70VCY+nKx/VlzABBIyhtrnq/OlGABYLkpz3LsDx2kAH/fWDXufoQaBuxke2hhXkXcjTlByYU/CoFBs5iloIl2SodAggCQU5bOdW0r1NPSExB+l+eXygLTT7w7LhZLOP89uXQUzewqLjo/zVL9Hhhk5KeLkS6W3Df6Evj4iD+d61utjGMPBB8fTo9msH2hbAQZ3R9tlSFtG2XpqW8f8OawjP5lkN8oCX0NbgyjCWcQYNcynTc6tPsngjCbnj0Tznt9nCYafjbMp6Ow== 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=/gl2OmDZ+erNXtSQ1/rSKY3s2VtNapW2WBp6BAge3Mc=; b=k+oZp62Rmx/Rlb6mONlMYABqgEWuv4FG2KDdnUXcCGDITv0ktfgecRaYvdFOEV0N1sqNl2x5/iLO6fYTs0dD6wfWuMBShx5+cUqxcihs+iIgbKqeOZFc0GRHKaZtm3nWyndsVXr/skpvoa4ytMl0zUsa8mdimM5HEMAvLK7MzXU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 14/21] block: add bdrv_attach_child_noperm() transaction action Date: Mon, 23 Nov 2020 23:12:26 +0300 Message-Id: <20201123201233.9534-17-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 76025745-e31c-43b1-fd63-08d88fec2ece X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:288; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MnKuP/Am03d9ovTUVjV4r1BxxIxZCOtyhRrphDAMxlL3/gdKl/pgcaXIP2zctx+lN76TcNufwaWNQYXLrIqdj5NDOQ6QtwR+3Pk5MMfxszgoWJK/HsRchAuokp/88oNi3wx9niGMUG713ja/ryRnfLmyTkbsk3scN6dSwbqBAw/twwzkXf9Y/dxxCBqbshR8HFY94UX4uCRzqAiY+hzAf1BFIsNrO9i1/OVMFXCVDCBQafxg+Zw6Jw3kbGQ6qedwilVZYCUl3Gw/sWYMe/NrPsPsNYMtBpaLg4zr673mhkS0b69nLEEQ8gGiwpsEL1Fk 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: xOabd/0RSMoUz2/4lQ4Fwq08cnNxiyyHvmyX5Mw/mqCUifP04Dy30S8o1gvznuqiKKUJqfta85pH8LeDjxnvAIxQJ+yTLM+yb6UE99iMbyA2g2H4FyHFn11lZ748Y/5el4pUtVhYbNlIWJ72dsJwHezjAjHRpV6Npwl3/Bw/9KvG+zyLUj/+wZeNmZ7UjxPlhiGI1iBTl6GbS4pj2sC0QsCv8kCwZO5xHHvmQnS+v4DPwgCHeFjSBgQwR6SNslCQR9xq/WxfzwfxH83vbjYm0OCdvMqXXNMX2elvh71Ie/fdOEk8J+wQKaZAwwA0fcJAaWhq2tjHIabOJ1mhkhq29OyNzfQRdVWRN6vUux9ws1wHC+oEhjlk9SCVq8BvYp/sKGi3s793teKvcByjl6MjdTsL+yyRQsBQT53oxhEhmEEp7HnWF/ac3nGyjJWQ0dRFOXDm7VFqPpa1p1bKiFy7NoPgOG/fNn/0EEqWJWE99qWG/elTXFxo7uQqA4UFpFdDdnRDub0EkS4xxAk3V2/8rSsh8gWNBkJrNhlN2SCTCQdP7icLl5dCijq4HU1gp2E2PVmrSVwNYkfhzRH/ynSab2DnWZZPC6Ns3KaVPt4z3dU/dX9TRL5UKd305SkhfdfXBd7awgZ5YoEm/dpN7KCNzJboRhlWGJBVBHtIiMDUITo3Ezeh50bMg5HTXiJbyVAatnt75D/tIdK4xLmO4PwKQ/2bAPZV4H3qdvBoEPX4Dwc1SfBTx1absIKpz9UeE/IX6y1Z0yOjR+3DB4M6+LYyL73tAVyrnYgS0VJXKtAOoWR+BfKqyTkg7lbo1vQI+Zo1v9ECsxu9UNmzBqu0tdhmOUT7us27gBF74NVZQQe4pQuYzpHPze0qX6llwa7eBLu6s0FGrh2Q3JIOtmj9TSSwKw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76025745-e31c-43b1-fd63-08d88fec2ece X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:03.6452 (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: QPYsUw/rtDNsgMeH8HDRIJM3XYUgyjuI2p7na5mNV6xexM5/6BBN7O3Ur5QYN7EIRn75HygIwUY2gTEQVkfjZ4m4zUWTxk/bVpk3c59ISCI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" The code partly duplicates bdrv_root_attach_child() and bdrv_attach_child(). Still refactoring these two functions by renaming them to *_common with new noperm argument is more complicating. When all operations moved to new graph update paradigm (update permissions only on updated graph) all duplications should leave. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index 08501350b7..5f6ad1d016 100644 --- a/block.c +++ b/block.c @@ -2974,16 +2974,102 @@ BdrvChild *bdrv_attach_child(BlockDriverState *par= ent_bs, return child; } =20 -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); } =20 +typedef struct BdrvAttachChildNopermState { + BdrvChild *child; + AioContext *old_aio_context; /* NULL if not changed */ +} BdrvAttachChildNopermState; + +static void bdrv_attach_child_noperm_abort(void *opaque) +{ + BdrvAttachChildNopermState *s =3D opaque; + BlockDriverState *bs =3D s->child->bs; + + bdrv_replace_child_noperm(s->child, NULL); + bdrv_remove_empty_child(s->child); + + /* + * refcnt was positive prior to bdrv_ref() in bdrv_attach_child_noperm= (), + * so bs should not be deleted now. + */ + assert(bs->refcnt > 1); + bdrv_unref(bs); + if (s->old_aio_context) { + bdrv_try_set_aio_context(bs, s->old_aio_context, NULL); + } +} + +static BdrvActionDrv bdrv_attach_child_noperm_drv =3D { + .abort =3D bdrv_attach_child_noperm_abort, + .clean =3D g_free, +}; + +__attribute__((unused)) +static BdrvChild *bdrv_attach_child_noperm(BlockDriverState *parent_bs, + BlockDriverState *child_bs, + const char *child_name, + BdrvChildRole child_role, + GSList **tran, + Error **errp) +{ + int ret; + BdrvChild *child; + uint64_t perm, shared_perm; + AioContext *parent_ctx =3D bdrv_get_aio_context(parent_bs); + AioContext *child_ctx =3D bdrv_get_aio_context(child_bs); + BdrvAttachChildNopermState *s; + + if (child_ctx !=3D parent_ctx) { + ret =3D bdrv_try_set_aio_context(child_bs, parent_ctx, errp); + if (ret < 0) { + return NULL; + } + } + + bdrv_get_cumulative_perm(parent_bs, &perm, &shared_perm); + + assert(parent_bs->drv); + bdrv_child_perm(parent_bs, child_bs, NULL, child_role, NULL, + perm, shared_perm, &perm, &shared_perm); + + child =3D g_new(BdrvChild, 1); + *child =3D (BdrvChild) { + .bs =3D NULL, + .name =3D g_strdup(child_name), + .klass =3D &child_of_bds, + .role =3D child_role, + .perm =3D perm, + .shared_perm =3D shared_perm, + .opaque =3D parent_bs, + }; + bdrv_ref(child_bs); + bdrv_replace_child_noperm(child, child_bs); + + QLIST_INSERT_HEAD(&parent_bs->children, child, next); + + s =3D g_new(BdrvAttachChildNopermState, 1); + *s =3D (BdrvAttachChildNopermState) { + .child =3D child, + .old_aio_context =3D child_ctx =3D=3D parent_ctx ? NULL : child_ct= x, + }; + tran_prepend(tran, &bdrv_attach_child_noperm_drv, s); + + return child; +} + +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) { --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606164321; cv=pass; d=zohomail.com; s=zohoarc; b=BcTG87jDvqA+TlgNoca5OtxwXpkVM6tXWuhMfsn0RXhDsEdvrarMBoVt77CgDX1X1qxj1lvjspc13O30eBLSn9JRbM7LnbU+8maah4PxGQNHe9peVJYh3b4MDvhzqw1qQFqzoCWk0ftP66F1iiBBzxBTYh5HRj3DiIRF50yrdeU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606164321; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EGaEKUvz6IWb8RBnsUSGKZ6oAwNm60XQ4kLSnJGQeoo=; b=Kree0dG3/Em1JL8l/5UKfvacnCMvqX8XxL8flyji6t3gvqaJimgV99M4zwD7Ay9Ktqo0DHGPf0x/R6hr1xdjO/6m3iXwfVeLR/ABHGtdK3msQ5uCnKmDlnbkbJ0kxguIluwWewoaabcjkEnIiu/qWWXGHKehk6KlJLJBrNY8+4k= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606164321644536.1405005444161; Mon, 23 Nov 2020 12:45:21 -0800 (PST) Received: from localhost ([::1]:59594 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIi8-0000KA-AG for importer@patchew.org; Mon, 23 Nov 2020 15:45:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID7-0004T7-Hy; Mon, 23 Nov 2020 15:13:17 -0500 Received: from mail-am6eur05on2111.outbound.protection.outlook.com ([40.107.22.111]:23809 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 1khID5-0007Ry-QO; Mon, 23 Nov 2020 15:13:17 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:04 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:04 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YQXs0XLG5CuwpTCzz5tQKLmsxytUxdxCkXdn6EFbQSM4j2rBqGXjTCp/ZvL6YOVkgjchVe+ukG3qsFnltxWPOQPqmcpMqhbR1u9LsiyjnQ3QF0Xq2FMoqyO0teHQ/SCAiqx7YM4Dz+Fmt96bw3FXG6yY/lu6WMX6JNlrsLKNbPwZyW02JxiNkhY3Gz1nO+LINk+L+0fwiEME0ZfSzvbo6O4cLM/1f/YK2lPnvJuGEsSdxx8292l3CUbXCfJRs7LKRreckP2R/oEDVuWMToZC4viTS074qL+VidaexhzfhetfX4LB3v0m5RFVS8CGo+jjiJZQtMvcGGDU+7iX+47jfQ== 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=EGaEKUvz6IWb8RBnsUSGKZ6oAwNm60XQ4kLSnJGQeoo=; b=holt41MLbpDi0tlcvvTeb4+RZ1wCczAY5dRWRUYY4x1kD4Aepyke/Xm4aKm/WZXK0dSfHrsQKb2VAv7J4bxY1mtwHNGbFhlcCm6Mnzx2m3mq7NWN5qLiStv+H4JK1xjH9seNJ17tpBt8mjo7Si2++tbbZixNy6sgGE/V6EapOUMFe/NYVF4XBSagsxRcmPdMq6YZw3UENY5aRAKu+piWjzB/8Ogay5mkJkvBmNAKuaDJ0KXZq6Er8N/V1NQ+5hNcfPvaL3t5wHmmoT+okJLOgnkPIOcVVUO6XUQm3JEgZgxEfjmAsPAMN7pL8/3kyPlVM5ARK8ROoAbV7mmDRq51tQ== 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=EGaEKUvz6IWb8RBnsUSGKZ6oAwNm60XQ4kLSnJGQeoo=; b=ITThASpueIGclqPyT/rNkQfjQbi9UQ4S4PXH/7bv5yBpfJd03OYfjVuEzi8ilZPt8nKXwiucvJdF8BPBg4OE7JD760BV4v07doMmWqudcXD7oDumzBFCBuC97FbWUHDju+CihtbTMTIi61Xh4wyVdz6am6iBeDLi5WZiXjorS8Q= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 15/21] block: split out bdrv_replace_node_noperm() Date: Mon, 23 Nov 2020 23:12:27 +0300 Message-Id: <20201123201233.9534-18-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 01b0dfc3-3a6f-4753-91cf-08d88fec2f57 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: Qa0f6tmSFI+REx5310qMnZkoc9x8ZQ/J10oDzNgwGD3m3bqse7hUIqoXHfVSTiKmoND3QpQw4Qw9ZT+Ps3rXzItS9fveJlg9M15hHKs2ZX4wQVoC16b46A11e6s07UErR+YJTZqR1RAlwgyuDtREYbxnHDkBTfsu4jdgszNDUla3s/elZ05R84TpRo74hWJYdET5t1O7UynBQE7QFuFdzWVcTQ5fDtSYJ2aO6FD4wCndpF+ZLigAHHeqkGwIXMRDNT8C1XaW2hdoMfRyCeiNviDF/EG1qZm0lNOCs1XNISXtZv2tkD371rDKq96xWEo/ 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: NBEANZhOSFW5XYphrYRswgJWGmzMVOrPh4ziFKKxuTOCyV8G87YJAaJ4G7xD+HvtwPL4Ye20wXS5kA+LirlGpOYNB4Wj6zyIEdIw+Wcsr1PSJFPK3U8GaXApsFLtNfaXEIFGsCvrcLGX56oAa2FBhAOhbIqEsKHX/nE8hJsBKqFuZdgvbSqxF5erzoqTBElyJliHv1YRU6g+hwAvJzxpuQQgR3JFxZiaPTFGB1Bs9ZEKR6jyrWzQQRmAGJ0kWpXqEGvpOUgIPFEk9Y6FqKZ+HVTSPBb80RRBeNRhbSb+gX4pOIz4msz7Yo5D65FD11GKn9HS6mnLACROmFBPKl9dIkguLPnDUCy+N3gacjMzQm3ugFRDsWpehI/ioIMWSz3uD3EBbRvwFZWYRySnGV9zGzPISid9YtGQFbjZ2BDsfIz5BnJfIyrY/U7/dwtsi984dAAHijwdiZuQMhezSPBSk2DMyTe6ReeHxsL2zfA6qLhMr8AJnZql/omncNbidHuDl5gyAlpRIb/4DkXb3ClNuwfKNK7tRM1yLPp5CBZMBvaAZwEnxdlT3xA5jlFE10W9UDnDIwBv8r+UFzOTuIvTPWrPKIit4R6sawm8+k/bGI9mnoedgL4nHjYZI7cDCPlEyNg23v246DjkG7Ipp+5xftH2aKWeTmpyi0LrKRvCEK6iQweOi7RHrJk31HSyoSMkLfon0AYfIC+joIh+iGeZsGRvB7ETADgIXdDx2WbHfY3DcUA0p+9l7Bp73Qi2w61VVRmNT4dp4DlfTkl6n5wRj8ZnLagI7S/MGRou4bBB/93xEF7xvk1Oe2BgoZ6c/8O4xCBvRaoX7GV2I58Tq6yokKFaWo67J008qvO/lDf1ECkvMkeAyDqLGpsalsygHNyZSd9vCZ09zpteeMPy/lGjEw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01b0dfc3-3a6f-4753-91cf-08d88fec2f57 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:04.4407 (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: ouDiMeeel1LSQ1aOUDERaAsvEHdrYWQvphZV7tVOjDLerYxUBcg2CeLd47NsYKEbMVXp+z3akPpOcWLikyzjCYZAUE06Dt1L0FsXNziNTho= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.111; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 5f6ad1d016..1327254b8e 100644 --- a/block.c +++ b/block.c @@ -4859,6 +4859,33 @@ static bool should_update_child(BdrvChild *c, BlockD= riverState *to) return ret; } =20 +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 =3D=3D 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=3Dtrue bdrv_replace_node_common skips updating from pare= nts * if it creates a parent-child relation loop or if parent is block-job. @@ -4871,7 +4898,6 @@ static int bdrv_replace_node_common(BlockDriverState = *from, bool auto_skip, Error **errp) { int ret =3D -EPERM; - BdrvChild *c, *next; GSList *tran =3D NULL; g_autoptr(GHashTable) found =3D NULL; g_autoptr(GSList) refresh_list =3D NULL; @@ -4890,22 +4916,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 =3D=3D 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 =3D bdrv_replace_node_noperm(from, to, auto_skip, &tran, errp); + if (ret < 0) { + goto out; } =20 found =3D g_hash_table_new(NULL, NULL); --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163819; cv=pass; d=zohomail.com; s=zohoarc; b=OCPuR+ZVNfLiZxKTghW1+RvFmhZ7PPUa/9jjh17mJGd9YbKTrssViVSRAKbW4dypBKygIVW3TM8R2RbYEbsYDbuWtVs1pwalvYkWT9eZ9BAqJQSXQ3xS4Cd5/iOkE8TbDXq+J/shc/n98XwGgzrHzlpLI3IHiuhgCM9WAdSZn14= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163819; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=g6fZAf9Uj+1/UQ1k0JhLkNenGGcjMxJBkwtKfj0DUZI=; b=IHJFZU2j+voLu4TefAHcIY6d1a6qxDFHbfea2c8H/LGURXfR9dZ3UJw1NCOcsz/QjJjOUHo8zpnGu0tpR1fE/W6vwXBHCzrLqLkV2eYKl29tZWH+fQJEe71x3PX7tp9wXZA8OHsRuYYN9KVMszxa0gYF8jZk+Y7S1GMneQt0+kg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163819930271.48706293462305; Mon, 23 Nov 2020 12:36:59 -0800 (PST) Received: from localhost ([::1]:41734 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIa2-00013B-Pz for importer@patchew.org; Mon, 23 Nov 2020 15:36:58 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khID9-0004Wv-IB; Mon, 23 Nov 2020 15:13:19 -0500 Received: from mail-am6eur05on2112.outbound.protection.outlook.com ([40.107.22.112]:43328 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 1khID7-0007SQ-A7; Mon, 23 Nov 2020 15:13:19 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:05 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:05 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FSocu2ZI6WX1+L9I7A7F9UGKWB/f+qIAWCD0FTM1YOhTMM1xNpW5kNPSfGNSCJG9TXQvUlXy65q8QBqamQ62L8ti7xjwRzzg6URgEhjJKuBM2KZDO1fqusIWHqxNwUIV/t0PEARnqjhcq7mBLO2ktpY1t9ixbGtyndstPhQ4FeXutKVag1s91md9GDteeWYQ/7iELd6g8DT0VoU/CXR8L8V0taPtKOWAAwRjdR++AxbbeLewekQ5sWxb/wDH9bxl8Wap+5fN8KghIbpStVUq9fvTZjSy30xh0dT9v6g2noPjqx3/qZ5JWkQraqxXV/WM/SDAa6Z5XA7sfnP0Z8D48g== 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=g6fZAf9Uj+1/UQ1k0JhLkNenGGcjMxJBkwtKfj0DUZI=; b=CsJKDlcf8QTUQzj6xp8GftFQZ2B/8HaE4dyuYlZaxuGmDdgTSyX3fOB5EtLgNjnq7ft0vPe9dbIJoiF9UQZ1vJdAL2LC63Pzr8dUagakJVCv4S0NgB8cpIOKq+746jyNNYcGbAh3SDliCIdcAk1N9jpkZa0ys5EmUzFsq0ifouQw8t/KbCDkHruZ3CV81NnbVIdUsITVU/xk1bSPXowl/M/izKxcCb2fBMh4HMIWGetESNCHyRjydQ47M39LYtBGRM3lfXjf0M017T03M+WKjovI6nw80KFzTBmumgOTCcYn+fQzOwH5RLgykvCQW72oePGQalDM/OZRBxTes0HeuQ== 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=g6fZAf9Uj+1/UQ1k0JhLkNenGGcjMxJBkwtKfj0DUZI=; b=jbADEFxjxyVCMYgHHyVraGiu6AG+uQGzsz6Ogc0VMYX/2psadNDFq2ozTMiVch23uZgsWEY4ZsGzPxgMqzGiWsLDAxZc9uAWDXAl8scfyKJtfu7F4pUdukMBzAET7U7HSXaWIwXJXD0Mc99g9ZV4Fuk8YV46tZu3OrtpgRyb6pU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 16/21] block: bdrv_append(): don't consume reference Date: Mon, 23 Nov 2020 23:12:28 +0300 Message-Id: <20201123201233.9534-19-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c0b7ac27-7681-4430-5ced-08d88fec2fd5 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: 1a81Jh84y1BdJEyc4fxykhpeow2CU1ng7Hq+Bw7tF//WgiEefXY2A5a8JiySJCANo3x6sN+GZxtNBG+PxT+Bc2OFVd8D4786djZ1Q8khHKd1hN+DYPv1vbAwx0Wbjvn+/x0zW6bKYlO/zxHGt2nt40mImK3prMhKPF22fj2XF7590Zw7DWUEaCFFBL+HiSSBuQoERhp9/sgvl69SKNPaW8ojuWjLTUDW4BuNFhHAksZH29GyjM490F09l1ihG65yrnxS5Soz9AOvupBLR5H2ufK/ID+3GVEx55iq39osa8ejmsFWPF9nildK76F9wFdr 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: MJv0CkhUPE7ChtvflzOCVPBRe5q3plrbjXa5iRKRD0UaP3QKAFUuni10frCmzRzT3ArfHXa/uwgVCiR8i8nZihxCM8HXIm34iz/5BmmKK9eGTWNLkjsBEJcsicqKkgZ/8Q/t3ULqlB/a+9C0dIXrdcUksE8DAHEM2sUbL2Loqbnc/JDsfAZFaaI7XksyC41jm2yZK2GCpw0EQ1mOukZHgPEmeGX1zvgAo5kOBRnryecg9uatqZZFC+YJGno+4amo62+IRLsceIPRiIvXsg2n8bGRFz3f59j3i/jxbTubaDtvmkgtjQv3cavvtlSwTQBPUNdzXiag93IBGFzuYPXW5xhyPHX5up22LLKJMHfPeTrRYkQUJk/28MmGvSHlrCHjweV4afusvGJSzFTrXzcf5QrshvkNqoNsZFytJlKCbMvIIB7XPGUnWQdZ/yRijAoO13GTGJvPX9x1EP/c7SOjo36NQhVdjN43oaf0/C59onUfQ4p1DC0wFDILctBm3L/dIrix/MRAF+/IsjtLVlK4c3mEiOuMumRAL5BRPrBtdG4F4H7SFaacWXL5uGTJ7pHWUWfRF4Z36gC+PIujrFaCcmeQKcWCl70kUzXrnSrNwaUIguSp4JxLS4do3zpEm2a1W+2Ax6umcpoTMHr3RlVe480sMG6d2X73BjC0KH1U4lMIAu2DNbCuUADVc1Inr4bvdRmnMhzXfeEfcMj+EQVA8J5xMpajFZjv0XACM+djVIvu5Cqbe6mrlz34FfcbSOxUaf/zO3VD4NljHzImYeAuxo2LYcFvbI76Sy7/srOnbGWBS2aZuZ3lOfl4GT+z93PULhOatg1DUXA57xmFWn4T5SHwPJSiPdYAAQY8eKrzgluXN7SJxZ6mew9h7iGDWte6Wuflzhqg43P8wjEl5xGV3w== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0b7ac27-7681-4430-5ced-08d88fec2fd5 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:05.3219 (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: Zno2ZUOhqneqJm1xsCYLfB3OiOJTY1GNt94E5CgdM1S8zhwWY8npEPgIpzecAJviwXqW4KHGpFoNh8sT7Hn6Wqdx3uMLkGBuCX09HC3CvOg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.112; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 1327254b8e..a75c5b4aea 100644 --- a/block.c +++ b/block.c @@ -3485,11 +3485,6 @@ static BlockDriverState *bdrv_append_temp_snapshot(B= lockDriverState *bs, goto out; } =20 - /* 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); @@ -4954,10 +4949,8 @@ int bdrv_replace_node(BlockDriverState *from, BlockD= riverState *to, * * This function does not create any image files. * - * bdrv_append() takes ownership of a bs_new reference and unrefs it becau= se - * 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 k= eep 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) @@ -4967,20 +4960,14 @@ void bdrv_append(BlockDriverState *bs_new, BlockDri= verState *bs_top, bdrv_set_backing_hd(bs_new, bs_top, &local_err); if (local_err) { error_propagate(errp, local_err); - goto out; + return; } =20 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); } =20 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(BlockDriverSta= te *source, =20 bdrv_drained_begin(source); =20 - 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 =3D top->total_sectors; =20 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 =3D 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 =3D g_new0(MirrorBDSOpaque, 1); mirror_top_bs->opaque =3D bs_opaque; =20 - /* 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; } =20 - /* This removes our old bs and adds the new bs. This is an operation t= hat - * 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, =3D=3D, 1); g_assert_cmpint(base->in_flight, =3D=3D, 0); =20 - /* 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, =3D=3D, 0); g_assert_cmpint(overlay->in_flight, =3D=3D, 0); @@ -1495,6 +1494,7 @@ static void test_append_to_drained(void) g_assert_cmpint(overlay->quiesce_counter, =3D=3D, 0); g_assert_cmpint(overlay_s->drain_count, =3D=3D, 0); =20 + 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 d0e0f56ec3..246f503e8d 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); =20 + bdrv_unref(filter); blk_unref(root); } =20 @@ -202,6 +203,7 @@ static void test_should_update_child(void) bdrv_append(filter, bs, &error_abort); g_assert(target->backing->bs =3D=3D bs); =20 + bdrv_unref(filter); bdrv_unref(bs); blk_unref(root); } --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163714; cv=pass; d=zohomail.com; s=zohoarc; b=EAS4SV8/kjrwfIgid2cj5Fava9WtufhZWyopLxuVZaX7Yja4mVe3f+kw0g9dp5AIUfR2VznO4NXKatkWJbAk7b1jSrUQ8SLv8KQ1tiByoWQoXyDNdSv5kJHNS9ClaRZkzpTvZ9tYkuBUMj1DGeRsm5ePqhQjd9o2S54cHLGp7Rk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163714; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=n+GLRNLv9+2LbCaa6EtVC+okD72D2LSu7IJI6h3NAJY=; b=W0TR84+L/+8JISY5VLrMtF3us69CUMWx/w5p9+6IziDNvjPGQXbVBn6LDBD7HGYPINhQlRl7uXoXNxant6StGmoPCNzTjKDHVP4jJCZyGBCVl4026EAgqoJf0nDzQdSRFw5PHRrLeCJrmXGoaEC5X4DSsiArhU+EF/lsVE6GFAI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163714400377.96218356232043; Mon, 23 Nov 2020 12:35:14 -0800 (PST) Received: from localhost ([::1]:38704 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIYL-00086L-8D for importer@patchew.org; Mon, 23 Nov 2020 15:35:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khIDM-0004Y9-Eg; Mon, 23 Nov 2020 15:13:35 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khID9-0007NS-9v; Mon, 23 Nov 2020 15:13:28 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:06 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:06 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B5iwHGdVbmwtt5y3HObwHQCsegQFidc9O98LwLsv9zxHAsTFxCsnu4X+bVakkKl+A3y1VBRPFAnA1Hz/nvTA1pFzNz71Y2koceEjre1RtnWARjEb7a8CRgVEDTvmTRtHr0LTTrzLOm13gtZnknDUvzniwMctVsixOMMR8qKj2ajDjozFgEtY3ORe/4rUHiuoKt70xSPTSK55cGFfg1FbAAnYETpWPMrN08QaFxKwq+2r49+sY6dA49VpveR1dTUUqAeCZtjL+ySFIE1yQdF1fDVdskq4cRDg8VBcSaoHNEAfSRCHKQDgEDMPphyXXNYAimOHox6qswuBZfmaMGYvuA== 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=n+GLRNLv9+2LbCaa6EtVC+okD72D2LSu7IJI6h3NAJY=; b=B7zvkPim4GpQrtCYf1Z2ovy7UkFW1ZaJ2M0WsU2ot5LyVVwyCJl5RhOX9ylwOosrRXY1yzsf68tvzZQqAAhcyF6qs1LBL41cyyP02MUMRYP13Az/RJYjHE8d+epy6R3ORoeAQWaL6KdH31wN9QW1dfmeXsnG7V5OkFg9FuD52R2va50Hn1glXzoUUVzhO3XvJHNGTrudhd9yjvWSLQcFTGLA9UAbd1TDsUXK2B7KXNwZyfyVn9npQOKnX0mMNrIaZjLCuAUJmEPRYS4O8uJom4TGJJ8CEzg646C4Yy7sUTwoDlU7PfvQ/xa5l14FX64CnOun3AkJ8aA1hNYJ/0MPrA== 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=n+GLRNLv9+2LbCaa6EtVC+okD72D2LSu7IJI6h3NAJY=; b=NrY4eb/C4I1TxijP4Wzn6DczP6PqZ/Ja2IOJqBzdQt298HSCgxx12rfIWZGFeWuTrH99C9PjsrP3JdYn7xMYvenk5b70uzodJDWwZNl325AZyZ6i6yZMGYrFe9ouL5tYggE6GhAeD/7UYpYzNCJFoohqpxV5o7sfem5rsty7G+c= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 17/21] block: bdrv_append(): return status Date: Mon, 23 Nov 2020 23:12:29 +0300 Message-Id: <20201123201233.9534-20-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ef4c075e-3521-47dd-5252-08d88fec3058 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: H4bX0qeNzrVki1kgR3QoKcuTJCoPddVG9kYkZCOrpWX6bJZVlCrlTXYYRUeGN8iau9NdTp3BEz8MsZSwENVWqMaBl/pkJS3dvhGEiSXcsA9Yvpv4HfivCUpnRUWo1QZ1Ev3gqRxV4xba0Vslt1rwq8ktJxVspap0YiYweDQ1Flte7RfUQzwLbFy81WWlqkQOC/CIyaBrzqCmdzffky7C3vuhQ1/h80KWdsBw4bOUgu9Ur1F8YE5N8j46r15PSv6IAyXT29oNVolxMsxBd406SLaoJRSXbI1TrjWt+7pLANnlhNBVbItlick+bzInESnSeWlCf0bgJeMerAIEvGOYeg== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: iqSvbGjpdd/YI4SB7ChEViUhi7gPOmuZWDZ+xCk7yUM/ov5b8S8a1B1hKx0emqn7fE++8I0uM1daxgDujAfTi9XNh+YgFkbJBU27jBOt9GCVan/hHOa6QCp7vzF4nzlGqpTGyzD6kcdVF+aI/ZJawqjilrPoZJHVXB351xtqs/jp+ha7CYid3UYZydQUR9K31hbhi6V2lEKKi93CwcBoqHFsXGLua/pvIlBTZksi/s6rb4ZGvykzvJUInqQKT/8tUVhha0m424/ZnDm9WlMnrOQpXgLkZB6lKqGnPS7RzHxQgTPIMK4DmonhX0QQcHO3whYtByaBrVCOJsHV3joBuePlt9vsnmhkWZoLuIDYLZGqdHqfUKJEf6CoUjjBzSnCu7oGQpojmfOUtxPyGlFAPmZEuCYgfehk0+i0L3wAasosHg7bX8FRdOlE/Vkip+Z39sXdnTO9E/naQlFc6L61kkWZrJl8p1dfj8LMb/0mdV7f5rA4ynY070TCLq+EmTeYokQBu42eU4edyrsehD2oZa/YXydBKsrOQbBwQIE1i4jkTQm71JVuEqakQGbTLFdHVgkxBrVGNheoHeAUha1aKZPb72sYQnagNYEiv3TJxm9ByobBiNXJEPxWizxApy49SiRjTTCcoO/gfKvhzAQOZb6KD+dxiZ1iEQbAguwFOf5onO6UlcJgWNCVp1LqqbiidXNi7AlEjFEF3IYqShE9toElmXj5Z3vyf0i245fjL7jLB5O9atWjl19sUdMuv4aLl1I+EeNoJr93Z1yjCo/z8a3N2GmVp+g/y83i4j8Dvqyiq7q+owdDEy0TvOHGsZAgfMGzVgfbnCFq9Vf63FsnfuZTbwpkJMqA/2at03yrmRJR+toA9vu8AyxFUy2mBsilkDf3yPjlVqiczqyuaS5HqQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef4c075e-3521-47dd-5252-08d88fec3058 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:06.2379 (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: E93vE1P/+xp7bc5lw2JriaPDZ4fZXaiJ/wR8V1W1Nm2X07TX51YbYKWgPhSnJM00AinZz0m/2Y3lLZhBoaFE2n85xxyQAB133RBe3Tm3+wU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Return int status to avoid extra error propagation schemes. Signed-off-by: Vladimir Sementsov-Ogievskiy --- 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 ab812e14d8..6c1efce0c3 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); =20 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); int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp); =20 diff --git a/block.c b/block.c index a75c5b4aea..f2e714a81d 100644 --- a/block.c +++ b/block.c @@ -3443,7 +3443,6 @@ static BlockDriverState *bdrv_append_temp_snapshot(Bl= ockDriverState *bs, int64_t total_size; QemuOpts *opts =3D NULL; BlockDriverState *bs_snapshot =3D NULL; - Error *local_err =3D NULL; int ret; =20 /* if snapshot, we create a temporary backing file and open it @@ -3485,9 +3484,8 @@ static BlockDriverState *bdrv_append_temp_snapshot(Bl= ockDriverState *bs, goto out; } =20 - bdrv_append(bs_snapshot, bs, &local_err); - if (local_err) { - error_propagate(errp, local_err); + ret =3D bdrv_append(bs_snapshot, bs, errp); + if (ret < 0) { bs_snapshot =3D NULL; goto out; } @@ -4952,22 +4950,25 @@ int bdrv_replace_node(BlockDriverState *from, Block= DriverState *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 =3D NULL; =20 bdrv_set_backing_hd(bs_new, bs_top, &local_err); if (local_err) { error_propagate(errp, local_err); - return; + return -EPERM; } =20 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; } =20 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 =3D NULL; BlockDriverState *filtered_base; - Error *local_err =3D 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, BlockDriverStat= e *bs, =20 commit_top_bs->total_sectors =3D top->total_sectors; =20 - bdrv_append(commit_top_bs, top, &local_err); + ret =3D 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 =3D NULL; - error_propagate(errp, local_err); goto fail; } =20 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 =3D NULL; int ret; =20 if (granularity =3D=3D 0) { @@ -1606,12 +1605,11 @@ static BlockJob *mirror_start_job( mirror_top_bs->opaque =3D bs_opaque; =20 bdrv_drained_begin(bs); - bdrv_append(mirror_top_bs, bs, &local_err); + ret =3D bdrv_append(mirror_top_bs, bs, errp); bdrv_drained_end(bs); =20 - if (local_err) { + if (ret < 0) { bdrv_unref(mirror_top_bs); - error_propagate(errp, local_err); return NULL; } =20 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 =3D 0; QDict *options =3D NULL; Error *local_err =3D NULL; @@ -1587,9 +1588,8 @@ static void external_snapshot_prepare(BlkActionState = *common, goto out; } =20 - bdrv_append(state->new_bs, state->old_bs, &local_err); - if (local_err) { - error_propagate(errp, local_err); + ret =3D bdrv_append(state->new_bs, state->old_bs, errp); + if (ret < 0) { goto out; } state->overlay_appended =3D true; diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c index 246f503e8d..93a5941a9b 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 ch= ar *name) */ static void test_update_perm_tree(void) { - Error *local_err =3D NULL; + int ret; =20 BlockBackend *root =3D 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_abo= rt); =20 - bdrv_append(filter, bs, &local_err); - error_free_or_abort(&local_err); + ret =3D bdrv_append(filter, bs, NULL); + g_assert_cmpint(ret, <, 0); =20 bdrv_unref(filter); blk_unref(root); --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606163901; cv=pass; d=zohomail.com; s=zohoarc; b=cLQfjI24qkv0KTAw41RbLgOUkU87zVsNVjx5Wnp2iUM/xluQMFVE3QtecHjoJywOx/kwj22k5UG/qiLN/pGSsV8YQ2lUTbAOuLkobdV88lcNK40LTsY6HF/ZdIVUmzMfrLAj8Tp+ruoEUBlaBfV3cqHwXULuWJDEI8wzYkWPcj0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606163901; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vVmjpa7LTHgNOBNitCpJ9E5Q/qPVoferWTy/gxqgDCA=; b=iKdrCJAWY6dwtMj74iDC6iIMtiEwaHPsmi0Bz782z/a7VMj56gyABekS/GQznWXmgTmcrhPiDALKI0NdCmrHCMAXB6yghesZab2ZHX3ikeQCLjebvbG22eZKiD/6kJQpdyCT1rLRsnXfmPsyIxH/g+GEY9IRXX7ZxuDKOL3HdJA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606163901628925.7812633128719; Mon, 23 Nov 2020 12:38:21 -0800 (PST) Received: from localhost ([::1]:45036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIbM-0002R7-Dt for importer@patchew.org; Mon, 23 Nov 2020 15:38:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khIDM-0004YA-Et; Mon, 23 Nov 2020 15:13:35 -0500 Received: from mail-am6eur05on2111.outbound.protection.outlook.com ([40.107.22.111]:23809 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 1khID9-0007Ry-AT; Mon, 23 Nov 2020 15:13:29 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:07 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:07 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=etKECTe2VHHG9CoOCddB1iixtzqg0wtQAfy3ZJdXc5NovAUuxkMfIXY8G9zbIyLmXLIrsSYcal4Xb9TTI5lLXdyWMaawkQYKobCJHbjYxEafk0uQpIevZqcaulqJeBGM3jf6yQ0OGlc1qOnUd+hkuBUALGR74vZTbBh+JRHY0nmiwpKdjs/DXBFHbIDGF7mL4eC1bhqaiurGl8QD6BRRCFIbS/DAlJ/wjkKn+i8OQ05m/m8redajwlPbPBGNwxRrnltvEntdj5v/B2HzqmE0cyUQ1gM+MxCeeHhoyy4UlbMUc9+/TynSztQf1bweDqNYxSI4XIzpr/cUtVMk2HtNKA== 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=vVmjpa7LTHgNOBNitCpJ9E5Q/qPVoferWTy/gxqgDCA=; b=RUSZZu0I7NWpKpFuC7MaXwdbslTmd2rpc7Yc9jyHA7lV0vjnS4YmNh/c/8dqUJIiw51+YMgK5OdQuaaxXV+TrkegVJ0n8BPNnwYgoQzl5zxnB9P/QIZ47s2e/YITwH08lt6VkcYufkV/o1hhlu/cHgWPb/rn4gHTgypTPLaNUuS27fTAKwkLbW+gyUThJzQJ0l6ASArR7tlJYTtdaTCsSQ3qHQmgKta3QI7ciAEkWir7xL4GsBUqWmapwi3bWXXZNiy+ZRTYMR2pqqkmCmge+tPLr7+rZQ/qfkrUFEM2aTcdMToGXWwsBjHqXkGreiVdNwth/31sdDlinF7vPSc97A== 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=vVmjpa7LTHgNOBNitCpJ9E5Q/qPVoferWTy/gxqgDCA=; b=n33Yc08DYvXmRUO2VnepPerL+n4cj3eBXA3nGtHV4qZzU9xXRQQjMK6QO05cZRmEhynyRgrCgO4+Y9pyweeH9+b+un2dLEek3qHWxzp/8n98wiSznX+zG3sHtrb26iJN22B4iiYIIAYxhl0v4w6kaK6Aoun+vikcSMzFfqTYgWA= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 18/21] block: adapt bdrv_append() for inserting filters Date: Mon, 23 Nov 2020 23:12:30 +0300 Message-Id: <20201123201233.9534-21-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a25386c2-aac5-4641-9690-08d88fec30f3 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mEjISHwFEl5eaAiYuD0k3ZQmoYETrxKemn4Z/aV4jBD1Qi6fJ8UaO3cZLTGpJX+p0+JTqOobsmA8l8iUnvyjSVecZ+dkPGDCD3M83d1HRgfwvT/wDbphwoPjRy4bmgxKizbIrDU6O7+UnY0pBsEB8EK3rvjtbZcZUEV9RRA7x+ve+3pXMSQ8yiGSPCynfPhC1nvUsZx2LI9mGcXfFZxl/Nj++5QKykGVVZSIb+rxQLIK4qpIerWpmV2K+4EZA3VxwR/lvk1gp44xyS1+6cm7sDSKTC64UebgClmSN2l4cy4q/3zB0IR/UUzJ1Ofb1CNUwndNBidc4/1fsDRBe0z1Ng== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: s5O1/Hmsz4bL2uJb53CA252g6tE4qUjK6Q92+FLzIQecVJRlWW+sr9xW3FK805jk/XQx9ifm9V0pKqSHfXMA+OGpgbwZcnqDSWxtSsspZ0kMdq7wcukOd0cau4SWLfbm3Ku8cyuCqDid6gA7bBsM63uzllt7E8tXKs8nyKkGMJyou3gNbqf9B24RpSYkJrbG/9LSenZOtEZhhjZbbRmIKCv8nprpJTFRzITlrn14ee51hbyBdHT7UE89MpTsBW0ckv+yhLAQRX2iLXOXROG3GM5iDFYFnjpgSZT3VRTFU5pw8vQcaXGy7CWd0xKCtNZovj9avx8tzmqvgxIAPTBAb63DooQjmoFDD803eJWLNGY+ZdWWGo+LhhSDCnS7WziofZ3Gs8wnfMZsROUrOQ05cw3PIVDdtVf4Hscj6sRq53QHTfKED0vt0rJu+SPQYwElybqjTEGaTVEqJSNOu0gTEXJbiIQFra57yBrJvu+bPB3LNaqWHVrUGz3WL1yARBtt23noRtvLbrD5FB9FTS0lZLh3rx0EL42GbJhHWz4qInBlKhO0RO4biOLaC/bbKN5lP6XKV+SDLYhCp5oS0+/KisDxTKfgcE7IpPph/qtmFJlOobEJJtIRQml618zeFLtjenp+u1EmeinfFrAMIEbtgAj8BYg8DzbpYcUw/fKdTWvEu/uLF5LXWB6bcxBRdtfLWFX1ZNSYoFNT8/d3COgoYHYThWUm0ThoXt0m9zJ8z/y2LIx5haJOpH5RewAz6HxqRDlHERJeckjYLtgoQMwkOKIsgGKN6HhKaLm+Xs9zJX+KqFIGiqB7b/ShEgBkmHnlgiM4t6MwB5WpUBM53mwWBvC1gppjgTxnLP1uLjMcSlf80KOyrjSX2rw44NAKEw3z7nr6T994Ct0eQTEti02/lA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a25386c2-aac5-4641-9690-08d88fec30f3 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:07.1210 (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: +aEGPxspWdb/7Y7TRyF6df99GF8SJiyIkN0R1HkzJzcXfmorqE9w6iuCrQn7qR2VNqseQLb4lUv1PjGoeln5E5lF4RtwXax492DtP2FbqfI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.111; 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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block.c | 50 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/block.c b/block.c index f2e714a81d..cf7b859a81 100644 --- a/block.c +++ b/block.c @@ -4953,22 +4953,50 @@ int bdrv_replace_node(BlockDriverState *from, Block= DriverState *to, int bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, Error **errp) { - Error *local_err =3D NULL; + int ret; + GSList *tran =3D NULL; + AioContext *bs_new_ctx =3D bdrv_get_aio_context(bs_new); + AioContext *bs_top_ctx =3D bdrv_get_aio_context(bs_top); =20 - bdrv_set_backing_hd(bs_new, bs_top, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return -EPERM; + assert(!bs_new->backing); + + if (bs_new_ctx !=3D bs_top_ctx) { + ret =3D bdrv_try_set_aio_context(bs_new, bs_top_ctx, NULL); + if (ret < 0) { + ret =3D bdrv_try_set_aio_context(bs_top, bs_new_ctx, errp); + } + if (ret < 0) { + return ret; + } } =20 - 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; + bs_new->backing =3D bdrv_attach_child_noperm(bs_new, bs_top, "backing", + bdrv_backing_role(bs_new), + &tran, errp); + if (!bs_new->backing) { + ret =3D -EINVAL; + goto out; } =20 - return 0; + ret =3D bdrv_replace_node_noperm(bs_top, bs_new, true, &tran, errp); + if (ret < 0) { + goto out; + } + + ret =3D bdrv_refresh_perms(bs_new, errp); +out: + tran_finalize(tran, ret); + if (ret < 0) { + bs_new->backing =3D NULL; + if (bs_new_ctx !=3D bdrv_get_aio_context(bs_new)) { + bdrv_try_set_aio_context(bs_new, bs_new_ctx, &error_abort); + } + if (bs_top_ctx !=3D bdrv_get_aio_context(bs_top)) { + bdrv_try_set_aio_context(bs_top, bs_top_ctx, &error_abort); + } + } + + return ret; } =20 static void bdrv_delete(BlockDriverState *bs) --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606164042; cv=pass; d=zohomail.com; s=zohoarc; b=Ga9h802smeIyL/H2fgFuFbIU2L6bJBc+1hI7B4rkDZnYwfstvRu8nKW+j9JfUYWu5U5Kovg/sRT33zT1u9pwCf3vw27sf8LAGXlCyX1HIrTw9hx4VhyvQCxwG5zljvaTxZsAQzhiXJwzK7LSHlN53NVi25akcdxl/nvwlAEw+TY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606164042; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uJfNW9YBp2eq73ntIIjer5Cvba3H/QdCROClbwd0D48=; b=KHLP66bV2cECQGbUr+h39iVhOoDFkKixEkwpHLRTnF55KYOHg8/K8QMhU41hhF8bXnxpYCiJkH7VEWno9nnr0oTWddCdAFqACiNMBgoLhZ2DUgTPJHrnyoxXAvK7zNQ4C389CPoCIsjaxZzf+3FLeVqSNzjlXwbRhbNuVI1JOrQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 160616404261028.16931156729504; Mon, 23 Nov 2020 12:40:42 -0800 (PST) Received: from localhost ([::1]:48620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIdd-0003yU-B1 for importer@patchew.org; Mon, 23 Nov 2020 15:40:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khIDM-0004YB-GS; Mon, 23 Nov 2020 15:13:36 -0500 Received: from mail-am6eur05on2112.outbound.protection.outlook.com ([40.107.22.112]:43328 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 1khIDA-0007SQ-6q; Mon, 23 Nov 2020 15:13:32 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:08 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:08 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gsMWyOTza8B2VxvHOrvGb6n4VpSgJNz0/6Q6RVbvdHCzLbUTU96KEfs+/phzLszXQtFtqUYqzXdRl5zwdcXseeWoAcSvwVvTTmpzEYuZ+jwGs7yLVkq8R4l9vqWNzh7tXNahSc5zbPxkepRaEbcAMidBtnZEPfZNj3HNlZ07X4jmnhzFkpCaW01iPlNpM5yo6i/o+ZxlpVSv+0bfh/vRG0L7kjw76WTQkZYQ58N+6wxxkQJLtDhoQlAHWkhZ+vgVFbgNGr+/VGL4tltpCYUsvEE9PVK+UaBZW4fkq3O4cilLAfaNrJikv0jwtT7GGnm7/+SUZCYCCO81mkNGOxlUgA== 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=uJfNW9YBp2eq73ntIIjer5Cvba3H/QdCROClbwd0D48=; b=Onu9Zfwgzqmwf0GxRZLLeeOW8oxHkaMxW7p35AWcHOZs/7ZNPfej97aXEBINTRYdRQJxYlA+V0cQRufSs1ySqey4hTXU1IkBDybr3sW36khsyw6NgZghXgTJWTulMdrxdfIy6TQHiHuRJcWALhw16r9CrxZRByipX5ZY4D0AWp4xy4771q/McdvFC6DXJEk2S4qdeouQqq9NSVIz+lD2PRWWZGuvd2uKFJ1km/l+4seOCyRR+3L84OTpS9Q5hpE9HAernhpTZyVnXz4VO9x1uHXV1c86MyzZQmVg5pzp1KYVwD/Izan/d6xo1GIm7hcRJMjXusqoLxl0CyouQZ9nCg== 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=uJfNW9YBp2eq73ntIIjer5Cvba3H/QdCROClbwd0D48=; b=mmHW7R+3T/oAwtVyBVMQUD/asas7kx9ggyV+GwrOnPgiuo+p3d3x7rFPPBjk3UAu2MhLkAFzPEvGFwfA6Ezhl5izhAgNhGznN3r82x4T9hnLB/Wxw3Xc9S1kZ4kc44rPQFoaygoJPhwHpD19ESyGCAmt7z88aug6TP8VXY0rmbA= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 19/21] block: add bdrv_remove_backing transaction action Date: Mon, 23 Nov 2020 23:12:31 +0300 Message-Id: <20201123201233.9534-22-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 85f1ba53-9be4-4f40-544b-08d88fec3169 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: h/lHvB5U0Wqc4zIM+7S00HWcPA0xeNG8j7UAXpJiW4NWC7G9wuffajc/GP/LyJhOywM6F1kl7jj9PVjgP+jG/wXSvax/TDoXQAoJHf7wAEJcjjR21H7yNEWV/9GGKBU6HxcgFycKgGQkLURqJAE4YRlC9qV3vG2XO7ckpLVmiqZmg0PSr22qjy8nwkYVegSvuMGl0gGjFSlN/VmyOvMcPHqYYVCO4GJYDO3DmE4J9VJACrcsUxcS0I4gKpEIOSJxx8vPSZbKX8u9jShbYQnDKxmyuoP/ZieLPW0IQpRdb41uUG68WpvkVVjkwRGpH6+fNqQI2mfHDm5U/sGAh2iSqg== 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)(346002)(136003)(39830400003)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 6pPxFpQ8uug/iA8vfK6gMer+VlrBJWEU+p8FX1QmQVQvO26DPsM6Eyo2qBpYC0KMKtolDv62LInUU1vlCn0HtpRamX6cwYjcTyfRIckQ3jzZ+q8gLmLWTZDqL/kMsgY99M3+NCMLjzOQsASPTChBYX9EdSzB1Uf5cEXZY2E066Y8BKYOxfB1i1JpXxQiEsNXv8xXQuLcNORFUl33Cr2DAbMlkxVGIgVb8I406Zg2ys1lyj6mf4JQTbRMS9WkS/QTZD243eBwC/zfUDCNHoYIsbJ8m7fcACrs5dFPJkAjG3jTqqf/w0DolKub7KUIeArbocjAGfwsBTwanZv3k0qJ0e/gSM51VnHp760sQrk9D+WXbkqE+j2vH3CX2QYwW9f0oTD4q3tkQXK0BOXVwneW7m9eztkfkLXwaHivZFXZCnZVMIEtQ4O3UU1beZ9FZFB6w7Iomzxe31U9EsppLOPxpLjIVLnB+hosyopxcj7qHUzL1r7fE//zNQBSpSHaC52LQKOkC4RyZpGpU06xpL8TneMJcO25dRJACnp4ZX6AY9xXdwg4gP1W7R+bj1Kh6cZvReMv7GBjN2vmdG1Vmrbvv/HZdQ+iK4xeB2K2rtHu6koXz9D+E+pWFvY+iref7Ww+VVzsdh57y2/f4fMfru+VfOaa3iu7ADa/IkOcFX7oz6gkVU3vsC+ylIPBYzyVD0pYDGOPUz718/JdNyc3PhmD3v2F6bEvY4Ji7E6HpBq9MC/kjivnSWM+fa6bKi1C+7Pati+dObdOo5wCmKpfvxVTUoqnwlR3nc5LhqkaNT3LXOxL48kJd5j5n6mhaWXMYcBvKW+mGvVNNE53Wvc/FAwGBg3ZmAL5wGp7/bMiUK1WUdt5suQOqtXp1G+sJ1ma/N+OlDpn/HOGLmC32RMOsErWcg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85f1ba53-9be4-4f40-544b-08d88fec3169 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:08.0798 (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: R38QfC+U1LGanvzCey/qPMmuERly7w6Dkozwp4MI0eqeVzX5aBKgfQ6dnhUzmUr5vE6kk652F1q/wG+qhASDCnEqJj1QhTNeLr84/lyaeDk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.112; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 cf7b859a81..6ea926e2c1 100644 --- a/block.c +++ b/block.c @@ -2974,12 +2974,19 @@ BdrvChild *bdrv_attach_child(BlockDriverState *pare= nt_bs, return child; } =20 +static void bdrv_child_free(void *opaque) +{ + BdrvChild *c =3D 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); } =20 typedef struct BdrvAttachChildNopermState { @@ -4852,6 +4859,37 @@ static bool should_update_child(BdrvChild *c, BlockD= riverState *to) return ret; } =20 +/* this doesn't restore original child bs, only the child itself */ +static void bdrv_remove_backing_abort(void *opaque) +{ + BdrvChild *c =3D opaque; + BlockDriverState *parent_bs =3D c->opaque; + + QLIST_INSERT_HEAD(&parent_bs->children, c, next); + parent_bs->backing =3D c; +} + +static BdrvActionDrv bdrv_remove_backing_drv =3D { + .abort =3D bdrv_remove_backing_abort, + .commit =3D 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 =3D NULL; +} + static int bdrv_replace_node_noperm(BlockDriverState *from, BlockDriverState *to, bool auto_skip, GSList **tran, Error *= *errp) --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606164541; cv=pass; d=zohomail.com; s=zohoarc; b=YA2z7AZum0dMmPYMpWqi/LyZ662dpUIH4RAW/XNH8oYm9/2S1bGwMgv4LCFWUSrJ7viF52fUiI1YvuTsyCkYJofwFpAJ3DYLp+Gcf0VdxQy1znIGNoUrbSDeCW1Nd1LNx4kOjf16EppobwoVVG3cnaCHGfo3RMo1c+o/R/z2LkA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606164541; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Nh6I3AlKg+nFDjFVbPn6E0OVeZQHbZ/WFz3iprfrg+Q=; b=ff+4TB/fdJhZnoyWYRVOvmdVwMwKVc5exobzZuq0I4GqOlxXU/Bcpj04ElPVuO0qDylM1G6q03SE4AI72mRIXo24Sqs0wszSoqDF9DkZGzMEKY7428eH4KOeGZ/udCLxGUz9Jq12TojodjyGS4IydmaLloH8fEHVI2ODBwT3+sE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1606164541015617.8685376577447; Mon, 23 Nov 2020 12:49:01 -0800 (PST) Received: from localhost ([::1]:38834 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIlf-0003jA-S4 for importer@patchew.org; Mon, 23 Nov 2020 15:48:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khIDU-0004c1-BD; Mon, 23 Nov 2020 15:13:40 -0500 Received: from mail-am6eur05on2106.outbound.protection.outlook.com ([40.107.22.106]:21121 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 1khIDQ-0007NS-EH; Mon, 23 Nov 2020 15:13:38 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:08 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:08 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IxKljSk5wMhejXUAD8gmTApzp5VHQprqgABmAFiRkJ2REEZD5RhF05/drx87iqZO3xN/87qt+KmqJBY9sqx7ycumSu5Ab3BhrBTVyy+GNal/X1YDfSQpxHtw+EbfIwFQjkbx+i7eFe1FQKbeh8kple02Xb4XsuD35Bzh4r0g2IBGJN75ronuW9KMlDeU3Jitk9lqWsy7K1ADRtvc7o+gcN15FXHCKH4L9Afdt9U0fhpTPj5vxAfpr2xEotmLGf/ikVs9PsQT0S2Qn+zzorslldr4Tp6D1Gf1KjOb3f/WYuMMRr5JVAjXajhXMgWQXurNa8qIbqCZhJSo+8tpE8EboQ== 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=Nh6I3AlKg+nFDjFVbPn6E0OVeZQHbZ/WFz3iprfrg+Q=; b=gk8E7Y4dUDf60hgsOP4sW5D96po3uTEz0IpQGCu0KHtvtOdF5ppf4fqTjc2N6H0+gQdarsVcCNq+r12NS0yYAxye0USuoM9mldshqFa4MaarOSncQSRgj8IVeytESLFqb9LCyyZO2Tkm7UM6B4qkYKBxpoQ5stV9NvQ0oAm7BB5ne9LHntt5LIs5LlduE99qUXi+1C9i/+T1H96uliE/fCXJiD5ZulLYjQzuOoauV51Tq3/QyWP5qgyg3/wiYVL2vEfBKaTalrhzqplPF4+0kr6x4zoNal2b8Q6bZWpiLyhrqq7Kj7tETlWIAa0TJ2/f88+UmpUBlIRRAqwtp0hkYg== 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=Nh6I3AlKg+nFDjFVbPn6E0OVeZQHbZ/WFz3iprfrg+Q=; b=dkwZ7ndKbGHsf1fhV7r0gwI8HRrzg/5UiNCRr9FrBSSzZUJ2rfePKsQkcOQS6J7FZR1N+lk0SXV/pz2im2zAi6dYWq912Z9hgzt0JFo+SykHl0Ak1e7HpIFkS/+1dyEplRb2NMhb8s2BdjTZcthTfEA5mulkZ26OPeo2dHcxxy4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 20/21] block: introduce bdrv_drop_filter() Date: Mon, 23 Nov 2020 23:12:32 +0300 Message-Id: <20201123201233.9534-23-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eff97a0d-cb62-4190-19fb-08d88fec3201 X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OkEcCqOQNrzjmunepqKYE3BB5jIYh0MbFxGX4bcZWIXYFWKNoQiNJvah/W4//kxTDHatGOdxPTzBSU2HK94PbZqFpI7KpYp0dhKc4oVrj85HpyJ4CX00L+H+USMzF1va7hNejJesFU0EbZLey/VD6zTFjSg890T9/XcIDIhUYbBh3Cy578wpVFeR6ssHJc6dOTqDcYIlS5L0ZUG0Db7lKd5B5q6Lg0BfTgkNmFNjHBLrTzlL+N2ReQuocd2yVVQdymzbvZ8cKCoHR89SfX521LuYUeCk8WyAXOnFXVFW95HwSNJVLcW1zPRSooY+MUobwyyosegNbfRBiB500ZYfPQ== 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)(346002)(136003)(39840400004)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: qddXJh5HLLcwhejETn1XKSAjdDDPHR2a/V2cm1/xh4NlnjESkcBf7RVhH4vkVGESl0fnCVNun9pEUl5lBQyefhLaycb/+XeO+uVLIJ2H0WCMv+kEB+RN3iLZsf51Qa3pVh6AmEcJcmBIgDbPvYNr0O2Aa8RfDxQIsAjupmrAMTaAuAEw6u4mGqg+o2z7osOJ5AySeUDyNtTph5uE/a0YPRn7V6JcE738Pq+64ouV9zlWdTbMd9F3RXsxR38ujrIw7oRksfMCahYZumbVgD/xduupfTZ7M+gUAyvADoVhKsRy3UMWqFKBnlG6ARdfMV6Ps7fhv2MzUqfSiohcFtARrZF/m3TrqFE4k04t3dJl9irH37lU2Pk6K/zS8/qSr03KVh4qEn66sqkvjeaXmdmg2QgF0kMJg9SLQDpB3BI02ZvKW7c5PzWNyes9sYQRSnL4kOwjWQdTA6BmvYB2r8bQLu/o5sAKnFhOQ0UO0lNel3OQP9X5a8hgKzMS6dJqAQoy6vWKg0GtMuGeKzU+rWf264jupMDi8R6qQfI3/PXvMdjDLelw8P/ECFa7HAx269O14iqEL4Irc4bBe2itL8tOgJKBXuShlCrHIfm76yD1jctZuWO2QK3In2bKJi3MKgImJQP7skkH0zZsRfbCHlh6BE3SVPVhC6/wfKlv1QU6kbv6xV0ZI4ECQzVyk59swxLVXYA/zozL3f6QtTAy8kEf/6M1DaSOG7+ic/JgV1WgLf/jHC8Opm7Xi5cOcmrP2z29ZRaKRCwSjJntdaQdXyuBJvfyMQxTnOfnvi1NGEo7RqVjhaLvy/pU/IOHoSkFjJa7GvkYqCKSfyz2p59Hmwx94FQSWkpEEGn+Gmd0Z98FV2DoqEuZJdcrFPgOPEV8Viy99GkW9NoGITJs7m+ClVIA+g== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: eff97a0d-cb62-4190-19fb-08d88fec3201 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:08.9291 (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: TacTCwM2lMqjc1A07a5O+f03tWtF9KjMg0LnkqpyZf6AxJKou1C1Eiq4XwtqOr88lfxDQMUZkrQqzZ41Gnezxw8jA0htvMoYYbMTC4Y4/vo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.106; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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 | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index 6c1efce0c3..981a07e29d 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -348,6 +348,7 @@ int bdrv_append(BlockDriverState *bs_new, BlockDriverSt= ate *bs_top, Error **errp); int bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp); +int bdrv_drop_filter(BlockDriverState *bs, Error **errp); =20 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 6ea926e2c1..ee0143aff2 100644 --- a/block.c +++ b/block.c @@ -4923,15 +4923,30 @@ static int bdrv_replace_node_noperm(BlockDriverStat= e *from, * * With auto_skip=3Dfalse 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 =3D -EPERM; GSList *tran =3D NULL; g_autoptr(GHashTable) found =3D NULL; g_autoptr(GSList) refresh_list =3D NULL; + BlockDriverState *to_cow_parent; + + if (detach_subchain) { + assert(bdrv_chain_contains(from, to)); + for (to_cow_parent =3D from; + bdrv_filter_or_cow_bs(to_cow_parent) !=3D to; + to_cow_parent =3D bdrv_filter_or_cow_bs(to_cow_parent)) + { + ; + } + } =20 /* Make sure that @from doesn't go away until we have successfully att= ached * all of its parents to @to. */ @@ -4952,6 +4967,10 @@ static int bdrv_replace_node_common(BlockDriverState= *from, goto out; } =20 + if (detach_subchain) { + bdrv_remove_backing(to_cow_parent, &tran); + } + found =3D g_hash_table_new(NULL, NULL); =20 refresh_list =3D bdrv_topological_dfs(refresh_list, found, to); @@ -4971,7 +4990,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, t= rue, + errp); } =20 /* @@ -5303,7 +5328,11 @@ int bdrv_drop_intermediate(BlockDriverState *top, Bl= ockDriverState *base, updated_children =3D g_slist_prepend(updated_children, c); } =20 - bdrv_replace_node_common(top, base, false, &local_err); + /* + * It seems correct to pass detach_subchain=3Dtrue here, but it trigge= rs one + * more yet not fixed bug + */ + bdrv_replace_node_common(top, base, false, false, &local_err); if (local_err) { error_report_err(local_err); goto exit; --=20 2.21.3 From nobody Fri May 3 19:42:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1606164238; cv=pass; d=zohomail.com; s=zohoarc; b=W7xX1BIrjErEO/elAfNQL27pC2FcTp78bfGnnXjKh6vMmLkkpY1Wqzd3DTiJ2YbReKFvTlFaiORIE+bjIMasikuqFiR4Xu63QqJpy1zAPpa9FYfzP+CrxLl4tpdkJaNbqh9Yv3iWvL4g2njgtaOAwirTisZ2hNuz1GPtLn/y7cQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606164238; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OheHyaMRfMYYcR/ah1/njMb6IkLTse8lLLrna9dz2r8=; b=MlkrEbHeZO9wrs1rc4gZ+aDOsvbmPnDr/a1SlEACCLxIXrHURJLky6WQWxFOoGFyP2pzkoQdElziuWjaZ1mWrx7pEbfoduUF5gPbOtuf4NGkf2DpTES3Pn9chl+siECAArzW9EJZAnouQLfkiMcAKTsiiyEuCAWAMQF8v8aHQJs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16061642388592.804085709021365; Mon, 23 Nov 2020 12:43:58 -0800 (PST) Received: from localhost ([::1]:55148 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1khIgm-0006u9-KP for importer@patchew.org; Mon, 23 Nov 2020 15:43:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1khIDU-0004c4-M5; Mon, 23 Nov 2020 15:13:40 -0500 Received: from mail-am6eur05on2111.outbound.protection.outlook.com ([40.107.22.111]:23809 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 1khIDQ-0007Ry-Ez; Mon, 23 Nov 2020 15:13:40 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4690.eurprd08.prod.outlook.com (2603:10a6:20b:cd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 20:13:09 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3589.030; Mon, 23 Nov 2020 20:13:09 +0000 Received: from kvm.sw.ru (185.215.60.115) by AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.21 via Frontend Transport; Mon, 23 Nov 2020 20:13:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QDc+hjIpeivqG0+lNEe0YEeTdfFCL0aDE7DDT5/N/R/g4ecwMHorXb7csUIC8Nnq4+40Jxdn4iTc5uuzZOuBmy8WyakFUlXq8ETW1UvREzjlUxpP8Y+HogI6gtaTHe8erShP6u82ghAmvooCjh5i+POYwINoY/wbTMlsTmhzfcevnxkjXxx4lks0KZer8z8g4JEiF/hQy0iOxgCs8aXhp/nbBM6Qij7erOlEcMhgORUOeJ4gGq9CMy2c46dagsqZozV1BMlvJvLcW8ghGwHurT9vGjYk7xQpPex+N0qxyfjzFm+JviJf6Xw9QFOqFgA+UYyOARX6VWFhxd6DmgJnfw== 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=I4fTJsaQaS6KivLhQ72bnuDkW+HAiqEvEE+qmQcCfNZjJXJtqMT7cwsK5g/LaSXhRmedA5JkXlSuNV0YNx2dG2rDmfGsNWWiEYYH1h+EGxNUSqqaueLDRI4N4sRCYmCfqGB2nuHnKP9gz72J1RdXDySMJvXJuCgMJ60YhTH2+u4WNLepBBvBE/Q1fEKkJ6GYdXyTVoQwZOuapU053HsM2tURYV9/AueIg4qUtTyJDMWHerkOHXEbhGxA1eCzqD1t+yzG1u17wEjafzmuaXQd4leM6LSJ4q0llDbB9W4lPeD22AHGCY4kpKSoJD+leKFV/GD/QY03qzHAWZ7RvSsYKQ== 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=Xu+HE3mTyG85v2iF0DVTO3rxtF5hfxcPMqQfPB2FK+ZCmuHkiz+6IOAGrfnGAvH7NRX/+YC58mR5MYrge4URt5HPe/o7ulUtgTJeEmGK0YrQzRdqa5FGOYT8xKQzHa7HYL/bTEpEUhJITWl+uzVzRSHed9FXwNx2WJCZ56sznmo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; 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 21/21] block/backup-top: drop .active Date: Mon, 23 Nov 2020 23:12:33 +0300 Message-Id: <20201123201233.9534-24-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201123201233.9534-1-vsementsov@virtuozzo.com> References: <20201123201233.9534-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.115] X-ClientProxiedBy: AM0PR10CA0117.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:e6::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b0e73fc9-79e5-4a6e-0be9-08d88fec327f X-MS-TrafficTypeDiagnostic: AM6PR08MB4690: 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: UHjGHsptBd3SnoTKlfnp2NBGOFkQGULwTbwg2gFxiQxv+w+PEg9Z2+c+HKpB3l8XTpehFbSLlG7zH3SWdXum0acdTj6EyzJrVVb+5QqA/GoukVCHKR6Il3US2GGAQbjrQNvhvpDwTREung0Uv/ebZEJ5lSFGaOFFj3rMPupWzCbbdjKphZZfz6w3KYBw5HrLPn0UywdMc31yPJeWn5mELoaa7whh8DaG4kmiTsCr2hYAcs64ya/+242MpR9guTHe4NtetHSKKqfGbRFIcPqVJLGh1xHixJRlwA90wTj9Z5/+f18vcvsb/gF8bDgLkq2G7hkAqHYB6qPti8SQtLX1AG2+DKLR9PybOHx8uJJpJBuLn7/Jijpw9jCX/ATSb5Ab 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)(346002)(136003)(39840400004)(376002)(366004)(5660300002)(6512007)(6666004)(1076003)(52116002)(6486002)(16526019)(26005)(83380400001)(186003)(6506007)(86362001)(2906002)(6916009)(4326008)(8936002)(66946007)(478600001)(107886003)(66556008)(8676002)(956004)(2616005)(316002)(36756003)(66476007)(142923001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: g2/yRMFLOCrNgFs9z37tEzSfqGWJxnLEUpyhkgmGFPQSDg1s0qEvKINQHoIVJXp0ttqGyMaTaOIO+qLfN84ZY6x+xAutXlPOrbRJmzaeTQNytfhfMtqUTL5R4gb0iZSgeAgOBUqsQ5fakAuMso+niZSYAm9PXTP+K6sYHYH9BXKUs9Wuf5KrWpjQk64XeD6DLMrDmKlgDI4ugv7mxMcy7BPIiK3DDx/gAPyYbf2/Ux6af1c0QsVTuvCQBT+uSceVs0Wiuf4AHt+kh5RYQjh6WH8/heN88OH/jSzLGQBVIbXNFmOtXbUbAfe9JoN/4twzu8RBl6/fh+Yu4ZoyOoKlHLusuHb/iH0FAxvqjkZAyab6FQpnPNtb+dRXHF9YTvWSdGY4/OLYklnUbfjxcrc5MSGXMK6LthMVRf8Wrp8/MIuoRmDMqSx5rE+m9ceCVFJ9tp7P+nSlYGbVLalGbESNSxdK9CQ1zi9Nlc1nfRzRQcrLrf4SZbluCBup2ktGWxtEhGF2RgSOYW8A/fmRAHjwvBBSqzr0YXBSyFcC/4Bq0PyyXE0iNqmJF1VVB+OVGZgOisH4Y6dH3dKhOJpXvpD4IHNRi1Mc7z4T1wFzSRPIb6a0vHMH48QK5h0okUHrvG/yglbxHErYhPafp+WlCuxtDg++RzcwDSLrnxZ+/MgadrAZdu2ov1/5aqbTGgPKdBTxFpmAeLrad3v7Moff6I5TOvV7Fzp9KQK2eO6nJJRWD4x8znwG5mt1Vf6T6S+4jXqsstj8bveaoQ7b9J44QlVU3EC5/dikFuzXlq1yZ1rqTid4S6CeOV23cYJXIYNrAAPfsLRYS6QBQxg2YrFbJ4Xzwniy9CTathu44NrsKl81EQUgHIHO8FZH9Y3vxUb6dMSHlM4XHxVuDDOcEObARUF3FA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0e73fc9-79e5-4a6e-0be9-08d88fec327f X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2020 20:13:09.9218 (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: v4rjrJ3b8O87+XRbNAXvQKwDkAjDM2DKMae8GJ2pWhNgKOgSWEtq1+cinYyPWQTsnqTh2maznsmzskS/BGkDtpxu9nChgsSdPnw1bVCYZ4s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4690 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.111; 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" 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; =20 @@ -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 =3D bs->opaque; - - if (!s->active) { - /* - * The filter node may be in process of bdrv_append(), which first= ly 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 permissi= ons - * after it (see bdrv_backup_top_append()). - */ - *nperm =3D 0; - *nshared =3D BLK_PERM_ALL; - return; - } - if (!(role & BDRV_CHILD_FILTERED)) { /* * Target child @@ -229,18 +213,6 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverSt= ate *source, } appended =3D true; =20 - /* - * bdrv_append() finished successfully, now we can require permissions - * we want. - */ - state->active =3D 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 =3D cluster_size; state->bcs =3D block_copy_state_new(top->backing, state->target, cluster_size, write_flags, &local_er= r); @@ -256,7 +228,6 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverSta= te *source, =20 fail: if (appended) { - state->active =3D false; bdrv_backup_top_drop(top); } else { bdrv_unref(top); @@ -272,16 +243,9 @@ void bdrv_backup_top_drop(BlockDriverState *bs) { BDRVBackupTopState *s =3D bs->opaque; =20 - bdrv_drained_begin(bs); + bdrv_drop_filter(bs, &error_abort); =20 block_copy_state_free(s->bcs); =20 - s->active =3D 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 ba= ckup-top filter: Conflicts with use by source as 'image', which does not al= low 'write' on base"}} +{"error": {"class": "GenericError", "desc": "Cannot append backup-top filt= er: Conflicts with use by source as 'image', which does not allow 'write' o= n base"}} --=20 2.21.3