From patchwork Mon Oct 28 18:09:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zi Yan X-Patchwork-Id: 13853816 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2AB7AD339AF for ; Mon, 28 Oct 2024 18:10:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7BC6D6B0098; Mon, 28 Oct 2024 14:10:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 76B806B0099; Mon, 28 Oct 2024 14:10:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5E5186B009A; Mon, 28 Oct 2024 14:10:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 41C166B0098 for ; Mon, 28 Oct 2024 14:10:02 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C80B9A0D92 for ; Mon, 28 Oct 2024 18:10:01 +0000 (UTC) X-FDA: 82723799088.26.F5EEF6D Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2079.outbound.protection.outlook.com [40.107.92.79]) by imf18.hostedemail.com (Postfix) with ESMTP id B355E1C0013 for ; Mon, 28 Oct 2024 18:09:48 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=UO1ewc1Y; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf18.hostedemail.com: domain of ziy@nvidia.com designates 40.107.92.79 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1730138882; a=rsa-sha256; cv=pass; b=YkV7uJ+iIqM1YChNPzGoyZzBaT8ymDM66RRwW5fuZVePUANleKa2nmOGMJdTe8F87n3UtG 6zfdCNMUuRxh9Emo1AtxTdCCDc+BW0XgV97STJXGkyU8H4MmHU9s4o0KNh648OuvdBAhp4 V0DOYNFD3uDBXMdE9duC9Fe5STHBhQ0= ARC-Authentication-Results: i=2; imf18.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=UO1ewc1Y; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf18.hostedemail.com: domain of ziy@nvidia.com designates 40.107.92.79 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730138882; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=AhNkdqspcPomZkV63jkM28jRLYXSPL4aGY/j8a9zQs8=; b=u55vxcxZHUNkaN6ggCTIdXQ8te15x2hwgiUTVJl/cAplDqWm8udQsSUmJX43KAyepBaEb3 ugKbl+j59bQ0qnyBQFOKWAuTB1VY8f8vGjOIATyJGo3IHfRy/FSS2+Ga58iTLJ0HtGz91b bAwOoAE8vEJ6U7ZLnUwrVksUcHBFQQ4= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j8Z6nEbUCz9V5kZQacygwwdLpL5oUlCwmfNv/gm9Ondi3klb/UuH/OTHo1Rh6QEJR3YhhS2b6+NZikwo6QeW2ZeN5xlrFjoZOWCrqaUM6NNqTfcGc0bLp3t11dIBGR6YSiWH2f+84DkJLdkgyd77kidOO1GAmaxLcfNyE7X7wQIfGnDtaZ9ZGX+GqqlSFHAj9FBHvyoojx1xAIs63nAFru71ZNHwPnT9sxBwrfGFonXxfQc98UEH5U9/QQ8EljC0oCWWkvjD/SFyFuSgPSwOdxa8DJHU9OUnnU8eg4CJ83OZIuTdZclw3HiHimv5KX8aUjK+9px0N4I0C5/2TbH+BA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=AhNkdqspcPomZkV63jkM28jRLYXSPL4aGY/j8a9zQs8=; b=oeGio1ITn2cFeOfmk0L1VhZ7qQAxZTyqFCpiKdbvaLoU4ntexz64Pc5NjtxCZvGjb+3gTTfZBgbwSZ4cyWWyFwrVTN4PyzFiO5kul8bu7An9LXsCudybTewhngfCgp2Wmd7Xxr+Dyf8zFq/OPwalS4SVVDsvCVwJMlzoYwdbiubdKHfRXuYqAfsJHJHo3VuVPnYL8c8lfIa46oLuUPmrHIwk3POUAQ53R7igUbMgLPNQTR2eb+KvSVZnEldxwH7bls5ts9KKu5mD+4Vxg5/Ne9xF4IMb0RvcGoFgqUWo+7DWZBxSYgs9+cDSmgKvsDtrBG2P0O9ikpg0Gc0lrTvvyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AhNkdqspcPomZkV63jkM28jRLYXSPL4aGY/j8a9zQs8=; b=UO1ewc1Y8npkvtZsO9QL8kbOCf7OEMTSipwBYPU6cuBc/mlmgrdjMGMIKRyCTi58RTVVbjYvYLPdLJE1IkTdRpUnPUjw9LL4rAPO1yHWDuEOP874hfH7Vp0i4i853DUYQwpuma6IbrwYnl/keFa6qa0BOhpNEbTQeuEZ5OPW3lMYGk3cC85LHCTK3aebYDEhRUbW91Hp6bREPdnVn/U/fGdmmEsuRNVlUgTy4xl+rBuQiXO25k50qf9Fp0p82YnN+2YLqoygqsxkXg11Ryy/eU6S4+D6GslDxLpb1hNvzlZrlvH3ZYzgxWz/QeVFOmza2WH8KiT0E0Z9WrBm29OEGQ== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by CYYPR12MB8701.namprd12.prod.outlook.com (2603:10b6:930:bf::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.27; Mon, 28 Oct 2024 18:09:56 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%7]) with mapi id 15.20.8093.021; Mon, 28 Oct 2024 18:09:55 +0000 From: Zi Yan To: linux-mm@kvack.org, "Matthew Wilcox (Oracle)" Cc: Ryan Roberts , Hugh Dickins , "Kirill A . Shutemov" , David Hildenbrand , Yang Shi , Miaohe Lin , Kefeng Wang , Yu Zhao , John Hubbard , linux-kernel@vger.kernel.org, Zi Yan Subject: [PATCH v1 0/3] Buddy allocator like folio split Date: Mon, 28 Oct 2024 14:09:29 -0400 Message-ID: <20241028180932.1319265-1-ziy@nvidia.com> X-Mailer: git-send-email 2.45.2 X-ClientProxiedBy: IA1P220CA0004.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:461::10) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|CYYPR12MB8701:EE_ X-MS-Office365-Filtering-Correlation-Id: c657f5e9-00c4-47f9-0f69-08dcf77bba1f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: 3EzCOrt+oFN/GYfijRWUJmR+FcDllTN4lVQdLUyqWbFKP094nWWaCDMbHM+IoCxPPay+wI7+kqMOstluexO3aXfF+KhxEV5CoDBqKKIdO56LMgMVfg2QuO5Lruq/N16U2DmRPeYPDk3WzEe75RLysSDjjs9WlnCbrDZbJzvwGCtZcp1Msfb2JnJwjrZBdwpQt+OM/WXTJQ/aL11DA/4YYTz7rLSQWuwBru5l7IcFelZ9fw45iMxC64nQYRW0znf0v4DxGIbsNt6RgW4hxdYLpXKhrpjlmzenXdusOxwDagFSdC/FPTyDSiu+Zi5IdoXj6FHCrZWRWpUyf7rv6rt6jdRiwAnfKEoC6xmOyQ0FohqKsPoOCaGg8xVr6OGYTaM4AagZvFm20eVV+pbBbWPMl/GCoh16CUgKTNJAEcLS+03mQZ6f8yQu6tia/xaY8RyhTTjaAM5T9rAD6tZYTQbWxI2BkSWe9Vl9ol32WirHM35CxKyf6t8ZKJVa4zjg81kMMWUtlW2pKXR1d58LgBp5m1N4dkoPi3gjg2EhdCRsaRZXwgrWLJ6dFxNyR1saQeoos+1/+oXj1Mzid3EPmLwR8MNzK1I+4sgvbZK6b4OVgjfn/2Z9KbT/1CTEULkAimJ7FfGboCi7znJ+Hzah9HoHrcqb9w1/h18F49Aiin37IrTJFXcCiBwjG06fgVjoGEPJKLIONJjxU45fdDMxQ9CMDgwesR0iRithtNpCA0phqvkQLtUJvTm8lyJJAhkAPAbU5Hm0W1vsnLYlfeM46skT+wdN+xNS+15sDjdUmt7OCRC7bljX5PocG6raWYEzYgSmb8GPNE3Pvj3jgN+2SLhwpqk1MQbufIFWLDAvzb3vcW11SPb3kQqYRPWHNycLf5pUC/HxoxRGJoWcYsyQUd2B45uJ0S5TUDwu639BjesV8Xw839sVIbImaPz3fsnAnGQbIhyTpZq8bsoXF8cma+Trs0NaV5dQP5pemXQMiD8rldxuXt4PQ0XpYEfKGBsd5Q+a4l+JnGHtRs2HNMIEf9vwRC/cM4AIFNwyLQcumBppm5YUpA4ce4wfKoKuzbjGWKRExS9ne1IgbZSeI66xk0qZHyQV1yZdq+SAg+KiFzfV2BDqrK1tkrLYZnm8BIEwsunCe8oCytCI094YXTz4woq8roSU3/jt9DQ4eVzGvMkcknPtjtvil/mkVa6UlxUlncpO9OceK511FSKSsXYDnGCCgI5MAlvC2LzDw2OlbjPzIXDx3uNXSO9tDUR8CCxCS4qSOWKGP8EB0/Rwa60EAxWL89gfKfaOOFmZW1x2TiwUJLlA6UIR6QPMvnQmLN7Vt5j8 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AUkk0owgh7+XO3MyXUnFffZQW6VEhEQZLsxyVXIs9k4ciEamQTUS/RaK7FYt8MCzSua7+cuNC1rOJIyn/nxDYca/utkcQqtv29HjopnvaavHW95ITZugYDjRFAJw19ilcmJgnB9YWvtTvTdgd4n8iqA6SMnfWkUtMQvehPwxGLxglsdCOlspsCRkH+wooFB9y1/g7LcXwPRkwY+vmpdLE442IKIjkBe8N1quZdikrnLrVuwfetg5QnIsc1M+oWQybvhQP8LGvvB6SZsMIYtvkku2ZtKQ7vmlj2nB6TLisy+IymaGo9ZqoyEg2nDjN9S7fMU/HqxhQYxXEW2i3TPp0V81JRANbChJYunvUYkH4uetK7Fkade6GpX29uN8JgR0Fiwt0KjR1koR6rVZOtKtfPwLCG+5rbOIMaeTVQdS0IS6SuU8f2EGEb9K+f9hl7XKU5tD0o7oRm1MFEo+pgA55qQk0y0rLhbXJtgEe0DGNNlxLUZ3PDNXEaDvf4az+yniiZlB2wxGMsVIDGSY2YrjaQ4frVGRK71oXpthdtpWZ2xjvK4GoKx8XgFn51dqGwN7JmcnWvYx0AIXJ/zVKkauuZPax6SVD9X6zaaRnZralVDcWTT2+8jfM5lyxyX/2WqgMRd9MA/VKZAFzmVN1dIEZiLrHp6Aov2CBQWy6ZRtQ2h8AlHpmkHUexhZm72QvgTuioZK/HQtn4wENiL16R5B1Gl8BIKIICxa06oTRltUk0U9l5oxNor4HCZ4MfrJEjwSffvtgZCedufUEuUhJ/8e38F2F11B1NwK9VQ6ckBAvwhJL8jK0HE7ULGstGRe7rKpAgNlEmFcbYB6HmoSdyvnS1YmJgvlRhQkoVM7ivLBbMgOJlnaiMJS/1ujWdMjsoDfQ/mm2XiG7vWo99veU7fE88/34tG2+g/6pHIF76Bb0B/AlxLCxbzrAKKq31Ej9TskYt/zTVHwB7bdfJu6A8ZLNsw0m4NktnfFkhTgarPso7gZYej7iJ3JwBgTVprSR8rYvr3Gs1M0koxGHY0R/20mQ6tqEKnFF3PjIWYm8Z7Jetn++0oXVOkhaR0/ChJIWWnCFbvGer/MutKAuQ9tIsMyAKT1BBnZ4/6iE3gSipXYz7C9hyt+IdlXacIh/Ll9ou5NpVyRtVPD8Ueh3ZVWmFT/vIVhBwgmL0PfrVm6XEe4XagRviMwkRewSPRrOjLTXlEjMUcTckkGHjJSUp5roE+KyuDeTRhHX9HvxQChwDDeoK+KJbejXXhTqUTPrTBfwodmpxCOIQ3nKzFAelRDFaNKCrmq7wnktQQc53Rxe6p0z6fTB7YwqLedRzApqXE0QBoCr7gwqCDhOcaaft/j9q0nYc2KUrWlC6dWW0yZzO0yc6fU6hjatrPMcdzJQPSfEhMXSIdd70gJ3eanIoOuhSDaN4vIzGgZWFmF0apRTHY8XTLbNi6yGckTnCnWmlJvFgq1Nj3wzk8d/Wdckj1IA27afQWVznDQR9KmduiK+BI+ZAdo1TX9E2MRK5up9o3Px05ntsVvHH6PgPg1YMoU3SNiTats8sKiu1Q6ucpJw6wqi/RfapEgTmVn77rKNE+z3zhB X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c657f5e9-00c4-47f9-0f69-08dcf77bba1f X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2024 18:09:55.6752 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Vjw3gN1OnCePn9oakQMSeBRjplftFAo7BsTXS7y+Mtd/JwOfZ34t32kC7H4W4kKp X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8701 X-Rspamd-Queue-Id: B355E1C0013 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: s11ifauqpbf8c3473xuape9r3c4m4pun X-HE-Tag: 1730138988-370631 X-HE-Meta: U2FsdGVkX1/tn3jZ7dOmhIXDlsF8yv3TAhw6KysxtiEGdmiLQSHXVkql9/KdYxPBh8L2d/uVV7U8yIla1eLt4W0VWtYcfo22pFNBj8FLuQf5ezrAh5n/BdcDNjVtWrKbbQ19sVHOZQ5H477WTdE3Lan05rydsTQ4OpX6/vz7FWIBvxWpgM1xFlm6idS9CB0yXhUF/KReY9Xmi054VW5kFA0BVlQi4XU3FgrTT+RXsd/7SOkTW20pxG5XDeaHNbAWpHLU/bG0WnJTLeol92hdVeOyY3YsrFl128hVl0vvlG1CEDjEWMO7WkqPtEepedpEhZ65Ate11JVBSJnJMFU7K/JnTolQNW1lxAP/ZoZc9AEQw2B6RJsHpSjPCN0tZgFWPc8Tq4cfSwjHh8zZgO/YhPYUuz/zoCseiR5j6pprC1KrnLlGisOn4YC2RliaCjAlyUCqBQPm1wKJIfKAeJGeBNHKTrjtrqvEttj3RMYUy0gXSOrRN3jdVYss72Dvdc17JEjoRdDD60WSAnp3U2GvRna213PEg+T521IJlwOKdvq2NSZsFJBZn3VjgpUWjTDlsZRS/lkvvHXgEyj0PujcSGrpp10BwsScHtRfGDSGNAQ2qLIOYVtgztmxfqA2ZZi/G2tV7GdmwhknfXlW+w2xdGuy3YkxWeaXuLWthP9Jd8yH03Oo2hZEqtJ+Fs9hglVYkCD5oEBMuxcqPsErTEX3OhiFOYeAglphe0pe3bDPuE54SYJZsycP34YaSQGDEDEF3YPpzC1SUppTzOJSRdf1Q0KoFMCEOZ5Tcad5raR2UWRGMqU/8mMD4VRT4fP4G0bPOlLu3vTwYLGOlDWFF1uhvd3NBpjcPDe0EqVkVQ2f0VdNYz5ewIwdUscUouYf7/PJNEqizRakmslDRx5Kwsa5d2q/1SKoAMhznCKEOdxiw7oQWx6/P7Q+qF3bqv/Jux6++cmclmEHpMuqHyvurqC rQ7m9WVs XcBL0rro7SOiUg0lWQmQtjS+Pxfu/Ng3aja0tFDJl6WTSvef2ZMNiR6of0W4VLt+0f2uow8S4QC193yFQN19C/MERgBue2WrjmnA+U1czNDL1qjLKhDD6+s8+TktrQEV+v54MyzpLYScc3mGQivz6NaKROK0tfa9LUzIOtQUvdfjEAo0Toi2V0u7oFGmj3jes29mAuMwVPA8rWfUtDI2bEThc5w2Zbeq82DMef44O1JSkbU5Mv+cu2pVBl3AGhTckvLlaDR/JynBNr1nljg6xKUlWGkXc5zeySie1oZ0A8OzfCPpN+0j9t31WJhlFISyNjpk+ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi all This patchset adds a new buddy allocator like large folio split to the total number of resulting folios, the amount of memory needed for multi-index xarray split, and keep more large folios after a split. It is on top of mm-everything-2024-10-27-03-16. Instead of duplicating existing split_huge_page*() code, __folio_split() is introduced as the shared backend code for both split_huge_page_to_list_to_order() and folio_split(). __folio_split() can support both uniform split and buddy allocator like split. All existing split_huge_page*() users can be gradually converted to use folio_split() if possible. In this patchset, I converted truncate_inode_partial_folio() to use folio_split(). THP tests in selftesting passed for split_huge_page*() runs and I also tested folio_split() for anon large folio, pagecache folio, and truncate. I will run more extensive tests. Changelog === From RFC[1]: 1. Merged backend code of split_huge_page_to_list_to_order() and folio_split(). The same code is used for both uniform split and buddy allocator like split. 2. Use xas_nomem() instead of xas_split_alloc() for folio_split(). 3. folio_split() now leaves the first after-split folio unlocked, instead of the one containing the given page, since the caller of truncate_inode_partial_folio() locks and unlocks the first folio. 4. Extended split_huge_page debugfs to use folio_split(). 5. Added truncate_inode_partial_folio() as first user of folio_split(). Design === folio_split() splits a large folio in the same way as buddy allocator splits a large free page for allocation. The purpose is to minimize the number of folios after the split. For example, if user wants to free the 3rd subpage in a order-9 folio, folio_split() will split the order-9 folio as: O-0, O-0, O-0, O-0, O-2, O-3, O-4, O-5, O-6, O-7, O-8 if it is anon O-1, O-0, O-0, O-2, O-3, O-4, O-5, O-6, O-7, O-9 if it is pagecache Since anon folio does not support order-1 yet. The split process is similar to existing approach: 1. Unmap all page mappings (split PMD mappings if exist); 2. Split meta data like memcg, page owner, page alloc tag; 3. Copy meta data in struct folio to sub pages, but instead of spliting the whole folio into multiple smaller ones with the same order in a shot, this approach splits the folio iteratively. Taking the example above, this approach first splits the original order-9 into two order-8, then splits left part of order-8 to two order-7 and so on; 4. Post-process split folios, like write mapping->i_pages for pagecache, adjust folio refcounts, add split folios to corresponding list; 5. Remap split folios 6. Unlock split folios. __folio_split_without_mapping() and __split_folio_to_order() replace __split_huge_page() and __split_huge_page_tail() respectively. __folio_split_without_mapping() uses different approaches to perform uniform split and buddy allocator like split: 1. uniform split: one single call to __split_folio_to_order() is used to uniformly split the given folio. All resulting folios are put back to the list after split. The folio containing the given page is left to caller to unlock and others are unlocked. 2. buddy allocator like split: old_order - new_order calls to __split_folio_to_order() are used to split the given folio at order N to order N-1. After each call, the target folio is changed to the one containing the page, which is given via folio_split() parameters. After each call, folios not containing the page are put back to the list. The folio containing the page is put back to the list when its order is new_order. All folios are unlocked except the first folio, which is left to caller to unlock. TODOs === 1. xas_nomem() is used in buddy allocator like split like Matthew suggested, but I see kmemleak during its use. I would like to get some code review from Matthew on it. 2. A proper error handling is needed when xas_nomem() fails to allocate memory for xas_split(). The target folio should be put back to the list and all after-split folios should be unlocked. (I realize this when I am writing the cover letter) Any comments and/or suggestions are welcome. Thanks. [1] https://lore.kernel.org/linux-mm/20241008223748.555845-1-ziy@nvidia.com/ Zi Yan (3): mm/huge_memory: buddy allocator like folio_split() mm/huge_memory: add folio_split() to debugfs testing interface. mm/truncate: use folio_split() for truncate operation. include/linux/huge_mm.h | 12 + mm/huge_memory.c | 650 +++++++++++++++++++++++++--------------- mm/truncate.c | 5 +- 3 files changed, 422 insertions(+), 245 deletions(-)