From nobody Tue Dec 2 01:26:47 2025 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010004.outbound.protection.outlook.com [52.101.201.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C438C2BEFE1 for ; Sat, 22 Nov 2025 02:55:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.4 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763780155; cv=fail; b=bPgaN0Gl6zR/WHrcGZcWjUgjmVazrkmjjJVLO27KeEEzeV/I1vIZUDaLine6VEoycyr38Y2sHTIikRDAHOt4J9bL3pbNBWGjLAgp3X6IKN0XaIf96cFCQnmzEKHMla7404lUq8LYMHII9dNBUagZ8pc451mhVBgukVLN0r9WPyE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763780155; c=relaxed/simple; bh=amfS8W1VrXmTge5UBR3pSHTGolOJqC8JCTxHP23tCr8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=K2lMpeZDDYVMco9JlT9wTR65MT2ylOxoTzoIVwiq3uFCX1vYBSGaG5PpnKDug3UXWj9JWFq+GG2muTJnNPa890AcX+G2+VOGs//UJSxSfTf3ZcA/PUDdUQfw7ZFQg8Q+0G61j5cAo5t1VSioMJDyR9OkaoJVE7PLqc4PY4KiC7w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Gcz3LT+0; arc=fail smtp.client-ip=52.101.201.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Gcz3LT+0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eB7MerBioOwaE4V9KSKGq6BkEoAWv+3zy6JzNXL2oxRrj+t0iILheFLth8UwFaiLZ2yrWntxHKCWEXe6M0y4lLcI/vEkSUcA8lF2P7cmICuKoilszW33DiPAx+1ab9NkEUU4+4s8zUnif08ojmvX9chdMKZuUcfLkVBL8Ucqp+bbKv7CkAwWiGr/B887MNn3gdyEwwKGGHa0a39cQ5oyHdxjaJCOj4undgW/PMfNMU6Y7ztb2ewh0Dg9EPgBSSrpXcAYIxzuukVmUq1EycntN0OBWL2iVthGoul7py0dnJ8ySjWaa20drCfXmIv4hDg29hWP58cVCT9XDZxf+uf3cg== 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=JMlIQZdXjPVxu5O9IU+5Ch8Lt286wZMwzhJwd4Uv22s=; b=cvCn9JmKSTzu0eGmOyYH86Vuc4nTFEQh1tV0fK0teqJWJReywXWu1SKHaIqhhPxmT/CU38Ve2qMgM4+OOSGSBUKk7byIpehf033TDx7NYO7uLL4X71kiS7Y2EXm2ThB+YN49zTsFfs1FhX11G6GMTXWdP6cTAZOdtkNNqSI3b5fxici/1Etv6tpFZZoT7DW1pN9X+yZRh2PEJQdRY8YGaRGgwBsFnuOVnH/U1dMySJ72KAd/1GR6pRHd53U9NKuwEb5qic2UFSLEO6UuCOdtdgNy2CfS0jjYOhmvW65a3tm4dNg31vLJhMVgL1TEdxOM+Jv1Bq4IMtEMvi+wWK+a/A== 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=JMlIQZdXjPVxu5O9IU+5Ch8Lt286wZMwzhJwd4Uv22s=; b=Gcz3LT+0/Yt967W2m4gtDRgEE96aJSz8s+xkmnfNWnMF4QuzNuYFbVl3e7nVCoKW0Oz2O1rW1pIwUhfYWNHkhdxu4l1bYSA2GPX8eFfeKoZ5xxMkrHKM4o5Yo+rzVG2nWe/RUyKqtfzSv42ADGJqsQMcEJQzTTXema60YDlDP4wdx9aH86DUU8Na+bBs8ZXxbRxtWfUxu4cmPbBMFgvUXk0nxjZ0rZ+CPDfWVneE7YfEWJYN/uDyeqS5pbLVptNjf+uiSumhUoCLLtVCO4mjeGWjWtsJ4Dgyx4F8i3G8WWUR8SYCPc5OLlYtUb7H1cRQgz1XTSpP2PGgCui4YuLmiQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by SA1PR12MB6994.namprd12.prod.outlook.com (2603:10b6:806:24d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.12; Sat, 22 Nov 2025 02:55:44 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%5]) with mapi id 15.20.9343.011; Sat, 22 Nov 2025 02:55:44 +0000 From: Zi Yan To: David Hildenbrand , Lorenzo Stoakes Cc: Andrew Morton , Zi Yan , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Miaohe Lin , Naoya Horiguchi , Wei Yang , Balbir Singh , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/4] mm/huge_memory: make min_order_for_split() always return an order Date: Fri, 21 Nov 2025 21:55:28 -0500 Message-ID: <20251122025529.1562592-4-ziy@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251122025529.1562592-1-ziy@nvidia.com> References: <20251122025529.1562592-1-ziy@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR05CA0063.namprd05.prod.outlook.com (2603:10b6:208:236::32) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|SA1PR12MB6994:EE_ X-MS-Office365-Filtering-Correlation-Id: 91d8b110-b674-401b-4084-08de2972a157 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Tpv3VHrMYu37hXiz4Zt9bNifZ1seDfxLGPYpGU+cj9xqHZBPlbIg16afVQQk?= =?us-ascii?Q?Ole4rGaTAlEbVYHMLHEOtmGRvX0XcApxahWfgvmIeSsaAe0uuS8vq2+4u+9/?= =?us-ascii?Q?mEBG7f6+OlY4+PVs2wBZvXtkBwHzl9yN1zC6kTBg2hQTU8tNrETV2K2iTigK?= =?us-ascii?Q?TAG0WO1RpG2J1JK+5d7st3wj89clvoxPoV9F5zfwo+TzVnfRcVBLofSJWqzM?= =?us-ascii?Q?HH8+wUhdJ+CDAKraCy85LtZaz1O3wvXI7HtxbukyIEPVP9z5/e/rnTessGV0?= =?us-ascii?Q?Ni2f1j9fk3suNIXL9VLj2yqW/HsS6Z4YOHZpxuthxIt9y6UlmD3toQCWiq5S?= =?us-ascii?Q?L/aUtmszYg1vROK1nIxBsVzYB7dDfWRboqaPjQqkbZdIk4/SXyHBTH87GcHA?= =?us-ascii?Q?zZab+M76fw6gs9pd5V8XvS97km5irnMEKSzLCcjeYOllqsVOwhpWAeejRmIV?= =?us-ascii?Q?LEPH3Gz1TORhPVxofaN97kf0HwOBSmYd9cFcHio1ORTGFOy1KwuMuib7akPD?= =?us-ascii?Q?0+sQb0nxrLk3Ci3HYQREVpVTM0uePvSKlXNSVKJ9p76P/+kuxU5y28CosmTE?= =?us-ascii?Q?59J/8lrhZO5JLY1ZoBW7h8egpk0Hseo1kA6RzZiGqyRHmKwlmu6Qs6rPseh+?= =?us-ascii?Q?pAnQw9XRtmXBHqW8gXs6l6l3iolJC7x6PEQtgVao0jyKvC+jSnymYZwjPosV?= =?us-ascii?Q?gd3JsQVCNn8D8OOtAQ1Q0jdEDblqEzFSSZ0gauJGOVUnUdkxmBX+Hr2e7LG8?= =?us-ascii?Q?ikPayVcYiNaqLkO8YHxrBdEuBqVy1+49xNJ2HeENM+SihAkY0GF8HtrXH0mC?= =?us-ascii?Q?/nxXwf6w6l8yPhySsFZndSTv2iLk81FlF+cxMLSChQoszzdC1FMP4nKEQ1jM?= =?us-ascii?Q?noSBUqK0hi6b97DFmJAmlzhqjGCDFErf+Y/stGd5uQiAAul7ylF9HiL/7vTb?= =?us-ascii?Q?VIHD4pAEHHiryzg35KmzebVqhWYocFB2YUaPYl0zRxTstiRq92dw8pXkZBRa?= =?us-ascii?Q?Q5atGJZyaClGtv5U5FGFY8nyj6A/S75a7tLJE/085UXBf8WD9ddaif6b9YWV?= =?us-ascii?Q?qvcCIM2ii0LA7c1ODlRYfPKOFL2kMyihHh99+AkCF/HgXjsabMKZakKUMlW8?= =?us-ascii?Q?oEtwiXjlZ7ZE6hfgTvdBoOlFLDQYgIHujVwF+qo4OdjXS22jYtahKx6Uz+Sn?= =?us-ascii?Q?1CIhEphia7YC6dOsmZSulSiSiJ1pk45+cQHFiAg/VxKwtgxuNUzx3Z94mV4A?= =?us-ascii?Q?GzcQG+XtZ/7BlmjNStaNOYsl6reuL6Quv9Bp2QM2jps/S9aKALZ7BORNPO0r?= =?us-ascii?Q?OPqBuO3/Sih5t0IIW2enfDa4Gsxpyv40iS995qwtaMtY5gFA/ZdIfObtdY/5?= =?us-ascii?Q?aRTp4pNhvHXKGkg5YGF44/u3j4RsAc7hKs0FWJlsnCCN1Q/N5rPdH0gJXhUY?= =?us-ascii?Q?K6f/wGVh25GGoN5uR88axJ9Y6QW/tJou?= 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)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ufEAnhJ1XBjJBjy9mUq/XfL5IuNpFIYx60R7PdDcedXwR0G/iYlXry4uekd2?= =?us-ascii?Q?2yVALoMTs93fXvdVboMi1t/94eLN/fQfWgmjlHcDGY2pobakiqLVENP2s6iy?= =?us-ascii?Q?bQK41xc6CkzUGrpGzyLHxeER9lZYGW0rrYT2Zd+ZGkVVV27hagxbot6qKjTP?= =?us-ascii?Q?mmkFpZEg2M2BicHfDQlwFkxY6coj+fxo6ZwXBn91CxMDWchR6v+GA2f0E4lo?= =?us-ascii?Q?d/GrAuaowHg7hkH1cQ+fzsK4sWwNCGuEElVS4gsOlujcCAP2bScrt2JThMI4?= =?us-ascii?Q?ZhkaXMf74GEfhaZaoU/nIhBakzPrn89iPnT8cd+EZLVutzveKYLOo4UCUK6p?= =?us-ascii?Q?MUpc3S+dqzEq6aow7EsE3p+ilNTLtZQ7BOaUjBiBROF96F3DJ0rDWnL9TU8h?= =?us-ascii?Q?E8kGMTW0nQduh0NJ4JU1E6KhrNco1vQuUb+XpZ9Xs1MC8Hyn7cTMGmy3awWv?= =?us-ascii?Q?MI6pTMeCu0sGKPYN6+WRZCaDSAeHtcM/OJVtQrnouJnU2krl8a2u4XvzBUSl?= =?us-ascii?Q?F7fbm+XpQp4zcyEJgGKNj03uCMk9IjOe0srAPPufxCnL6zZwZM59sUvD/tod?= =?us-ascii?Q?5oE64K5bNlAGmwRHItTL3rjf8GwqPy2zSTbwxfvhxvEHvBhlybvk7VU6Jhde?= =?us-ascii?Q?rAU0k1UIbQzavivlsMVm1Q+Grjt6vKY9Vf1aJFs8QVQa6uwc3fzpLvSBWUha?= =?us-ascii?Q?/4zejhXuGHSh9hgHvbBBYTWU+wTr3G+DEVKvTR7Fod/mEz5tiysTi7s5329X?= =?us-ascii?Q?c7kfeEme/wOa2gcuo9o629qTdeMF84Etx+6Xi3Jf8lhKLHZPPM6pCfiYt40Q?= =?us-ascii?Q?JhSQdaBKLb7FPSF10mykWfsJflA74D3s9BrKMe8jHckCv/TXGhG51mFDX+EF?= =?us-ascii?Q?x2AkDhDUy2wQHsKr0DXMbmVh4PHjnLQPOEHUXNsNeSQVYuIhSF7qTL2+939a?= =?us-ascii?Q?xS/r7480/6h2iLViINPv3DmhByX8BVFdU9hkTs016knJ3Im/9Uf1kR/zDBaG?= =?us-ascii?Q?kiNOswWiKzzITlpQSJT2jpHu2KIkxFw/yLsxdNEU1S6f5BJvy7jdqYdr1ARD?= =?us-ascii?Q?aNI1d6a3pLZ91Ce9fXdgODhi4AHA2x8KmaPSrMaWEO7IrgimMFv5K6zrr3up?= =?us-ascii?Q?n3Jj4y0PH1/n/0IePDBhWAtGZ/PYm+Ugm7HPGfe9xb75hlWMw8YgPR/yAYnl?= =?us-ascii?Q?ezqptJN0Y9qfGUxx8JrQ7nrTeqyDyLkHZXq2Rtdt15jCLXK24zFEd3BJtwYX?= =?us-ascii?Q?SICKXRoFzybGnfy/ygt2ErstYgSFBHgf2dG60SoHzQuTwXBFebc+wg8yQgdK?= =?us-ascii?Q?sYwpe6y9MQpIjgIPdAcPFEmogLt2bDu0zp617uRRFBIQjkZKbjDqv2WJE9Hy?= =?us-ascii?Q?pNppkRQ1wmQUdlvqt7I6/5mkK975cvmVOQgA+ysKflu7ETNJhk61JKfau2js?= =?us-ascii?Q?J2s0qYNSdaKRqekxweSCjxxahlgxPT7duUgoC/DRbUUkV2ZmVI3jzRTdsWVv?= =?us-ascii?Q?jH8hp+QNE2Jo+/i5DDzjRT9imKhXypLbQEQlbUtwtg1cPw81LK3o4xzz4VPM?= =?us-ascii?Q?pJE61QYb6HuGiYaDpHJclD7n/+TfY6XfaYPrpXwy?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 91d8b110-b674-401b-4084-08de2972a157 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Nov 2025 02:55:44.4140 (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: SOMrFZTHIyT/QbJmAO/VlqeWODRsKZvlip4hT1M4ETDvkNHtCdwJV8CCB2q2A+7G X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6994 Content-Type: text/plain; charset="utf-8" min_order_for_split() returns -EBUSY when the folio is truncated and cannot be split. In commit 77008e1b2ef7 ("mm/huge_memory: do not change split_huge_page*() target order silently"), memory_failure() does not handle it and pass -EBUSY to try_to_split_thp_page() directly. try_to_split_thp_page() returns -EINVAL since -EBUSY becomes 0xfffffff0 as new_order is unsigned int in __folio_split() and this large new_order is rejected as an invalid input. The code does not cause a bug. soft_offline_in_use_page() also uses min_order_for_split() but it always passes 0 as new_order for split. Fix it by making min_order_for_split() always return an order. When the given folio is truncated, namely folio->mapping =3D=3D NULL, return 0 and l= et a subsequent split function handle the situation and return -EBUSY. Add kernel-doc to min_order_for_split() to clarify its use. Signed-off-by: Zi Yan Acked-by: David Hildenbrand (Red Hat) Reviewed-by: Lorenzo Stoakes Reviewed-by: Wei Yang --- include/linux/huge_mm.h | 6 +++--- mm/huge_memory.c | 25 +++++++++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 1ecaeccf39c9..9b3a4e2b0668 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -372,7 +372,7 @@ enum split_type { int __split_huge_page_to_list_to_order(struct page *page, struct list_head= *list, unsigned int new_order); int folio_split_unmapped(struct folio *folio, unsigned int new_order); -int min_order_for_split(struct folio *folio); +unsigned int min_order_for_split(struct folio *folio); int split_folio_to_list(struct folio *folio, struct list_head *list); int folio_check_splittable(struct folio *folio, unsigned int new_order, enum split_type split_type, bool warns); @@ -634,10 +634,10 @@ static inline int split_huge_page(struct page *page) return -EINVAL; } =20 -static inline int min_order_for_split(struct folio *folio) +static inline unsigned int min_order_for_split(struct folio *folio) { VM_WARN_ON_ONCE_FOLIO(1, folio); - return -EINVAL; + return 0; } =20 static inline int split_folio_to_list(struct folio *folio, struct list_hea= d *list) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 6c821c1c0ac3..ebc3ba0907fd 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -4230,16 +4230,29 @@ int folio_split(struct folio *folio, unsigned int n= ew_order, SPLIT_TYPE_NON_UNIFORM); } =20 -int min_order_for_split(struct folio *folio) +/** + * min_order_for_split() - get the minimum order @folio can be split to + * @folio: folio to split + * + * min_order_for_split() tells the minimum order @folio can be split to. + * If a file-backed folio is truncated, 0 will be returned. Any subsequent + * split attempt should get -EBUSY from split checking code. + * + * Return: @folio's minimum order for split + */ +unsigned int min_order_for_split(struct folio *folio) { if (folio_test_anon(folio)) return 0; =20 - if (!folio->mapping) { - if (folio_test_pmd_mappable(folio)) - count_vm_event(THP_SPLIT_PAGE_FAILED); - return -EBUSY; - } + /* + * If the folio got truncated, we don't know the previous mapping and + * consequently the old min order. But it doesn't matter, as any split + * attempt will immediately fail with -EBUSY as the folio cannot get + * split until freed. + */ + if (!folio->mapping) + return 0; =20 return mapping_min_folio_order(folio->mapping); } --=20 2.51.0