From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4EABAC77B6F for ; Tue, 11 Apr 2023 15:11:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A72046B0087; Tue, 11 Apr 2023 11:11:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A22F8900002; Tue, 11 Apr 2023 11:11:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8742E6B0089; Tue, 11 Apr 2023 11:11:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 75D616B0087 for ; Tue, 11 Apr 2023 11:11:53 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A1F05A0C04 for ; Tue, 11 Apr 2023 15:11:52 +0000 (UTC) X-FDA: 80669450064.17.2595CFC Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf10.hostedemail.com (Postfix) with ESMTP id 61636C0010 for ; Tue, 11 Apr 2023 15:11:49 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-03-30 header.b="j/RlKkrH"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=TlhpPo6X; dmarc=pass (policy=none) header.from=oracle.com; spf=pass (imf10.hostedemail.com: domain of liam.howlett@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=liam.howlett@oracle.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681225909; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=xGnXTW5VC6tcdOlTLMFIueElZmHVbODoCfPsVjIEEzE=; b=yxFOej7k8mFvTDp/3iMVoIemkQRMQtEVb4jZ1k0vIfKfBJXrAjJk5Mt1ntjDClE1VcnM/K FzvU9aWt0V4CmfrVgC3dRkILQwxdLIiCZi9eFdo0RwCCr6feZuAkefMixDd61dvcxoqLw/ 40Tq50Dt1yWp8nWFg9HsTnMjtUbk968= ARC-Authentication-Results: i=2; imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-03-30 header.b="j/RlKkrH"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=TlhpPo6X; dmarc=pass (policy=none) header.from=oracle.com; spf=pass (imf10.hostedemail.com: domain of liam.howlett@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=liam.howlett@oracle.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1681225909; a=rsa-sha256; cv=pass; b=Z5homeoNae7xLBGc9SRxgwu23ZV6KKd1/lFfYytugDHX1K8HwQ5z7Y2oywI4nfRMtSbwx6 8tIpO/MsTeH6O4ZkxuWGv8Appy1G7pw1+Xbgu3V450dHen67MJhiY/3l/Q8Mhdkq2ZzGWj eLrvwY47dWGiLvtDxfSeXKG1/pLN2QM= Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33BEx9qC019840; Tue, 11 Apr 2023 15:11:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=xGnXTW5VC6tcdOlTLMFIueElZmHVbODoCfPsVjIEEzE=; b=j/RlKkrHH7sNp+/3UQ44q5OZO+DdoxeIV54nII3jH97c7IS/ELtt/PRymm65aVmng4rE Y7uohZNpca3Lh4ZmDWJvncLO0V6wwefKIsXWZUQyruTLQyjzCAAPuYLzQzQm9NOn2eBi 7bGZ5NUbJ2JdNAWr5GKKrqN+IaJAWJIF+FeUc1/hAzuqwm/gtV2qWkomDHSU3GC8BNOR DmZ8vM327ovEy43dG2B+9GP+WFxBlCXdozx789ec5TNhc0J2l8Iw3Zl+X8DHJfczJL9k X6LgcqrsaDA/peg91p2vKzuKKh6QihadEe5XHthz/Br6cd7pEXYEwTibiM7ymf4Io9IR hw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pu0b2wpqr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Apr 2023 15:11:48 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 33BEUkXk009948; Tue, 11 Apr 2023 15:11:47 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2048.outbound.protection.outlook.com [104.47.66.48]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3puw870rxu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Apr 2023 15:11:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fe1slJqt53lwF0RhWr73NtF1t+eV8EAZ/kVZuP162RiXpO4UmMDaIYalGk5ArFpOCxJcYUvunOs+53zTVFQRe51S4XxWuB1/BVB7yadFxfhbGeZH7sqPNnlvDo5bJV5Ff9KbkktABf3/Vh/BUuKfG0ATYSoe9mQakJIsFP34c/z+uKHIeP/IkOQ+PnIUuDz3JzuvYR4WkvDOEb9uSHfPUnXNmuhg3yX3FpANV7/fH8mD+i/ESyRuylWsq3k6TucgE78WP5WGhOasdKg4RizIFLRbVQb/bnmaaf9orLQ7Q3A/4jFZ2+aadQEM+cdNBNkh76XQ4dZGVU8rswgVMZgHxg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xGnXTW5VC6tcdOlTLMFIueElZmHVbODoCfPsVjIEEzE=; b=duyV/r6R2wwNGQGQiCFDL72cIicq17Ru/MLWAwo14DcyuenE943dgBHgl8v5qJU/1nZ3wbeOUv3mRaVnH1nDzecv7Xr78yhvTGOO28ncW34aLtrbPnt8GJYu8gg0Wi3HJ5/7I4/8wh/qd/ik/o8/aN3kZtgZfeAQuYVE+vwUzLs1YvTSHey2UJG5i6N+xygrMZWCs/7K8WleqzbCYV8Px4+gKAvE90rxh3Y1T50uqqgSXCfz0F5kqlH80hURi/x04hKZLqoLFQHebIfKvqg0K8+i7wRBfcYNFNbEzmgp4O1i6qZpufqN4wXwedwKdWQRmvCMewvMo0axFOSHGV8r/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xGnXTW5VC6tcdOlTLMFIueElZmHVbODoCfPsVjIEEzE=; b=TlhpPo6XiQfIvvNw6hIo0PdcSzHpZB4/hJGDdXNtBAhbU7/m6HQXCGFTS7kClVpV0dkR7USd3g0gERk5sTOCcR5O1fUuuxrJXAbJEtUDgP6yfbjqv42cS2hWOHK5O8C1mAiW5on20JASNLrzjQJQd1d40kQAe/H93fuJIhtKmdQ= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by CY5PR10MB6120.namprd10.prod.outlook.com (2603:10b6:930:34::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.27; Tue, 11 Apr 2023 15:11:45 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::8bb9:2bb7:3930:b5da]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::8bb9:2bb7:3930:b5da%7]) with mapi id 15.20.6277.035; Tue, 11 Apr 2023 15:11:44 +0000 From: "Liam R. Howlett" To: Greg Kroah-Hartman , stable@vger.kernel.org Cc: maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Liam R. Howlett" , Stable@vger.kernel.org, Liam Howlett Subject: [PATCH 6.1 10/14] maple_tree: fix freeing of nodes in rcu mode Date: Tue, 11 Apr 2023 11:10:51 -0400 Message-Id: <20230411151055.2910579-11-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230411151055.2910579-1-Liam.Howlett@oracle.com> References: <20230411151055.2910579-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: YT4PR01CA0042.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:fe::22) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|CY5PR10MB6120:EE_ X-MS-Office365-Filtering-Correlation-Id: 22ea3d3a-f7f3-455b-c1c7-08db3a9f1021 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR10MB3022.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(39860400002)(396003)(376002)(136003)(366004)(346002)(451199021)(38100700002)(36756003)(86362001)(316002)(26005)(6506007)(8936002)(5660300002)(6512007)(186003)(41300700001)(478600001)(6666004)(1076003)(2906002)(107886003)(66556008)(66946007)(54906003)(8676002)(6486002)(966005)(2616005)(83380400001)(4326008)(66476007);DIR:OUT;SFP:1101; X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22ea3d3a-f7f3-455b-c1c7-08db3a9f1021 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2023 15:11:44.9563 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VEtO3mikCSYF3tkFNtY/ldYXhjCisG6JPfLfn2w8zqVsxy2SvIk2X9V3/QaOer+V+MjeCNaoAFz63VC+qIRofw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR10MB6120 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-11_10,2023-04-11_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 malwarescore=0 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304110138 X-Proofpoint-GUID: q_cYDzAUWgXFOG4g9smWkTKZqEC0NWrl X-Proofpoint-ORIG-GUID: q_cYDzAUWgXFOG4g9smWkTKZqEC0NWrl X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 61636C0010 X-Stat-Signature: kwgsbuinbpax5m9i7x7bdyq6yrdw6pz9 X-HE-Tag: 1681225909-599954 X-HE-Meta: U2FsdGVkX1+m08dGwfQmAzGX6XP22jEk3XJvOxzASdONJAoXH6sZjRrxZIhGreMrqNhjaQRrlMV4897lHvtyiYBiNnk1fdxA1/JzojIxseZ6whrjQiH5jIxgBSKv7iRZE3WUmLMFCXyc26Q/MZEDINGpSNWgE/QoJDb4RXwoPTEbAPBEdWpJDv0+d9jI8emo1wn2st1uNDfYUkjT7C2TNpySewhHEvpk80jcIt2/hS0M2gQDtZcJOzJMowmxyujy+4uNma83iw9On8oZGqLcqvB621NKw8zOhaRrQh/XSDZx21H3qEQqwxmyauu5N9pDGr7DtzbItJkZKh2Bvtrb9+EmhDGPgj2PmRhzWGDwvrKrFmNmrYCiyZKrUT+ws7pALZHLMZosvxQbVPFlLHIPPyzsuvkWWCNcK/xI6aBrWmThknSopDOiokOXzJ1WSU57V037vST4Kehb/qsPWa9iMCJkBY7TBQBEuJHryjrDzxGYWv3jogAK009lE/R7IXEMYic+AlAn1HeS2RsT5Td5hbpqrs7SYp2UV5YycPFso/I0AniNMU32ObDP1ZNOIHFvLTwWUIbB55e8kiH0EjRSrBbZQzpAnUR3kZKWj4JvBkkHbW+oup5m/hX/xTeYxaD8eIMaC34BFJiAFWXJ3CtHxur3KroRSP0Uu196YM3hlXjiKUVJznFQeMBtqaHDzONpiLgMfw7wEPWGc59rXHOPr6qSqrsKjHfRLw/yijWWbj9o8oYL4D/mctNf4nwGECdCoIDS25zltsSN/etJqeBoZ3uupMyJNvxm4gD0l/5W/erUNwjIXspp4D2NAZvMLPJK3jiEKxey+1cWfnNEwRem6ZXrCbd4a2fEu5L7ZMAVXmnmCNY5Z3zoAwNrgYgdDh7GSyKybyZOY7UPRIF37Ilp1wkrvLVxDGWj1Ogee95gLd1xK+KdcQSaRbOlfZDHY7gsemOOgt7OMYuNPbLVUCd +pol97tM HTrKrYlNnJZIGoFkWf+TmVSImIwswXYxdN00Hz1x9cukyAqvAUB5sYEQnb1XRTCuE/pVQWT1ZmABzvwp2mqO60hCsVPMDZougynEwOCHSJPOGRxy1uKT49viG8oKwL+CXdKkEQ1HyDkUY0aw8bZoV6kvFdoq2nEd2z4zePLg56X9IXEecK8/p93HeD4xc0dRsNXfLC+NAxOFmDEjHmV1S4f65jX48CSYqAtXhKkikcXxl8hQGExmbsinPQ8ZJqYEqvaXQsLqliVrgw9UZZWAsBBZZklgCt1eOefbcegSgCPEUPfkISGbcKehoe1waVV2LHINjCo/55uqhL0bzKPG/hV08GZ2FJj7f2RmkvJyOmPznDjd8cD5SLLP2CDtG9flEOqLHLuRYJHCPTVGYatCZpBopyrmLHS96q+EYC/Z1E15cZQPm8LeD88WFkx7jfjlikr46tKSbHxBdj7hgo+k/+Nyxtv7hCTlxJGKG5S334qubmEyRLtEK40bd5OUdQI6l2B4a89tlTgk9rzZRDF/tIktcvA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: "Liam R. Howlett" commit 2e5b4921f8efc9e845f4f04741797d16f36847eb upstream. The walk to destroy the nodes was not always setting the node type and would result in a destroy method potentially using the values as nodes. Avoid this by setting the correct node types. This is necessary for the RCU mode of the maple tree. Link: https://lkml.kernel.org/r/20230227173632.3292573-4-surenb@google.com Cc: Fixes: 54a611b60590 ("Maple Tree: add new data structure") Signed-off-by: Liam Howlett --- lib/maple_tree.c | 73 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 11 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 6fcf08dbdbf9..0f0a2d4850e8 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -892,6 +892,44 @@ static inline void ma_set_meta(struct maple_node *mn, enum maple_type mt, meta->end = end; } +/* + * mas_clear_meta() - clear the metadata information of a node, if it exists + * @mas: The maple state + * @mn: The maple node + * @mt: The maple node type + * @offset: The offset of the highest sub-gap in this node. + * @end: The end of the data in this node. + */ +static inline void mas_clear_meta(struct ma_state *mas, struct maple_node *mn, + enum maple_type mt) +{ + struct maple_metadata *meta; + unsigned long *pivots; + void __rcu **slots; + void *next; + + switch (mt) { + case maple_range_64: + pivots = mn->mr64.pivot; + if (unlikely(pivots[MAPLE_RANGE64_SLOTS - 2])) { + slots = mn->mr64.slot; + next = mas_slot_locked(mas, slots, + MAPLE_RANGE64_SLOTS - 1); + if (unlikely((mte_to_node(next) && mte_node_type(next)))) + return; /* The last slot is a node, no metadata */ + } + fallthrough; + case maple_arange_64: + meta = ma_meta(mn, mt); + break; + default: + return; + } + + meta->gap = 0; + meta->end = 0; +} + /* * ma_meta_end() - Get the data end of a node from the metadata * @mn: The maple node @@ -5439,20 +5477,22 @@ static inline int mas_rev_alloc(struct ma_state *mas, unsigned long min, * mas_dead_leaves() - Mark all leaves of a node as dead. * @mas: The maple state * @slots: Pointer to the slot array + * @type: The maple node type * * Must hold the write lock. * * Return: The number of leaves marked as dead. */ static inline -unsigned char mas_dead_leaves(struct ma_state *mas, void __rcu **slots) +unsigned char mas_dead_leaves(struct ma_state *mas, void __rcu **slots, + enum maple_type mt) { struct maple_node *node; enum maple_type type; void *entry; int offset; - for (offset = 0; offset < mt_slot_count(mas->node); offset++) { + for (offset = 0; offset < mt_slots[mt]; offset++) { entry = mas_slot_locked(mas, slots, offset); type = mte_node_type(entry); node = mte_to_node(entry); @@ -5471,14 +5511,13 @@ unsigned char mas_dead_leaves(struct ma_state *mas, void __rcu **slots) static void __rcu **mas_dead_walk(struct ma_state *mas, unsigned char offset) { - struct maple_node *node, *next; + struct maple_node *next; void __rcu **slots = NULL; next = mas_mn(mas); do { - mas->node = ma_enode_ptr(next); - node = mas_mn(mas); - slots = ma_slots(node, node->type); + mas->node = mt_mk_node(next, next->type); + slots = ma_slots(next, next->type); next = mas_slot_locked(mas, slots, offset); offset = 0; } while (!ma_is_leaf(next->type)); @@ -5542,11 +5581,14 @@ static inline void __rcu **mas_destroy_descend(struct ma_state *mas, node = mas_mn(mas); slots = ma_slots(node, mte_node_type(mas->node)); next = mas_slot_locked(mas, slots, 0); - if ((mte_dead_node(next))) + if ((mte_dead_node(next))) { + mte_to_node(next)->type = mte_node_type(next); next = mas_slot_locked(mas, slots, 1); + } mte_set_node_dead(mas->node); node->type = mte_node_type(mas->node); + mas_clear_meta(mas, node, node->type); node->piv_parent = prev; node->parent_slot = offset; offset = 0; @@ -5566,13 +5608,18 @@ static void mt_destroy_walk(struct maple_enode *enode, unsigned char ma_flags, MA_STATE(mas, &mt, 0, 0); - if (mte_is_leaf(enode)) + mas.node = enode; + if (mte_is_leaf(enode)) { + node->type = mte_node_type(enode); goto free_leaf; + } + ma_flags &= ~MT_FLAGS_LOCK_MASK; mt_init_flags(&mt, ma_flags); mas_lock(&mas); - mas.node = start = enode; + mte_to_node(enode)->ma_flags = ma_flags; + start = enode; slots = mas_destroy_descend(&mas, start, 0); node = mas_mn(&mas); do { @@ -5580,7 +5627,8 @@ static void mt_destroy_walk(struct maple_enode *enode, unsigned char ma_flags, unsigned char offset; struct maple_enode *parent, *tmp; - node->slot_len = mas_dead_leaves(&mas, slots); + node->type = mte_node_type(mas.node); + node->slot_len = mas_dead_leaves(&mas, slots, node->type); if (free) mt_free_bulk(node->slot_len, slots); offset = node->parent_slot + 1; @@ -5604,7 +5652,8 @@ static void mt_destroy_walk(struct maple_enode *enode, unsigned char ma_flags, } while (start != mas.node); node = mas_mn(&mas); - node->slot_len = mas_dead_leaves(&mas, slots); + node->type = mte_node_type(mas.node); + node->slot_len = mas_dead_leaves(&mas, slots, node->type); if (free) mt_free_bulk(node->slot_len, slots); @@ -5614,6 +5663,8 @@ static void mt_destroy_walk(struct maple_enode *enode, unsigned char ma_flags, free_leaf: if (free) mt_free_rcu(&node->rcu); + else + mas_clear_meta(&mas, node, node->type); } /* -- 2.39.2