From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010039.outbound.protection.outlook.com [52.101.85.39]) (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 E82AC24B28 for ; Tue, 25 Nov 2025 15:55:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.39 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764086147; cv=fail; b=YLk6oRhCM9YcQDy/ntzshHfVlxwZcl9jappZUAMQK9dhonnY8YdeDlplo8WciQNOFRXkG5ICB+m4WNv5MWn6PPnmsQLg1/SJMQ/SzvM5PTerTT3axvJ6jvh5Ot8OEAEwr+d4Wkz9lRE4dPQsXeG7DIJkjgfG6SUt77tPH6kYDso= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764086147; c=relaxed/simple; bh=Vcy+RyNXOUP3WNgfsvHQFCgsSIrNfNVO0jfGlu15lOA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=iFK5H/7cUcuQMm9bBQoAEoJi7F6SzcuDYsm59vevW5W1RsBWS08qtHEDcOOMVcJGGJTPjFeFhQT4jYPqIq1vY+3U1U3cdwIdwG0t57au8QBidy16anqUo7gmPYM1ta8j0syzKWfsb8Ahc8yvXc/MqDM7QnBzkJgHO60RcdBEi+M= 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=LQogSiBg; arc=fail smtp.client-ip=52.101.85.39 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="LQogSiBg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vwxOqWYlFZeYPKq4U7+D/vO+YnfyvGLtqWWI70t7Uo8ExtK2dNtJadH4hQkq8qMi4+BnY0+U0Fdcr8ByciTypgztEOLLZYHuqZid9//V0A5gEqVcOzYTQuoTkqRJ5q2JO1p/qnQVBSoonxyIP1cm4UOkdVOIUGiPWqYPlD7l1VEFyFlEx7BUb+8bjZppjxIrqxxSz5vus5RjUQLQ0wTKWs7YBNXgVFjGYpNlg/P+PfY29+KIFlig27V/8bsjKlmLlxLqJJO7CZqqHn6WwETYOqqICwZtqPlQ1UkrzWC2NAZfgJy8WLdsumRY2vYVaf1hzIXVVSow21M5c9S7l/iGyA== 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=HevUnDQYMgnaKjCkWFDyXY4jbGZEPPduFUdhYED9Si0=; b=pkQ0Z0MC3tnTBe2NZ6bYJF+NP2ZC5gplkokzFAD2V+sk8DPE5wDGg/OCQ5XnYMswp6PkGg4FnSEwzqlYOCOtdd7JIcKDaLxetubHHvbk/+LV7DSZrugSl8hEM3cnOyw4dOwzMKWRiKEvrncfPDSDOxNZQCHW6eqLy9B/cS8U/+vZuzzb3DYLIMFawA37uNfYLMLPdd36tQcOPmEhmZ2YTxtvfISx5kclzs43Gl47b29CwxoB11KlzZ5cMwXApj++2Qp6wprn4QrFK53HschU79iw6tA2GEGLrIgC+zKEZzyBjHpK+EAFeIoKh3H/MxgeTuUIUoGsKOu4x1tWT7z+iQ== 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=HevUnDQYMgnaKjCkWFDyXY4jbGZEPPduFUdhYED9Si0=; b=LQogSiBgOzkQyoc9iOyk4q1hWV6iShV4fFmuIqzeQ3DkwInbYLjbXjxspSK/pioWNKUV03FsoCsVPbH5yTw5iCWVxhAf0KRY3rKJw8Me0qRZ6nLtoa2TGsOYJQFR+x+nzNPQgxlirvn7WpmNbcynpdexQb72OIHbjw0wgQVgghWMPSp5a2H3xDWiDbNKiowmJ41w6vmdCbyLgvLNqWdhnEbfwryPhtfXX2yUorOP4PLqg+OGjWDQ/t02J5DKN5ld9o5nfSEGBKpQI9/vOyAbOfeJivs3MxTvHiD+9DJ9yRxUg0ti2mPl50CEh99K7k+wz/yCcXRTciZcV0zZKqw8yg== 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 MN2PR12MB4320.namprd12.prod.outlook.com (2603:10b6:208:15f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 15:55:41 +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.009; Tue, 25 Nov 2025 15:55:40 +0000 From: Zi Yan To: "David Hildenbrand (Red Hat)" Cc: Lorenzo Stoakes , Andrew Morton , 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: Re: [PATCH v2 2/4] mm/huge_memory: replace can_split_folio() with direct refcount calculation Date: Tue, 25 Nov 2025 10:55:38 -0500 X-Mailer: MailMate (2.0r6290) Message-ID: <57E21FA7-7233-44CF-B67B-F24CDBA655C7@nvidia.com> In-Reply-To: <2f708eae-7d4b-43b0-83f0-7c2d98b294e6@kernel.org> References: <20251122025529.1562592-1-ziy@nvidia.com> <20251122025529.1562592-3-ziy@nvidia.com> <33A929D1-7438-43C1-AA4A-398183976F8F@nvidia.com> <34bafd06-250a-4019-8b34-5ddeedea1cb3@kernel.org> <66C159D8-D267-4B3B-9384-1CE94533990E@nvidia.com> <2f708eae-7d4b-43b0-83f0-7c2d98b294e6@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: IA4P220CA0008.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:558::6) 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_|MN2PR12MB4320:EE_ X-MS-Office365-Filtering-Correlation-Id: adf8cc38-c6bb-46a9-580d-08de2c3b1577 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?d0JjTHhaeGl1R0cyUGxxTGdsUE4yekN5dldTbUFzbmcxc29uZnRVdnJQTWts?= =?utf-8?B?MFNzbnBVc3grdm9FS2Rhcm5pVjluMFRXbnV4bVNCTFhuSlJmVyt2dVNEMWFn?= =?utf-8?B?OHFFTUZ4QW9YVUxuRVVDUnM5TUxjMk1qUUR5S2tBWHJlaGx4MGJVT3R3Q0xv?= =?utf-8?B?aEliY2tpOXJqQXFMOGNDN3M3Z3ZBTWlMU1dzbytmN2dtTUNKNUNteEtGb0lF?= =?utf-8?B?bCtNTUkzZWtLQ0thMXNpVXlXdTZBdmxGeFh0MmcweVI2VHAwSlk0MzZ4ZlF6?= =?utf-8?B?MXFjOE94T29yaFZGN3dtc3NjVDBDVUgwNnR2RnhkaWpkTzV0cVRlV3ZOQUhS?= =?utf-8?B?NDA4czBkMGErNk92WERyNURhS1Y5MjBoNTFZQWY4bTFGRzJjZFN5TUQycGts?= =?utf-8?B?WEVvbzZmYnVTRm9xUDFNRWdwOTA0V0ZwQUpCZjA3Yzg3M0pMMmhPbFNySGdr?= =?utf-8?B?L1FNNXhGSmZMTkZ0TjhuRHpiQnJsK0dZZzcxZDE1b2dCSk5jTzg5WmtwQUVj?= =?utf-8?B?dkVVZk1iKzVPZkhNMnZFSmRjZzR4WlFncWFyUjN2WDdiak5xWFdqU0RtM2Vm?= =?utf-8?B?YmRxZ0MvMVpvRWhhZzZKcmZ3aThUbGN2cER1S2FOVXN0Wlg1aU9XWk9ZTnR1?= =?utf-8?B?WW5Xb2pRNVlieDZhS0JBTldpNFEwcW5rNjVJQXNncXJXZmhOMHRYM2craG5R?= =?utf-8?B?bXk0VU02N01yWndUTzdjUzhvMjVncVQ3TnI2bjVBR3NhRXR6RkdxVnk1ZUxa?= =?utf-8?B?R1MyNnZFYVV0TkZVbGw1cTJnUzZBQ0Z4bVlhY0dtVUQwUXc3YXRhZHByYmYx?= =?utf-8?B?dDRJdU1uVXptTzVIdERaQ2k5N0NZUFk3LzZhcXVnQzY3S3oyQlpHdEFlNFdW?= =?utf-8?B?SnFWc1diQ3QyY05NV0JtVGlxZHJyUitvM2JKdCt1UnBzK3ZOSjB3N25vbmZ5?= =?utf-8?B?SmJHUmxId3FKd3c5RGVzSHZHRDlLbVR0eWxCNXdydHVVUHp2NmQ0bjA1T0dz?= =?utf-8?B?V2ZPTUtkbzNNOWwyeWtQWDZtUDMvYUdhVHJ6RmZzcFE4WGx4c3dBQXZabm9T?= =?utf-8?B?Sm9sd0xVbWdEeWg3R3RSR1RsSm1QQmlLQmhkVXNjSjh3TUV6bS8rUTJtVk0v?= =?utf-8?B?RjdFeU0wNkkvTGN2K2o1bGlGSWNLdjZrbzdrWlVMVkdIQ250amloM1A1L2Zk?= =?utf-8?B?a0F1Ynh0SGhBd0JwMk5hdytUVm9XS1NWamFBRU92U21pNjRNL0RBM0xVYmx0?= =?utf-8?B?Qy9rcUNRejBKWlo0a3FHSWxldW9JbTFYb05yRjBtNGNuSDYweGpxVGhrNzB0?= =?utf-8?B?bTVXdmZaTW5zcDNEa0VYVHV2OGF2OFJ1dFNnZ08yQW1LK0RQQkRHMDZ1SlV3?= =?utf-8?B?TnZ2b2RBS1p1Ujh6UGNaUHZzU0xycWxGckNaOUdqQ0daOHgvQzQ5dnhmWWNF?= =?utf-8?B?Q0ZpTVJxa2g3anh5TnBDR0M4enpxbmZRWnRORWFRTjY1cUFtYnZob1BzVzI5?= =?utf-8?B?U1hqcTVyLzBMOUI0MFJkZitkV3k0SEFIb05MYmQ3c3RiaGFWcnl3eXRFeURN?= =?utf-8?B?eXFlaFkyb1JsVlNQVEZ5UjJTQVNydVM5QWVFQXlQWXppbXNCTFk4MVc1VXJ1?= =?utf-8?B?LzJFNVB6dUFzeGlZNkJLUnRZd0l0SHZ3cHNjQ1dkeXBSZGlqUXZ6aVVXWkNK?= =?utf-8?B?Wmc5dXVkSUZvYlVGRFBOQkxtdXZxQUF0THZXSWNONFBNQ09hNjNrQTAxUmNL?= =?utf-8?B?c0Q0L0NJT29RRzlYc2VscGRKYWh0T1h1WmFKbnF2ek90eWtxQWVSR1dVc0t6?= =?utf-8?B?ejdpcHBHVmFicndRekZQUGk0V3UxTWw3TTVXbk9pU1Ayd3UxMEdIQ2pVWWNK?= =?utf-8?B?V3lnTmZEY3BLaVBBVXZHYXZEeENGMXlIU0ordXlVSmFtaTlzaklzak9yNllS?= =?utf-8?Q?QtEhEGTqeyZJEQVxt21FIu6WA9iL5P4o?= 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)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NllQUWVyM1BhNFBveXFzdkRjYjFEOEtsN1J2bUcrRmJ6WEhJN1RSSGJhUEM5?= =?utf-8?B?ZzROeW9XSzJkMktDalVDSU1yZkFvbExxeWtBdkUrb2N6MmRPQ1lpUVRMQzRV?= =?utf-8?B?aWJYTmtaN3d6VUpVWFZvMm9UYXFqQXJEdU42cU9VUVZBbTZ0by9KdkRiakhr?= =?utf-8?B?QVhUNEhkVXBlblpoRFRHeTVsalJLakFtYU1vUDJKWTM5d1l5VTlSYTFJdE9Q?= =?utf-8?B?a3ZoaU5pMHBPZDdXM2w4eDVIUHdmdWE1V3lBU29XTUR2UStLNU9oZ1oyMEJC?= =?utf-8?B?TjQwMnRrcHRTcE84d3dhRUxNVElNLzFOM1l2UkRkcVE1eGV4R0VPZFdLUnhG?= =?utf-8?B?T3BQdG9NQkdzQlhESVFSSkdZSUEyYkhmcW5vVW1PNWE0dzlXSjU4UEM2S1ll?= =?utf-8?B?MWpLUTFJaHRVWCtHamt4L0xKYUwxenJpaDQ2TVFzeTYvOWYwY2RvSmtnQlo0?= =?utf-8?B?aFRmUzJQMU8vc3ZHSDZBblFneXJ5SjFzS3kzaysyVUxjSzJRamdob1RyUGg0?= =?utf-8?B?b0lHaFdCeDIrVTJoNmpOTFRZcE5RNngyM1o0RDRweE9EYW5ZU3czREVEemN4?= =?utf-8?B?R3htOEV6Yy92L1I4aWl6bVZsd2EraTdBZGRQT2JoQzdSS2ZucytmQ2lRdU5U?= =?utf-8?B?MW0waUVvb2FUUWhvYXljb0wrL2dQc1FtQ0FnWWxQWGM3bngwc2k2QnFMUlFD?= =?utf-8?B?K1VWVXBnb1pMSG1GL1o3SXJTQm1kbkxJa21NUGNFNnBzbHpSVWkydzJIb2VL?= =?utf-8?B?cDYrclkzSXNuaUpEQUZ1SjNnQjJPRG9Zb1J2UnVIaXpOQlR3QS9uMDR0N3dq?= =?utf-8?B?VkdtYitwWlErdFJCWHlVVnB0OHFpYVN2YTByNFhrVXpQNFRpYVVGa0VGeFdR?= =?utf-8?B?UEUvVHBjb0wrbkF5cS81VlY4cVlJM1oxRGpDWmJQeTBIY0dVOTlsWGRRQTVQ?= =?utf-8?B?S0VrcGJxNUJsbUZtUU5OLy9IbFNDMU1VdGVkQmxmRWVjSTB4aEcxZk9PWG1T?= =?utf-8?B?MVN1L0dQb3d5TXl5aVVWTGlQM0cvemEwZWhtSjNCVXY3MlFhS2RFWUl0akZS?= =?utf-8?B?bFJzb3FJbDhrU253OWUrQUFlWmYyRU5NWDBxcS94SlYxV2M2WnpjbC9PWHRp?= =?utf-8?B?SjlINXJzQzF0cEd1NTNnajF5TmlwQkdzd1p2N1NYRmFBZmorWVRqMGs3OVJC?= =?utf-8?B?S0s3WFRhbGd0bnF6a1ZVbW9HdGtLWFRSRm9BUnpDWE9MdWN5TGdBcmdsdzZS?= =?utf-8?B?ZHdzTjNKYUJYdkZLT0x1MzZ1SVVQZUR1K3BId1ZGN1htNEFVd3cxaGs3Y0Zn?= =?utf-8?B?N2lKV01XTGUyOTNyelpuWGIvSVg4dmJaTWRiVkpkT0pHQ1BTcjFScFhKelN4?= =?utf-8?B?eUZiaHY3ZTFCa09RQmllRUllRjZjODhHblArMG8yWjFnMENUcDdMQVN2VHJ4?= =?utf-8?B?QThnY2VFTGFzZXRDQ1FGMllaYnRTUlJ6YmVXbEJPaE05NlJHOGwrR2liR01X?= =?utf-8?B?bW1iZ1FZZWF1LzRneG16SzV1OEpPQnBhQ1ZCSEF1QUNRNjFheXZmUlErT2dx?= =?utf-8?B?U3loOC9UQXRpNE9vMU91ZEJMMkd1SnQ2ZitBeXEwcGg0Y1FmY0I3Z2Y0MHRK?= =?utf-8?B?OThnZHhYaVpIaU8zQkc4T1JxZ3kzYTZqUENxYW1UZlpOamdPYlFTZmF5TnQz?= =?utf-8?B?RlMvUUtyVWdFMDY3N2tqN09FdnhMKzBSbHBjV1BtRHZMYUlHUVo1UUFSSXpa?= =?utf-8?B?ZzhjdXg2QjZEUXQzQTJ4eFV0RGdEN1NCVXNsOHNRb29Xcmphb0ZWTEk3Ymdu?= =?utf-8?B?K3lNaE9kRU94cnlvN29tSVJldUxqeUF4VXpsMWdmb2p1aGt0anJoSGliNHFP?= =?utf-8?B?eFRDWjV1VEp0bGo1T0wxLzRHamthTU1iZzNNck92NUhOcnk4SmVQQkxabW1V?= =?utf-8?B?UjhjcVpWZk5seTJKRDVRSlVFTXVIeTNUTUFzRlY5T0gwNHpNWnljdVB2eVhK?= =?utf-8?B?SENEWndLQmRsNlRJMm00VXJIYlp2Wm13UlZobjdFZ25rdkw0dk0rN25qdWtp?= =?utf-8?B?VkVnUnA4ai9PZ1RCL0RPbjJ3Q1VqR3lpYWZLcWN5UFZZN2V2Z2xqeUZHeVE2?= =?utf-8?Q?8tsrJh+GHeAkGEaMfbbzuQVRe?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: adf8cc38-c6bb-46a9-580d-08de2c3b1577 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 15:55:40.8964 (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: DFsc805GblSp0gDx7yUNtOF0qzeP2WIys5D06/7Tuakr+qE15cs04WiBg/S1zyWs X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4320 On 25 Nov 2025, at 3:52, David Hildenbrand (Red Hat) wrote: >>> >>>> >>>> Like: >>>> >>>> if (folio_test_anon(folio)) { >>>> /* One reference per page from the swapcache. */ >>>> ref_count +=3D folio_test_swapcache(folio) << order; >>>> } else { >>>> /* One reference per page from shmem in the swapcache. */ >>>> ref_count +=3D folio_test_swapcache(folio) << order; >>>> /* One reference per page from the pagecache. */ >>>> ref_count +=3D !!folio->mapping << order; >>>> /* One reference from PG_private. */ >>>> ref_count +=3D folio_test_private(folio); >>>> } >>>> >>>> or simplified into >>>> >>>> if (!folio_test_anon(folio)) { >>>> /* One reference per page from the pagecache. */ >>>> ref_count +=3D !!folio->mapping << order; >>>> /* One reference from PG_private. */ >>>> ref_count +=3D folio_test_private(folio); >>>> } >>>> /* One reference per page from the swapcache (anon or shmem). */ >>>> ref_count +=3D folio_test_swapcache(folio) << order; >>>> ? >>> >>> That is incorrect I think due to swapcache being able to give false pos= itives (PG_owner_priv_1). >> >> Got it. So it should be: >> >> if (folio_test_anon(folio)) { >> /* One reference per page from the swapcache. */ >> ref_count +=3D folio_test_swapcache(folio) << order; >> } else { >> /* One reference per page from shmem in the swapcache. */ >> ref_count +=3D (folio_test_swapbacked (folio) && >> folio_test_swapcache(folio)) << order; >> /* One reference per page from the pagecache. */ >> ref_count +=3D !!folio->mapping << order; >> /* One reference from PG_private. */ >> ref_count +=3D folio_test_private(folio); >> } > > Interestingly, I think we would then also take proper care of anon folios= in the > swapcache that are not anon yet. See __read_swap_cache_async(). Right. After add_to_swap_cache() in __read_swap_cache_async(), the folio there is in the same state as shmem in swapcache. > > I wonder if we can clean that up a bit, to highlight that PG_private etc > do not apply. > > if (folio_test_anon(folio)) { > /* One reference per page from the swapcache. */ > ref_count +=3D folio_test_swapcache(folio) << order; > } else if (folio_test_swapbacked (folio) && folio_test_swapcache(folio)) = { > /* to-be-anon or shmem folio in the swapcache (!folio->mapping) */ > ref_count +=3D 1ul << order; > VM_WAN_ON_ONCE(folio->mapping); > } else { > /* One reference per page from the pagecache. */ > ref_count +=3D !!folio->mapping << order; > /* One reference from PG_private. */ > ref_count +=3D folio_test_private(folio); > } I like this better, will send a patch for folio_expected_ref_count() separately. Since folio_test_swapcache(folio) implies folio_test_swapbacked (folio) as Maolin pointed out in another email, I will get rid of folio_test_swapbacked(folio) in the above code. > > Or maybe simply: > > > if (folio_test_swapbacked (folio) && folio_test_swapcache(folio)) { > /* > * (to-be) anon or shmem (!folio->mapping) folio in the swapcache: > * One reference per page from the swapcache. > */ > ref_count +=3D 1 << order; > VM_WAN_ON_ONCE(!folio_test_anon(folio) && folio->mapping); > } else if (!folio_test_anon(folio)) { > /* One reference per page from the pagecache. */ > ref_count +=3D !!folio->mapping << order; > /* One reference from PG_private. */ > ref_count +=3D folio_test_private(folio); > } > >> >> I wonder if we should have folio_test_shmem_in_swapcache() instead. > > Interestingly, thinking about it, I think it would also match to-be anon = folios > and anon folios. > > folio_in_swapcache() maybe ? Yes, will come up with a patch for it and send along with folio_expected_ref_count() patch. > >> >> BTW, this page flag reuse is really confusing. > > Yes ... > >> I see PG_checked is >> PG_owner_priv_1 too and __folio_migrate_mapping() uses folio_test_swapca= che() >> to decide the number of i_pages entries. Wouldn=E2=80=99t that cause any= issue? > > Maybe at that point all false positives were ruled out? > > It is horrible TBH. > > --=20 > Cheers > > David Best Regards, Yan, Zi