From nobody Mon Dec 1 23:06:24 2025 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011070.outbound.protection.outlook.com [52.101.62.70]) (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 85FDA307AC6 for ; Wed, 26 Nov 2025 21:06:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764191194; cv=fail; b=f5S1FqB0CW8Y4N1SnGgfwYYytqTtdXP9MPEkLghxVz0bplWbpNVtWqRIoZW3M1kik1E+doNlXgXbgDZXqor6GwiymCvXq/rH4aViDj7ALwlIYEF8vEDeqhx2ABI3GmRb/4SZIsi46XdxyzoqpAlRQ5FzCS+3vLOtGZZOOj0STcM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764191194; c=relaxed/simple; bh=BBuHTY0KUHpI6mC25H4i6b74owfqlbvFZuQ6AkU8J7g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AaprF7VO4Nlc3jS4C2KloV1c4yi3Y+TmELVcGW1FOBAvnqZX/uCJIbtSdHDW2yjNNKe++BAghno1HGALCB1e1giL7SVPyyEHYtrdlwAcwVXESRGdUJY4Dfh5nBg6ct/zBTbWzMmU3yu8VmgudKQWPlEF5Iebhc9q4XhdhCdWRuk= 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=Il2jdW2b; arc=fail smtp.client-ip=52.101.62.70 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="Il2jdW2b" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=prjFzoTcCjtpLguDbQDujjjrdJdmNDpZO4YFNzrt3mIwwCeyIbzJjaCl3WxO4a6g+S4Ld6PKNac5aOAWAhVfRjNu0AKP3s0KROVMP8eVY4FQ3ZW7iddYbePro43uhSIHYwWvIqWJ0XBOQ7nRqv84rJDbN3i+PMzlD1SBrU3Epy9EFQ/PnofwrklCR44AfQBb3gUvdTA+DeZWqBmifrsXr+q3VnTLgcfiuy0cVXNxy9G4BZIX1ZABx1ljXS+RPLhAZDkXVqGAEWOabz1rTbpnxg7+2bajxV2LkfiZgFK1KKxJebgaBJFT9l/oZ2uU+m0iGvlMhGl7ZwHvoRMRwMLiPQ== 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=YTKg1+bQk3tYAjdwC7wGNU1XeyS3eOeggIK46gauGys=; b=grzv9wWxpmwSMKHkVH0vu2zyierVs1JlHj4oIksHJUeG89xd7m4VHltj5/LoG2bnLS1FG1ghqi0JtJ7e24s0ti994BJ7sJQ89wA3npnheVU8XOMImUcyw8oCdeITJMSNZvNv11PQ+2VTCIp8iNAKku01Gk1EV+8rDs6ild08PTuOeWsjfzLKJTh3MTmapV27NmjsfNFv4KIwa7w6zHCkj1REfsoBKmQvxhu3siDKM6AhoR2Wo2oAmmLQ6Hj252YbyHGhYoTpPmpb4rLrF1gVYWcjyLqtsD4LQaC+YQoUrsToTkIHBl3Zj354MG20lUJOcgFhhRDxmzX3RQk65EqleA== 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=YTKg1+bQk3tYAjdwC7wGNU1XeyS3eOeggIK46gauGys=; b=Il2jdW2bMCGf1aV+WHp1n+mm335eUrQP25Hh400oXZhmIe9qmffa+rIK7C+XZXSfpqfurFBCffHjh8Rdl+VdpEyN6g8lTw6ogDhtRF64BE8izru4ATqZU3wipkAUWgBCb6htMN9vtXcs0kg9BNsbkL/OCh7e3Tc1xvK/GCyKZVvOvEIYnRWsKx5ayOd3teNuYB7iiMdnLcsJdkBI9Lv7sPRuEP6T8ws7S10sHTVSFyRgiAlcYmjIxEozx6hbMvtNjILg8cjPWJlJT6s7H1Ab1/0o90Xzk6DlYCO+cauKeuVxcFN4lP9nFdlHAQZmHivGHxxM1BWhsECyLsI7gX9uqw== 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 PH0PR12MB7010.namprd12.prod.outlook.com (2603:10b6:510:21c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.17; Wed, 26 Nov 2025 21:06:27 +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.9366.012; Wed, 26 Nov 2025 21:06:27 +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 v4 3/4] mm/huge_memory: make min_order_for_split() always return an order Date: Wed, 26 Nov 2025 16:06:17 -0500 Message-ID: <20251126210618.1971206-4-ziy@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251126210618.1971206-1-ziy@nvidia.com> References: <20251126210618.1971206-1-ziy@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0176.namprd03.prod.outlook.com (2603:10b6:208:32f::26) 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_|PH0PR12MB7010:EE_ X-MS-Office365-Filtering-Correlation-Id: af698b90-f809-48e7-f32b-08de2d2faa45 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?OqT1EZJD5r78CiRmM00LDR8TosyAb8zsUJt4pTOUru9tdZ/H9y3utJ1HCq9Y?= =?us-ascii?Q?rF961y3dsi79CgEV7Xoh5GbZRPB0tCbKCjxpVf3nD+HQocB41Sd/ICO02FOB?= =?us-ascii?Q?WUClXE3rQNnpsFkNj8ZEnn5d+yRT8o5LFlyBKlPnengXI9V7VffkoG4cH2Iy?= =?us-ascii?Q?WNb0VwGe12cuXciSdyn6DgzVmGyhBuun6SunMIQE55gwZ4kTjA42Qd8688PC?= =?us-ascii?Q?gVZYOFRR9RHaBTbePbakDDm7+ztLuiuAlYCdnJDvKZWbpJ2H7XpeBI7Ctqsy?= =?us-ascii?Q?aljYnaLfFAOJY4GEMsl3xmxRNrJD/4tOqceSiwn3YsaCtxgP9n+z91rHkV4y?= =?us-ascii?Q?NLxfF6xeboDUokFkXvfmw9qhhy5ZKW3aZt+GKrqtFzJqdAy0F8poJTpCaRgA?= =?us-ascii?Q?bdKOhFs2D15mZF9gZ17psSgLflYdOp7QbA8XADbnwLXPZz7qX1euPNUKfy1g?= =?us-ascii?Q?fVexeaakM3r2FKXQOt+hii39P1+7/y2B8bBx+33F+mmabS9qcoVd3QSIKYis?= =?us-ascii?Q?AsruOb4YuBxiHCdD/x5/LMsq25MCULiC+6euVnagv21UGAahoqVHt4sMnVNX?= =?us-ascii?Q?+ylYMU7mJJz2Nb5eYOIuuhOl5G0L9Or8dtT04ykfVF6uPEMbqWYmuH5STS1Z?= =?us-ascii?Q?WiEdxnbMmXJI8ge5me8DnPTHL1vGILulBXzW4vCSWVtEul1H8v1kX6w4+/Ii?= =?us-ascii?Q?UV6XO+uFZ5dU4sYspEtDbji+1jw21QG5XftWh4NaEZzWYvEXtLFqlm1GLAUN?= =?us-ascii?Q?j7f/cvhYhvudiGKDvm7T+rSiPUMh3V0Q5dhZECpsviqt7/guE52vCC31fTVV?= =?us-ascii?Q?IGNOQkzrMT39KfPFvpweOPHaHeURbSlk4y0g10HkDolWuRToWlN0CDGr4QnA?= =?us-ascii?Q?o3Ie3dbBm+0kLqr+Lq2F6nwg/zJeFKGJN5Ylw5x/VwIfggE+liMm4ZnM/zfY?= =?us-ascii?Q?aZJMg3bsuQoROuegOY2BYNilGjHIHsZeLlRQUAS1qH4lh+k89us01UHgikp/?= =?us-ascii?Q?kTup4pSiO0s7V7LWUfIHGujX/iRLectneSRdEJMknSkuTgg+HLkh8TAU9sHa?= =?us-ascii?Q?9FvnowjsFtoRyK4x111MUJoIkKuewBl+qWz9IbM4q/ODDmzab5poxBcPZkpV?= =?us-ascii?Q?F452uIUBk2KqHm4aMpyJQ50igpq8CntivL0MWyNJbsJXrmbATxbLzwbGIgJL?= =?us-ascii?Q?Qkc1TKGeqJLINk4r3GlfYWI1PZXgIGqTFQIJX5bm/mEYz9kCQTiyUFxTyjUA?= =?us-ascii?Q?Tz4h0Npcfmi0NBCWUBcUbf2DFrhmknXKSCXQRjTt2+AfsB6eSLEC1L366FUm?= =?us-ascii?Q?l+7j0gPQYtXYHKWm7dxil5CeCogvWDNDk5q30c0jhUPMJelBKA/2NcOuluS/?= =?us-ascii?Q?Jr95QCHf0XhlLyatDoWj/+sF+CY6gY7uq2HJec/qKY2ojOfFTF7HwRNTyC3z?= =?us-ascii?Q?YuYWLZ3RX69b9JzpsexJqElnXSocvSeG?= 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)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GUcGKz5M2MN1iSvUUMXVjBhEMpmG0C8r3S1qW/lBgh6y+TgNrFdCuPg+l4SM?= =?us-ascii?Q?MNBiw8dZCZXsAxvGlrDz7/izmvU/DvzV0OluseUoPqmS21mN/zIVC3owHe9b?= =?us-ascii?Q?0Yu7T4MBJLwOE4WNkQJxyELIus2q/22hrrO1n1VVKUJpm6ZXpys5yuzzaW71?= =?us-ascii?Q?JvyjgFDpSQq45zGh/+VlP4KiNkPicnuka9dyKQYgLrV6i4dyqITaaJ94rRGY?= =?us-ascii?Q?2/Uuf5O0+DC7tPcZJdNEycPFgI3CUGF8Pm2IgwiHWKTAy5H9C+BQvxpWRxns?= =?us-ascii?Q?Zl2EOmAIJlh2O46///RcmZ/vtmn2AzckAlt1WZD7b95wQDwN29SHBoakTIcn?= =?us-ascii?Q?JJfvBDdHDIi9NRa57uwiMv1a4CtVsq6QjUcyNeQS3UAL3hSrj2bC0CGr3wNt?= =?us-ascii?Q?bNZRzgrZEMWEskm3X7X3SmIF7/BDNprvtUOXQLGOH5+FSog7JKYud6GYvu56?= =?us-ascii?Q?8JbIIHODNjL+p53PXSWA9VX7fC44vuq6mRJ0Rck5nrakCeIUtMBSPMHsfL6q?= =?us-ascii?Q?hf5JfzcKOGPm9o4T0Wi9ud8Jh24jvB9t1vK46RowgcmLBiC9awAw0qrXtZ51?= =?us-ascii?Q?zw70YAR7+23zrSL6dvwyw8uWy4YA9oWQYDIt9Of2okIp/pcw+iDOebh1NBkQ?= =?us-ascii?Q?wJhI8mrVygCUcwuCCcqSsK3mf1wCLJn9v0EI6Yzh3JE+MoxraZB8ExrJ7Bwk?= =?us-ascii?Q?0haDvjhly91XX74EaqGuZ9qJhlIilCN0I5YLpXRFYhj87mogk9JQ6hdEpAe1?= =?us-ascii?Q?GgMQ4p66KvaQ0H5Q7VgvKlC06FuAr3pH2P8xIO3Aol/bzzDadJfkdDVD76/3?= =?us-ascii?Q?jeD9eLfl7wrF5I8GXHBho5UT6k3Bnz0BXxnvY3HJdMk/w7HisZCdxZW/IutO?= =?us-ascii?Q?EQGVByBUilzk4XHMCjdRPNbcnQZQ9UCXUa+VxVQ7tkN4bEK28e+74CNnw7/b?= =?us-ascii?Q?jwA+CEvck5+UiplK7xil4mkATnUfuPugngavIWQaVBgYdRCrtyC+tPc5trQ8?= =?us-ascii?Q?vXeDKo5eI1r4f7jiVBlRIbSThxe1mVnCqnWdIN3683lkS5zCJdzk8cXZ5wJ5?= =?us-ascii?Q?Adw0aY55AcCBC1Rsxz/iEXW09smJWqH7IO7sAKq6aYX8c1G1Mf2Zv6j4bVv2?= =?us-ascii?Q?9MJbv4Q0s4Ygd5yko+9VR8sL5iRYB0iNR/l+FuPJitOtQ+X9mhxx8Iwk1D7y?= =?us-ascii?Q?nKoRDiJ11mFjLSfNViMp7vnuKmWw1EMUB/uKzYovO99tCVRaOniZOUqkH4ED?= =?us-ascii?Q?vuOg5tslOCqhMm07EUOPX51bGEkJlHzKAJqAdlXeoTZEjblq9gR1wRl4dmMd?= =?us-ascii?Q?UgAJHTCGsYdRLQebD3vFFgTg9xC3NtgJL8pRoKx7nfOH3vXyZwyyPLY/Rt4f?= =?us-ascii?Q?mBRKmx48+P7ZtXKdpWoY3ASK6adSqJpaqv13E3PuARdzgQSAMMsUb5msnnEK?= =?us-ascii?Q?yCyIg/b+TG07jk+B8o/NRGahZNM6UftMq/Jp5aBNwSyzunQg76I6pJR7/xBj?= =?us-ascii?Q?shHP/ZFknuf5pPIrjzi3ICDP4cDUXEESMrPFiQixPGKrH5dVlupdlqgEkXYI?= =?us-ascii?Q?AFvaZBoBcJLCIx5uWDRVWzL/Pi20pZr/qkEdlx6E?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: af698b90-f809-48e7-f32b-08de2d2faa45 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Nov 2025 21:06:27.7756 (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: +immZI3PFYakdMY1nEfmArzFG928gCf+63iwVSr9P1DuOYx0w5G29MQ4OJkBzNBf X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7010 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 Reviewed-by: Wei Yang Acked-by: David Hildenbrand (Red Hat) Reviewed-by: Lorenzo Stoakes --- 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 8a52e20387b0..21162493a0a0 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); @@ -630,10 +630,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 5ce00d53b19e..1a3273491cc5 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -4219,16 +4219,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