From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F4DBC6FD1D for ; Mon, 27 Mar 2023 19:03:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231834AbjC0TD2 (ORCPT ); Mon, 27 Mar 2023 15:03:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230107AbjC0TD0 (ORCPT ); Mon, 27 Mar 2023 15:03:26 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C54426BB; Mon, 27 Mar 2023 12:03:25 -0700 (PDT) Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RIoLeV028773; Mon, 27 Mar 2023 19:03:14 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-2022-7-12; bh=XTWgae8f9rMe/vZ5BXq4zlzNA7EE7GgdEqqkcqLJwHk=; b=lVcQG0urKU2p8fGy5edUpf/7dP7ebUlC6lqCsSy6ohDwsKcClzITfgQREinI/v9kBnh8 4T5fhwfx93uapNv7vaHdfIX0+ihsOTfnAfq1JGghWN+u5gHKti1DN+9nsetea9KsXLV7 y2q9Gth9suk+XnTbuOivSz/pzurmBJIxTBW4MahUCzXFWDqQY41Wak6AM0yBLrAzEUVq klgiMWrQhW56coUQfIQztFOxyWlErCuXoCXfSBcYcRkiAKl+S45X8Ja0DvTD4kH30e7+ XM19jCZf8mEkyaTu+Nq2DUKTIjdpsO7WTfbCvfmGi4xA6EFvcEfiWcwD7wORw0DPzNIg tg== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgsa01wu-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 19:03:13 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RI3Xtf008633; Mon, 27 Mar 2023 18:55:41 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3phqdbvmfc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iUkBomQyhxC9diUfm0XLtiHVnA7rtbncG62Uptigid5ziMIb16f85gm0E618ReTWiLZEYR2Zdwb8/G4aunIEntPC/sPmQNZqkhKNDOcFNc63UHYnwPocG70WdhzCoWWdDgxBA3Dd/0RUOvBzChaH6jJKIB6IB5JOyWH8hOnLtcODKB5jeF4yj/vxqBV+o87ycOFgMRIMt4VSQctwKwVkZmcUIfEVFI8Wq0055ZzFOFEuiPsJvJk0lKkzqUu7Jv+sKqmMzHqNDtv3FhAoao5hlt+xc3vjoSgC3mFARRRCgoC8JsKgeQmUFBMkOYuXKdBsjzMsrF9HXEvJ1GX9T8UqlQ== 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=XTWgae8f9rMe/vZ5BXq4zlzNA7EE7GgdEqqkcqLJwHk=; b=L9jIDd4KDczY9Nl3l7/D7G+D6ipXEwisl/DKJg+N3oV2rjM6uIu5YEA4cH81dyCQ3sTgfEvTgHRV46oWe793OWjzBF8IzGcfAxkaKKzvOdheZG3hNHqv3AJylBNxSUm5LDd4h5J3zyrwyRg5FlkqhEHeZLXogZuiLwuzFBmz7MZIYik4tUFrOHnAXdWAoOmO8n6aFJhAfS+dnIj+6c0RLTan9yfxqXGZUe9yLIiHKKogo04CMRPDk/mi2pjyTL9vQMu2kQvOh5i4jsi6AJdIdzw7IvSdcBP+VsXTSW5j633rYaHRDAZWDWuK5MnOdRI/yDt7ukWdQlVOjVctWQaUgQ== 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=XTWgae8f9rMe/vZ5BXq4zlzNA7EE7GgdEqqkcqLJwHk=; b=RAFIT3Y8Mk4hLndqF/A35GfVB/wsvPd+EU7PW9WVvkaFuGHCDUvLos5xKU++MV89j2LwBGSuc+3OJk/bNj/mHvWxyH9iBtoeIGf0y86DoCXmY2K1DFqe18KuZyPVpOHof8M8AoLsiiTgK9zPXrvqxAOHTcy+RqpV/HAV+bk/kko= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:38 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:38 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , Stable@vger.kernel.org, "Liam R . Howlett" Subject: [PATCH 1/8] maple_tree: be more cautious about dead nodes Date: Mon, 27 Mar 2023 14:55:25 -0400 Message-Id: <20230327185532.2354250-2-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT4PR01CA0357.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:fc::13) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ac27d70-fa15-4e46-9291-08db2ef4db2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f1zod4f6hwZqFRRkaZeu6DIV7R5v298NVYM64sk+m8gpEMiI9XUZ1R/DPsrM/5V11hix8x76F20jmz1MrRLDYp8ODNLve6F3yc8PsKbTUiapLGynh2gcdPUawawNkT8wXWFfUW3j9N94OwFWW9X1ZmkzOIUjP2OaToV6SoNHh/ztp2nh1C9YTpo5JZGZ7wFRXkHGh3KnEmqGGyPvWIYayQxjP1Qob9ItlbT9s1I/8Cwg8GqBqL23xVmYqKu7vnaEvxZYcal6N5hLiYoJX58KI22BK3/R9vCfeHk0J2+1li4KDq3vXvuhE/TcYzOBxvMWihhtRyhByyMA2S2mkfFeOCQZH3vG22an0mjwdOeroviwp9xafdSrhWE4aT61MN8NkumCka6vAIjjFoGEGovUN7AoqeipWqgbdzxdb4AQuH9WyxfahI9iy+rtbEREwotUcH4cKsDJjfQu2VoHf1rFc28O/84VxCDV4iOGRA+pkc/aP5kHgUA2LwYaJBfRnWNqltSlJYWzx6IAGjPOJ8GPE66XdDj0ZVjWfUQfaQp5q/Yr3SW1dxALYsJM4nzrcqZE1p5FNF9dDCpXzJrktpy8vg== 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sYfQ+HLZUavKqxu5jsqazVv7wKfkFP24b7PMv77+gDJNfpNOsS7XOteYp62O?= =?us-ascii?Q?01CQ1IY/JftQCmtruSTHu/GHbEfuHmYWmIDA52a4VDtnI9IDACDVth4cArud?= =?us-ascii?Q?j0UsLXz+MByiCcddyy5bIbWqVMrBAl4MLbPT4SE9Sz7i9NBGWIbCf37XXPyz?= =?us-ascii?Q?8dB5ZzaljS+WOdtvZIUkzqjDzIqmEyk0kOISCDPzaeuN9NZIwCmchgoli6Tl?= =?us-ascii?Q?Il/NN9UXJcATsHBWfisGjqiYTLUp/9uhdf3tYY3iCcq2PUwdRIFSbo3rK3ku?= =?us-ascii?Q?4QCIoXxrbLxfWDBMbtH2xrUEwAUCss9wDKNFcaMVRVz2myXbWdv1Dp1PQQ0k?= =?us-ascii?Q?kbJ+xhfS6mJoeefiUhppfESwlrHwGQLhMmteOuo88pJqGk0kNqaY+CRDg4Mg?= =?us-ascii?Q?sm9RqlTN0gfM651QIcRa0WG+RPCEZwN4VcMWi7CzeIyC1BtenbcOEzrZ8Q8q?= =?us-ascii?Q?9E+1Py7UAtT7C06q9ItP4JnuFu8dGk0+8fD5zELRZDVYNMorzq55xd5iVOn5?= =?us-ascii?Q?PkExzDq26Fcevap2HCB+sLtqhoKXbWrTwVNREMzuosdHmmsN7XKFyC8J/YJJ?= =?us-ascii?Q?t/ODxY+Ay3sxNGJO5WxvWw1nMK8YQQZZh8rGIg206uhsrNAix+zk1rBQUxP7?= =?us-ascii?Q?63e5U5oZJ9j63EwoN9kbTJ5ZkH7T5++Qph1yz+RTyHcKQWu0sEud7rwNBNC3?= =?us-ascii?Q?p0H9yhiV2shluzn63EFcaxcz1oqygbvQwVmsyieAM3/JUyd5/KWYsg4+Trz5?= =?us-ascii?Q?lpqI1tXcaKsHRbtuEhw0gcdCQA+gEK+UEAf2j938fJtm6GoitdBhpw/wfIHe?= =?us-ascii?Q?fyWif2i8JpJrF2BwHcWelgRY7LZe4zlrqoMXJ1A0s+nRbnviEbo4yNfd85wH?= =?us-ascii?Q?+jl1NGavGHEdOxP1Cjw5D/5I+NNYQyW58ldcnmj9IMacmbi606NRv3Z6Lyaj?= =?us-ascii?Q?tkn9ZhY2tVymUqR1vuT1lITUwbZWBR//Dt8bRWfXm5VLq0gCdAVVrIcd5N31?= =?us-ascii?Q?jPRGxY4BsqHfRmp8sV8G14pfxldCxlUVr6ilgQvhsjgL6Z64NSrnoZhRtWJo?= =?us-ascii?Q?JZq2iMYR9XouI0Qne2uZjBUR9pI+WfZjstMurHKCS+/R9M/ehWutHdayRrcf?= =?us-ascii?Q?5hnL1X7zen3bGdGzJKd9IluIQ467qLLIzmIRSlBhTqzI4OK82fp5+YGOWd1/?= =?us-ascii?Q?i8DA0Qi6ETkohV4rEmw0R0JHTJOnV+Q9J0wW9Ljhoqe5XvmQm6smDOJpNP1P?= =?us-ascii?Q?VG+G1U/olZoh0zU4xkPPW6LgtYLHR+dWDH2fw6oFF+nFAG+aBZn6BQ/QCa9f?= =?us-ascii?Q?AYLHIYNdJtxbVSFGxVt+w67t0u0FsIlpLI6LjKv/7dI8j7GC1s0bQ4kLevFc?= =?us-ascii?Q?JQtGyDPoPLddkMsv4Q9dll9zUb/wqrwuwHe52hD5HSNr+LyyTMqlNrTs+Hpe?= =?us-ascii?Q?FQHfxSTQSJ4DCYV8gOKLtq6V4T4yeCCneZxU+0u8lw//33gaXLhMDirYU8c1?= =?us-ascii?Q?XPgAKaQH4exBFR+W0DlHnepqI+cokxseikKLQE4uWyiynz4j6l6S0ueYaaQ1?= =?us-ascii?Q?TcGsMfaFZErAgkqHeMMQDvJXM3MGv7j3ODTljXWJL+zM3/7CTQHR+FhnXxPj?= =?us-ascii?Q?hA=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?O+PsLTI9sf0SSfhbNMl8GvWNv1mdfbqEdTwqwY1RFHP+/IRRguiLfT9UWZkf?= =?us-ascii?Q?lbHQi1f092Ioo4O+1cCASg17gBlG4uQmLCiRf2LS2pWAxidL0oRQ58sUMZlP?= =?us-ascii?Q?nRcjix1M0Sn1KOcJtCdNP+mFJrq8JC0glpgRIPgBEl9Emzm+lwxPAntcrCSL?= =?us-ascii?Q?v1N17t9yW2Mw+tAWwelIcGm/8jS3Zpx5awvtEHYoI8aJjRBKm8XlNiGe/PCO?= =?us-ascii?Q?Qe9h/5gLzC4nx6wxOrMmVqVqKW125g9cRX4k99eoWv5GHGVLuXVQiGonVmjj?= =?us-ascii?Q?AnXTLq7p6MV2lRhu1c4y/+DqOPRxSjx0qppby3jwpHM5C9pASV1fIlUEL6W/?= =?us-ascii?Q?O6qaCFwgCGDSmVS4jLyrnsj1eU99eFeY2IdDUvVsKI8wt66JcDjV0oESiun3?= =?us-ascii?Q?lTneeQ4LluofhBZGGXKojhlzR7G5wM8sq7+C7VChai5PYLCmFFV9iipIYSrZ?= =?us-ascii?Q?4f6Vi927GBL3HKH9XJ9i7pNuskBx6MgDqv0ckUdf4zUnsllDgmlbaSqJRCs+?= =?us-ascii?Q?EyP0g8UHvwJTvJpTJsBavMJp1fEOdsHvRDWP887j/m6TmDGdNF5OaOuwGnYE?= =?us-ascii?Q?DKlrtFD9XcfsCn7RuA5FEYr2x1n0YNUSlAkmfmodMcMPPg++se5agpjQrWCX?= =?us-ascii?Q?nlXpaAS4hIqTdWfq0K8YAx80+VPKBQUs/0ySmZX1M6hxfEZ0I91mhn2A8RwW?= =?us-ascii?Q?P6pijNvtD/KHdwBOtVCGSrrXKgku50ypui8dQsHW8NBc9AA6d2Fg/2UUMN47?= =?us-ascii?Q?rgFmtohYWU+vJD3khrLHQlUzx2fqoiSXKFIOlKpy+ZwOqxg04jzS2VEfx76V?= =?us-ascii?Q?k86XAwRPGWkdCAe3jyTRJveIdW+AEotihEn5Yd6uZfHVh3WliBQuyuC2wrQq?= =?us-ascii?Q?XVG8pCvpTZZLJtEwYens8uDXaRepBbRqR0/cV0fzWLn5p/l9lGJHn+w8rbOX?= =?us-ascii?Q?kRlWnv5818KCmIh52ZImzw=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ac27d70-fa15-4e46-9291-08db2ef4db2b X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:38.8180 (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: bv2eaq3FxUzNr/GvCeeEgq1WgnwVEhJEySJSPjhRHiu6SbShXzQCJd6iqpCbzLKAdkc6zudovTmNa+ZRYsn8lQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 malwarescore=0 mlxlogscore=999 phishscore=0 bulkscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-GUID: 7iIW5NSvzuVam_hyzM7T4VA047OEWO3A X-Proofpoint-ORIG-GUID: 7iIW5NSvzuVam_hyzM7T4VA047OEWO3A Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" ma_pivots() and ma_data_end() may be called with a dead node. Ensure to that the node isn't dead before using the returned values. This is necessary for RCU mode of the maple tree. Link: https://lkml.kernel.org/r/20230227173632.3292573-1-surenb@google.com Link: https://lkml.kernel.org/r/20230227173632.3292573-2-surenb@google.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Cc: Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 52 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 646297cae5d1..cc356b8369ad 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -544,6 +544,7 @@ static inline bool ma_dead_node(const struct maple_node= *node) =20 return (parent =3D=3D node); } + /* * mte_dead_node() - check if the @enode is dead. * @enode: The encoded maple node @@ -625,6 +626,8 @@ static inline unsigned int mas_alloc_req(const struct m= a_state *mas) * @node - the maple node * @type - the node type * + * In the event of a dead node, this array may be %NULL + * * Return: A pointer to the maple node pivots */ static inline unsigned long *ma_pivots(struct maple_node *node, @@ -1096,8 +1099,11 @@ static int mas_ascend(struct ma_state *mas) a_type =3D mas_parent_enum(mas, p_enode); a_node =3D mte_parent(p_enode); a_slot =3D mte_parent_slot(p_enode); - pivots =3D ma_pivots(a_node, a_type); a_enode =3D mt_mk_node(a_node, a_type); + pivots =3D ma_pivots(a_node, a_type); + + if (unlikely(ma_dead_node(a_node))) + return 1; =20 if (!set_min && a_slot) { set_min =3D true; @@ -1401,6 +1407,9 @@ static inline unsigned char ma_data_end(struct maple_= node *node, { unsigned char offset; =20 + if (!pivots) + return 0; + if (type =3D=3D maple_arange_64) return ma_meta_end(node, type); =20 @@ -1436,6 +1445,9 @@ static inline unsigned char mas_data_end(struct ma_st= ate *mas) return ma_meta_end(node, type); =20 pivots =3D ma_pivots(node, type); + if (unlikely(ma_dead_node(node))) + return 0; + offset =3D mt_pivots[type] - 1; if (likely(!pivots[offset])) return ma_meta_end(node, type); @@ -4505,6 +4517,9 @@ static inline int mas_prev_node(struct ma_state *mas,= unsigned long min) node =3D mas_mn(mas); slots =3D ma_slots(node, mt); pivots =3D ma_pivots(node, mt); + if (unlikely(ma_dead_node(node))) + return 1; + mas->max =3D pivots[offset]; if (offset) mas->min =3D pivots[offset - 1] + 1; @@ -4526,6 +4541,9 @@ static inline int mas_prev_node(struct ma_state *mas,= unsigned long min) slots =3D ma_slots(node, mt); pivots =3D ma_pivots(node, mt); offset =3D ma_data_end(node, mt, pivots, mas->max); + if (unlikely(ma_dead_node(node))) + return 1; + if (offset) mas->min =3D pivots[offset - 1] + 1; =20 @@ -4574,6 +4592,7 @@ static inline int mas_next_node(struct ma_state *mas,= struct maple_node *node, struct maple_enode *enode; int level =3D 0; unsigned char offset; + unsigned char node_end; enum maple_type mt; void __rcu **slots; =20 @@ -4597,7 +4616,11 @@ static inline int mas_next_node(struct ma_state *mas= , struct maple_node *node, node =3D mas_mn(mas); mt =3D mte_node_type(mas->node); pivots =3D ma_pivots(node, mt); - } while (unlikely(offset =3D=3D ma_data_end(node, mt, pivots, mas->max))); + node_end =3D ma_data_end(node, mt, pivots, mas->max); + if (unlikely(ma_dead_node(node))) + return 1; + + } while (unlikely(offset =3D=3D node_end)); =20 slots =3D ma_slots(node, mt); pivot =3D mas_safe_pivot(mas, pivots, ++offset, mt); @@ -4613,6 +4636,9 @@ static inline int mas_next_node(struct ma_state *mas,= struct maple_node *node, mt =3D mte_node_type(mas->node); slots =3D ma_slots(node, mt); pivots =3D ma_pivots(node, mt); + if (unlikely(ma_dead_node(node))) + return 1; + offset =3D 0; pivot =3D pivots[0]; } @@ -4659,11 +4685,14 @@ static inline void *mas_next_nentry(struct ma_state= *mas, return NULL; } =20 - pivots =3D ma_pivots(node, type); slots =3D ma_slots(node, type); - mas->index =3D mas_safe_min(mas, pivots, mas->offset); + pivots =3D ma_pivots(node, type); count =3D ma_data_end(node, type, pivots, mas->max); - if (ma_dead_node(node)) + if (unlikely(ma_dead_node(node))) + return NULL; + + mas->index =3D mas_safe_min(mas, pivots, mas->offset); + if (unlikely(ma_dead_node(node))) return NULL; =20 if (mas->index > max) @@ -4817,6 +4846,11 @@ static inline void *mas_prev_nentry(struct ma_state = *mas, unsigned long limit, =20 slots =3D ma_slots(mn, mt); pivots =3D ma_pivots(mn, mt); + if (unlikely(ma_dead_node(mn))) { + mas_rewalk(mas, index); + goto retry; + } + if (offset =3D=3D mt_pivots[mt]) pivot =3D mas->max; else @@ -6631,11 +6665,11 @@ static inline void *mas_first_entry(struct ma_state= *mas, struct maple_node *mn, while (likely(!ma_is_leaf(mt))) { MT_BUG_ON(mas->tree, mte_dead_node(mas->node)); slots =3D ma_slots(mn, mt); - pivots =3D ma_pivots(mn, mt); - max =3D pivots[0]; entry =3D mas_slot(mas, slots, 0); + pivots =3D ma_pivots(mn, mt); if (unlikely(ma_dead_node(mn))) return NULL; + max =3D pivots[0]; mas->node =3D entry; mn =3D mas_mn(mas); mt =3D mte_node_type(mas->node); @@ -6655,13 +6689,13 @@ static inline void *mas_first_entry(struct ma_state= *mas, struct maple_node *mn, if (likely(entry)) return entry; =20 - pivots =3D ma_pivots(mn, mt); - mas->index =3D pivots[0] + 1; mas->offset =3D 1; entry =3D mas_slot(mas, slots, 1); + pivots =3D ma_pivots(mn, mt); if (unlikely(ma_dead_node(mn))) return NULL; =20 + mas->index =3D pivots[0] + 1; if (mas->index > limit) goto none; =20 --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA149C6FD1D for ; Mon, 27 Mar 2023 19:08:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232452AbjC0TIk (ORCPT ); Mon, 27 Mar 2023 15:08:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230300AbjC0TIh (ORCPT ); Mon, 27 Mar 2023 15:08:37 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90AB4170A; Mon, 27 Mar 2023 12:08:24 -0700 (PDT) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RIjPeU007133; Mon, 27 Mar 2023 19:08:15 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-2022-7-12; bh=TpUsjmCjRnVRG6V8IDPBzE+S5LIdsDOZXCeYop4f09M=; b=l3kXqQyhmneR54y8Ng6v6OGc+jA1+KR6iGyLGSv4RfTqtg2/ItMvDwgiWu7/ca8XbZ8A 9mCTGfqFkLVNcGWRLzpdYhw3bcCBqHgUq98osGx0R/DwOGtHlJPN160S8gqEk71g2pEk //iSM6MbHsXkq3gNwzB2O0kdD91q9TTIIpfBjLrLc/NnDY8/ZMljCrtnSNQm3Rx3MMQA KewyPkkci0TpjbzbE1r0hqgdSdLMVQlOSL1rAKnYEGlYXUJLEkEuS6lcbZ1VwfEsIPf1 iVjRKoCf4W5mW3b31OP76dtSZzroNMoz7oHaYXJe+UPEoggZjI21cdgx83FI/l4unS/Y 9Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgpmr42d-19 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 19:08:14 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RIWiAY027552; Mon, 27 Mar 2023 18:55:43 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3phqdbvyny-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LEyzBqZ4KFGER4AlT+/nG+I70lmhfBzPTQ0bFRMEldrD+v8ddedNP2gp/wY/ZmbpFTpvlg6dZUF54NTupn/qve8+HwEX9C470nFSHrfQ97Ns/KCGiF26/yCUqW7bmFnD8YxX4d6TvMfpBPWdZ/Rr7gnbTSvRUpSp6FPT9x2V9JwuBx5l20G6GA0e0ue/Bf6b6ZD0lQsFE5/t4iqWJt7jNdjO1gJtUe0EFGEmDiMKe1KP/UoRRTVdn9FHXd6YBTvsI2Wei9yNz6uV43QTM0tP0Nbuf4aoBjXGWHBTDXkSJLTqPoPSHfYEJHdFCmoa5xZWJaZG5b86DXEiMh6GAJWjHQ== 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=TpUsjmCjRnVRG6V8IDPBzE+S5LIdsDOZXCeYop4f09M=; b=ibAlfdhX89rBRJCBQr80ntQsM8c+TJS14T1htkqcRPVovuU88oNcQfkebrXncBj30D3IYAe3YgelOD1fglfwjlJOdpmpedXQt6wMDdcf7pT0UC3et7JBSDMkkbkkbrwsJGpzn2jB6ocC6DcJGTmq1yHQfK2bMjvadhngzGB+pGyh6aSIiYEhQTEE3tRyAEHJWYra1ZWmmpXKLERkj0XVvs2xQMvRytA5s6d/FgVMXNLfNfL45qUsyHyZ9Fi0Y/TA8kocDjtxCyxgt7GCY3ub+ANaZAISMkrnx7UPP0bWgGK2cLkkg5vAmbh9J4bP+OzWGZxFOVXHSS9uSLaGTMI94A== 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=TpUsjmCjRnVRG6V8IDPBzE+S5LIdsDOZXCeYop4f09M=; b=TEyEbMpu+MDQ4C3HGF/acp7iyYVYImj8sMXvE+gkcPJ5QuBGrsbjcgSudgc9A9GwNBovZlYFaXt/nCfIEY6FOZAi8vKO4k0E8GLRvve6pMYVChz8OlTJI7xLa7T+w03F3jhr/oV2nGjtnKn0TppRyWs2sGCRz7AJPn3rNpfIUTw= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:41 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:41 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , Stable@vger.kernel.org, "Liam R . Howlett" Subject: [PATCH 2/8] maple_tree: detect dead nodes in mas_start() Date: Mon, 27 Mar 2023 14:55:26 -0400 Message-Id: <20230327185532.2354250-3-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT1P288CA0022.CANP288.PROD.OUTLOOK.COM (2603:10b6:b01::35) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: c7a2b980-3f92-4ed9-5406-08db2ef4dc98 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3nOKyHfwgzCBvxY6vAyDTChqU40QzXUOidRXvEOl6O8qG9sud3hvi4NsY0XOGHugSQtXyAF8M+z8rbLJKhf0gSbvfm8Lu1gvJkW/0otWahOzJSkLUiCJxypR9mOdmBSHWa9ff4HwNWf8g5ZViAwbK1NocKlEIMpAQfFdepA6En8Qm6saCHrD53L34uxjdGGBuNjOf4xjzSGVFDCqI0BKWC5S8xnGMkGMsZIEmiqTFeyuAChJPc+d0Kw11Ttmf43wf7DK5nfPVG8681sdJGoAAvwVM7SChHEZLdoKlnqu/Btm+Ng5DE91W6FmZV3JN4mxMrYU3Pt4OSuvpXJ2BQiTbe+QKCL2bF+oPqqKvaAS36H6kGTUk3EtHt/iCu3j6gbV+z86sgYoLIQDhnRP+2WWgnpYkbSCsufSqPjDuMX6Hc1ocy6XoE1zBwWhGTeDiQxdyWyire5iG41WIabR87chbPWgL1Wy77D0MY1qD7uTRb11VZShJWaQ/qvkswU/zDYv2ehkYyR/16VB6JWXEJAOcU4TMmlIoyau1BNfLtbUhT0= 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NZouSKIuXTuwvbchVIr4Ep9u2KII39NT7VX5Z7W8A8WEk3nkmJa+J/bBYFPH?= =?us-ascii?Q?zKrLWGVreTVnS/Yke4WmjpmvtZMGnBFZ7rDBM1VlHg1AAjhr/OAFh3F7Ezk1?= =?us-ascii?Q?ijOrsmXdwZVvqyvqzxgpHp0vCFA1nqul/eeWMsfxcEJs3msliF1mKYy0JhXD?= =?us-ascii?Q?pUpPoQ6lznqS/bzmuGlcU5CtucQLYwWsxkCJMVhfgFONBJ/GFwrRuF8iUIkO?= =?us-ascii?Q?Tu1Pzu1E9iJvlKJ0H8cl1uOVYqfNhC09Jcnn/qTOPnlIAxjLrvh/8YyQRL+c?= =?us-ascii?Q?UnvjaZN7Y8n4oLC4VzITOzpsk+2dQf8ZGOPcLApWZ27o1lOafIIMHF1So56m?= =?us-ascii?Q?mFbWXCXSODXqVAb+WWZkzcQp4k23uTG+IMdbc6Z7o7vOAThiAPJmKh+o9d/R?= =?us-ascii?Q?yx5kbsUNy53xpbYKSGuGUsPGbhG1mgLUwYJioLPaRGQQ7jEb/FGhBfwlEyqq?= =?us-ascii?Q?29j+4ZSMpdkUGz4UK9vKExNvPqsc4GKEw5x+CmQPnxZwMXbElf+KZW8VWfv2?= =?us-ascii?Q?rWDI9TVvEYl0CCS4QsLRasN1yhSEYxgsBwTWNxoKXYhisE1ID3RZLxhSsjwo?= =?us-ascii?Q?9aA/KQunrwbvA7r7WRmibatOeerMEZHDW7JTSLN3WoMmx6qSRplCP4xuFG6e?= =?us-ascii?Q?X811fL4LW3lqQY1eU6kMIPWJ2PGAtMQ9cyi3jMs6HvMO208jvMlR4NzoZ2sK?= =?us-ascii?Q?w1EkRCyQmxIDvflfcqqshK0VebU2OcEA0aPrhOjnKe28FLdGyVKAUNCYI6jO?= =?us-ascii?Q?tuM1DjJRowWIWaDp5GOBRNIM/fKPGmGyqgfbmq00tp7GruHu4XEMSSRF79H2?= =?us-ascii?Q?YljiY4nsbgAZZXXKLAJ+gU02/tFBwrmK3BY2u7875vWzBxMfpo8lvslBvtG6?= =?us-ascii?Q?bUOVHjQsakBX07KfxNVWvnEKyBKHb0YIKzMYVpTeG33/KeupBwmNh9ZxipVN?= =?us-ascii?Q?Yuz6dzpYpxUK23guwIyh9uA3iAyzldwfF347q9dG1gQjeqIB5KbHQ7hYUX3d?= =?us-ascii?Q?4YxOhFHCeY51CUqB61GKMzoW7lSRWGQaHT1n4qeXuLC79wCgcXkkJhP2Jii+?= =?us-ascii?Q?d7+zbvw4NYHuzVlqhBfsbZa7QNLcHBK3L1fyRIIKNcGChhM/q6C4EaXnV0Y1?= =?us-ascii?Q?4YhI2OHpVrA0MnNWXk2FeOLRxa4wjmCJny4tTtNXaos7Y9L4pdFm37njb+wh?= =?us-ascii?Q?Qgrh2+icFbj/gWZXLhpO/CczbrWfuiRYC2YHO7OFo6FRjCURHzEIkyiYCrZy?= =?us-ascii?Q?gaCfSPlG2fpZ3W6mnFYVgCAlNgeZJwBfWLHvulIEodsGhNYOHl2qp0MUC+HA?= =?us-ascii?Q?JCYVs2Vn4Yc5PlGjd3r7tyG4++UT2J8mnQNQQu+vqjch2zF00y3G/gzC2HrZ?= =?us-ascii?Q?toIXpfQ3nVAGamyMlKgYbgLYAoriWeZQqqQQasVLMGCPrH5gHlsBhzZWPn2f?= =?us-ascii?Q?tqwbghOwZoVfUIZOQIvDEt+5VNyBxazMmHaKoat1V3VLek0gD510IIDsMJWN?= =?us-ascii?Q?YSr82EibnnKBXkiOdbu2N9dC9yV39o1N7P6cicynQ9rYngZrWGiF0l5roTd/?= =?us-ascii?Q?DXUlZqT+lKuXG2kjFtumiYA+KXxTicLPhuPmCjVyTJkCwO7rqhAr1nSIqvwA?= =?us-ascii?Q?zA=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?O666RhjskSpfdtFGNHv/p7Cg6ImDCprJjZpWlphOHv66JOwywEYB4f1fWyVE?= =?us-ascii?Q?Od+C8C3W7KBy5MbVIb5MARhS+u8RhIZgrRjEnb5esRxW7DTdKIK5N9ZDcFc/?= =?us-ascii?Q?vyH5V71KKuD/JKqApID6rvvcntLCg5E5mC6D3F1wGUzHySBdNINgo5cHvAQa?= =?us-ascii?Q?yjNWaHEe1E3oqA/zhU9gwu58v67squE7zhQyYikAiCt41yBgK4O8I1MXmIYn?= =?us-ascii?Q?dshMygJtQbteSx7qBgD06G59eTbDo9MAPHq7OcweGZiSY/EDs1ilwsDtUwjp?= =?us-ascii?Q?TXxbr25vUMj1A1WAWzT0Ku85/EiI0LHGZ3c3ft0jbnxEauggNhJNNqNikMQU?= =?us-ascii?Q?Y3GFYGSBDDyyR1T6pEz/nEKOrlEiSNaSru4dwn3QK83Ckak5H9PiWrmogNwU?= =?us-ascii?Q?v2pjhCFCT5cXIcgEW/8xGe/EtE26gg5RZeD+JpT1XOsLAvrk8NORltpnXB3j?= =?us-ascii?Q?1YgqzfVGpwyA9qB1202VynC9chffmjFt8FY/J9MilqT5jAkHB2e0nr5fKHyY?= =?us-ascii?Q?QEpSks+H/CfSTPpBr5H67OWJl/MBhC2b47WNuXEjIA3Zgma0lnyj5nuCSZky?= =?us-ascii?Q?NN222EJX+QWYcpss/1vNk0AEDtBjAJEJg0ez6+elW1JyfYpV9hOQ1/6SJwbo?= =?us-ascii?Q?XKl1B53i5QBLcbn7Zj6e6DIkcbg2SP0C71rC2KvVOnpOhSaZOVm+G6VfjvlM?= =?us-ascii?Q?7HpJPAHXM2356Usy1wKKvOiZs5A42rCdS+g3S7fdhJFISkeONtB4XaIIiNUM?= =?us-ascii?Q?/l3cL8IYL0QUNlYK6pE4cSm9LMluojYpbZ9fxVB9koK9oqDCiEH/ykNrhyVh?= =?us-ascii?Q?2DtwjpP0/cO6xrS1hFCh3b0lp3vKSkEKgqS4YM8Z9rm+5s7/RYNWCBXo1CL3?= =?us-ascii?Q?ZKxYg1IgLnWMSziJ31bZBV54j8gWgihedqK38ZAAU9PkAIyOJQZ+bKLh8x40?= =?us-ascii?Q?7XA/nDeXbzyV3cP0l6q/0A=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c7a2b980-3f92-4ed9-5406-08db2ef4dc98 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:41.2235 (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: YFxtNsrMI3LtT7aDDdUXs2OXa9/aFLEG9luCk8tYIJKMGfospUCSXRox2Co+95ALLrTg6IyrXv1NZlnhndwo+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-GUID: Pfk2aUHPvirBIaIdnlN0BsjN5JGpijuI X-Proofpoint-ORIG-GUID: Pfk2aUHPvirBIaIdnlN0BsjN5JGpijuI Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" When initially starting a search, the root node may already be in the process of being replaced in RCU mode. Detect and restart the walk if this is the case. This is necessary for RCU mode of the maple tree. Link: https://lkml.kernel.org/r/20230227173632.3292573-3-surenb@google.com Cc: Fixes: 54a611b60590 ("Maple Tree: add new data structure") Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index cc356b8369ad..089cd76ec379 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -1360,12 +1360,16 @@ static inline struct maple_enode *mas_start(struct = ma_state *mas) mas->max =3D ULONG_MAX; mas->depth =3D 0; =20 +retry: root =3D mas_root(mas); /* Tree with nodes */ if (likely(xa_is_node(root))) { mas->depth =3D 1; mas->node =3D mte_safe_root(root); mas->offset =3D 0; + if (mte_dead_node(mas->node)) + goto retry; + return NULL; } =20 --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6E089C6FD1D for ; Mon, 27 Mar 2023 19:32:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231437AbjC0Tch (ORCPT ); Mon, 27 Mar 2023 15:32:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229479AbjC0Tce (ORCPT ); Mon, 27 Mar 2023 15:32:34 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41DFF30F5; Mon, 27 Mar 2023 12:32:31 -0700 (PDT) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RJK4ZU006613; Mon, 27 Mar 2023 19:32:21 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-2022-7-12; bh=9958vdTUG0kfKUD1Gb4WTYzGWMv36VHhSQpJWxkmkHw=; b=1E7UtTX/TLIquZWlD8T+bwZHvCtFtvAjQYdOsV+TXKhp3MN63+w0ThCeAFbdED30WZAz T8XvTl1JHicbTByfe5vGhqrUr4NEx+KGBmZT7SOS+Yq9dxwNvQMjUzNXY0zRqGnrXhU2 o4RgqvKZ5SWr9UW+yYv8bC9gH1fVyaPJvI+aa6UtRimh37TxTBMaUCv8A9urfCxAqmtq N4Ur0Fpp+NUKBj/TndMSZRqnxWM3fvirKzpdQpylHvVFqEMBe0xzYAfRBkHmcCmv91xX yw6zpm6tYTYtSFHugLjWCyuWD/ZNyJ3rSPhH2URAXkHXEdyu1a8kKx248M/of2b8BoNO oA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkh71r179-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 19:32:21 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RIR9fK005488; Mon, 27 Mar 2023 18:55:45 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2172.outbound.protection.outlook.com [104.47.55.172]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3phqd5cnnm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KQbTLq8sUd/Ja4AOts8bbKRdiXhsrVFkonFpzTThFJZpiy3XUbHfJNw8KTjwxGEckOz2ZC7y1iFO2lA509L7aDwe9fXHYdnugx+1v5Q8bpUQFiP6eDBcglTRQ9Vw0xNToWaCC0xlZvUQJ7PJQ9jlIjlOFXevd49Gbj0WReaf8YX1wpx0IxZXTjG8jeYPC7/2fs2dGeuhcymkwmwt18fNgYiLx6Eo18OAuiQABph1phYZoNbpJwvpSkkk1hnc4jZPOVKprGIhux5d4QE6zB+5ba44P0+OhLRCaCJcnsqABqQ23DV70dLcLuAWOCGnQxaho1agnuH47n1jGV/ORcBrNQ== 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=9958vdTUG0kfKUD1Gb4WTYzGWMv36VHhSQpJWxkmkHw=; b=KDkWuuZI/s3LRhlUXNNBeRYcev086AC9XvbLAnc9N9ERdw2uXqjv2hFficKXFePhkPIlz5zFD/g7i0CB7L4hP/1k8E2us4l9XV9xnFT7DHe7rv/UyaHAH2xan0X3iC83hzKFdd6lWDTDHTa8uE30Oj3Xfb5/wbdDV/hwC4I3QgIxd4Ei7JY9/cJxIgT+3dVzAxugthBNOE/X2mBOFLlaH6jcvhggLPpNIRAbV3vbP4QvyEYcCVESfK6MW+M1RvlDY/c3l2RL92cALgm6k2KwF0OvqWVXB0uJOvU7g47DMpySjKnK4i0kISdEvxaJs1wdixxO9pRZwYDC7Q+dSr0V8Q== 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=9958vdTUG0kfKUD1Gb4WTYzGWMv36VHhSQpJWxkmkHw=; b=IK8z7yesrGXAB3dzLfSk3u1BYvtieQCCnWkW6eZP1ddow7qBSW/wwOtfh44ccnxno7zQsiWGj4bW1TkmMjikQe3cSjFYLTtkNoWqGuqqElMoUFHpehJhjSS3OCdwstqF+bvDUS2yWJIE3PeNFo+9wXuzcTv7pspUEJOIBztjrZE= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:43 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:43 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , Stable@vger.kernel.org, "Liam R . Howlett" Subject: [PATCH 3/8] maple_tree: fix freeing of nodes in rcu mode Date: Mon, 27 Mar 2023 14:55:27 -0400 Message-Id: <20230327185532.2354250-4-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT1P288CA0019.CANP288.PROD.OUTLOOK.COM (2603:10b6:b01::32) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 2539281e-35c3-498a-b524-08db2ef4dde3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bv9MQ5jVW2K2O5rsvDNm8Dw0wAxERyzzRxTQL/mWTK+M3ZQVJi1tzcKTdsXhGNtPtUL7C4gVUdW0QDoGvEFyfaetehdbxTkjeKB9iaajSMzFeFeLhClw2mcLjJQBqthEZ+S4hAaT3ih+vBsoO3BI4gzOfUF1VYHkpiZZ3Y3HGy/I91JegEPFOAOmPli4IuRfYK8mw49n8ZadVB6Bsp9+rucrqkJXwiQiO0gC2xoCmA+NLtgCS0ijVFOrmAOmH+HR9nqiCGEi7N9rWc7jz0IKM5hPiwt9U+l8nwzx+DHu4rIvEDYhqkzNRWuWe/8vzN653h+CL6Qy9GoOp4/Izbv9W3/zHFtzKVKH8yDYmXwl4elI3ExEtV9FKbNf9Raw1M+FWpWOUJK/pq0+nYQP4YF5Xjt5mOYdyYJt2YeqnJod4DVHOUiRSfyieFiIcOy/J6CrJ5mi2/1qbg5M9T2mt9XUUBuhDa0RJn06zO2i/9rETYuFWVS1xlslmB5ktzw8g9go+BUiOI0bSLaVCfTUqEehsncWluVYjmTCvTGclhOIUjA= 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2jc1Yn+tEOEOT9QilGmI4y6qFkEXfrQ+JfHHyHEbDpWIjsW1uRUCS39Ibe3w?= =?us-ascii?Q?SgPElwgougkmj1IE+JMuBa1HxUmbIjZ6kxkqRVLnLdzadjTHfuk8zMC4v7u0?= =?us-ascii?Q?PP/VkgimtQVIv1uw72OCFygPmPEj5PcAPHypcfBgJcM0aH1R+WPRgLEboszV?= =?us-ascii?Q?0ulwgvLQaSm+xS1JYXxjd7y5d7WfUEPPgpYiEcRV7+uUmEGDN30xZ/Dnw9I7?= =?us-ascii?Q?oepYlPP4H/IhgnpgBJfIPCH5yZbgYR0grsIVxUAlSsnhzU4tixruq/YSR9XL?= =?us-ascii?Q?KDxLkD7nd0Ku9nl0u5kkyUqv6LlEzp/h5klBjE/Avx+/fSbN/Ux8BPFXoWci?= =?us-ascii?Q?iPDAwYeeIHYd6apQqNTt7CWWMkX/TLTy7cROa/DtyzyR7cvx/fkBIPhi8Eis?= =?us-ascii?Q?QnkeeAQRaQV4QbAA2/aDgcl05DXOSWtTKm9/vSeZNEjmbOwFDCshfz9jmGDz?= =?us-ascii?Q?9gPRCXzZoh1RncIITif32WpJa6hXZr4yz4FUVnBHY/4baOiHOXhgAkwCJiyJ?= =?us-ascii?Q?RMZb2pXBnLESlqwwLj5jk/g5EdtXY1K61FDYOGtzjYf/bG5/goHoHSAVHkZ+?= =?us-ascii?Q?eaLPs/w+/usTLtql0mI4YXUj63icLWaSLisWzjv5i0BNeXhY3MaAc8enMWUC?= =?us-ascii?Q?CDXr/m9wOaDP9dzz0wAgjCn7O5j6Z/16dHCTayceFB/f71TyTRxs5rHV8YYx?= =?us-ascii?Q?zk9XHKWISqGcdPYenYTjfPEt+/JX2ahJmEe4uu8QwhFbL4vg8hBSkHifJgVo?= =?us-ascii?Q?1eNVFLA+3D7gpDJQldfno1ww16cEMpwlUPzElhiKzzm0wdZZBl7VTURPudKI?= =?us-ascii?Q?wGfyVin4kF/0OsdiY7vJHth4xTshJXkv00K0SVmhnOc+aF7vVKIM70xTij7a?= =?us-ascii?Q?ku9U5Wf+yADpfpIaulYuDvj3lGzRcadzrCe551Bcj6OvakUe3UrfuY1mBUH6?= =?us-ascii?Q?Qbf/GxrbtOkTuuwqQL4j+KZIX3dmhvebmmVkB5Bf4ryOZaRI/uaOqSPx0poD?= =?us-ascii?Q?0HzGm9BcaHrAThI8s7w7P5czxDuscZsO4pm4pnhlP4+TY90eCYDh1Y7QR/TA?= =?us-ascii?Q?y98V4WEmzWuZIABgS5LCp6SCNHHgddsooJhM7cMIMd7B3Mq/eL8PDe39UI2s?= =?us-ascii?Q?Wy6toAW0pMyXawilP7PKniy73nLpz5AYvPCM9Zsw+Ur/M2QfHSxDREHmC108?= =?us-ascii?Q?x9AnQ93eJLMEmERST7RR+FnQ9r3M2xssByx4e9ZJB9vnTXHVvDW82ottntHH?= =?us-ascii?Q?lBvyVm5AShogKS6IsHw/RxjgBAA9Mv7/7ko0svIwr5dNPyAluuX8/D0eLA0R?= =?us-ascii?Q?atviCKOmDi6Ou07DjlGa262umJO7pw2Gjwj6ISRnB6bp0pISOB0UlQzFZX1W?= =?us-ascii?Q?b28VZX/JEbkGiIvL1xcaaHc+yHJ8FFq0tl8smCD+rcxlKuHKr5nHzjknxPwO?= =?us-ascii?Q?V2Un0/1ydK4j4oAxX0uPX4ocOvmAQ6eaaNeNzru8XoFAFHJeKfbyzEZsFxda?= =?us-ascii?Q?f5gQO8lBLsUATvdSwDqWFk9FZTic2Xbx7QY3MkMWwcl1t6+NpGfGZYuNA891?= =?us-ascii?Q?UZSDctuReVH39HfpevOZKv4bJImkIkCeoTKi7n4ENIE0Se/2XpTO59IrFsgl?= =?us-ascii?Q?2g=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?ncntFVIsuvaLBaTgKoJBJXRp3DbxSWstKyEtg9kFBSZ2nchguKeFGiJpmwR0?= =?us-ascii?Q?vx2N1LLfTQ5whABFM7JzenHYiCZkULMQvVlqGPN3m5ceLU5CrJ11NEAWK9vv?= =?us-ascii?Q?bBQAD7NIYPyatkTHqjQxyezmZwvspKCTe3sztink5ADBKR+TFIUnZ4UIY1Mm?= =?us-ascii?Q?u7zxzz/WBL1CGj4piGhC1XHRE1H+jz3NGpfw2oDugYdmf8kxXelAUnEx3+iO?= =?us-ascii?Q?aEPq2M5DwWEOpBAHQqNSxIrcBi+4Cn00Lgvd8f+3iXP9CF68IboNhaYIVIj3?= =?us-ascii?Q?I90kvuKLaX7lePtwXlBGzRfsdT2XrN6vLKF+gJoJHaxzecj7PsQYmKgkAZrR?= =?us-ascii?Q?OI52B5tLO0NHc4+m0rC52tCQN24j9gywilRZoiITW8ffTrzsO271Dt2XslgY?= =?us-ascii?Q?i8BZ8P8Grw3SNwR0z7cE+VXhJQgR1gT1HW/NQCzG0sTFG7I0LMYZi6RsYRI1?= =?us-ascii?Q?EheFOKULzrYas6HlfuRoYKF+27LhGHBZiBJ6NMtW0tranKiNhDzHOeryNsZy?= =?us-ascii?Q?31+uIvOeVOIy1gH3vo5Eq3+/JIP45AHyQwrs4PuIbetjqyJQe8A2wVMVJUTi?= =?us-ascii?Q?66MQITbAhoqG4UAB45ksOlYNFaU+aSquO9e21Cbm0XLCkgXeTZXoTMs4yzdF?= =?us-ascii?Q?Jli9L6gL8jDOQO8fcFvmpnxq4TuWzMPh29t3nUUoTkqL6N+vuZ3PZZ1ccx4X?= =?us-ascii?Q?UO2kMa8LjhkHFJjxw4kRyj8QLv8dkQOESrRlpd9WxXkODL3vW7BeqS06sccj?= =?us-ascii?Q?DYuExihCRdSh5ants1unnJjsmo8iqfiRM/lxo5kMT1646VndMai1XSRnn1CN?= =?us-ascii?Q?5AND0iwkNQaTXmKXgyFM7HD83y2Naa2CQOWzRWrJvnujMmvLTOmo+ogQOGII?= =?us-ascii?Q?YakIo+DVRXSkQYR38pjgSWU9f2XdYY/akdkEg8EADVQIwoI9dIzc/IboplYE?= =?us-ascii?Q?4RiUMro/ajqdQIrTWVFXdw=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2539281e-35c3-498a-b524-08db2ef4dde3 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:43.4030 (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: Oc5rhuITm+0u++RPSgD8H3z9uj9nbUHeiR5k5QgqZnFxygLKpEEtWlCcqmYs9QSQuHYSeRJmhrOord+M6odFjw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 phishscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-ORIG-GUID: MqwT9VG-NhxC3Y_REuPVz0JyaVsjifX_ X-Proofpoint-GUID: MqwT9VG-NhxC3Y_REuPVz0JyaVsjifX_ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" 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 R. 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 089cd76ec379..44d6ce30b28e 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -902,6 +902,44 @@ static inline void ma_set_meta(struct maple_node *mn, = enum maple_type mt, meta->end =3D end; } =20 +/* + * mas_clear_meta() - clear the metadata information of a node, if it exis= ts + * @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 =3D mn->mr64.pivot; + if (unlikely(pivots[MAPLE_RANGE64_SLOTS - 2])) { + slots =3D mn->mr64.slot; + next =3D 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 =3D ma_meta(mn, mt); + break; + default: + return; + } + + meta->gap =3D 0; + meta->end =3D 0; +} + /* * ma_meta_end() - Get the data end of a node from the metadata * @mn: The maple node @@ -5455,20 +5493,22 @@ static inline int mas_rev_alloc(struct ma_state *ma= s, 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; =20 - for (offset =3D 0; offset < mt_slot_count(mas->node); offset++) { + for (offset =3D 0; offset < mt_slots[mt]; offset++) { entry =3D mas_slot_locked(mas, slots, offset); type =3D mte_node_type(entry); node =3D mte_to_node(entry); @@ -5487,14 +5527,13 @@ unsigned char mas_dead_leaves(struct ma_state *mas,= void __rcu **slots) =20 static void __rcu **mas_dead_walk(struct ma_state *mas, unsigned char offs= et) { - struct maple_node *node, *next; + struct maple_node *next; void __rcu **slots =3D NULL; =20 next =3D mas_mn(mas); do { - mas->node =3D ma_enode_ptr(next); - node =3D mas_mn(mas); - slots =3D ma_slots(node, node->type); + mas->node =3D mt_mk_node(next, next->type); + slots =3D ma_slots(next, next->type); next =3D mas_slot_locked(mas, slots, offset); offset =3D 0; } while (!ma_is_leaf(next->type)); @@ -5558,11 +5597,14 @@ static inline void __rcu **mas_destroy_descend(stru= ct ma_state *mas, node =3D mas_mn(mas); slots =3D ma_slots(node, mte_node_type(mas->node)); next =3D mas_slot_locked(mas, slots, 0); - if ((mte_dead_node(next))) + if ((mte_dead_node(next))) { + mte_to_node(next)->type =3D mte_node_type(next); next =3D mas_slot_locked(mas, slots, 1); + } =20 mte_set_node_dead(mas->node); node->type =3D mte_node_type(mas->node); + mas_clear_meta(mas, node, node->type); node->piv_parent =3D prev; node->parent_slot =3D offset; offset =3D 0; @@ -5582,13 +5624,18 @@ static void mt_destroy_walk(struct maple_enode *eno= de, unsigned char ma_flags, =20 MA_STATE(mas, &mt, 0, 0); =20 - if (mte_is_leaf(enode)) + mas.node =3D enode; + if (mte_is_leaf(enode)) { + node->type =3D mte_node_type(enode); goto free_leaf; + } =20 + ma_flags &=3D ~MT_FLAGS_LOCK_MASK; mt_init_flags(&mt, ma_flags); mas_lock(&mas); =20 - mas.node =3D start =3D enode; + mte_to_node(enode)->ma_flags =3D ma_flags; + start =3D enode; slots =3D mas_destroy_descend(&mas, start, 0); node =3D mas_mn(&mas); do { @@ -5596,7 +5643,8 @@ static void mt_destroy_walk(struct maple_enode *enode= , unsigned char ma_flags, unsigned char offset; struct maple_enode *parent, *tmp; =20 - node->slot_len =3D mas_dead_leaves(&mas, slots); + node->type =3D mte_node_type(mas.node); + node->slot_len =3D mas_dead_leaves(&mas, slots, node->type); if (free) mt_free_bulk(node->slot_len, slots); offset =3D node->parent_slot + 1; @@ -5620,7 +5668,8 @@ static void mt_destroy_walk(struct maple_enode *enode= , unsigned char ma_flags, } while (start !=3D mas.node); =20 node =3D mas_mn(&mas); - node->slot_len =3D mas_dead_leaves(&mas, slots); + node->type =3D mte_node_type(mas.node); + node->slot_len =3D mas_dead_leaves(&mas, slots, node->type); if (free) mt_free_bulk(node->slot_len, slots); =20 @@ -5630,6 +5679,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); } =20 /* --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF8E6C76195 for ; Mon, 27 Mar 2023 19:02:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232428AbjC0TCb (ORCPT ); Mon, 27 Mar 2023 15:02:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232307AbjC0TC2 (ORCPT ); Mon, 27 Mar 2023 15:02:28 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10BEA2100; Mon, 27 Mar 2023 12:02:26 -0700 (PDT) Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RIoLVa028778; Mon, 27 Mar 2023 19:02:11 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-2022-7-12; bh=rjfqf4t7uyCufquwqK3wKGn8LhXzB0cBxImqUhe0z4Q=; b=jt+IrPNMWOxOat8ZCC9worjF894WaX+YXy4zdLjMMkoJyEuU7MCGkg+qVfkco7kVnPOr qAQuIruGe1lVuGSWZK8ajU+4FZVdsLJ4i6nRgxp/XLV5V+sqvORwwFCsvRJUq4VpN+h6 4wBXMlJX5uM0GsmDyt5MdKvhfQR1xyrU6XCM3NALquonpklMHibt3UaimtTnCJwNC/z/ TM8Is2O/M8o3HckiI4iDs4Lvksq5zXh11NE+WpLmG+RKJA7NAy6jPR85rVhO8BXP99fS spsvH7weEwwBfrkxTNAd9Yc6y/bNJZY2HfDl6faC8ovSbig5BUVmJSjbMeGZyRwJIJ7E eA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgsa01m6-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 19:02:11 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RHmK0O005430; Mon, 27 Mar 2023 18:55:49 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2176.outbound.protection.outlook.com [104.47.55.176]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3phqd5cnr4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Im/6roL+RwSZAGfiYpioVTA64PfFoGYubFepiym3r8C+SfEQnJwSQN09MtXZyaQUsqxJfyB8Q/D2P37fzr6HYyZcVPSFmkmmAk7Gnv23pfcwzpOoIveZ+4qFap58jZLTJxR4MFYRfnaVRjui4YPfj/ED7G9krwLRcRJ8KDGtx6Ny1cMKsTp54yWO/hCSgd2jd9hGZqHM6K3NNq9jSGKiO3krWGIXEjGRmr1NtPkVclyVfvom5G3tdsVsVOVpAzUTf+I94p9ctO5r+83NFVjUVK/QNNfSg0p+o35p6msyz++eXG+yQMrJXTTTEST2vx+6rieq1G+/PpQr/M0pQg3nSQ== 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=rjfqf4t7uyCufquwqK3wKGn8LhXzB0cBxImqUhe0z4Q=; b=HsQAMIQ1ntPoL8h+tyOUTEzRBZKMgcORe/0KCZwiL47efYbG22KrN7Ylfw8UfuAwDK2WpMsMoUl4tMskv8obWqa+Xz4ZUagpDO9AKy5FLEvk6eM+G2D3BygfHmD8R0eVKHmGm/sk5C410YCKdch/KCmpTG5SdBlzPxmvNpEF/c98oi2KgwapuCyz9vA1FdNRlLIKkFCoQMTP7odN4uQKMcmqal2GajWPMExu0H/MRW7i1qqPV00Oftrcm0LNiNBuZZfnFI4hZ6sTqA57rlVgZEtbjDib2bSKZPPP1qasTQ9Kc0EfSd6zYY6rrFWvjaUWC2aS8BPO8vZQFuVYSWxU3w== 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=rjfqf4t7uyCufquwqK3wKGn8LhXzB0cBxImqUhe0z4Q=; b=mi1t0Q5x7Qv2/Bd2tlJ5ylQ9HlxSyUyo0XkI1NHHRXbgYfounl8KBZmJCmMOqyx8O1gWcG86D8FCVbv7y2GTBy988at1enj6v9rwOgUJvyqtZXJ8me4mAGF8pPY5UgJhYAvkGPuhI+LPrqnKDS7tNMqcVIb1EUldo/Ottb6gHBY= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:45 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:45 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , stable@vger.kernel.org, Liam Howlett Subject: [PATCH 4/8] maple_tree: remove extra smp_wmb() from mas_dead_leaves() Date: Mon, 27 Mar 2023 14:55:28 -0400 Message-Id: <20230327185532.2354250-5-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT4PR01CA0343.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:fc::15) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 39bcb855-def3-44f4-c474-08db2ef4df5e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SoT9U2NSh9TZIFx6IE+K7PsaXkRVc+V11xyg7Ogn3raqP/k0X9M6crSXpSNl/Hjlurf4Q1G23iqLSnLZcAhTKXSa9zHrN7STUyytNVmT6qzXn42186y6QEiSbY+B52D5rCRj3oao+qBaEhDiQQganlYtLEkLkuLq9RrfMEnttOn6O1deEOdf5mQIzosR5J8ffTyTVAZeEj6S8/Htc9bzzHJdMXB8lxF0liFDumv9mgtRR6P+2xUdG8JJAYILUhqL46p/DlbreKrfuLRT59AfF7noMN7LXK640YZswsYU59h6Un8KiXmNqRZvmpgYyOcAArU9qdd0WHhcS1u+oLeBQu2iQzYfEVzscZvBr8t7pW39BLozZdV0Dfd/WjSiDMNX3CuSXn2iIyezME0KOVCazZc2yUZvlEPnLXcoAyVexd+m8MMsI8NEtUrGMmOH258mUsys9TD+ZEizhBl3a5vkQ8R8W2A0TszyPZQ0oAzelHxSvwAEp4g5Ep6B2Eghlw0q1OfRTBIKuRClg7Iyx2Ns+T+ScI5yOVC2YoWs6LzWpLM= 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(4744005)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bn3UhfIR5QOLCQXOJkAi4UGlsY/5RHFvS1/pKbSf1QW0AV/bjnXdxD+SHfwl?= =?us-ascii?Q?Wd4xF3Hzw4XPZH1D1Vze8hpVqCK+yJudMsEW45UqlOhHEkt4wKoeoJpNeBXG?= =?us-ascii?Q?44p84yQCDv6CQCOs2HzSd8KAnLCJalxKI5efhmAfiI5cMc0rm+LRHNRAoVHu?= =?us-ascii?Q?B8PZRxj3N5qCXt8yaNS8qpQ/as/nIPI+L/LiDITLhTxSpMrNRFicl9BgEc2T?= =?us-ascii?Q?6kbamAYN29fsrFh/mL5hIB4/loGmtoZsvFm+qHx/5qK1vWgA7fnyjZdSMjKQ?= =?us-ascii?Q?8Jg1Ae08j+Snb8Gct/EGzyY/xZ9IUJzAJa8I3us82JQPHFitiokzVxysHhi3?= =?us-ascii?Q?sM6iLY9Ln3puUglwvBO/2ocIBt1/ltFbL199onXpu1ZpIQjW5/CXuPY3z1RH?= =?us-ascii?Q?D3LLnjYCzx4aoax5KcGUd5Mi1T3pb7CCp9zv9iOH46KOiKbLenvVz13vWQW5?= =?us-ascii?Q?2FOMXWH8wPhEL4Sajbt1BcUo3RTZ6hKaIz6f30oqXOqYiqQXchhzOMYQz/co?= =?us-ascii?Q?qmGy6cc+sdRztoL1byRX4l4Q1kK9VUHL9f4KSq2AMXj8A9TVA4NWFJm0O+5t?= =?us-ascii?Q?58X2tbZcWqk8pcS3tl6Ap2w/j8W1kc/JNfF//4EUTbnX1MMHVPlk3XE7h2IL?= =?us-ascii?Q?Vl+dlzYq/bmkQWo8OohFl7P+Y12rAZ+haWub+S7+zzlkyyDiH3HytSaPRvYS?= =?us-ascii?Q?JEG77bj8iu15ayxjpHgxZmlLRKYpiPNW4SLAMlgAB3FLT1iKJUGPGifMvvoc?= =?us-ascii?Q?OJCYz+esoCUEJ6VhHmjhbFVGSoyGua+k7c8c7DjS39cXpKnZqicMleAlVHUN?= =?us-ascii?Q?mQLDsn7O/sG4JN6QSItdzv8cE/v1rXAw2vT82AMnA0L3IAtWbbe5AIKtmuA3?= =?us-ascii?Q?YtJoJmW1VRapalcXoVsNjYHhxOM4OSRFMUiVA5tKxQZRAKjVcfERKypFxK1D?= =?us-ascii?Q?1DUHm3lMdkndoq0dX90ckMdi/ulcHmN0jWmVI7tyGJybrdjW7n5Tt11xpZZU?= =?us-ascii?Q?CHf8OzBZ+8+dGAn55UpwW2qYujbQbcVcpdqIo5TD8WsPu+uWXnXHsyrn//Dp?= =?us-ascii?Q?ZWDo9ziMLf2AQScdV4GxqCDB4aqUeO77tW61tJ0R3tg5cqcMDOJET0ZQSX1f?= =?us-ascii?Q?s/rRv+tUfwBwX2PSHakxRmKbjTjO5xffGZeFYBQsWJoPygzKQQ8VcOBCeoxc?= =?us-ascii?Q?NqisecDEDjc/fIvS0jxixI2oD1d69PhubGtTqTT8tIhyoxj/0MigPAK/1e9z?= =?us-ascii?Q?EkicSHdkSdgyZkAohXrky/5s9x3CSHu8KmO+QJzoEcjahfaRIqAWF090Sk5l?= =?us-ascii?Q?Ajn8SOcueQKbleKKcB3I6dVwSxI2LVweaK1fKidFlxYDZNpFys/RTjGMLr1Y?= =?us-ascii?Q?d8BOz3bTOE4yBSCRbyoe+HH7fP65yJXI3UXGdAlG8MQMvzAqyHdsoYBT2ouZ?= =?us-ascii?Q?9DbQni69BI4dl2PiHiFgksNbLXQTYREIwx/AMUcCiG7j2qIPeE5/6H3XGEXH?= =?us-ascii?Q?GZITSTFRAx2Ao++lu0blACyaHFodHyoPeyD/Rj/pbL2F6oGECkqEbhQEuZXq?= =?us-ascii?Q?k/uAkxwT2jV08rzEOa1o/L/TAUrKVvwNtMNxl0xIhwLEGtIkb8sbnahic21p?= =?us-ascii?Q?OQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?InXK1xskIPbbXDKHwWrrPBz+JPwz6UZxsDjBgyo+neh3LpwnHQBKvCYc0k0m?= =?us-ascii?Q?QA0c4804BEgLVrTm2/759NLj6Bo+7GzIERzH4dp87i4q0Kei4ngJXZLZ+nF/?= =?us-ascii?Q?QPYvoI5gEEv4Mfv3hJ+8ft9cM6n4MDEE2iW7y9jJmt3AQMRPfndpEMB7SFCs?= =?us-ascii?Q?HDqmBfDw0Vz4tGdK95GnpsaZtXWcuqgxTg2sHm27I/XsG60S6PuydyB7VS7j?= =?us-ascii?Q?Zn3CKS7aJ6Cw9Jm9lJ0U8UJjwFvYuehGusmaBl5k3eKTi6jtvXigP6cBy27/?= =?us-ascii?Q?E70q6LA66kARezveFq1X+AnAMexKsQeQKte3/30M1qeOIgaKyOi8BBwdqEYO?= =?us-ascii?Q?H9eVmFhSm14VP/xHk+EnO8rHzditTP25mKnvBsno/ikEosgObrVCj7cf5k9c?= =?us-ascii?Q?4Q828FSr4/hxd3LvC9HDMHtIEL/yd8zbPLE9CWamaaGv+cDvyacAHdtnldBw?= =?us-ascii?Q?9E6ZZrAOcSMCM3AvTsxlVCOKKEtBPxlSdhdAJbnOFZa/Ce6CdMBNaa7qn+Sa?= =?us-ascii?Q?uDfIPINVYPfouGSD5bnYh0Vc0BEy0zKkwvv3OhARoHNmYP5XF5lKTr/VwQbO?= =?us-ascii?Q?6KI/9qS/perV62ygNu8/9G1Byf84+a5J6ql00Q8Sfj/2DwZZqx26sFpcbjLY?= =?us-ascii?Q?DGWOUG3KTTjCzHuuZu640xBEpGFcUob7uA/4wRaNYEPDGoHaAid7F4vpJNaH?= =?us-ascii?Q?7z/HxHOKHJ8pNoulXzuVZjzNV76v00NFAqPnBjPzWTxmmautkQK5Dcvt8cRp?= =?us-ascii?Q?PY/rw0Az8fUJMk659Q+T6LrpAadUnOBJC5/W/zfXqPo8VYxHqpaq8oRAWDR4?= =?us-ascii?Q?RsH83owunedmUOSE7tZze84/nMOQbP99aSdqRZdVj5u6YhXURj33/2f6VaNY?= =?us-ascii?Q?1CtLLrwtd2XMZYa+2c7rb7MkALSn+bBFhhdJT27VC5UxAI/EJSAp2hkCLXnv?= =?us-ascii?Q?iC9T9i5m/uO9YXa0d//z/w=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39bcb855-def3-44f4-c474-08db2ef4df5e X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:45.8560 (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: hnWTxAq+oxSD2M6UKHRdkPHW6LkQzQoWExOZhMcdhqZT/a0HFOMQ9l3/e9g47667Vi6Z4LdR7E0RfaI2jbnwiw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 phishscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-GUID: NqQ70RbxqBlrlFEjOuhCd11A5A7kOfcM X-Proofpoint-ORIG-GUID: NqQ70RbxqBlrlFEjOuhCd11A5A7kOfcM Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" The call to mte_set_dead_node() before the smp_wmb() already calls smp_wmb() so this is not needed. This is an optimization for the RCU mode of the maple tree. Link: https://lkml.kernel.org/r/20230227173632.3292573-5-surenb@google.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Cc: stable@vger.kernel.org Signed-off-by: Liam Howlett --- lib/maple_tree.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 44d6ce30b28e..3d5ab02f981a 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -5517,7 +5517,6 @@ unsigned char mas_dead_leaves(struct ma_state *mas, v= oid __rcu **slots, break; =20 mte_set_node_dead(entry); - smp_wmb(); /* Needed for RCU */ node->type =3D type; rcu_assign_pointer(slots[offset], node); } --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55A4CC6FD1D for ; Mon, 27 Mar 2023 19:15:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232562AbjC0TPN (ORCPT ); Mon, 27 Mar 2023 15:15:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230379AbjC0TOz (ORCPT ); Mon, 27 Mar 2023 15:14:55 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2ABCD132 for ; Mon, 27 Mar 2023 12:14:54 -0700 (PDT) Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RJ57R4010731; Mon, 27 Mar 2023 19:14:43 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-2022-7-12; bh=Ya0OSxyyiULQwyiXZ56pyELwM2Q/Ve134O6hzHHQq9o=; b=2Wna5Yw1p8Nr4zJ4uqqZrcmhCDhAe6DvJ/6c8zry3LrE5etlNclqiFrVfJnAp++F+Z8A 1znGPn10B0LH0Hxu29nKec/CbyedEHZPCArOfPJ1j44XJs/WuXQHKyT3D1qCemVZRfLj nzgz84ubPJblIUqza/5jK7AmmYvK+UbP+FoXboO5a69Q2H1FmGzn2M/tdaJhskcOeXbg PO/bxlm254oC0wxLjrKxm+JNAMDix9u1HNCXC1Imbh6jcaAlajUUfuQpD9v4E/WRji5W Kl0WDM5pJWVs3uxnhQrADZFOlhwWy/d99Yj+LUe9gj1W8cS5hpaTR8BJcUlRybubXv5I vg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgywr171-13 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 19:14:43 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RISia3027753; Mon, 27 Mar 2023 18:55:50 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2170.outbound.protection.outlook.com [104.47.55.170]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3phqd5ceft-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dXL7O44HLqcLUwtiwIRE/3M5uPN6Q/SkYKlrSZy8jl2Su7/s+fsUQJZOmohJSh70ORSk/JCKum5OhdQyNPrkAElnK29nHJSoco+HaezP4zA207HJlaqyjbiz9Oe8So3wLYQmPx8S5pyQzQks71YNi5qUpyLsb3lUbDCa2oMS5zcYwZPN4SL638Ewa/eoozzQ4HIBNGlU+mFkku8U0fOXP+3s7N8106N39qCWDLHVMlbMNk8hI3H4YmiOR7pQubOJtHRSEnFeW1j8htP++SYMed9XA0DIMP5D6iNuaM4ReKTV4TPpq8QutFe2GeGgw/RO+aMVWQKmQQ+bWZswyJKORw== 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=Ya0OSxyyiULQwyiXZ56pyELwM2Q/Ve134O6hzHHQq9o=; b=CPdqH/NM1p1DzPXnSpMQNQYIPSsLBxi1NfFzpflExYJ8CbgpTiUJ9YCmwgNL4plBwnyI8mAwZQs1Fkha+NETuVp5obbrgcOK0Loc4OaNwD5BuhiREJVluvfWKNu0koWA3XR/zgA5529CYp8k+SOH1CJgGx0uLBsS3yUSzyMgkS3fmwHGXnCGNekjECY5liuvo0qh43DvG5vbIZn+4z4+EThLF4r0qGUz5Kcy2cxC6pDmXnAtpDxpPRdtmBfb0rIVq+Wh26bCOhujWCLeFvFE+yKXRYJKg3Al37aTnRuFDMEyJGk2pNXvvsaVDXYjDWF2pZfoeSiGHxs9V5IyfiSwQg== 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=Ya0OSxyyiULQwyiXZ56pyELwM2Q/Ve134O6hzHHQq9o=; b=FdDTCwPpU5uz5DiPQY27nQWs9OSu+HaPB2yKae9S+3EDAPWpsCFZ/JZ/xAx38h1F/ky02R+Pc5zqARmIzdArGmMzw+ilpUyzShspFqO7xhXRu7iEZAl0cp3QSDoBPOh/ZvifGvAihDIeAXxbns1NSv9T5+mzTf4lRjf9whKE3Uw= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:48 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:48 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" Subject: [PATCH 5/8] maple_tree: fix write memory barrier of nodes once dead for RCU mode Date: Mon, 27 Mar 2023 14:55:29 -0400 Message-Id: <20230327185532.2354250-6-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT4PR01CA0373.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:fd::15) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 00c2be14-01e0-4acc-2195-08db2ef4e0e8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2oj127m4CD84/+/FkOXXBGsh1WDc8IW4EeTSEcCs8n6vcbKQJClIQZpvEnz/fwHwVv/crL0oapA+OL9mtN/fbifefLRJ45opE6C4CodN+lV/3NjwPASf+KUaHf/nAHGnd9h000Yc352tnlOr0MmviQedqOKlNnzNG+nboU07ecVU8NCvYMSJjXAZOY+ytt5b1n4jWfQKNMGraJalWJzGg1hyhFz9mZe90UV6zlAYSlef8GP3+Qg+4W8HV+UUL7PhwGqKJYGA7qWCVfAqBUHxMTWjkb9XPLsXOby/NR9kVaY28iOb1AqII9H74YQRpk6Myk4req3PphtvqJ7ARPbO5SantDGJku3ThjTYlEcwmh23EpPjFwxnkfX8MIplB95zfmF76Dlao/A+RP8sPS9Gpqh2vAK2McCsIvf/9NmKXBG+U3Hkj6rzE1zEZXRiGYzPfUd9hJOFb1pJfL1TesdWPTXqfs7jSt80jKGDrzjnl/5+miQ+VUz+DDe/clAAbPlG9unIbCyhD+dwW7oFrSUyNuYAI0yoFacfose0xfAtpS8= 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iynNyDARCq8bCZabbAWbXkho2aGvb/rLlU8ernIgbjVtRAqSkcOrgCFbJJBH?= =?us-ascii?Q?mtD6wxubqZGcy6eY/rou+nBeBooBYr4wPkU4XOZTCaULnfoTP8EBjVL9WHba?= =?us-ascii?Q?bZfoVzxROAOG5UTUQGUULyLydje0rsHw6tEPy+27gwhVHPKZRDVvO1gIlEVx?= =?us-ascii?Q?tfZ12+BoXr/c4Q6DNRWRqEGFgqXaAhmbtYU90RWqWqSYcyw5mp+wf1Q+wfZ1?= =?us-ascii?Q?BQyw1Hk3G0gJcn36HKYgrYA3Xb9fHhymM1+ajuYI/k/b9exH2P0ESwmXeneN?= =?us-ascii?Q?pTLjsdBCb5IyofoL5M/nK5q5DjL0IvLCGFBK8DvLO/VVhJwaYUxnmlh4PVuI?= =?us-ascii?Q?6vMbeuEdqNSQ04YBoFOmEVjuQcoX7SbVA4vLonRBPk/sEAO2AMUpPgWxGkA/?= =?us-ascii?Q?buO2BrzI2eUHW1/bbtSxrheCeHAu/AVUSwtJMOk2pqU7Xo8PrQ6TYF6XT3x2?= =?us-ascii?Q?WX632rqP2aLQCxkeLYmGOvqqM+sIun/VUW7E/RURgCAM5diqAzQ+v1aQFo5H?= =?us-ascii?Q?OyQ7o4BHrwcAa8dLLGqdLWUiIavfTedw/ywj9xCfJNsAKOxOKWcJbjzvmVXf?= =?us-ascii?Q?g6/vIpHdYm8V6XZDaUnSntW2uJen6gfeocjnqaeRIeIP3Olel6n9m09fv3xL?= =?us-ascii?Q?U7Z8q+V7lwG25ZfNniz4QJlUkXMm1tNasIXAXZeS0wXI5sSUsuA1yq6Qx96w?= =?us-ascii?Q?dHxHjmw0fEErn+DThX7FxGxJcmUXglfGtIJQ7VSB1n2f7GZlrscjocbQQLSZ?= =?us-ascii?Q?mL+pfXpcBrce8YuOr2ezi5fFyZRQSHkRxUOZrMYJW+Vlp2Mj4tifbakDQSGF?= =?us-ascii?Q?ZmW/8naR3t3/iGYNsPMphcSxtKtlCi61jgpJEJyMTRtevsAT5FIjZE7x+l1k?= =?us-ascii?Q?34YmGgG3tZlxldM6ecDCj/5oWKJUosCzA05dLc5prz8svFrf/3PAoce8tM4C?= =?us-ascii?Q?90LQYbe2BvOEe7kQSjtroH3fno5nd2mnQm6yKlHZnp/WacNLZv1IB6HAFav4?= =?us-ascii?Q?0Y6KkUGGWGKxeJ7qrdf75e+WXtd5dPzI7qawMlcYtP5+QJjQQ5ZjbdTTIkj1?= =?us-ascii?Q?Of+lq3LQEgptTkfPAiubKpdCHorEJIsse2eZC4CtYZwsrYuNaJ64oFgY/6fT?= =?us-ascii?Q?FL/Q14YLGDKWLdi8JX95XgF297IUeZ5B35+Kp2U+ZGsUq58z0FTbcBosMOed?= =?us-ascii?Q?o9PrtxukiD1FxIuwVS4Dxxyt1jNpHcrBDBi3S/jCiMG6boXxY8vq3WIwrS8P?= =?us-ascii?Q?aRpcC0+q89Pw3qQ4zOjB+jHWwiNcXv4zPKFl9kaZ2BLMSzfKR89mcckpgB4a?= =?us-ascii?Q?iG4IReYD+7w7klQAUljqTEw2g2Rd8lQBF5tE6CBZSjDHS5SR7LgkI0Ian5N1?= =?us-ascii?Q?ZdNEwx0d1nZnq62U6DuHAeG7bvp1NCOV0s7HBOqFXihZpcDsG7/H+DQDsRRX?= =?us-ascii?Q?lrTQOV2D1ESffYSCZAD8/A7NDWxUv1XMxO8EyXf+srRwH9U036i59T5ZlXx4?= =?us-ascii?Q?ijXaAy3sHmtaArTLDwcfPjPtb5a2l9tRNYFmjBQ1s2po5IHUvs4JrfqqNKmr?= =?us-ascii?Q?7KeGHR9ekZXV179FypnJZOpljoJalS1p4oO+MpKulIQlqMEB9FUgL1FXHzrG?= =?us-ascii?Q?Zg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?3h0fuprnE4dhUCslft1cHXQYSmLQ3JKXW5yFdEaNlaNLY5XERG9PzHM9AOWq?= =?us-ascii?Q?jWXBeNo38o9X/pE0ypEC8cqCQBqVWD3j5PPgvc+f+Fauf0x8wn32xv4ZabtL?= =?us-ascii?Q?nbJ7vX35IR3SxW6EkuOPazzh1sJQjKnpZFwsZYR6eYbATmO/ByYnHmFVLSsa?= =?us-ascii?Q?7O2nnNAqFNvD7WiJo+ZPqfbhvaemWbzPhyNpWEC7o41v5xMfjcuAcCsO3fGQ?= =?us-ascii?Q?Qe27BUbEwlESxFf9NEH/CcKOXa0XJUjSEjMQbiPabArLo9XFJ8p5cjRZ0+UA?= =?us-ascii?Q?+brozLGG1gPQHVet6WwrJvGDD81Y2EVj9LwWdd79q6cIX5yG7OlwLyc1pVGi?= =?us-ascii?Q?MI3PGDa/Hm2Nx6ASkM6V1YXPy+hCATDE64pWDoPdu/0RaVMnErMWAEUe7QRF?= =?us-ascii?Q?339vSdFWi8/Tn8znZzwYyR7/pW/VD+z0ftZVHuQnZshxdI6X1VWEHWZuvPI8?= =?us-ascii?Q?Nzxe+oytT/CuIzTji/u2I6bElQv4RzX9rP/DoQ43JtkgGT+RTDVMTLa2Yxv8?= =?us-ascii?Q?6wSmVCXrerbjn2ZRbt5gBoupJ26yqHU79C0gqsNHpzpbu4Tr6ANkhx7cxDs2?= =?us-ascii?Q?u7AzWJEiwIF9Q4PEDXI933wbDTEYBtybcXTl+Nb3ZLuBh60/VOYdSGAK4UwX?= =?us-ascii?Q?MJ1xV1Tp0aw+Xuc+5wXIpXdP2SZmAVHKjipzgBwEWIr+nlwrOI0ta2p9laXI?= =?us-ascii?Q?xoqzLkYehuqwmYOGqMsR3gUGaJ447r4lc+oZ4QDzFgEY6RYjg6tgmIu+shTr?= =?us-ascii?Q?/GbC4SFoJpRXLufJ+emGFBcagzkgd3g72j5vj3eDQ+Dd60WtO4pP1X7nG0+B?= =?us-ascii?Q?ctcsKUjDyf1bDXbgf061jh92/uTD9nXi3S7wr/m3V3Pz20zHLyBl+Xo4ONqs?= =?us-ascii?Q?UPuu31b92mN77CWNDmre0bUgfJbL2TnpHFanUZE1u8MysKRg4+9z6FZxCWM3?= =?us-ascii?Q?7b2oa7uKBYXQYMnizvWWxw=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 00c2be14-01e0-4acc-2195-08db2ef4e0e8 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:48.4468 (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: j/uFurRFOUDOhPEhFCsPfV5SCyP4TrpkroSXJhTItsiB68zPpLcebVoY1sd6qAgqrwVqf7rBmhZ+8n1msC8D8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 adultscore=0 suspectscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-ORIG-GUID: S2OarG3THK-cgV-7DjI3GgKrv61Lp9do X-Proofpoint-GUID: S2OarG3THK-cgV-7DjI3GgKrv61Lp9do Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" During the development of the maple tree, the strategy of freeing multiple nodes changed and, in the process, the pivots were reused to store pointers to dead nodes. To ensure the readers see accurate pivots, the writers need to mark the nodes as dead and call smp_wmb() to ensure any readers can identify the node as dead before using the pivot values. There were two places where the old method of marking the node as dead without smp_wmb() were being used, which resulted in RCU readers seeing the wrong pivot value before seeing the node was dead. Fix this race condition by using mte_set_node_dead() which has the smp_wmb() call to ensure the race is closed. Add a WARN_ON() to the ma_free_rcu() call to ensure all nodes being freed are marked as dead to ensure there are no other call paths besides the two updated paths. This is necessary for the RCU mode of the maple tree. Link: https://lkml.kernel.org/r/20230227173632.3292573-6-surenb@google.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Signed-off-by: Liam R. Howlett Signed-off-by: Suren Baghdasaryan Signed-off-by: Andrew Morton --- lib/maple_tree.c | 7 +++++-- tools/testing/radix-tree/maple.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 3d5ab02f981a..6b6eddadd9d2 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -185,7 +185,7 @@ static void mt_free_rcu(struct rcu_head *head) */ static void ma_free_rcu(struct maple_node *node) { - node->parent =3D ma_parent_ptr(node); + WARN_ON(node->parent !=3D ma_parent_ptr(node)); call_rcu(&node->rcu, mt_free_rcu); } =20 @@ -1778,8 +1778,10 @@ static inline void mas_replace(struct ma_state *mas,= bool advanced) rcu_assign_pointer(slots[offset], mas->node); } =20 - if (!advanced) + if (!advanced) { + mte_set_node_dead(old_enode); mas_free(mas, old_enode); + } } =20 /* @@ -4218,6 +4220,7 @@ static inline bool mas_wr_node_store(struct ma_wr_sta= te *wr_mas) done: mas_leaf_set_meta(mas, newnode, dst_pivots, maple_leaf_64, new_end); if (in_rcu) { + mte_set_node_dead(mas->node); mas->node =3D mt_mk_node(newnode, wr_mas->type); mas_replace(mas, false); } else { diff --git a/tools/testing/radix-tree/maple.c b/tools/testing/radix-tree/ma= ple.c index 958ee9bdb316..4c89ff333f6f 100644 --- a/tools/testing/radix-tree/maple.c +++ b/tools/testing/radix-tree/maple.c @@ -108,6 +108,7 @@ static noinline void check_new_node(struct maple_tree *= mt) MT_BUG_ON(mt, mn->slot[1] !=3D NULL); MT_BUG_ON(mt, mas_allocated(&mas) !=3D 0); =20 + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); mas.node =3D MAS_START; mas_nomem(&mas, GFP_KERNEL); @@ -160,6 +161,7 @@ static noinline void check_new_node(struct maple_tree *= mt) MT_BUG_ON(mt, mas_allocated(&mas) !=3D i); MT_BUG_ON(mt, !mn); MT_BUG_ON(mt, not_empty(mn)); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); } =20 @@ -192,6 +194,7 @@ static noinline void check_new_node(struct maple_tree *= mt) MT_BUG_ON(mt, not_empty(mn)); MT_BUG_ON(mt, mas_allocated(&mas) !=3D i - 1); MT_BUG_ON(mt, !mn); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); } =20 @@ -210,6 +213,7 @@ static noinline void check_new_node(struct maple_tree *= mt) mn =3D mas_pop_node(&mas); MT_BUG_ON(mt, not_empty(mn)); MT_BUG_ON(mt, mas_allocated(&mas) !=3D j - 1); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); } MT_BUG_ON(mt, mas_allocated(&mas) !=3D 0); @@ -233,6 +237,7 @@ static noinline void check_new_node(struct maple_tree *= mt) MT_BUG_ON(mt, mas_allocated(&mas) !=3D i - j); mn =3D mas_pop_node(&mas); MT_BUG_ON(mt, not_empty(mn)); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); MT_BUG_ON(mt, mas_allocated(&mas) !=3D i - j - 1); } @@ -269,6 +274,7 @@ static noinline void check_new_node(struct maple_tree *= mt) mn =3D mas_pop_node(&mas); /* get the next node. */ MT_BUG_ON(mt, mn =3D=3D NULL); MT_BUG_ON(mt, not_empty(mn)); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); } MT_BUG_ON(mt, mas_allocated(&mas) !=3D 0); @@ -294,6 +300,7 @@ static noinline void check_new_node(struct maple_tree *= mt) mn =3D mas_pop_node(&mas2); /* get the next node. */ MT_BUG_ON(mt, mn =3D=3D NULL); MT_BUG_ON(mt, not_empty(mn)); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); } MT_BUG_ON(mt, mas_allocated(&mas2) !=3D 0); @@ -334,10 +341,12 @@ static noinline void check_new_node(struct maple_tree= *mt) MT_BUG_ON(mt, mas_allocated(&mas) !=3D MAPLE_ALLOC_SLOTS + 2); mn =3D mas_pop_node(&mas); MT_BUG_ON(mt, not_empty(mn)); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); for (i =3D 1; i <=3D MAPLE_ALLOC_SLOTS + 1; i++) { mn =3D mas_pop_node(&mas); MT_BUG_ON(mt, not_empty(mn)); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); } MT_BUG_ON(mt, mas_allocated(&mas) !=3D 0); @@ -375,6 +384,7 @@ static noinline void check_new_node(struct maple_tree *= mt) mas_node_count(&mas, i); /* Request */ mas_nomem(&mas, GFP_KERNEL); /* Fill request */ mn =3D mas_pop_node(&mas); /* get the next node. */ + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); mas_destroy(&mas); =20 @@ -382,10 +392,13 @@ static noinline void check_new_node(struct maple_tree= *mt) mas_node_count(&mas, i); /* Request */ mas_nomem(&mas, GFP_KERNEL); /* Fill request */ mn =3D mas_pop_node(&mas); /* get the next node. */ + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); mn =3D mas_pop_node(&mas); /* get the next node. */ + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); mn =3D mas_pop_node(&mas); /* get the next node. */ + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); mas_destroy(&mas); } @@ -35369,6 +35382,7 @@ static noinline void check_prealloc(struct maple_tr= ee *mt) MT_BUG_ON(mt, allocated !=3D 1 + height * 3); mn =3D mas_pop_node(&mas); MT_BUG_ON(mt, mas_allocated(&mas) !=3D allocated - 1); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); MT_BUG_ON(mt, mas_preallocate(&mas, GFP_KERNEL) !=3D 0); mas_destroy(&mas); @@ -35386,6 +35400,7 @@ static noinline void check_prealloc(struct maple_tr= ee *mt) mas_destroy(&mas); allocated =3D mas_allocated(&mas); MT_BUG_ON(mt, allocated !=3D 0); + mn->parent =3D ma_parent_ptr(mn); ma_free_rcu(mn); =20 MT_BUG_ON(mt, mas_preallocate(&mas, GFP_KERNEL) !=3D 0); @@ -35756,6 +35771,7 @@ void farmer_tests(void) tree.ma_root =3D mt_mk_node(node, maple_leaf_64); mt_dump(&tree); =20 + node->parent =3D ma_parent_ptr(node); ma_free_rcu(node); =20 /* Check things that will make lockdep angry */ --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C0EEC77B60 for ; Mon, 27 Mar 2023 18:56:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232140AbjC0S4M (ORCPT ); Mon, 27 Mar 2023 14:56:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229452AbjC0S4J (ORCPT ); Mon, 27 Mar 2023 14:56:09 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22DE919B0; Mon, 27 Mar 2023 11:56:09 -0700 (PDT) Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RIoaUD029000; Mon, 27 Mar 2023 18:55:53 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-2022-7-12; bh=JfFU47Tty7dlR78n4RVrbx+u99E2UUhFZGnQs4qzgQo=; b=1QP6aIqMXaD7LMjiODgC+Mw98pBdr/Co9ZS9XYtkkMd6FedJ+MYGCiJwypC1WdOe0w3h R4s6LcIdJiTrXqtOi85ZVI7eUnt4DzCqJWOw8Em880JCwGPDq76hcVQHwuLTtfuuKFqW pyqEIy4XkflW+Nnl5lAqeuDvBDDE/Nd+XVHu9TOHpQkt/44XePIDFHEXVbCCBxGvIIde A2IlRmcBs3juDJHJq/1GtkDnb7AIQsMANrjiwo2R9PchQvb11+kVvsVxNNqSn0lKSUt3 KQbs57Wz3yTRJfNlJpgA80CfirXo4GhH9ZOp6LZIZDH11PAqNjA08uWrXgaKgtQ9rKWf hQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgsa00f4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:53 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RHrF05032248; Mon, 27 Mar 2023 18:55:52 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2176.outbound.protection.outlook.com [104.47.55.176]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3phqdd4vub-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UPpDZIVeYU+nNrpGzCgoSyhY6fmIyWddHH+tYyqPnekK6vJ+BNTddth4alSwoZ+5lhL9Pwsk3BwtzxSGbtt0o9+lQ0SZta2Q9DgQvjN1zym3LBwrhBXneKy8dtYJOwuBHVE1ElZxpS9zkeTB0vJ2/Hnxu7bLbMQDkijghzIbSZ+UzSqlniBC3VEgxFMJ2BFpP1aBma0rvtS9ZQBuRd5WHFvFqeTSvdjR1Jx2Y78uw4LdiG3BPgtRJ1uA9owg/JAeicw/3Y7wMtYnztAUFDjjZcbkoU0sTvi3f+mhovTtjsx0cPnmRKLnpwnxFROCvSAA1BVddyAooWsAd0H+5u1+Eg== 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=JfFU47Tty7dlR78n4RVrbx+u99E2UUhFZGnQs4qzgQo=; b=MDlcM53H6OaU7OZ7gvWGKxpZYp8BrfbC8UfA2sJA4+TLGtwgDteCzEpEbAbC+NwRCtmUemGJUuJsO/5ry9eaE8SHab/5zMbYhsy3MJh+0XjC6E/tO0lSmRYKM2CGXUoqn7GZbBRtiaLcLMbE2C8tdYlzQ4LmFlQNagWwhXG4x1Z6dNBvyBDODCfuQIMcUN/taaL0GuKANUBGluJvDpqfBdMFTq6nQ/5kYgbybTnqjnoOCGZuhW232ntkkgIiyFfGdMjlI1XJ4sLgU/ZJoVBOzLMNVj+1ZR2hUP4wqnVWBuLwyPNUiaZ6x6Eh1wYLndcBk0o54G/P65RnBLdzo1XsxQ== 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=JfFU47Tty7dlR78n4RVrbx+u99E2UUhFZGnQs4qzgQo=; b=LTRrM+wVSkk9+PHxlnjN05toKiYcFsHlNuUJUB5xCnpnjPzAWyPTOyzke4oZ4SuPo/dB21FG5mlmEHjqrVRtf18TALhuei8jZ63/4u3cjdx42C551MNoBaRa+X+nBnbvHkVD4xYghKoxcznIG65KY6guKPep9wl03nedzWhoJHI= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:50 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:50 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , stable@vger.kernel.org, "Liam R . Howlett" Subject: [PATCH 6/8] maple_tree: add smp_rmb() to dead node detection Date: Mon, 27 Mar 2023 14:55:30 -0400 Message-Id: <20230327185532.2354250-7-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT4PR01CA0044.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:fe::19) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c76710f-387a-40c0-f97a-08db2ef4e229 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v4P4BwcQ59Ku060m51Neqtfwpwu5YnWQ+oFUb+VU8+ZcaEhk4M4Bzf+C2oVwk41tmXBOpbNT44wUTDUMqCjUZEugbtYl7kapWKCbXE+m5egTmfKzraMZ9DYqrzDhNtAmvs69t1osCObxmlO78js3J42ZXRy9V/piO9qZgl7WPPZQzS2FHcE3JQYhpeT16SqXALz6M7I7fx2t+JoN7/sHk0lP6SCL3nmIFoK8a2fWG5FVijln7mPikWTfTlGV98jPG/E804tNEF+aG4yLdngaUCCkwQfgG+0StJidfc5SqZbwU1KewDk05eAru9oT3h4cS72nE8tqqQLK1pZ4GNkP0g2eVW+NQiKV14pFOB3q3rffEMp+L629aCHDrEnZ+qgKF0No/GyZkdIB2+zaDyO7Xx5RW6S6dfWGvMGdXv/ksq8X0E3Hr7CYyCaRtt4mNUxFG90oqvMQuBWFkrs7eHC/wCyKiWPy3HXHl2RiHhnme7IO65fuQ9yiC/M4/c4aP1u6SzoYtwhvCXnW+7QYFrvP2MFom1cjMhJgKicqo5471iY= 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qgPdoDjL3Vb08/IcTEjush9XtmG69m5zjcnGxtVpxE67dObCBvX+9aetB7UH?= =?us-ascii?Q?t13mZVaiZN+bhHVFkixbp7BXQMzHKbEogUlNfylxUEGGbdwQhcn9JF1bm8td?= =?us-ascii?Q?/s28pOURhuIcSNkHijEk5UyURKngLCCJ6Fkr+5JhT8L85orxX5rovGrZoYLF?= =?us-ascii?Q?8cwrpA18+ewlfkJ5W+GdXf5BKOkIjpQmQdR8RrTsGXJXNCJ/Jzp6i1xeykH6?= =?us-ascii?Q?gto1vda35jHlWde7gi0tolE0w6mbv+D8UlbAERFK17/tEuspPrHaD3D+QYkh?= =?us-ascii?Q?TH9CFZbnj7DguJxdSWBSkXxProzZju+p57fk40n0q3RaCOqBjCUkR3NDizNO?= =?us-ascii?Q?ZRXiggHZ7Coz+ZZxr72g3zWJidKyQzYe95rHvWlr6MOmu8Ft5Fe2Jtpvc4Mh?= =?us-ascii?Q?5dmxebQLIuzXeC6fgns46f2WPY9s5Oxg33aHUeqQPwrflDiDbFTjrYrvNUTE?= =?us-ascii?Q?TyQ2yJeJhd/aVcbtXh9Ifm9j4JjmxSkoVACrFIp/wOCJoL3i7Jo1tqPYlVZV?= =?us-ascii?Q?iiEmv1YE4v1A60tGYANGZB+WRHK84+3I8IphHzL3EZlYemmWnmLkOhMWBbLP?= =?us-ascii?Q?UwK+yjJHuIyzkcuf1xn/7NrtH9E8YY6+rz3m7eFg7Z9HSgQZrVbutPqp++rE?= =?us-ascii?Q?OCvE0f4NJERyzknWvd/eml23ufJoPlxG7AqKdEJ/bKgamIEOAX3kFqsGZVqb?= =?us-ascii?Q?ZBSpe+NGkW9DsjAUmXAZU0iLkmUCxe+Hv0a2pYOXV8c0k1tiguzGHUCVdhzX?= =?us-ascii?Q?OSpYy2Gaurl23ti4PNSqalMj+ZWVYEfe/WSgJwaNPBfKkXyEyhMlbfOcYRZm?= =?us-ascii?Q?akQreloab5EBYN2x8izOxwwVgvbunJcgMWQ5r4sfur95wxTBPF8/EuUvs/VB?= =?us-ascii?Q?gpt3e6De3sGYIOmD7TR1pg0q7Im/RSSHRWDbKj4zgbmhwqGjSBrBKDJl6OqV?= =?us-ascii?Q?HGOa4MJWKfQGFJQLL+ooUZYDl0YGllw+ur661RgiJ7W8dx5dxPX8FHQvnukP?= =?us-ascii?Q?d7QVa3yO50YYhtySTB2zlsUjwk4txg2YBTfktGE53KGafLKDy/vsTickGzcD?= =?us-ascii?Q?brpQBpfeW5MXizKwmhoRhYG+fdtfBFv4eML9oEAGq/BiDM2W00xc5CHO6blB?= =?us-ascii?Q?sg2JEiBY3CLoj9wraQSVWRyq8HrKrOAE6nVdZOSvdqj20GKfehBB51nznrZ3?= =?us-ascii?Q?1xfdUJn/T3xZXOGCysI/7CB2TsEDK6cO3TzOiONw8YmCaowF8XQfN4McQJy6?= =?us-ascii?Q?EqKnUvZ6a1tSIq9FyValGeCy8aK81fp/7oeb1EW5sOOzomIzVm4+OsIYWDgZ?= =?us-ascii?Q?KHQnlAnA9fny3NajO9AtZIfrxSboh/boH63s0PQiiz7VhMze8oTM3ZJeJWPv?= =?us-ascii?Q?P8yQOPNxYw07/Mq05pCHVSITxKxWYuvOBhFNUCEyG8t5F3mvMVW3WyBdIhXP?= =?us-ascii?Q?Qc7PCmyd6hdUl64lstWQurPqv6FRYVPoA9jVaZ1vegf7VnQS44Y0yXlEnKGe?= =?us-ascii?Q?SH2h4iE0d15bo3yrUiz5CUl8sdmofUWtMoofpcTQFRN1rKTzhAa7gztKX+Qs?= =?us-ascii?Q?28EanQlXvpEDX0XZJzZdqaqczx4MBToWTbyFcAXUlnJfIFuUUpCajAep1gE8?= =?us-ascii?Q?LQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?8ggrrtl7qbNhepSMk4wFl+WtmNB3DvZBVxbb4oo9X0X6bZUi6mFZWDI2g2J8?= =?us-ascii?Q?VAs7dJ6r0yO6QzNS1baOeO6n9kzL8homooU9ekTQGBGbZwrwR2eQzWkXpopZ?= =?us-ascii?Q?t3/2fO4f68Z1i3b7L1RSF+ec1emzfTIUKYDm9czcovyTTZiNDt0z4h12jdNY?= =?us-ascii?Q?K5+yGqhQkkZeIy1pUzIn3A49fbpzGHRQ7NuLM+tciVgNlg6NounxCEkWnBpR?= =?us-ascii?Q?xP/jJ109e0nK/uE4W9ssnlmd//qZ1c7pXzJzkpgxFeLxCbXlW3ln/47GeBx2?= =?us-ascii?Q?T4dhggFz5jf28sA70iWOguMwsc++08H4TfOed626VpVniQ3VQXAqThA34CAP?= =?us-ascii?Q?qcS2F6fNwDaqKki+59FPVbLrXEy5bGJFQ5nkdwThOU9PTFajJvCYk/D/Rf1T?= =?us-ascii?Q?dT059KsxvqaCNd4U33pr1PDWatDPZkbrtfWbUQwdg/TSR4IUlBaXaivQwM/+?= =?us-ascii?Q?8fLSZAgmOamfKdqxpPwbZTy4IZpVo/mJjbMPYcTXZA5AJ139DKhYxYvA/yIH?= =?us-ascii?Q?jb4pY/gMOYkxc1FBmBoQtGbw/dIXBrqQq1QrKPut63N1EkwC11RX1vAkO1P9?= =?us-ascii?Q?HLNDQLOl0TlgHeKQfqtbmcsz0/v48rdKhovpyq3AiVwxYAbdLfxxnOZLw56W?= =?us-ascii?Q?swKi7Ly+3EhxK3dXf9QGD7S/PhAJAmwAvVvSkaiMV1KxNsnHOkMZwAucTjdx?= =?us-ascii?Q?9MVHNWMLfrZmVUw4VRe1zEqfYQcFrOWBy/E2E/Wj+dhzVO+0A/2Ra7dn2OW0?= =?us-ascii?Q?w/YCouQKvUBpB9yFetK6dt2puw2LLX3xaa4TSibKiMjaOXYLkcifzumwsbB6?= =?us-ascii?Q?Cm7Rv4fqhLD+eahrP1/7Sm1lS2RpzZHRwIesSvEnbJtnY5hhfVrZZwa82Qt6?= =?us-ascii?Q?TIWI0BuzAkhP0DO669vaTOwftE6YKyzUS3hueY9179EuIdoZ9yzA5FtOj6M8?= =?us-ascii?Q?cCU9OunN405B5A2xjwmmuQ=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c76710f-387a-40c0-f97a-08db2ef4e229 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:50.5457 (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: XlxcQ2/cq0nfCnGITXRh69FFwD5xrZkj8OXP+pk+M/kqhOiWj8/0QKePIOlx7VYhI+T7kRVvTJAB8JypeKMq3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-GUID: MYRgeADDFXDmnMbBMZ0SVXaNARkkq41C X-Proofpoint-ORIG-GUID: MYRgeADDFXDmnMbBMZ0SVXaNARkkq41C Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" Add an smp_rmb() before reading the parent pointer to ensure that anything read from the node prior to the parent pointer hasn't been reordered ahead of this check. The is necessary for RCU mode. Link: https://lkml.kernel.org/r/20230227173632.3292573-7-surenb@google.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Cc: stable@vger.kernel.org Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 6b6eddadd9d2..8ad2d1669fad 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -539,9 +539,11 @@ static inline struct maple_node *mte_parent(const stru= ct maple_enode *enode) */ static inline bool ma_dead_node(const struct maple_node *node) { - struct maple_node *parent =3D (void *)((unsigned long) - node->parent & ~MAPLE_NODE_MASK); + struct maple_node *parent; =20 + /* Do not reorder reads from the node prior to the parent check */ + smp_rmb(); + parent =3D (void *)((unsigned long) node->parent & ~MAPLE_NODE_MASK); return (parent =3D=3D node); } =20 @@ -556,6 +558,8 @@ static inline bool mte_dead_node(const struct maple_eno= de *enode) struct maple_node *parent, *node; =20 node =3D mte_to_node(enode); + /* Do not reorder reads from the node prior to the parent check */ + smp_rmb(); parent =3D mte_parent(enode); return (parent =3D=3D node); } --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A737C6FD1D for ; Mon, 27 Mar 2023 19:08:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232105AbjC0TID (ORCPT ); Mon, 27 Mar 2023 15:08:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230116AbjC0TH5 (ORCPT ); Mon, 27 Mar 2023 15:07:57 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2475810E5; Mon, 27 Mar 2023 12:07:56 -0700 (PDT) Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RIoabU029000; Mon, 27 Mar 2023 19:07:43 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-2022-7-12; bh=l3Ziv234beX3yrE/vWwNH+Dl8Ov2kzWoTk1v5fbxVIo=; b=2xgMlF6BeKoCsGZ4HHVY0uQuH6NH8P/iDadJmx4ndaBkUpBgiZANp1K5HucfnCJbCKVK MZZYeX0hmnsRgS/Aes5ZtL+S18S17AQ1mzVGZsGy/PSE+446xvPkLdzaEuXHhiqbKXeg mgtyiYf6OKu3D3LvTRxdlFY9om/acUS6inVIoYxuuozUEqkXa7WBkLNKREn1l783AD5B XU9clpk2ldzhuuwMS1q82Y3n3AdKr3ypO/SJ+KW37v8JSlurkved2lPcjiRr8dNCr1Uv dKG7JMb84jKxpriWc3oucmBYXnKm7BHNwh/WzjHvOhDceIXbjY5pn31KEWoWpxvuQFj/ NQ== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgsa02kh-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 19:07:43 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RIcRVu026831; Mon, 27 Mar 2023 18:55:57 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2169.outbound.protection.outlook.com [104.47.55.169]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3phqdbvywk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R5IX2K/uj2hgmwu1r64Lp95LOefm9qsy1UJf4QnGe+rnZNciHL45dRpXFYGNbKWcEbQM/quYJtGM19wTYbyGfdqxs3mNijRVK0WbiTSCuqfkh2Zh9bS8ARuYyux1DsTo0qX6kdY/wn4mOx86+Oiz1i+/0ivPd4AmIZCdslfFP/qQJ6Lkh/FkSfMJD181/vZrbgM5qJD4SD5wnVR18DhKWd/yyeTZo9vkOehafBRZmzQxzH1Gw+g5KdJvlxrSy2Amu+09BUPTe1NB+/qQ/iIuHHYgItsIs2bCvSNTi3VOYxI2zF+g8jWW95gvAhcrLb0BaaZ3o8VaqQMmUUsiYmxScw== 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=l3Ziv234beX3yrE/vWwNH+Dl8Ov2kzWoTk1v5fbxVIo=; b=a4QCyFrNhEDLSc/khWbD6m95HQNQlHVASmfOhWUaA6enA58m6+EskTrKqFT7Qd75kM2l1hjox8X4w7dsXlmfisiYMGVQbUOWXXoS6NqGKugon5DnZpV7Hgo13W5qlqlWI52SXN38wcG1uFp4wsgHOLjSeouzs1/V3D6GdVzs9OOoqNE6VFnNXCvy9fWMJYuwXnBS5Bet/0ymeTxLoo9M671jzzUcHxEWDeFo6/g5hNr6r8DNULpxKISw7AfxB0TCnmWQHzPO2xYEXICuV3FGSps3bdO7sI3qKpvHXI+mKKj4LLfqlMxz8y5uD9V1TJ9RjQOMcC6lycUf3lpMci8ECg== 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=l3Ziv234beX3yrE/vWwNH+Dl8Ov2kzWoTk1v5fbxVIo=; b=EIgRMH6u98ARMQyS66Zaf+0jEtHJAONcA7MnN/dXM6RH6lgIDpwBPEc/9/AcBWMXdE4y5nVHJq3fO6A7keZRodKkj7Q8cg4EixUNYgnTqfMsW+YNZvpY/gNm2GkR6Z1NPkXS8r4J4AFckKnYAtkOvWpjB1V+YBL3g3Ux+4qbyXI= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:55 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:52 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , stable@vger.kernel.org, "Liam R . Howlett" Subject: [PATCH 7/8] maple_tree: add RCU lock checking to rcu callback functions Date: Mon, 27 Mar 2023 14:55:31 -0400 Message-Id: <20230327185532.2354250-8-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT3PR01CA0075.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:84::15) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 4385e9c9-7ae2-4c77-d15f-08db2ef4e36b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DP/885f5mr3PCI/Vfylyg868Uegs/I5QID/YiXpqsRdsGPhKdQlJtZQw9OTlVNLu5H4eqzGnS+HBEiAkXc+abqi9asiMrEJwPfsRC3CWiHCpr5XmGMPRx6qWEvTA9TmoEiuhZluZPEwNRG9MmOSw4RUshuFACS4qsC5mLD6zMu7tQ6iWPwnqYDEaasL2vIX3OX7+6VpGNnbqI0/oxqUVSvnaej2i1I+3WUEX6ubjVIcFvaYcJvqfORcW7emh91erkwRBzzlL1tLOBtYCucxUJvcwoFklIesF1FPj679Mp5zMjuUVrQ4DlK0weu38E6ecHJkYbB2ECilEmWDjL6fbPFuMcz9DYvb/knRKW7w7Kz25Xbg25zw4N7pGUenZ0VGQ9IChhZnOIk8D6EUezK3H1Yyi3G9VSYO6UoPlDVJlQP4De8AHN6S46D5ltgrbQopq2uLh52u+J0tA/HPoWTVED4BDO1VJnXgKGpNdrkpKT0HJLRMDIkLZAU1M9XL2uIpuX2Mj1wmz+VP8cQcyi2oPwRv7mufeAZVCfifBA7Rza2Y= 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(30864003)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(107886003)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?M586xTfujb5E6xE/r93dV/eWFOUPPDNdSenu4Hm9UXBGqJnEwOpVF/mNbiXj?= =?us-ascii?Q?5MxF6dpwZBcX25kBSgUu3VkEwOv3Xs3VnTdXYedqyFYh2oXL52S7R92KeVkd?= =?us-ascii?Q?p77jUf0fBQ6MSOC4R6OPzfrp45gyGD7QWBk57PyutL7k8QgKU25g2VVKq4Jz?= =?us-ascii?Q?MxFGs+d5PuI/XIjgnut5j/35pEwNPfsKqn9ALXucMiepw5H8OdxrRqg2QV7g?= =?us-ascii?Q?8AMhDl9eT1hqqvLp2VyY84PGWJl7I2bWkZ6XgBBV444JRViiYfav/aAPodZE?= =?us-ascii?Q?lcbCs6oPF1IMh1lKeGTBX7Bz0Lbk7G8uLfsPrJFB+ZNIvhf5HMK7NNxKqynU?= =?us-ascii?Q?u43CRAf3Rrckpzrbqcd/J3SsmnG4fQK7/wT7bSP8PYdCpbTwK5hxFtpb6coP?= =?us-ascii?Q?re62Ref2UBvy7jmBrt0U6uGo4ZFw7vRD+KCaNvn7g56basig0HYdaMWKAG0/?= =?us-ascii?Q?FX+1R9kDyCUUvlO5ptZVV0xxWEtS+o506pajWDQs4+jUV8D2yJVzOTCb7bZA?= =?us-ascii?Q?eJCiWESO3p/PrVtVp+73nDg1kXBhts23OcnTygJybbr9lFJy++HikRVBCa7l?= =?us-ascii?Q?TJRYrEQNL+KXxaYLrqo3ASrWa7Voj6JVzr9QpIOI9f4wnipq+oAiU7rLE1fJ?= =?us-ascii?Q?4NjcKmhaljaXhpHxpiXlBg/zdOMrshE5mz10uFMoCCZ5kMl+B3HXnFOQIy9o?= =?us-ascii?Q?niK8APYH8vT5EPIqZiCDFpWTJ9teuqr1+VRroTCjX9gSCfvPJryZR1+7gi8m?= =?us-ascii?Q?y0UE6QrHuURknAF+3FX+jEJ6SQApOX7kZ2fYiHfLaSaUStcNn6likkmqC4zO?= =?us-ascii?Q?T/NO39Fb9WvqkLjgzSgXXWpYZRFJ5GMR3Af/8KYluFhCF76u0KA1I2kKg0Ix?= =?us-ascii?Q?ZnEP/Iv/R4ab1l5UMR6/P+ELZao8/mjgmCngUOSpxFRshqJoE4ySgmh/w8s5?= =?us-ascii?Q?mpgbvTYNLJOIKGj5rTiO5BWR5eug66tsucmitLlZ6Tgud/z3eTLXL2F+5lAJ?= =?us-ascii?Q?S1pDdl8lY41lDBzyY/kg7Xw6Agd+O4u4N2ODB27w4Ezmw1eLw11Dh8lhMV/b?= =?us-ascii?Q?jNpc62ieCQJ3R+i9jq2noMz8RdIhSY74w1JKznmPg7gvs/tH5hQAtajVTQPc?= =?us-ascii?Q?3i/9NoUNt2Gz6DPrNOoqu7SSNcQaCRRoOnNUy4O0aek07tjGtUuGD/lcl2kF?= =?us-ascii?Q?vL/Yw3SgWQJCPoXj1dIFYCSr7p1EF+tpL1hBmqOEcdKIJewEQDe6qLx3eWK9?= =?us-ascii?Q?V6IfZq4LPVMLChcnKZenksNiuHTwNFf1DUPT/YFkypHcOuru/OprH5olnrDY?= =?us-ascii?Q?SU5u6lBKAIbE5NpV6R1jM1dw4h4hJsmwaNCb31iZPJQb2DjVrZaZeUhyuRUl?= =?us-ascii?Q?5E3wGRC528iZExODKnj7KwbGwtezQ4h0qR/HXe4ZsS9BrKnlTMzRJ1TwjN15?= =?us-ascii?Q?jBqwFp4J22wT1OrEV48yOSZSGGP09u6sSq8SrgyRgNegVKCS8iJwy2z27pBH?= =?us-ascii?Q?0kAR+N2m5Sj2kWRwalhI9ZcypULFCJNakb290cm0+aHE7koAtVm9qpnD1CHZ?= =?us-ascii?Q?p1R6BturkpZ/EGIndvS1FdhVwOKq44W5YLOTAMUb0XoqlgImDXohUB+lI08U?= =?us-ascii?Q?Pg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?K9P5Xs8WYfz7I3aAbqPsM3hFHeHWXz1DC/Q6Jftwb0u295vXS093iGTfWuGp?= =?us-ascii?Q?bBaNbTHKjUWtQzooOOSMwdEyOCgnOGRxGSGHdx0WPQIoio4NSsCuMUvwZEKI?= =?us-ascii?Q?gsvqScTHyP5UcUZxHJ9a3Ljw6PuPHYkKRaZ6iBvSjVEAIhOAWR9prd/RoDIj?= =?us-ascii?Q?Vcz9iy0Xt1vwVJWozdIozBLvQGajBho9Y99a+86BA4UPFmsLhVAddJMRiB7P?= =?us-ascii?Q?aPu1tNUVfq2NzeTahvd8pxMH1zSZnJ3L0M1NJYSbf6ih4EXQVC2jPviwWzEu?= =?us-ascii?Q?ws5upmcG+06A2CjKslmzjkwLPIK+MGGG8GchgYIg0vAM6Tfuoe3/PeeQk1h/?= =?us-ascii?Q?RLZLyIY7UNNsHpACBofFCfyx8Bv86GILaXt4Fpm/1/i1egu77DS9/Pv3McDu?= =?us-ascii?Q?J4v+O70RAEWT7Yvcwk/5UclzVUwMkz8dQaUw1BjlhSUuLV3QgtaSd4VKlzld?= =?us-ascii?Q?2JAxVSbIcWyC1ErMtKzwXmg6s06NqPofSa+XE2ceLZauiE+/f3vPgoVmeZb7?= =?us-ascii?Q?OXau6lKKJJzp/azdky7X2/wEAcvm7qhAl8zrXUjFwRSceiy7xblablm7uFGO?= =?us-ascii?Q?jeldTzibOZE0yrZxHLPJZ4JQV15XSq5qbircw4kvuv9W+KtFjY5cv9poFLxu?= =?us-ascii?Q?IXuVBUuGi2EuXZmKnkmDV1mKf0ZwBg7xlsr4oJ6CQde4jRczekIOljOBpXXr?= =?us-ascii?Q?2mRoY9wJZLgn/FabB8fVHXICS7oKgGt2DaZJhYAFSqro/DMAUpO35yujkVmz?= =?us-ascii?Q?xW7TRyFSMVdRBuEw1zSoZQnpX6g93JANFioNOhMlKpblaBxMr4ud898EDTgA?= =?us-ascii?Q?2wmdfR6ZxyxPwvM4FSWLp/FF75xOJ5kI1E9mZUhhJXteu0uuCluwU7MN9uVY?= =?us-ascii?Q?iBLj1UnZ6pSXOqlO90P4/VhtZQ5DdGw7jOLlsGptDl8b9vTnVW16AdxNi965?= =?us-ascii?Q?d0988mChJbtQflrrctxVuw=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4385e9c9-7ae2-4c77-d15f-08db2ef4e36b X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:52.6978 (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: WlG2fRksC7GkhKfD/BKfNyh+yZkXBUoEbsHK8iChUlkfyKtr1eB2gFVQiIeyiPfHHLKUVj2w2ViB8O0rhEm17A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-GUID: jA7JcKBCk6vESVCfXYsYXtSGCeCqW7BR X-Proofpoint-ORIG-GUID: jA7JcKBCk6vESVCfXYsYXtSGCeCqW7BR Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" Dereferencing RCU objects within the RCU callback without the RCU check has caused lockdep to complain. Fix the RCU dereferencing by using the RCU callback lock to ensure the operation is safe. Also stop creating a new lock to use for dereferencing during destruction of the tree or subtree. Instead, pass through a pointer to the tree that has the lock that is held for RCU dereferencing checking. It also does not make sense to use the maple state in the freeing scenario as the tree walk is a special case where the tree no longer has the normal encodings and parent pointers. Link: https://lkml.kernel.org/r/20230227173632.3292573-8-surenb@google.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Cc: stable@vger.kernel.org Reported-by: Suren Baghdasaryan Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 188 ++++++++++++++++++++++++----------------------- 1 file changed, 96 insertions(+), 92 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 8ad2d1669fad..2be86368237d 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -824,6 +824,11 @@ static inline void *mt_slot(const struct maple_tree *m= t, return rcu_dereference_check(slots[offset], mt_locked(mt)); } =20 +static inline void *mt_slot_locked(struct maple_tree *mt, void __rcu **slo= ts, + unsigned char offset) +{ + return rcu_dereference_protected(slots[offset], mt_locked(mt)); +} /* * mas_slot_locked() - Get the slot value when holding the maple tree lock. * @mas: The maple state @@ -835,7 +840,7 @@ static inline void *mt_slot(const struct maple_tree *mt, static inline void *mas_slot_locked(struct ma_state *mas, void __rcu **slo= ts, unsigned char offset) { - return rcu_dereference_protected(slots[offset], mt_locked(mas->tree)); + return mt_slot_locked(mas->tree, slots, offset); } =20 /* @@ -907,34 +912,35 @@ static inline void ma_set_meta(struct maple_node *mn,= enum maple_type mt, } =20 /* - * mas_clear_meta() - clear the metadata information of a node, if it exis= ts - * @mas: The maple state + * mt_clear_meta() - clear the metadata information of a node, if it exists + * @mt: The maple tree * @mn: The maple node - * @mt: The maple node type + * @type: 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) +static inline void mt_clear_meta(struct maple_tree *mt, struct maple_node = *mn, + enum maple_type type) { struct maple_metadata *meta; unsigned long *pivots; void __rcu **slots; void *next; =20 - switch (mt) { + switch (type) { case maple_range_64: pivots =3D mn->mr64.pivot; if (unlikely(pivots[MAPLE_RANGE64_SLOTS - 2])) { slots =3D mn->mr64.slot; - next =3D 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 */ + next =3D mt_slot_locked(mt, slots, + MAPLE_RANGE64_SLOTS - 1); + if (unlikely((mte_to_node(next) && + mte_node_type(next)))) + return; /* no metadata, could be node */ } fallthrough; case maple_arange_64: - meta =3D ma_meta(mn, mt); + meta =3D ma_meta(mn, type); break; default: return; @@ -5497,7 +5503,7 @@ static inline int mas_rev_alloc(struct ma_state *mas,= unsigned long min, } =20 /* - * mas_dead_leaves() - Mark all leaves of a node as dead. + * mte_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 @@ -5507,16 +5513,16 @@ static inline int mas_rev_alloc(struct ma_state *ma= s, unsigned long min, * Return: The number of leaves marked as dead. */ static inline -unsigned char mas_dead_leaves(struct ma_state *mas, void __rcu **slots, - enum maple_type mt) +unsigned char mte_dead_leaves(struct maple_enode *enode, struct maple_tree= *mt, + void __rcu **slots) { struct maple_node *node; enum maple_type type; void *entry; int offset; =20 - for (offset =3D 0; offset < mt_slots[mt]; offset++) { - entry =3D mas_slot_locked(mas, slots, offset); + for (offset =3D 0; offset < mt_slot_count(enode); offset++) { + entry =3D mt_slot(mt, slots, offset); type =3D mte_node_type(entry); node =3D mte_to_node(entry); /* Use both node and type to catch LE & BE metadata */ @@ -5531,162 +5537,160 @@ unsigned char mas_dead_leaves(struct ma_state *ma= s, void __rcu **slots, return offset; } =20 -static void __rcu **mas_dead_walk(struct ma_state *mas, unsigned char offs= et) +/** + * mte_dead_walk() - Walk down a dead tree to just before the leaves + * @enode: The maple encoded node + * @offset: The starting offset + * + * Note: This can only be used from the RCU callback context. + */ +static void __rcu **mte_dead_walk(struct maple_enode **enode, unsigned cha= r offset) { - struct maple_node *next; + struct maple_node *node, *next; void __rcu **slots =3D NULL; =20 - next =3D mas_mn(mas); + next =3D mte_to_node(*enode); do { - mas->node =3D mt_mk_node(next, next->type); - slots =3D ma_slots(next, next->type); - next =3D mas_slot_locked(mas, slots, offset); + *enode =3D ma_enode_ptr(next); + node =3D mte_to_node(*enode); + slots =3D ma_slots(node, node->type); + next =3D rcu_dereference_protected(slots[offset], + lock_is_held(&rcu_callback_map)); offset =3D 0; } while (!ma_is_leaf(next->type)); =20 return slots; } =20 +/** + * mt_free_walk() - Walk & free a tree in the RCU callback context + * @head: The RCU head that's within the node. + * + * Note: This can only be used from the RCU callback context. + */ static void mt_free_walk(struct rcu_head *head) { void __rcu **slots; struct maple_node *node, *start; - struct maple_tree mt; + struct maple_enode *enode; unsigned char offset; enum maple_type type; - MA_STATE(mas, &mt, 0, 0); =20 node =3D container_of(head, struct maple_node, rcu); =20 if (ma_is_leaf(node->type)) goto free_leaf; =20 - mt_init_flags(&mt, node->ma_flags); - mas_lock(&mas); start =3D node; - mas.node =3D mt_mk_node(node, node->type); - slots =3D mas_dead_walk(&mas, 0); - node =3D mas_mn(&mas); + enode =3D mt_mk_node(node, node->type); + slots =3D mte_dead_walk(&enode, 0); + node =3D mte_to_node(enode); do { mt_free_bulk(node->slot_len, slots); offset =3D node->parent_slot + 1; - mas.node =3D node->piv_parent; - if (mas_mn(&mas) =3D=3D node) - goto start_slots_free; - - type =3D mte_node_type(mas.node); - slots =3D ma_slots(mte_to_node(mas.node), type); - if ((offset < mt_slots[type]) && (slots[offset])) - slots =3D mas_dead_walk(&mas, offset); - - node =3D mas_mn(&mas); + enode =3D node->piv_parent; + if (mte_to_node(enode) =3D=3D node) + goto free_leaf; + + type =3D mte_node_type(enode); + slots =3D ma_slots(mte_to_node(enode), type); + if ((offset < mt_slots[type]) && + rcu_dereference_protected(slots[offset], + lock_is_held(&rcu_callback_map))) + slots =3D mte_dead_walk(&enode, offset); + node =3D mte_to_node(enode); } while ((node !=3D start) || (node->slot_len < offset)); =20 slots =3D ma_slots(node, node->type); mt_free_bulk(node->slot_len, slots); =20 -start_slots_free: - mas_unlock(&mas); free_leaf: mt_free_rcu(&node->rcu); } =20 -static inline void __rcu **mas_destroy_descend(struct ma_state *mas, - struct maple_enode *prev, unsigned char offset) +static inline void __rcu **mte_destroy_descend(struct maple_enode **enode, + struct maple_tree *mt, struct maple_enode *prev, unsigned char offset) { struct maple_node *node; - struct maple_enode *next =3D mas->node; + struct maple_enode *next =3D *enode; void __rcu **slots =3D NULL; + enum maple_type type; + unsigned char next_offset =3D 0; =20 do { - mas->node =3D next; - node =3D mas_mn(mas); - slots =3D ma_slots(node, mte_node_type(mas->node)); - next =3D mas_slot_locked(mas, slots, 0); - if ((mte_dead_node(next))) { - mte_to_node(next)->type =3D mte_node_type(next); - next =3D mas_slot_locked(mas, slots, 1); - } + *enode =3D next; + node =3D mte_to_node(*enode); + type =3D mte_node_type(*enode); + slots =3D ma_slots(node, type); + next =3D mt_slot_locked(mt, slots, next_offset); + if ((mte_dead_node(next))) + next =3D mt_slot_locked(mt, slots, ++next_offset); =20 - mte_set_node_dead(mas->node); - node->type =3D mte_node_type(mas->node); - mas_clear_meta(mas, node, node->type); + mte_set_node_dead(*enode); + node->type =3D type; node->piv_parent =3D prev; node->parent_slot =3D offset; - offset =3D 0; - prev =3D mas->node; + offset =3D next_offset; + next_offset =3D 0; + prev =3D *enode; } while (!mte_is_leaf(next)); =20 return slots; } =20 -static void mt_destroy_walk(struct maple_enode *enode, unsigned char ma_fl= ags, +static void mt_destroy_walk(struct maple_enode *enode, struct maple_tree *= mt, bool free) { void __rcu **slots; struct maple_node *node =3D mte_to_node(enode); struct maple_enode *start; - struct maple_tree mt; - - MA_STATE(mas, &mt, 0, 0); =20 - mas.node =3D enode; if (mte_is_leaf(enode)) { node->type =3D mte_node_type(enode); goto free_leaf; } =20 - ma_flags &=3D ~MT_FLAGS_LOCK_MASK; - mt_init_flags(&mt, ma_flags); - mas_lock(&mas); - - mte_to_node(enode)->ma_flags =3D ma_flags; start =3D enode; - slots =3D mas_destroy_descend(&mas, start, 0); - node =3D mas_mn(&mas); + slots =3D mte_destroy_descend(&enode, mt, start, 0); + node =3D mte_to_node(enode); // Updated in the above call. do { enum maple_type type; unsigned char offset; struct maple_enode *parent, *tmp; =20 - node->type =3D mte_node_type(mas.node); - node->slot_len =3D mas_dead_leaves(&mas, slots, node->type); + node->slot_len =3D mte_dead_leaves(enode, mt, slots); if (free) mt_free_bulk(node->slot_len, slots); offset =3D node->parent_slot + 1; - mas.node =3D node->piv_parent; - if (mas_mn(&mas) =3D=3D node) - goto start_slots_free; + enode =3D node->piv_parent; + if (mte_to_node(enode) =3D=3D node) + goto free_leaf; =20 - type =3D mte_node_type(mas.node); - slots =3D ma_slots(mte_to_node(mas.node), type); + type =3D mte_node_type(enode); + slots =3D ma_slots(mte_to_node(enode), type); if (offset >=3D mt_slots[type]) goto next; =20 - tmp =3D mas_slot_locked(&mas, slots, offset); + tmp =3D mt_slot_locked(mt, slots, offset); if (mte_node_type(tmp) && mte_to_node(tmp)) { - parent =3D mas.node; - mas.node =3D tmp; - slots =3D mas_destroy_descend(&mas, parent, offset); + parent =3D enode; + enode =3D tmp; + slots =3D mte_destroy_descend(&enode, mt, parent, offset); } next: - node =3D mas_mn(&mas); - } while (start !=3D mas.node); + node =3D mte_to_node(enode); + } while (start !=3D enode); =20 - node =3D mas_mn(&mas); - node->type =3D mte_node_type(mas.node); - node->slot_len =3D mas_dead_leaves(&mas, slots, node->type); + node =3D mte_to_node(enode); + node->slot_len =3D mte_dead_leaves(enode, mt, slots); if (free) mt_free_bulk(node->slot_len, slots); =20 -start_slots_free: - mas_unlock(&mas); - free_leaf: if (free) mt_free_rcu(&node->rcu); else - mas_clear_meta(&mas, node, node->type); + mt_clear_meta(mt, node, node->type); } =20 /* @@ -5702,10 +5706,10 @@ static inline void mte_destroy_walk(struct maple_en= ode *enode, struct maple_node *node =3D mte_to_node(enode); =20 if (mt_in_rcu(mt)) { - mt_destroy_walk(enode, mt->ma_flags, false); + mt_destroy_walk(enode, mt, false); call_rcu(&node->rcu, mt_free_walk); } else { - mt_destroy_walk(enode, mt->ma_flags, true); + mt_destroy_walk(enode, mt, true); } } =20 --=20 2.39.2 From nobody Mon Feb 9 02:12:24 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE3E3C76195 for ; Mon, 27 Mar 2023 18:56:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232390AbjC0S4P (ORCPT ); Mon, 27 Mar 2023 14:56:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47924 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229479AbjC0S4K (ORCPT ); Mon, 27 Mar 2023 14:56:10 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6CA91BC5; Mon, 27 Mar 2023 11:56:09 -0700 (PDT) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32RIjNB7007121; Mon, 27 Mar 2023 18:55:59 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-2022-7-12; bh=oqMjgSECbhb2ee2JdWQ9pJO51J5IQJ32f74Nn5k9DEs=; b=MryWMl8KmznXf0RDBWUh3j4dFjj5X6fVozqSIxMmS/Gp4lMUKZrtOdN1KWAbNUDS2MlO KiBTYULfzTH1mO3jEGpG1jF/R0D0QlDtOz2c4zo9Ip/IEhsbiK72SviKZ/t3IvVwsKzW YQZoZf7LRf8TKJZk+kOrp70YOgXNUPpRdzHr+Z3Ck9OTjw0s6pcBCRxhHRgobeuqqEbI wsTZ2usQrnBKrTBzENKfRlE8qRsdtZzTyCE/13LkibEc5qElSWRB0SsMK5KerRiNXMlt l4Jg89paqIsn+DMJSWqbMBqtACHdTmuwPbB+hTHi3QStyECXmfmz+KgBjyG3GV3+B7wk +Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pkgpmr26k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:59 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32RIcRVv026831; Mon, 27 Mar 2023 18:55:57 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2169.outbound.protection.outlook.com [104.47.55.169]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3phqdbvywk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Mar 2023 18:55:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tc/vypS27vKDWYj7s/1C4DNccNZ0exxTQ2yyEqn9T3szwZuAJZ6IlOwla9RlLpHBFtZYol82f/TydLiqmx+aeI9zs5r2VSFuhCwjdC/qboqD9CGXFgjxyVgtkyyJwvxYdSZ0g3VoUW/FMuVAkLfPR9HrjYw87imKZzK0P67WFVcC6Py20bHA9rc1x0/FefI2Q/0okHJMi7LXurXdiAazbYfJTgJGVLi9NOpmRKngb2R58YSdaJRRa5dJWGbzF6eijDOjr9+mLNFDRNMwtqU1AVqKSGL4TJGpkh6SHEY34DLL5LNnZJT5OdZ+ht4yoBqSYSXQ67o9xnwUgfndNGXLew== 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=oqMjgSECbhb2ee2JdWQ9pJO51J5IQJ32f74Nn5k9DEs=; b=HSAR8jW9I0G2F5lrPOI4imsKXIXWdLjF3zhFbg9QQ4Ju1ZYW6qRHVSO8ATImlOES4YitBVlIV64V1FwJNe2wMpIYDRxSp+o3PmUQn740amKp5YwL11SRBSXlt2nq19NWW+HHO/eY1aKPkT52VPaJmEAB4udVAUiDNXse4dFM+LlIXTOEf5ylBRvCZqWJsjMFeKwsPIZe34uB8haYHw7aRio78bFArDFeOGQ+lS0BE5RgAmuQzKa0/BqoAZ94Xs7k//5fcyKruB8SUkWCs79egbKiD1Jc5PIeB2JNvwReITCj5n+rBVmlxDkywbqv+mPFcR60gGQqBz+eUEIC8XRYCQ== 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=oqMjgSECbhb2ee2JdWQ9pJO51J5IQJ32f74Nn5k9DEs=; b=JzE9gptEgPzkjyz5ZD739tT3VkB+KzpFL7LvSsHGsu19oEooWTbxxavA0Jco4pxRr5wgVfEZrEDFXXTGy0Pd1TGKE4h5tMXmxKTm0FRM9DgWRS8dHaYRVof/+peG/Z3p0PI88xMO7F0wOJbIR0UHJoMk6nQ27IINQQCDwzbtLzQ= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by PH7PR10MB5722.namprd10.prod.outlook.com (2603:10b6:510:126::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 18:55:55 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::9fc8:73bb:cc29:9060%5]) with mapi id 15.20.6222.029; Mon, 27 Mar 2023 18:55:55 +0000 From: "Liam R. Howlett" To: Linus Torvalds , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Suren Baghdasaryan Cc: "Liam R. Howlett" , stable@vger.kernel.org, "Liam R . Howlett" , syzbot+8d95422d3537159ca390@syzkaller.appspotmail.com Subject: [PATCH 8/8] mm: enable maple tree RCU mode by default. Date: Mon, 27 Mar 2023 14:55:32 -0400 Message-Id: <20230327185532.2354250-9-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230327185532.2354250-1-Liam.Howlett@oracle.com> References: <20230327185532.2354250-1-Liam.Howlett@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YT3PR01CA0089.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:84::20) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|PH7PR10MB5722:EE_ X-MS-Office365-Filtering-Correlation-Id: 6608797e-bcf7-47cc-94c2-08db2ef4e4b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3b4xqWDOETz46XBJJ1S2jHl8fuSd8So+0hx400NPHVXNr8EgMhM9WcBaghbRm/lghs0BYDm7JJg62lSaVhFQq/mYxmwSGSfsyXHc07pubm6EFgMq86kptOQuiFq0KdiJ6ICDOfcZ96OwMPBGlKgEPfJEIj08O8jkNHhaNFVAqHB8F96cPnU+X+pGhYhjzAThKEas9P5+HHHxfF+ov2GgwSXrZO9Fdt7vMWHzXsDZ7vVim/ifESZ+3hQ/i+G/4Yh/ScBFT33G3h4PPbooJenvaZTnjoGjIo1xBB6fTHp68VtgnKhVLSANBzZC+1aE9+C5PzN3KzUjHTXZh5xqAF4Coy0J6Mel665M4Pwh2SfEDY5yqW0FF7w92zTGlRJHid8RV7N+phSccX349FaiBXf7FH1S2gU4I1OHFFrP2mAxi7hArLM2LJjzpjceeIAaCFvxK9d3XLcExg25YYKCBc+uRamWtUwuRJG8PKAbbQF2oNUPh7TgY0miSmcc7u3uPgN9wi7Ck9YxQwjRNTdbJ800IaPlhOl/twKcuVAPZeKirURLOQiP3uQTG2z+02yt2kfkUI4vnc+YItLTIxQ0Rywh8g== 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)(376002)(136003)(366004)(396003)(346002)(39860400002)(451199021)(2906002)(38100700002)(83380400001)(36756003)(5660300002)(41300700001)(8936002)(86362001)(2616005)(6666004)(110136005)(54906003)(6506007)(1076003)(6512007)(26005)(316002)(6486002)(966005)(478600001)(186003)(4326008)(8676002)(66556008)(66476007)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?O7LXugZrmMHK6qfGDNwkmMBnlCVdpgBHW3OvNDPxh5peACG79WYhghZCDQnZ?= =?us-ascii?Q?GtzWtkFbUjZfKmcIfiNeW474bQ+IlQbmT5cWp7KiLrmR6n/LXXu1iw95ATc4?= =?us-ascii?Q?h8eVsiutstWptNIPWmweVD1UK3NYzGFRjz74AtKsoXK7t7IH0bNBS3iqrrhn?= =?us-ascii?Q?f5Uzz9rJipS09FMckG0ui+mXCvV56CtqwoXiUfePuTDo6XiYRMsOj+Cnkfmq?= =?us-ascii?Q?RQ0OvrEWATbKIMxMpOcIgD0XDLR9psF93QSRh2P7wosI7ha5xEPLtZTZjNng?= =?us-ascii?Q?Tiq+EW8TSXVgoe4jJjJs35G3rZaGqmWaBq9L40VDqq8vtVK8XyXWIrmLSUHe?= =?us-ascii?Q?SpU397vCBDOy01Qfdmvfdtext88ufmbiWDou2WH0ztjoaihBcwi86gJxxuhA?= =?us-ascii?Q?wup28ZjdSecgSNTjSUpagw8oLSrUDU6earr9V5u+AONSu4zTdjfT+oDQj20H?= =?us-ascii?Q?BLyT+14F0Qg0RCJCtsRW1O7pn9UiVH/ZysHRvjjUwmsf5LEgRjH/+IoI9R52?= =?us-ascii?Q?VU8GtXNu74LlHiJ1VjZCSInNZx4dtbEzieF6n39eG0pa1ROR7Hjn24S81lAT?= =?us-ascii?Q?koLZoduClCzkNVSzSDMICogHYQzDO39hNKuBjJd4N8kr5RpQ1/6zJ6qgyYxZ?= =?us-ascii?Q?hcyUkZZvtLL9iSprKC58X9lBPtapzukSs9RzOJTGAhpO4b1vrFKgyPLSgEDN?= =?us-ascii?Q?LTZb/Rx1Y9nrG4NXltDP5byqZs4XyTZ72YxOrGmsH3dXAQuaBhumuz4bU3S8?= =?us-ascii?Q?6wQVn8cETZymadhvRE9aO2zZOWdKvz4Gnq0C+ByYLT/S3JiA2qjXP2hlTZ2B?= =?us-ascii?Q?uhBTtHOJQ9iK8xHKUh91AcovSOiCZXux2W1Is2viqX0Wzo6E3acevFKwSdYi?= =?us-ascii?Q?QULrOnWIxHFXpN9I8jXdEBlNo6ZVkNWXwWp86NmBgQG2yfYpiGcRsrW5Opn0?= =?us-ascii?Q?bJZIq2XeeAANngfXYli/F7FN0VsAf0j9ZhyWQ12R33VDPyk3ebiTXo0C7ANO?= =?us-ascii?Q?uE9sBJRyXSGoqJY+jaZfZq8S6zabXb5AaMP+B+ErLuEh4idughuIeOh5sYHC?= =?us-ascii?Q?EqW9f2JWyb9IOK6WKPpIAIHquo0m/av95bPNUAix+YYp7ZozYx4kcMtI9n87?= =?us-ascii?Q?qjLrQcgsQUPhnlw94LM6c5sEB7QPBASASJf+XJFmQW9QJSnudzAWft+ikCa2?= =?us-ascii?Q?326H36TlOqi6g+yoNf0YBgn9hX5p3fzL8LbQVTx9H6PsUkPXfVRdISvyJXeq?= =?us-ascii?Q?2QvQP6eqzB9DK9HrIdgfSqmHmoxPd0gbdYv8N4XrqF9HePEsOcwyL4ZFqqzf?= =?us-ascii?Q?iMw7ubr0/RyjQtFfi6FtgfD0SI1osVYfn3ov34oIJOkOxtO7CnYvv/gOL/5P?= =?us-ascii?Q?bsw5mn7EY1VnzVNrKjGpqm0KDFlEwRfhYroZigOPgBw42RSRc8vq99xiBTsb?= =?us-ascii?Q?0pozZRPH4Jx3z9OdkzNMajyUGB98TxX33brcgRv/3tolId07S7ok/4zzea6E?= =?us-ascii?Q?djxnCSkQAdzUVAYK02PFluW1OimaoG6Bf9bYRw4AnqqJPF9AObMoZg4WM13x?= =?us-ascii?Q?5eFsEsBL20RTHaxSV4m207ap7MfpX7wnFyUknibplQbgEYON2hi5XF2FLJ8v?= =?us-ascii?Q?Hw=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?us-ascii?Q?dGruqNlnqqEx5TK2EwswUyii8dTXcTjaYv0c/QYUrCqVnQs8vi9LDqfO/Htv?= =?us-ascii?Q?cJmNFW8YsiZ7ipMoYbDVo28yDHOTHbLucs6MZ135zN4WyHz5xIeF9lEK+nd7?= =?us-ascii?Q?Vtb6LYqpYeidMqJcQkGwEIC7qzuVPWfUypswifH4sZaStMnrBqBeGdG0UhUD?= =?us-ascii?Q?s7ocJlISwzG3PEZIIq13If0mwLqySNG5qyh3t/p3TdCcqSIUEfVxUnf0Mheq?= =?us-ascii?Q?5dZWoFLC7pPd4RQDn48sBByHCG+TRaNJm9lpUXuI/VfMUiZQRvXFFWu923TP?= =?us-ascii?Q?1acanrUBLumoZ2zAX5QFkkIgDelJFsBSoSLSBgAGQbhBnghQ+a26Iyy3r4T9?= =?us-ascii?Q?aPw6E5mx0qXuIEbewhLT2rtNNNlRpiHGwv49glbpg6uLX9hCo0BloVLRpyz2?= =?us-ascii?Q?W+FZnPwrImQqPJMKYmEPbOIbnYe9CWQNcRNEvUTfXUkdyjYVIOZfTKcpkVle?= =?us-ascii?Q?yHgcd0S2PyY39kdihClM80kFQ+a35TzndiZqtWKxBeHGC17cSSl7BqKwWXKW?= =?us-ascii?Q?B4xBWP3Xb07pRjCWyeDEcVgu8ZifmMhYPp0r1SMjms7OY1eUcA6GLQI5oumI?= =?us-ascii?Q?5mFFlJxQLuoK+wErrkXVwkuZeR5eZMNvlYrix55grOUIRVlw4KKf0bKZmojG?= =?us-ascii?Q?9gLLVGjrLR1HoJjZxgm90+20Hy21aaJ39t4QvJ68mQc3Ec3X5tVK/TW4G4sY?= =?us-ascii?Q?JAXnA7q8l+yNFMth0mtbScuGozXAILoetSRzYXhnd1dQHdF+AXWJDlUT9xk/?= =?us-ascii?Q?7Xd3Cssg/jrLGyHBqY0/oBmQ89Lc6F9QPmypkW0dRuJj4y0YXB2d0ES9UgnH?= =?us-ascii?Q?PSTSCkaFzBxaUGct4eJqrD0wKIbD+86UvVQsZp92pjsy/FHzUolYu5S/fUaA?= =?us-ascii?Q?6FM3xT3V1+8zSEHW9N+y5nTegaNVserD2zKPSNBHSbxdpv3c+cl9Hol3Yhct?= =?us-ascii?Q?KT1t2uqclC1G64SxTpMRg9+YQlJQRVSXbJby3HtY+LpfS2C9EGnzsb8h1MTU?= =?us-ascii?Q?dABuO6KRUmw05US8PQ+PtP8ddQ=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6608797e-bcf7-47cc-94c2-08db2ef4e4b9 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 18:55:54.9055 (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: Bsvs+oCyozlh35lJ69iBDHCeM19ykRk3ToUb8sneOtdTcvJz1fspGecjup31rcRyUnFdp9F6+Cv279prOaJPlw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5722 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-03-24_11,2023-03-27_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 suspectscore=0 mlxscore=0 mlxlogscore=436 spamscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2303270155 X-Proofpoint-GUID: 3R6cOwk1anQb4C3_qvpqgQRBQ5NbA7Ce X-Proofpoint-ORIG-GUID: 3R6cOwk1anQb4C3_qvpqgQRBQ5NbA7Ce Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: "Liam R. Howlett" Use the maple tree in RCU mode for VMA tracking. The maple tree tracks the stack and is able to update the pivot (lower/upper boundary) in-place to allow the page fault handler to write to the tree while holding just the mmap read lock. This is safe as the writes to the stack have a guard VMA which ensures there will always be a NULL in the direction of the growth and thus will only update a pivot. It is possible, but not recommended, to have VMAs that grow up/down without guard VMAs. syzbot has constructed a testcase which sets up a VMA to grow and consume the empty space. Overwriting the entire NULL entry causes the tree to be altered in a way that is not safe for concurrent readers; the readers may see a node being rewritten or one that does not match the maple state they are using. Enabling RCU mode allows the concurrent readers to see a stable node and will return the expected result. Link: https://lkml.kernel.org/r/20230227173632.3292573-9-surenb@google.com Link: https://lore.kernel.org/linux-mm/000000000000b0a65805f663ace6@google.= com/ Cc: stable@vger.kernel.org Fixes: d4af56c5c7c6 ("mm: start tracking VMAs with maple tree") Signed-off-by: Liam R. Howlett Reported-by: syzbot+8d95422d3537159ca390@syzkaller.appspotmail.com --- include/linux/mm_types.h | 3 ++- kernel/fork.c | 3 +++ mm/mmap.c | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 0722859c3647..a57e6ae78e65 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -774,7 +774,8 @@ struct mm_struct { unsigned long cpu_bitmap[]; }; =20 -#define MM_MT_FLAGS (MT_FLAGS_ALLOC_RANGE | MT_FLAGS_LOCK_EXTERN) +#define MM_MT_FLAGS (MT_FLAGS_ALLOC_RANGE | MT_FLAGS_LOCK_EXTERN | \ + MT_FLAGS_USE_RCU) extern struct mm_struct init_mm; =20 /* Pointer magic because the dynamic array size confuses some compilers. */ diff --git a/kernel/fork.c b/kernel/fork.c index d8cda4c6de6c..1bf31ba07e85 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -617,6 +617,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *= mm, if (retval) goto out; =20 + mt_clear_in_rcu(vmi.mas.tree); for_each_vma(old_vmi, mpnt) { struct file *file; =20 @@ -700,6 +701,8 @@ static __latent_entropy int dup_mmap(struct mm_struct *= mm, retval =3D arch_dup_mmap(oldmm, mm); loop_out: vma_iter_free(&vmi); + if (!retval) + mt_set_in_rcu(vmi.mas.tree); out: mmap_write_unlock(mm); flush_tlb_mm(oldmm); diff --git a/mm/mmap.c b/mm/mmap.c index 740b54be3ed4..16cbb83b3ec6 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2277,7 +2277,7 @@ do_vmi_align_munmap(struct vma_iterator *vmi, struct = vm_area_struct *vma, int count =3D 0; int error =3D -ENOMEM; MA_STATE(mas_detach, &mt_detach, 0, 0); - mt_init_flags(&mt_detach, MT_FLAGS_LOCK_EXTERN); + mt_init_flags(&mt_detach, vmi->mas.tree->ma_flags & MT_FLAGS_LOCK_MASK); mt_set_external_lock(&mt_detach, &mm->mmap_lock); =20 /* @@ -3042,6 +3042,7 @@ void exit_mmap(struct mm_struct *mm) */ set_bit(MMF_OOM_SKIP, &mm->flags); mmap_write_lock(mm); + mt_clear_in_rcu(&mm->mm_mt); free_pgtables(&tlb, &mm->mm_mt, vma, FIRST_USER_ADDRESS, USER_PGTABLES_CEILING); tlb_finish_mmu(&tlb); --=20 2.39.2