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 567F72C3245 for ; Sat, 22 Nov 2025 02:55:48 +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=1763780153; cv=fail; b=TsfWmcY5+NNbkhiHsFWutc2iFITv3WYVoJuB65ftiRrQzU82Iz+3M9whbIY92LhrT52XPFcS5IchvTDEuVfyjKm9z6pK3MAuLKcLTFhwcFRHVaizw0zcc7prczy88p0GQIbAGrH2fxjeCVNDi5wmcMdyktufMTUFRookGO8Xihc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763780153; c=relaxed/simple; bh=Tv1kdM9B59mRyK4iythQpiIw77H7K//V0ldLrJSWJ9o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ojt1rzsWPLBbTsGh5Q5IPnjm8tdidEHRqMaNfBp3gl6s/JGsf/ccrVlRVhU4RjHtg6twmVCgogJmg8KBDLdDsvjzyHDUXX+OPIWsndCW0kiNv/i+17yEWKA48AOciUAKXQrwBW0AXZdfFS6iZtfqgdftk2MFY+cJBS6JWkpHXRU= 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=N0lwITSq; 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="N0lwITSq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PcmzkzKq7woYHuS+1ceOIDyFJPwE2Utxae++yIIv7+qb9weUHYIkCPQ4iKA2FcVykkgyqOtj5aqhIEDeIYa+Eyx9GgPVIE0eA3WONDW23MIpVPfLB7c3jPezp3ugZXAcd+OpspueMHFIKm78RSaXQhhoH9Hn9jJJpo/PDs5bqrBPkKGH7qzwVx9MZbG8gU7wNxnueXLJprd/3ID1IGPH9efCBAWIHKHhdIzSe1D8Tok4YfIqX3MoXqvGQw9nag7VVZSE/VD0Dnhi81ku/h48+1eWWdJciql81kmTFd94N1I1b9KJr/oHLj5iJyQFSdkUhHD7eQBROX1GeUVHOLD8kA== 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=O7L7mUcs93JgEshzoB8bMVmhF3rXOXV/UEU8bbWiJMM=; b=GzQZB8aHJlmCP5DJYtkJGbIVBfz4Qnb50OUBIivyEuYVNwuAc6DzG4CyykLPYcrMhWNPSKQGsSGn0tY96c+ieMRc5ufmnGTLwSM1lyx06j8GQDKeRD3t11majXNHakC+V2bFqc9Xd4r2ZSchQmLmCqyhEJldSKLP+UfK+cVjZDwzL5f4IO3IEPnV+hOybzG5QL52prXrHwH2gOXhC6dSl+MuUTG0XYniUE6QByeilVrVYlvlPR9eeOQaBNWTjuJ5V7xpCKmRMEF4Cr51QlEtlj+dwNNYqPD9wFGGepLMkoAgLhc2Vg3FenuXwBpWuM1J+1UDkR8bcgLy0zAYofxIsg== 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=O7L7mUcs93JgEshzoB8bMVmhF3rXOXV/UEU8bbWiJMM=; b=N0lwITSqHx1f2Gi3ViAob8gkab5iZwbjxr90FumEFHT30OQnU94I02k5arZI+M1s9Q2cZNeitRg/IJm574I1TgW0W755doENVz89xAhxUhiAXNV2upeqtMdKeIwgm7dBmSWULAHztUC3/XsJL8yNZgzM3tYKS4Vu+O3BWxKVOGmXCjbDXrjjwZMiivQTXZ0NybO/CyQ1ZhOUkORqKQg8wi2mwm5xzNMLonUGtl8VHR2e64qD5LG4zwLax6mu3NJSxPcB30FOBC7eXeU35z2ag1+5P3f6pk0AgymBDQTaiwSyR9V90Xcg+m1J35EE2SBODxHrznemKEhhSh85YTmXjQ== 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:43 +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:43 +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 2/4] mm/huge_memory: replace can_split_folio() with direct refcount calculation Date: Fri, 21 Nov 2025 21:55:27 -0500 Message-ID: <20251122025529.1562592-3-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: MN2PR05CA0053.namprd05.prod.outlook.com (2603:10b6:208:236::22) 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: 8fbd61ae-ec75-4d11-320d-08de2972a07d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?DOUVyfarF5jzG+cLhzZE7UQBKSS6jlS79FKPVfhVg1KYZ02LNAwdG7WTTePi?= =?us-ascii?Q?4SUQLBUoN+ecWBno3YwKORgwC4/n8VfifT+15OCqSZH7CXWOKZCUv11j6yIX?= =?us-ascii?Q?V2Xj3ljabYfm5t7exUt8oOQ3bBctri2k552J+IcFWes3S6YtaKfy73sFl01M?= =?us-ascii?Q?YHp4eqaXETZC+GUZhqEkUa2m2UErdKaptWKNuqYlmp3qaXooyPhvx9P6x6yc?= =?us-ascii?Q?joQvA993UH/W6gz+ztCQJMTq6+aRX8lQPEw3tNlDqjACssa22tla3q6NuY+g?= =?us-ascii?Q?s64mOfvAsDyC8E34LlvGtn46tm/qq+j9kCEK9HRZdAULybN4Bd149+bntyDx?= =?us-ascii?Q?ia/CnAhlFG6OmQgrTn7zFDeFHoG/1ufZPEoI3rtShrzTQr55lYtEglE+cub0?= =?us-ascii?Q?9ERpYBx5nJxbot+bmz0GjiaJWyVJwXajjQEVErQBuQF1iJqksUq9FXYSXyH1?= =?us-ascii?Q?U8a8hnqby+fYwYJXd2mtAdF82MT7x6yogAfEOofTaguhbwkLnPbdrO9Xq37z?= =?us-ascii?Q?vtz1Vre4xN6TZcjUmdnvi7lxBlXWkMM0oaZ0u+l0Rv2bjJreVq+Pw6F5ntQ/?= =?us-ascii?Q?5bHRQrgKq05cHmgAaW7NgGCOcrH7w2TXna/Y7RmqJG40+/WShBjKGa9ywI+g?= =?us-ascii?Q?QZ4srddU4lMoai9wuK/ny0crFFLqEHz5OgIsdJGz6L+d7U/SeeHGCqPiu7Ui?= =?us-ascii?Q?CjGEhnyT684uSYNQlEuyEsL5KdGzHVpLHSMwTkRQtHFnkD8ISDTcruhXhziM?= =?us-ascii?Q?uviZeKwrAiw7D6J4XJ8eeizoAYVHtgZJ9Yg3dX4XpjOpzGkMcaunz/Q52+u6?= =?us-ascii?Q?6U9pnvkOrrma19KEm2F26drv2JOvxzDgzPwwcGAne+ZJKTJ/tiiQQ5BdVqxd?= =?us-ascii?Q?k7W28pOd7vS+Upkkz9/nvuZ4NVMMrdCRqplqMN46zDfN4JsCSKC1HwqByBAU?= =?us-ascii?Q?f1vG91A0Dfc6fWt+iScAwmyJEUCqxi2ft80OGpNkLFXX4V/+B7uoLs5i8xDb?= =?us-ascii?Q?NdtttEmFKdkfzhzYzOLREqjbdmx6+VEdwloFReZkm5IoxI76B1wfh1q5b3CO?= =?us-ascii?Q?MTCLogaK7FjDjEbzMDJKeY4gFnI11TIQisrCfJJtBdGzQ+9MErv94rODuZK+?= =?us-ascii?Q?tOApaEDspB6Jbk6KAsSXR7ric3JRAbEmaLDvQ+AXoUKEQ8lFZfuRte2pZ6GU?= =?us-ascii?Q?Ve0tWWbuTNH2atNveSwj+bz2qcsPOA+IfWtEiG8emkPUuJwIAzegpdLjKVFL?= =?us-ascii?Q?XFVpq3h70cHQakualiwMvYsZPcl4Rk0Wg+073svB65XljM0aVUfvxUPrTXQq?= =?us-ascii?Q?wlAWy1tK12CWQssQDhyDw2RhsOnWCI/c2WU/CCYn9oVQfrL9JJLmsxHt0QdD?= =?us-ascii?Q?zp3XjChP4B9MOLEy5AWmA3JzkWSc9nhShbFwwPOvMemoUYfVjaNZIh1748Gi?= =?us-ascii?Q?UT8ewlZFE3DP5Xw8YC6NmppZIwamx4uc?= 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)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6UI/08FV+A+HB4FUT3+muJCCd+nKpN8/Ga8ieej+8Nf2Yxmf8ZLXSMUBGKYp?= =?us-ascii?Q?vLW3uKHQI551Dqym7cB2BZoS/y2vRBGZkrMKt+aqxQ0VW+79ltetg23CEGp8?= =?us-ascii?Q?qOi5ywZZ4Z4YfPSrDkfs6kAOEwgaYj9bYzttB/cA4dCW5RcsAMm36IYBTZQH?= =?us-ascii?Q?7Ro7GSUoluKy2bnGms96Gr20G6RFnEPiOMBxmvVN793XzZLmTlSg4W9VNY8c?= =?us-ascii?Q?/hpGU5UCh2CKc5nWzxVUe3FcIhm5HIZSrpX7xvjrMMcBtw6opSjqpluQ45sp?= =?us-ascii?Q?BLc6SyJbMSNI4/0WEvmUfYZHd1C9+4efnox6g11cjBgms8SjMKXKa7dd6HJl?= =?us-ascii?Q?IUMXf2qe6fsbDcXEJjdas11/bBeqObxrv7epjxVTJ4GezhcydgxQFgrGALkJ?= =?us-ascii?Q?74CjIUKaeLMPUX6tIybIMbw72BKu/ajuodKP41FKdg+6f/VIEuOqHXPSg7dI?= =?us-ascii?Q?JQePtrIgwop5pR27wszKifgLG3j4l8qoSmWVHk6RMYZiWNcqmq6YvBVdw293?= =?us-ascii?Q?dluF5lNGqptJIRFomnYHJMninlHK025LjpEGIkVsdsLm86OZowO/we/MVMd0?= =?us-ascii?Q?yblYotJeY7rclryncIKvgB598UJazdQPp99VGb6YeEbiSqK/E3W2i4AiCU7l?= =?us-ascii?Q?qSzIu/912pHX2VtJLEfVfDM7hhOy7ExJi7hHd+swoSMO7gxwerNH0J4viEwy?= =?us-ascii?Q?FCZa8X1hV7oP9PX7BEINsZNCCTAnfWbCSBVwnnX+drGpCYhbJHsNtVTy6DYR?= =?us-ascii?Q?iSTzwWQUrt8gHu12L4OOTK0TgqL8bRx5U26l+EfxA3G8rXo9i3b2xBi+Tji2?= =?us-ascii?Q?jCgG7SP3d7ky1+g3I7XHVsr3wVABMhKTosq4syLiw1HiA2E46Z0NZ6rjr2lW?= =?us-ascii?Q?ArVswWkYsGcxC8lH0Nk1SLFfZ5EXpZxDYRMQgtXU1HrZk64oy9m36A3RnGRU?= =?us-ascii?Q?LJMvu5P4/vmsgiKCiNQ75PmfriF7BTZOO8daCS/eV0TxLM94iZ+L31OcL7xi?= =?us-ascii?Q?56iuBE0iME2dSI7wNG8rR3gtjehkh7zek+PnDTpiNYlw8Fnk1yl+NS7Uv6M7?= =?us-ascii?Q?pkeevP5QVR2U2W7MJ0fmItpkDtdRjYeq6Tmts0yrIgZ0yPgSmTVpf4waJjmZ?= =?us-ascii?Q?oN3i212w2SEK/D1LcxC6NzEhQL8gcntVb3B4Z0ZWbGaZyNoLPeMkPmxKYhrv?= =?us-ascii?Q?Zt1EQf9Ym1uOm4KOO+TBCtemQXQ8wl0GphTVjbFnwyjOGNVQcpYyRb9pVf7/?= =?us-ascii?Q?dEYTPwJmHaFBcuo4wTOxheldP1TaxG55n9J0jwlZ97fUrPMMtlKTBlSlcpez?= =?us-ascii?Q?EmW9MhhQH9htXGnCoyWjqKCNaxXK6ALSj2Xp0v/BSuivOxD/wEwP/uzEVm6A?= =?us-ascii?Q?xOWTOT6OIap7khpN6YaHwLEw5IwtXipsNL/N4U3uQrE7HddW416Aan3gaclQ?= =?us-ascii?Q?U4nmXHuNzd4IiN9UEf/bgbaverpLpMjlk2RkD13PQw8TC1T9lzQjafEsqBfY?= =?us-ascii?Q?OXTjyS6QMDhUO/IaO2xwBi+rp7q1Kng9rSzCYm+5bGvzlTtJ8HGpGvNeVVay?= =?us-ascii?Q?CQyZq5tCF4d9oFNKRJRtwynvk6wgAQBmwpLeZIXt?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8fbd61ae-ec75-4d11-320d-08de2972a07d 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:42.9641 (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: kWtHmiMLx/XEvuXfuaAYjbOqBEIqyYYV8ioeC0Y3VepYeI9aL/ctwsfS3GU23jw3 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6994 Content-Type: text/plain; charset="utf-8" can_split_folio() is just a refcount comparison, making sure only the split caller holds an extra pin. Open code it with folio_expected_ref_count() !=3D folio_ref_count() - 1. For the extra_pins used by folio_ref_freeze(), add folio_cache_references() to calculate it. Suggested-by: David Hildenbrand (Red Hat) Signed-off-by: Zi Yan Acked-by: Balbir Singh Reviewed-by: Wei Yang --- include/linux/huge_mm.h | 1 - mm/huge_memory.c | 43 ++++++++++++++++------------------------- mm/vmscan.c | 3 ++- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 97686fb46e30..1ecaeccf39c9 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -369,7 +369,6 @@ enum split_type { SPLIT_TYPE_NON_UNIFORM, }; =20 -bool can_split_folio(struct folio *folio, int caller_pins, int *pextra_pin= s); 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); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index c1f1055165dd..6c821c1c0ac3 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -3455,23 +3455,6 @@ static void lru_add_split_folio(struct folio *folio,= struct folio *new_folio, } } =20 -/* Racy check whether the huge page can be split */ -bool can_split_folio(struct folio *folio, int caller_pins, int *pextra_pin= s) -{ - int extra_pins; - - /* Additional pins from page cache */ - if (folio_test_anon(folio)) - extra_pins =3D folio_test_swapcache(folio) ? - folio_nr_pages(folio) : 0; - else - extra_pins =3D folio_nr_pages(folio); - if (pextra_pins) - *pextra_pins =3D extra_pins; - return folio_mapcount(folio) =3D=3D folio_ref_count(folio) - extra_pins - - caller_pins; -} - static bool page_range_has_hwpoisoned(struct page *page, long nr_pages) { for (; nr_pages; page++, nr_pages--) @@ -3776,17 +3759,26 @@ int folio_check_splittable(struct folio *folio, uns= igned int new_order, return 0; } =20 +/* Number of folio references from the pagecache or the swapcache. */ +static unsigned int folio_cache_references(const struct folio *folio) +{ + if (folio_test_anon(folio) && !folio_test_swapcache(folio)) + return 0; + return folio_nr_pages(folio); +} + static int __folio_freeze_and_split_unmapped(struct folio *folio, unsigned= int new_order, struct page *split_at, struct xa_state *xas, struct address_space *mapping, bool do_lru, struct list_head *list, enum split_type split_type, - pgoff_t end, int *nr_shmem_dropped, int extra_pins) + pgoff_t end, int *nr_shmem_dropped) { struct folio *end_folio =3D folio_next(folio); struct folio *new_folio, *next; int old_order =3D folio_order(folio); int ret =3D 0; struct deferred_split *ds_queue; + int extra_pins =3D folio_cache_references(folio); =20 VM_WARN_ON_ONCE(!mapping && end); /* Prevent deferred_split_scan() touching ->_refcount */ @@ -3956,7 +3948,7 @@ static int __folio_split(struct folio *folio, unsigne= d int new_order, struct folio *new_folio, *next; int nr_shmem_dropped =3D 0; int remap_flags =3D 0; - int extra_pins, ret; + int ret; pgoff_t end =3D 0; =20 VM_WARN_ON_ONCE_FOLIO(!folio_test_locked(folio), folio); @@ -4036,7 +4028,7 @@ static int __folio_split(struct folio *folio, unsigne= d int new_order, * Racy check if we can split the page, before unmap_folio() will * split PMDs */ - if (!can_split_folio(folio, 1, &extra_pins)) { + if (folio_expected_ref_count(folio) !=3D folio_ref_count(folio) - 1) { ret =3D -EAGAIN; goto out_unlock; } @@ -4059,8 +4051,7 @@ static int __folio_split(struct folio *folio, unsigne= d int new_order, } =20 ret =3D __folio_freeze_and_split_unmapped(folio, new_order, split_at, &xa= s, mapping, - true, list, split_type, end, &nr_shmem_dropped, - extra_pins); + true, list, split_type, end, &nr_shmem_dropped); fail: if (mapping) xas_unlock(&xas); @@ -4134,20 +4125,20 @@ static int __folio_split(struct folio *folio, unsig= ned int new_order, */ int folio_split_unmapped(struct folio *folio, unsigned int new_order) { - int extra_pins, ret =3D 0; + int ret =3D 0; =20 VM_WARN_ON_ONCE_FOLIO(folio_mapped(folio), folio); VM_WARN_ON_ONCE_FOLIO(!folio_test_locked(folio), folio); VM_WARN_ON_ONCE_FOLIO(!folio_test_large(folio), folio); VM_WARN_ON_ONCE_FOLIO(!folio_test_anon(folio), folio); =20 - if (!can_split_folio(folio, 1, &extra_pins)) + if (folio_expected_ref_count(folio) !=3D folio_ref_count(folio) - 1) return -EAGAIN; =20 local_irq_disable(); ret =3D __folio_freeze_and_split_unmapped(folio, new_order, &folio->page,= NULL, NULL, false, NULL, SPLIT_TYPE_UNIFORM, - 0, NULL, extra_pins); + 0, NULL); local_irq_enable(); return ret; } @@ -4640,7 +4631,7 @@ static int split_huge_pages_pid(int pid, unsigned lon= g vaddr_start, * can be split or not. So skip the check here. */ if (!folio_test_private(folio) && - !can_split_folio(folio, 0, NULL)) + folio_expected_ref_count(folio) !=3D folio_ref_count(folio)) goto next; =20 if (!folio_trylock(folio)) diff --git a/mm/vmscan.c b/mm/vmscan.c index 92980b072121..3b85652a42b9 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1284,7 +1284,8 @@ static unsigned int shrink_folio_list(struct list_hea= d *folio_list, goto keep_locked; if (folio_test_large(folio)) { /* cannot split folio, skip it */ - if (!can_split_folio(folio, 1, NULL)) + if (folio_expected_ref_count(folio) !=3D + folio_ref_count(folio) - 1) goto activate_locked; /* * Split partially mapped folios right away. --=20 2.51.0