From mboxrd@z Thu Jan 1 00:00:00 1970 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]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AE9F2FDEE5F for ; Fri, 24 Apr 2026 02:50:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DD0A06B0005; Thu, 23 Apr 2026 22:50:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D81756B008A; Thu, 23 Apr 2026 22:50:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C484F6B008C; Thu, 23 Apr 2026 22:50:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id AB2FF6B0005 for ; Thu, 23 Apr 2026 22:50:07 -0400 (EDT) Received: from smtpin13.hostedemail.com (lb01b-stub [10.200.18.250]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 31D2A1B8677 for ; Fri, 24 Apr 2026 02:50:07 +0000 (UTC) X-FDA: 84691920054.13.4D5F4DC Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013002.outbound.protection.outlook.com [40.93.201.2]) by imf06.hostedemail.com (Postfix) with ESMTP id 42D35180002 for ; Fri, 24 Apr 2026 02:50:04 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=TVesvqC3; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf06.hostedemail.com: domain of ziy@nvidia.com designates 40.93.201.2 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1776999004; 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=I/5izaT+f2mYrPTBPN8+ZApukXtFr9fKFOyq17ktj7I=; b=15dDl5NIkIHc88LyEz43TcQmjvBRiqv2+M8WK8ghACmCpKP/BNd9ZZHbKOx+hIuvBYj9Vm bACsHLsqp6IADr7/TBCxcT9+8qWwknwBDMYWHiiDHZuA2M6BnJZfbBcb9gnVmQe7lR4ciF FeZR1SqaND7pLkBdvoNH1qWwP46QNq8= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1776999004; a=rsa-sha256; cv=pass; b=RBNswB7gZTJ+jA+JLVBw/JpLHw1aafQX8u+sszPMTdWa1VjcPfggK5iWUMcsXG/YzSxkor d2VjIOObir5j+thV5k4yeJVK9VyaC84tfzLggPzW35215AXwhFj17NiAh4SNFG2CG8C2o0 G2enI28l5wwAdNFCpYLVKDEq+SCIJrQ= ARC-Authentication-Results: i=2; imf06.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=TVesvqC3; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf06.hostedemail.com: domain of ziy@nvidia.com designates 40.93.201.2 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QFQfTEDWYcCaOLooEF8l30otme9ekVxRyhH9rwY5KXpsbfZXDRZ4H9cEAV/gMezK9+ecO05bCBeQjJP1wHOCOdZhQMleW+vzeSSn4AZWyNFCIyZMW1vwmos766FYlDEuEKrUDrThNgzO8btSn7Exvb898uQlQvqm2r9wVoqap1La+pqD0ujl+R7+XwuRN/yj8gym7fHVPvUDCLI36TVT+8+1Lf6sIZx/BEmhdNcZcegrwuwNHuYJWYIvsJSBufki8mwzmSPJmdR+1KJ3KlUJ2heerlfinQ7g5TVNZ/Xwsf9GXGYIi5A9RIQIKD95JOnbr3+zZigtuZ1WhtLo6AiXDw== 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=I/5izaT+f2mYrPTBPN8+ZApukXtFr9fKFOyq17ktj7I=; b=p/zzpTVUfGZMTu1MSR+4OwvKVDhiCIFvBLwWx4JXifuQ8CEF/AgUoc9493c4SIZJQlSrVxpnBWDEMDyL+GaYeL8765WbQt1fX0WRHIDaD5P8Xy/IIK/GEi30iLfAVu2oOQH+E/MUv2eA9WburAdhy8siwGjPSqu0FaAnrcrpulpO4qzxalh4IcfjZkhmBNpy48JI4gmfE2Ew4ZfpFeMNJZBJXKh8l9tBe09hsEGFzu50P3MrCHWE7RFWyXE0l2ma4U3OLIRn6V5cmPun/ZxciTdFz+H5gvgpIybe6CHx0FIYy+U9GIXptSqCf4zUmDcIh+uBU75TOSyPnJfE+vZbdg== 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=I/5izaT+f2mYrPTBPN8+ZApukXtFr9fKFOyq17ktj7I=; b=TVesvqC3Sta8Cwcut1Z7mexr/Hanyqugw+Sei6A3zO/uverVzPawKgaycG3QsTib2VGzQK3kkkJ1OypFWJnAhCkdg/zx8iff+GXRD3oi/EXo70wJBZ2WWhHXwZg9+2ZRJQ6oRaeGmP0dO4m/rIGqFo/9C01XjLMkvDlhjKEwrpzKePk2aHYUb1GYi4db0cy4TzhlHcnVc+yrvtAhtASZx9QfQOTrrnpfieJtq76kNgc+6drpyofZ3q7ZyTTYFae7gKYN5210ZK+qgatGRZauQT+4UbsmhsoXIJtWpxBv3+MlmKL7HW0dmj5CSPqxqmjxNBcbeCWnLHCC5uCUQ2v6LQ== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by DS4PR12MB9588.namprd12.prod.outlook.com (2603:10b6:8:282::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.16; Fri, 24 Apr 2026 02:49:56 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::f01d:73d2:2dda:c7b2]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::f01d:73d2:2dda:c7b2%4]) with mapi id 15.20.9846.021; Fri, 24 Apr 2026 02:49:56 +0000 From: Zi Yan To: Andrew Morton , "Matthew Wilcox (Oracle)" , Song Liu Cc: Chris Mason , David Sterba , Alexander Viro , Christian Brauner , Jan Kara , David Hildenbrand , Lorenzo Stoakes , Zi Yan , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Subject: [PATCH 7.2 v4 00/12] Remove read-only THP support for FSes without large folio support Date: Thu, 23 Apr 2026 22:49:03 -0400 Message-ID: <20260424024915.28758-1-ziy@nvidia.com> X-Mailer: git-send-email 2.43.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: BL1P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:208:2c7::6) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|DS4PR12MB9588:EE_ X-MS-Office365-Filtering-Correlation-Id: ca6a3cb2-4834-4a6a-84f2-08dea1ac2b2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: +gucY0tg52PZCEn+sJ/Q96basB8x3y3xEPSF6/2YY87Trw/M73aDiDuY1Wr77jlW5i8/7fCNYZW2kkvAgB49B8yjTFVoFE5ku7X8hZXHfXyMldp1RblhuGMHe9uCib7tr9iW9Lb9mFIfqMmri9fkFuF/Kl8uQn5UwZoDFjPAXa4p3xlWsURhOBodGmQjo5bBIMeSx+IH99ny7l+Avbr6Gn+sVSZIa8lXEqfeq9XJG17m7QBTkAF/kiT6FFJCVwofRw1hRobQIl7ECKlGztI989Yszd40WxhuGPUbYfwM2LMpiRkfb9s0XptEtrJGbyV5ppEx5M95H8lCWebPRHm+6L1Pmru5CDcEEMTRqPVJmERcTtNEO/JVw8+CdaYCVJeuH46/oFDeSKXlMvQenvzzswK/idh9ePbE++smEzXbqt4buRUHchX1YEZFCKw8gyIn9s5VzYsXnvEsqhrNqKy2uf669zs3XFGODpJ5bdm8QrU7EHTCOAwgLUkctXzsgm0CZQ4Maua5v3UTTQ7XwjswDpIWZJYxvbEFLEYWmMva5v+qigmfI4TFTXppXGRSBPZGVtuv9WhurfwySoF5TcuGU6uIZDm9z9cXXwFFGltHsLrumP+FjTp7w7hUQu9c95wZH8scE8YdI67yTht3wbfAWEsEkeztO8uxNBhfEeAzXfbv26Ogtnw0U8V9q5DFN7F2DSL/7DJvlec3GonU2aE4lXt0/5QGLQ7iItoj48DvJVs= 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)(10070799003)(7416014)(376014)(366016)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?LzN1SUxmZHo0ZWdFdFFGd3FDUTh2WFNIaDBxYmlDeElvajFSaW8wNU5PRlZy?= =?utf-8?B?TGo4NExEMU81MUdoTEdvdmsrRTk0MXFVd05DZmVrOG13WmxwdklNaXl4UkpJ?= =?utf-8?B?TFpXa2dPV2NMNE4vcjVwQndGVlJmUnF3eGllWXY1bzVEdWt6NDNnUVNKNDQr?= =?utf-8?B?OEtHNmtvUWtjZitzSEJuOGY4MFdXR0dxUFB1NnBnT0RnNFliYmZlYk1UcVhX?= =?utf-8?B?eXlqdENUTzZvU2E5NW5oc0NUS1ZSU2thSUVsNUp0eUtpOENoZXhZS0dwL0FD?= =?utf-8?B?eGkvQmFabHcraHJIdW5xMjRLOWhSNjE3RVNYZGM4YWdTa3daUzAyUUYva3B6?= =?utf-8?B?cElDaFQwc2dTeGZycCtYMTd6aExORHRqVzNSeGhwWmlkNDNDbld1TGRvY1Q0?= =?utf-8?B?NEk3ZmRwcXdPZFJiV2ExUExxWjk0OGFNby84MGNhUWxhSExTNkV3TUE4c3Yr?= =?utf-8?B?WFgyMzZCdjZ4L016VWtQTWtLVlUyZW4rMTJHN0dGeDdjTDVqMHdDQzZKTUhC?= =?utf-8?B?dUs0eEs5K3lYcXNXZVR4TnlMaERIbTUvRkVrUTZGMmJoT1QvU3BFSzB1THZY?= =?utf-8?B?bDEydTkrNTdqQ3YzNEErZktZVURWQWNZK29LTHN4UXhZV0F2emNwTE9Zd0Rt?= =?utf-8?B?a1lNY3lwcGxwbytzSmx3dm81TjRrU3VBcXJhNHRPYW9jQm5lOXRCQmcyTzB0?= =?utf-8?B?cFdKdXRVL1Y2dHFZcUtWU1BrL1lSZFpMN05KTjVLazlMRG5OT2ZtdDZOaXhp?= =?utf-8?B?Wi81ZzdERnZpclFubjBtM0lVeUtGaFVkUjcyNnM4dmhRK0RaaysvRndOZkFC?= =?utf-8?B?MlZqbTFaS0h5cWpxVHhPL25lallITk5FRUoyTUNseXpGQ201LzJPdlA3dTFI?= =?utf-8?B?OXhTZGVab0RoU0daTmhhS0pWQjI1SGQxUWlhcHR4andpUkJOUWlwdlhMV1JS?= =?utf-8?B?ekZVZnBJMVZMc2tobVN6Um9kN0cvWEFZbXlLdTdETjh5SGNYOEVLMFQvK08z?= =?utf-8?B?djQ4RTB1RzhoZGJOWjdiMnkxN1R2UlBDa2RteXo2VnZ5djNGQmNXZGxwYW9V?= =?utf-8?B?SXhiNEpSdXMrcWk1cHVjUDE2L0YvTHZjU3hSQnFpSnZ6dGFweGVjakt3NUNR?= =?utf-8?B?dDEyTUhneUtXamNVV2ZHblIzTlhHS1A2aloyRDVaTXRVbnpZaDR5MUtsZm5j?= =?utf-8?B?VVkzQ0dHQldnQUFtaXQ4dVNJQTZrN0V5TDM4a1dMZlVKeUZYOFd0cWh4eUcy?= =?utf-8?B?cmpreEpIdWhOZ2txYXlwQTFFOS9yMTRxNHRDWlY0cDY5NUxDTUJqbUltOHRk?= =?utf-8?B?bmhUUDQzRlAzNlppNkM4a0REdWltaHJFaURtL1dtS05tYi9DTTlBTmZyM0E2?= =?utf-8?B?SnlHV0lBR25IdkdnMytzUlhFOGgyWnpyTXR5MHJzOXhOMHpvRHowWERDQkcr?= =?utf-8?B?bHpZb2l4bk52OExZdE02d1kxQjlaYTZHaEZtK2NXT1phYkczZzJRVzVhUWVJ?= =?utf-8?B?MlRZWndlcTNwcGlLMGFvdGxOblpuQm1jNUVwRTVkRGpuYzZPQzUyNUQ0QXQx?= =?utf-8?B?ZHVQTldjT3BTazNRZ0JIeVpoQTlBYy9MSnp3WkhPL0t4V214dEV2ZWxzcGwz?= =?utf-8?B?eXhKakhJUVdhODJrT1ZjVUtJVnJjTXYvZmhEUkc0aTF4eW0zbkxxbTVVQndK?= =?utf-8?B?YU11d3pJS3B2YWRjcTQzOHVzOWk5RGVEVzgvT1d2a3VJdEtXVVNFcjNHd0Jh?= =?utf-8?B?NFRGakl3NVJZY2hzaG0rS2p5KzBiVzA5NWpqZWZENGVxQ2NqM0RWTnArNHRh?= =?utf-8?B?eERnSnRrenZTQ2lpRTd0RUNBVEYyMEdHSm9GUjBSTnNLeGVuWTlnSm84NVRa?= =?utf-8?B?MFRuUTBhWnBPK1VTZDZKV2ZvaDZ2dGpYYUo0SHU4eGFtTkJqMS9qUmc1ZnBo?= =?utf-8?B?VEt2cGVuaG9GL0s0eS9xdkdWYk5jUGxTRWpVMDc3bEYwWVQ5TkpqVGZFK2lk?= =?utf-8?B?TUZ4N2ZCMngvNm5mR3dJYXNEZTA2N1IvbGk5VnVMZ2JOK2t1VG1ScDQ4bnhP?= =?utf-8?B?YjVwYW16dGs4Wlh3Uk51UEpCN2R2VEFqS2E2YWFHeGFIREdNbEpmTWxDYjVO?= =?utf-8?B?Tm5yV01VSjF2QlNtNFJMRjN6UXBKbE80U1lHcWhNQkMwUXMxWkVJN2tBY1VE?= =?utf-8?B?SGdMaStDdzBLakNyRGZ1YXBEYVFWa2RoMUFxSVNxaXYxUzBvSm9nbU5KSjRD?= =?utf-8?B?ODdhOW9kUTQydGVUMm5iaGdTZ0swMTYycU9HQXZkT3JJcWZ3Q2x3cVVRT3NZ?= =?utf-8?B?OXgzMTV4NlYyc3dURjZXYWRGeDJOU2ZXVWYrTmpPaEQ5anAyL3FnRlA2TXky?= =?utf-8?Q?HTTQM4sr1pI98jxFo/OqoM/kspiWWPNDCkuLH?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca6a3cb2-4834-4a6a-84f2-08dea1ac2b2b X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2026 02:49:56.5168 (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: kolDOsn7dZ+NYMP611QSnn8jkNz0Z6sEORg9ivE91GEEhyRSoPNM2z4Lyp8FaSdc X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9588 X-Stat-Signature: yzbdn8w811iprchx15rifof45gcfaxht X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 42D35180002 X-Rspam-User: X-HE-Tag: 1776999004-9582 X-HE-Meta: U2FsdGVkX18oG1Pip1eAcxx4XS2KHYmzoS2l1OJKtQ58ZZR4CFmldPBlaRFrwuHmiOs4OeZM9/3fy3YViRN1Ac2xlRFX1wuqxbTQLAVSjHSB7mHcbidP5Am0uB1CmBDukIiPLllkPL1oP3En3q1zMqa0SohSvnRkiUftlTAsWxX5QEblRgbEhG2yPt0KRRMSCWv7F2bO80BsS6V8JKYSC3sh9ooLdDd8LCHhxa1Gk3tLA/5FNI/nfOTBombkoVFge0DVlIYGeoMhicsgX0sdF85uWxzeOLnkjBjaanjCE1sKyqkKvTDhPKEiaCx0x/rSWsgh9AFirbSH49XEnbFUpPn9si7/l+EBqcisZG9mpvIKEtq8YN1rckUBePaBNjh18pQcn0UCaT1S6eCB6a/18yd0Nbwv2pjfdobbdyjVAgaJBjcKhLM9K0TXtwo6zNi7GPIx8zpcI+TcSMpLGgciMrgyvsOG9gJerWuM6mUCuUFU8SQVV9U1OfCb2G1x8HXrNW4Zt12Z2v/KMu4fM17GrKYIEoF2HdEZqCv7Hviw8F20MvsN2hkhsRs0tqGYmpXZXDTmZU1B1s7CcMun3Op7IEnFfWj5NWQzrfPUSNrtiJPdTIHlGVc93v/bMSV2BZYe+XIQdr6/8D8ngB0X4WOjHlkIFZRk2kKCXDN60pw2xtAJnYEovG34ClxCDiiIZbqC/yqR9NR1Dy3rxW713gHhh1S771lWvVfHk+TwShbsax+TMZglQHXmVb6dc2SnOr28RRypysOLFKsg2VXNWawdZ3kb5OmjVph534zRxUvCc9WgPqrgKegbvQH1uCXQTkM/B/aemNzXp2QllX4yxBdpWEwTopdsagJBfusySXTk6Ulv5XPP21/zr1WiEctpgHmODeoTfXWe7pt+aQftPOGuRaVrxwzL8EQL8/G+h4NURC/uXV9H47J1KBV8N3O59DY41PN3HcVvTOug5AEDRuA rx3OGYMg I4g3y2K0nn7qg8I9ARGE9MohbKEr78FVURmgl5rZ+KAkbIrjgJbPKs7riDU3vF5FoTbeKw5Vlr+LhssitOi5BGNuLA6wbeTFzqoNRmyYPUhx10/y6FR6kYntPzjEz8DodLJ0+gWHuV9EvQJBFWwQHqbRuPZVOD0tJ7Xbot/b67DVusVXjHPufaF/NWOdJ0coCOTDT4H4+UPYsoWhILUyGm5GHqh404eIDyqd3jEtLtmhmUPX4mxGvxJ3VKjI9O1/1QcM7JTcbKfdyW+vQfxfUSoMQJJSzu2yIaCi3p/GlLZfB2ATlIWrdKb6D7XRhowRgCipH+A63oJGYpusIfOxdWARExghFB9Ry2RUVydMQ3XR30pO2ymQy2vvOLbhCPNfAwB0a+1b1P+uZDNltoFCDZsLibq+8fSoAzdG3uZ6kIiNIRPn9Bdsw32t9TBZQLi21b+4S Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi all, This patchset removes READ_ONLY_THP_FOR_FS Kconfig and enables creating read-only THPs for FSes with large folio support (the supported orders need to include PMD_ORDER) by default. It is on top of mm-new. Before the patchset, the status of creating read-only THPs is below: | PF | MADV_COLLAPSE | khugepaged | |-----------|---------------|------------| large folio FSes only | ✓ | x | x | READ_ONLY_THP_FOR_FS only | x | ✓ | ✓ | both | ✓ | ✓ | ✓ | where READ_ONLY_THP_FOR_FS implies no large folio FSes. Now without READ_ONLY_THP_FOR_FS: | PF | MADV_COLLAPSE | khugepaged | |-----------|---------------|------------| large folio FSes | ✓ | ✓ | ✓ | no large folio FSes | x | x | x | This means no large folio FSes need to add large folio support (the supported orders need to include PMD_ORDER), so that they can leverage read-only THP creation function. To prevent breaking read-only THP support for large folio FSes, 1. first 4 patches enables the support, so that without READ_ONLY_THP_FOR_FS, read-only THP still works for large folio FSes, 2. Patch 5 removes READ_ONLY_THP_FOR_FS Kconfig, 3. the rest of patches remove code related to READ_ONLY_THP_FOR_FS. NOTE: collapsing writable MAP_PRIVATE pagecache folios is not supported, since: 1. PMD THP CoW only faults in at PTE level to avoid long CoW latency, 2. the first check, due to 1, in file_backed_vma_is_retractable() prevents it. The overview of the changes is: 1. collapse_file() checks for to-be-collapsed folio dirtiness after they are locked, unmapped to make sure no new write happens. Before, mapping->nr_thps and inode->i_writecount are used to cause read-only THP truncation before a fd becomes writable. 2. hugepage_enabled() is true for anon, shmem, and file-backed cases if the global khugepaged control is on, otherwise, khugepaged for file-backed case is turned off and anon and shmem depend on per-size control knobs. 3. collapse_file() from mm/khugepaged.c, instead of checking CONFIG_READ_ONLY_THP_FOR_FS, makes sure the mapping_max_folio_order() of struct address_space of the file is at least PMD_ORDER. 4. file_thp_enabled() also checks mapping_max_folio_order() instead and no longer checks if the input file is opened as read-only (Change 1 handles read-write files). 5. truncate_inode_partial_folio() calls folio_split() directly instead of the removed try_folio_split_to_order(), since large folios can only show up on a FS with large folio support. 6. nr_thps is removed from struct address_space, since it is no longer needed to drop all read-only THPs from a FS without large folio support when the fd becomes writable. Its related filemap_nr_thps*() are removed too. 7. folio_check_splittable() no longer checks READ_ONLY_THP_FOR_FS. 8. Updated comments in various places. Changelog === >From V3[4]: 1. added a TODO comment in patch 1 noting that the is_shmem exception in the VM_WARN_ON_ONCE() check can be removed once shmem always calls mapping_set_large_folios() on its mapping. Used VM_WARN_ON_ONCE() in mapping_pmd_thp_support() instead. 2. fixed the dirty folio bail-out path in patch 2: add xas_unlock_irq() and folio_putback_lru() before the goto, which were missing and would have left the XA lock held and the LRU isolation ref leaked. 3. renamed hugepage_pmd_enabled() to hugepage_enabled() to reflect it controls khugepaged for all transparent hugepage types. 4. reverted the comment in hugepage_enabled() in patch 4 to the original; only removed the phrase "when configured in," which referred to CONFIG_READ_ONLY_THP_FOR_FS. 5. fixed commit message in patch 6: the dirty folio check is added after try_to_unmap() in collapse_file(), not after try_to_unmap_flush(). >From V2[3]: 1. removed unnecessary check in collapse_scan_file(). 2. removed inode_is_open_for_write() check in file_thp_enabled(). 3. changed hugepage_enabled() to return true if khugepaged global control is on instead of false. cleaned up anon and shmem code in the function. 4. moved folio dirtiness check after try_to_unmap() but before try_to_unmap_flush(), since that is sufficient to prevent new writes. 5. reordered patch 4 and 5, so that khugepaged behavior does not change after READ_ONLY_THP_FOR_FS is removed. 6. added read-write file test in khugepaged selftest. 7. removed the read-only file restriction from guard-region selftest. >From V1[2]: 1. removed inode_is_open_for_write() check in collapse_file(), since the added folio dirtiness check after try_to_unmap_flush() should be sufficient to prevent writes to candidate folios. 2. removed READ_ONLY_THP_FOR_FS check in hugepage_enabled(), please see Patch 5 and item 2 in the overview for more details. 3. moved the patch removing READ_ONLY_THP_FOR_FS Kconfig after enabling khugepaged and MADV_COLLAPSE to create read-only THPs. 4. added mapping_pmd_thp_support() helper function. 5. used VM_WARN_ON_ONCE() in collapse_file() for mapping eligibility check and address alignment check instead of if + return error code. Always allow shmem, since MADV_COLLAPSE ignore shmem huge config. 6. added mapping eligibility check in collapse_scan_file(). 7. removed trailing ; for folio_split() in the !CONFIG_TRANSPARENT_HUGEPAGE. 8. simplified code in folio_check_splittable() after removing READ_ONLY_THP_FOR_FS code. 9. clarified that read-only THP works for FSes with PMD THP support by default. >From RFC[1]: 1. instead of removing READ_ONLY_THP_FOR_FS function entirely, turn it on by default for all FSes with large folio support and the supported orders includes PMD_ORDER. Suggestions and comments are welcome. Link: https://lore.kernel.org/all/20260323190644.1714379-1-ziy@nvidia.com/ [1] Link: https://lore.kernel.org/all/20260327014255.2058916-1-ziy@nvidia.com/ [2] Link: https://lore.kernel.org/all/20260413192030.3275825-1-ziy@nvidia.com/ [3] Link: https://lore.kernel.org/all/20260418024429.4055056-1-ziy@nvidia.com/ [4] Zi Yan (12): mm/khugepaged: remove READ_ONLY_THP_FOR_FS check mm/khugepaged: add folio dirty check after try_to_unmap() mm/huge_memory: remove READ_ONLY_THP_FOR_FS from file_thp_enabled() mm/khugepaged: remove READ_ONLY_THP_FOR_FS check in hugepage_enabled() mm: remove READ_ONLY_THP_FOR_FS Kconfig option mm: fs: remove filemap_nr_thps*() functions and their users fs: remove nr_thps from struct address_space mm/huge_memory: remove folio split check for READ_ONLY_THP_FOR_FS mm/truncate: use folio_split() in truncate_inode_partial_folio() fs/btrfs: remove a comment referring to READ_ONLY_THP_FOR_FS selftests/mm: remove READ_ONLY_THP_FOR_FS in khugepaged selftests/mm: remove READ_ONLY_THP_FOR_FS code from guard-regions fs/btrfs/defrag.c | 3 - fs/inode.c | 3 - fs/open.c | 27 ----- include/linux/fs.h | 5 - include/linux/huge_mm.h | 25 +---- include/linux/pagemap.h | 34 ++----- include/linux/shmem_fs.h | 2 +- mm/Kconfig | 11 --- mm/filemap.c | 1 - mm/huge_memory.c | 39 ++------ mm/khugepaged.c | 92 ++++++++--------- mm/truncate.c | 8 +- tools/testing/selftests/mm/guard-regions.c | 18 +--- tools/testing/selftests/mm/khugepaged.c | 110 +++++++++++++++------ tools/testing/selftests/mm/run_vmtests.sh | 12 ++- 15 files changed, 163 insertions(+), 227 deletions(-) -- 2.43.0