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]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6803DC61CE8 for ; Mon, 9 Jun 2025 18:37:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 99AF16B007B; Mon, 9 Jun 2025 14:37:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 971976B0089; Mon, 9 Jun 2025 14:37:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8390D6B008A; Mon, 9 Jun 2025 14:37:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 5E5E26B007B for ; Mon, 9 Jun 2025 14:37:47 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 0692C5C638 for ; Mon, 9 Jun 2025 18:37:47 +0000 (UTC) X-FDA: 83536720974.30.6408674 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf24.hostedemail.com (Postfix) with ESMTP id 66207180004 for ; Mon, 9 Jun 2025 18:37:43 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=O7TDUu4j; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=OMxJFFU8; spf=pass (imf24.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749494263; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kB/0odTmAVFHzUs6VHSY50wQUOjX1ao+XeM3xrW3jOg=; b=n08x2EivbnSSaddabg4bBple5OswdOjwituvafrwR++IHz0n8B+XK3TtUFjvLz2oNHRlhe IRynjOwUx1u8jq4sims4XgS0mkYAtkg74tzDpX8EjoIe8IRvA+ff/lItsAGgqN6/GWUhi1 fOqMw9addmsw1hAXFpFk3kcbGhD+9s4= ARC-Authentication-Results: i=2; imf24.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=O7TDUu4j; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=OMxJFFU8; spf=pass (imf24.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1749494263; a=rsa-sha256; cv=pass; b=PO7bshRPHIMR8MRp6lzxoZRcuf0P/2pDn3gvEF1bi4uoLgWpJJn8fM1gZ1NCcy8TwUIBOs 9tjnkZAGMP4pm2T9TiR7EWuNjUrH+5z94jM2oAwduomu4sp5/6e7MLVxN8GA8LvhWm1BVw /0zIKZDvTsZFFl08iQ8JJ/7Smr+lQEM= Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 559FhdCv010902; Mon, 9 Jun 2025 18:37:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=corp-2025-04-25; bh=kB/0odTmAVFHzUs6VH SY50wQUOjX1ao+XeM3xrW3jOg=; b=O7TDUu4j0V8ShF556F+TQqrXUHZiEKaDlu OpJ/WSf1qCl78sW+pDF0qbrsSfOJTH4s5f+ED4Yg18gGbP3Nyzy3Sw9YflYS1IaG NqO+H32wMPWzcIP8QE/cBvd2Cl4qw6uV6j2oTB8S14mCGSecg6xNmtPncavJCEDu Q36BekMtFw7yqFcBBT/RlQycdgxSRL2lx0jIPv/0KcD72JRjPDDhMko9HjPlI0VR UE6vPsQVcCUp8QvjD1peDA6pMtydkONEOkgOyq8ZIBHhF0jCRCA4wrWAsBqRBUs0 GBFFnkv1Cween7ZZn/k4FBMLBPKOcRXlZCUnBHPQ+se5sfsgHWtw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 474buf2ryd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 09 Jun 2025 18:37:38 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 559HhV10004011; Mon, 9 Jun 2025 18:37:37 GMT Received: from nam04-bn8-obe.outbound.protection.outlook.com (mail-bn8nam04on2043.outbound.protection.outlook.com [40.107.100.43]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 474bv7s8uu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 09 Jun 2025 18:37:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CwGTL6T0T4rVbqLU2PLOluun1mkuDYpaIvIhNqiPFxsAd9Nsb4FpGF5/8yuIsgAR8kOcZfcdkkT3JMX4eSc66hODyL5W+aHcW4QgK+BB/uo2AhtEtEdkP5dyJRNe2sIr59AGzw6Ko3t2bTNy1xSqQYWLxaIFLHPKWSivRXBn7qR74E11aeUCu0ziEemB62WxL8Dwwh7ZhQxTxz6iBQjy30RqV9y+TLF/UgoJtIVLS90xWChmXPh2LSrWjAbjV1asr3AAFogATbGY4VtVYTkAG3ct+DcPK3c92CcQTmRkLMcP8wwA3R4r1v4QACqwC3gjcNdeXPMEMm8wFupiVTb0Ow== 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=kB/0odTmAVFHzUs6VHSY50wQUOjX1ao+XeM3xrW3jOg=; b=b0mtxCEA2D/WBKiPTnpajTnpXaYaPePDlNvZNph7CT524e4PAvS2USLhqU4v7PzBu9H/4OC1dXwPEbzSC/jTTiWoM2X4KUVJdSzvr7LXrZjrCX9hr0xjyTF1NBe5AFGoZDoZyvfLcJKoUtTVMCxpwt+FfKOT5P3HL45aJiCkMMSx6yIUAiR6KDj2SZDmRmmSGtQL7Dx7L3prfg6ZIbcfkICSFCz2Pc3dRaLtCEJPiL/sabmS/OoA2ZxKOrEzL6NnJtwW7r3EA28lrG6kihhFR7Gmv8tkLvlKsb3YN/II1cdKOMJl0XagLzAsW60iZYnhvoKW+14DE/qLLQeiCj6HLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kB/0odTmAVFHzUs6VHSY50wQUOjX1ao+XeM3xrW3jOg=; b=OMxJFFU8lx7FIgdzNIR2eoWAt2GZgMdVJ+mD1poiwn0FuESxXNrIu0/j3//b4VB9e/5BkS93P/QCyePMuCZZwO2cJo8bhhMl/CKZmV38ygexNh9O7KaCAUpL6GjkiIgrrXy9QDuq1S2C7XRYIwj8YmaANsxOdktwRp1xWIk6idY= Received: from BL4PR10MB8229.namprd10.prod.outlook.com (2603:10b6:208:4e6::14) by IA0PR10MB7134.namprd10.prod.outlook.com (2603:10b6:208:403::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.22; Mon, 9 Jun 2025 18:37:35 +0000 Received: from BL4PR10MB8229.namprd10.prod.outlook.com ([fe80::552b:16d2:af:c582]) by BL4PR10MB8229.namprd10.prod.outlook.com ([fe80::552b:16d2:af:c582%4]) with mapi id 15.20.8813.024; Mon, 9 Jun 2025 18:37:34 +0000 Date: Mon, 9 Jun 2025 19:37:33 +0100 From: Lorenzo Stoakes To: Andrew Morton Cc: Alexander Viro , Christian Brauner , Jan Kara , "Liam R . Howlett" , Vlastimil Babka , Jann Horn , Pedro Falcato , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v2] mm: add mmap_prepare() compatibility layer for nested file systems Message-ID: <2d4750fd-10d8-42f6-a396-ceaf386e65f5@lucifer.local> References: <20250609165749.344976-1-lorenzo.stoakes@oracle.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250609165749.344976-1-lorenzo.stoakes@oracle.com> X-ClientProxiedBy: LO3P265CA0026.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:387::9) To BL4PR10MB8229.namprd10.prod.outlook.com (2603:10b6:208:4e6::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL4PR10MB8229:EE_|IA0PR10MB7134:EE_ X-MS-Office365-Filtering-Correlation-Id: 8cf61695-b9e1-4415-22b1-08dda784b3af X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cFW0Kc+BTz9RGinsCetwR/OX3u7Hy6nYwcCejrRDQnTANohcHkln3M2x53JF?= =?us-ascii?Q?lZb5aQ/QpoGbQnRoMqb0XE8quZ9jCF8cIVHBDd4Zvczn2Nmz27DMFJsrT2Gj?= =?us-ascii?Q?SsZApQUxLI8xw3m0HrBOt/L24xqc90pmzl7DsBwy6A9qtC7u7Q32G4viT4yC?= =?us-ascii?Q?12G0jR9Qb5jr0Z11yq8BHF2lcpS9+zKPkKLoQ0TwQMlEnCQQCWdEIHX5v/Y8?= =?us-ascii?Q?Q9T+Ry9UeqA8G8O4+jT6jnlVEyPzFhoGh9uym9rtDGKMc5IOvOhB+vnW6s6S?= =?us-ascii?Q?sycOjoGzthdSAVLJZCi257JF4ZsIzI0CoRX9TgZVZUGd115ICk1UsGxSrFIA?= =?us-ascii?Q?5tDLEy8wmcEl28xNxahng2LAO/1HvPSmILk3WhdCNjaByqi2q0uqoBEdFB4A?= =?us-ascii?Q?P7DBIb/9ZqENoLH9M+8cSz8G8YhD0oYYxSAE+u/OiGQXGnfu5XDzTqDrz+0k?= =?us-ascii?Q?hO9hYsOVetxB/FKXuLKN56ncCoqpbhbR4hpwD4iqBQlWEtsGvG8Pq0qU1s92?= =?us-ascii?Q?7YOrsUSGX8VTiDylFWajfhMfiktYavvW3OQiodpz0QYMBy0IRLKaJyIwXnJ3?= =?us-ascii?Q?1sqzI6xCc1rXPnCR9Pk7Xd9Pcp/c7vTE/1Kj89GfqMPe1lzPiBwQXZaWJzwK?= =?us-ascii?Q?LEFhI5LmBlTGVvxy5MMRBdry6gN/NYMhzSG6xnf9eUFbZMRZqxgx9c9P3m+L?= =?us-ascii?Q?2KUKqzcwVE2E1EKHOP9wxd31rfed8Aixzxv3+JkHlRQq7irO65fMK7Dx1EkL?= =?us-ascii?Q?pXqBSuGZZIfx8QyErz8YZC/zEsWwxMnxypt3Sh1lnkwBIh9LhopqN3kP/972?= =?us-ascii?Q?8IWAtmL8u/HwydOxSEAtrGVLZ+N8sBq2PUkhj17KxGc3VYhLy0co1ESlf/jH?= =?us-ascii?Q?NoXXlR4zfe9Dsc8c4JjtYq/weTRFpzvgyQAdD1CAxXtiQLS5m8/YxcuVsRGE?= =?us-ascii?Q?T+YhCw6e6k+Q5AcpsdUnYM1n9OV2HPx9hHCyeg6abZyE2ToYEnhtNj6GZWNE?= =?us-ascii?Q?l8Jx33E8E9LRlL0JxUVJxPsdmwJLXft+RRh1owuoESyVFBN1A8W0reDgF6cU?= =?us-ascii?Q?PTKdzWEHdwz1T26DtdNny10xrt6cLNR9UdmE7ZOAw7gi0gdSFDxNsZtEK8y3?= =?us-ascii?Q?CStyh/AaMn2tFZJqsqpHQf152a9Aj9TIeSU019bdOxJ1CLueOupgewf+dJgn?= =?us-ascii?Q?oK40ElHiiVtuWdvXjPR0NoCSRpyBrCTUTQpt3S/lcnzXphLjCiu323vCsaAq?= =?us-ascii?Q?qvr1g0KRZjGibDT4XXKy8HGKJuYh8ZEb128saAbVRTK4XSPL1znD5ERucP5Z?= =?us-ascii?Q?DQkSKQQGLq6ofNcbR5Xqb/Ed+UH3auM4OuqaYIFNDmux8xbKStFsazg45U6Z?= =?us-ascii?Q?bBm9L219z2yyc/RlNhDiDeRCakpFpVgFLObsd+kQ5CHq05sLJfYA/8Ze/0Bp?= =?us-ascii?Q?vg5MEpO3wqs=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL4PR10MB8229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iuLaHQ1SzKJnqMIKyt1bcgFsxNnjkpCnfZA0lwzsySxR18j2CIv/bycfvjbN?= =?us-ascii?Q?DcEpuCSO/TwPyGYLYqpvKA4LCcBY6yaL0At7VXhWpoFBmXI59unRGhPj/MQl?= =?us-ascii?Q?f6K/zZSIBoeFbT+1et/Vm3YoD0gyDMpCZg/vwM35wBbqU2mEW2jQ4nnuGlxg?= =?us-ascii?Q?RnWK1hqZTuhvU1WYNvc70k84YvHvXVLcOAFQJpfuC7SdDmkXL+6FAVpa4mlq?= =?us-ascii?Q?UFwt3YU04Tvk71MmnVZJqvJwwtVCld++sx0yEYOZ5Szc/ysaunREAHu2+PRf?= =?us-ascii?Q?jbeG+xoypPF5/OK3KECgXrtcVntfCzZhgPVL6nNeAgo510iG3h7W2nS4SPe8?= =?us-ascii?Q?xa/9BNO29lc9W89ESfAGaE8it75rBiBusiF6XiVAcy9MQCSljiqDoM7LDNyF?= =?us-ascii?Q?SKDyRPdcP0Hk70zPp7CDSPL4Nbd01jIv3Hv4AjkQ8eq6I4C4TjwsdYHzaAE2?= =?us-ascii?Q?pYIz7HUV+EOkiuJRBlsI8Dnl2lyVSmUq8f4RcPj62/Aa91sioikd+JzGMHE9?= =?us-ascii?Q?6giJjjb1EyyoklN6LmicGehEdSwSqz71k2+it49CsyAI5+bSgxiKVMAB8JgT?= =?us-ascii?Q?HZGgRyb49TvhzvKGQycoVMFtI7mm90KTdnCHBpVbvgtQtYyczqoJ4ARk7TzL?= =?us-ascii?Q?+B27RgIx1ShP6tVhk2wdZleopgvsc5bdMmJ/8U73coEXa/SGKgJVjbvQjOHM?= =?us-ascii?Q?bWL1MAAs6XAdXOx1Y8j1p1QmygP01gDUZCosyt6uJa02ZRxDosBCOsRdXQZQ?= =?us-ascii?Q?VX7/69LTv5e0dmNLUMRT/EVOV1oV/cWfTLgrL2df0WTpCj/56+B/QlqsB1tb?= =?us-ascii?Q?zp28YjCrbtvzdmE0FWMrOPJVJXlzHdYsYdWPuwEuurwuFV4LB3n1sje9ZhNf?= =?us-ascii?Q?MTqQiiBFr1tpjkUzLc+PzNzTyM9XSt7ZF4Es1C7GEioVmip1SVffCnW0Z5b7?= =?us-ascii?Q?e8mFNK1X6BasI0tE1Y4jaSglX5nrUmaiw0z3NQ5qPhF4wUDpk3giS2E6slsy?= =?us-ascii?Q?COOxXl9hYmEfYzvtsjyNvYPd8nLOKZic20UBjXYOMkPR9Z49ku3bE+uqPFhj?= =?us-ascii?Q?JsqvqI2Bb+bz0iOZhc26vfrinCnxKEcTcSC3TIHg9zNMYzfcLza+0ovY1Go3?= =?us-ascii?Q?B1pS7umnaMduAPZHbVeoNPbBTZT8ETMKaKeYGvj/uESGLqB1L7KlDedo5j3P?= =?us-ascii?Q?GBds0Tf8/MDYpe5LBMvHEe3ZdgDC9JmRaaD+DkOUbKSWKn6gpr2sUTUvl5tv?= =?us-ascii?Q?rrqiUYW3ArtVVIkhjg6xLj2YTzyto+OK+mqDo27B1kNRq+FF/nBFedpAaMK6?= =?us-ascii?Q?PvfWcyJ+2Ow/IATj2nY9dxsQ/hv9Uf48FXcYE8FpLIJgKNgc0c1AtxnhXRQ+?= =?us-ascii?Q?Yxbnep0GAvPAgAySdVDH22LRaKkG4AY8J0tShp5b+Bkq32XaNI7Ul5+LTZ5Q?= =?us-ascii?Q?YMm3d2F7epGcpAbxnjD1ivggJHJSav2HAtcnUK1q2SuICqBmyjbmJeuNSukF?= =?us-ascii?Q?PGb05W9gltaowAKSJly3SPrrFqv3b/hM/i+i1r/3Y7sS7yKetLJMdHraa7YS?= =?us-ascii?Q?zqWiNLptfs6btOM+LfZoshMIjEe1J7yGxfuNvq2ifzJgOCv/rxss5zdu/aWp?= =?us-ascii?Q?TQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: iVzeVfWw4L05LDmTRcR6UZx2weCit1u1O54lC0urRKCcZaKnvWY7UqzHrH3QUnvsAhL0JNIE6oI5kE3XwRW7m1uv8YB7/YUDGsh7YuFKHkgmTgcbvesxmLKIGKvYz55RljTuVI7mPiVd7Zn7h0NlXx+HAXOM8JDYg+Cbn/PWF8JdlpNlfs9FSZACuf3z3NijzoYOJTc/F1sHowNGO4AJQARTs8+RD0prGB58Q6LpJHWjtfeTwy81f5FBVcZgRXUGA/kQyKCnNaLBDOcl6lm3E0zW3Yjo2QLqebUlsk5BQsNwPq4p6Gg+hCOWG8GxIccmnZsb9rLyWsTVjmRGM0C4PG6UdDaeakd6JxoqZ8pzbhxqcsxihxESKnvBZoRsE50U9KeJTkLPH8W9ynJpLgYy3IE6L727r9CipFXoPOZRT7vG1v+69ujCVdoXZ9yvt6Anx0wmC2XRvjlG3Bzzt3Dwhz6y47+xQqYXvP+jBWvAVBVqP7JYYu5BDL2EOEazNrtmH2LBUS5fDtC39smWMFEYCYG7qlqYncxl5DOAEwYKxzI6GBZRfg/p31vMjQFJW7sRZugnyEUsqiBZxSJ0lHjCJG5uacen4CUAfrh1LFhXJvg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8cf61695-b9e1-4415-22b1-08dda784b3af X-MS-Exchange-CrossTenant-AuthSource: BL4PR10MB8229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2025 18:37:34.9455 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sI6xD3lZO2fgtsIlXzKA+fi2STzydAUE2rXBFllhRzFINS9u0gNzrt8wfifXu+Yquypz3l43zeQRcYKFN5yWNErof7ymjQJl2jkvt0ccc+c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR10MB7134 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-09_07,2025-06-09_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 phishscore=0 spamscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506090141 X-Authority-Analysis: v=2.4 cv=RZGQC0tv c=1 sm=1 tr=0 ts=684729f2 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=6IFa9wvqVegA:10 a=GoEa3M9JfhUA:10 a=VwQbUJbxAAAA:8 a=pGLkceISAAAA:8 a=yPCof4ZbAAAA:8 a=1XWaLZrsAAAA:8 a=eF9pwXU_7nNgi4TVLEAA:9 a=CjuIK1q_8ugA:10 cc=ntf awl=host:14714 X-Proofpoint-GUID: hnp0cvvtGcbV92BnpHMfGeASS_vEPkMC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjA5MDE0MSBTYWx0ZWRfXxcXYQ//Yl7y0 uhqmh0d+SPdeOFlyMVso/EfS550htCwkb0dHG6kCjURNo8uWrE01FKpSTMaQjp6AaXmGJ/MsPSR sPdlcOHN/1tbJORKcCJM0yOlfmImRiNougl1JlmptbasmZN0jTNRSfTZRI4WwQY3cA+Q8PDom07 kBgxj5jKcFBYdMj1u5xtJmGjImaUQ1DJ3RSWA3YSp7Mo2omLZe8Bnz2Dw03VqblTtt7f6b9jR/g QIWsgVJBpBXaSXdA3m9zbwFrNNeSUSHRo5ataHLXdaMXN0TpEFDmKAWqQ8c/WmifaziQGYJy8J6 1QSsB2hjJoYNCFGzG9BHk2LV6qiquIwYF8EP3IaGqUBb+u+4WFnMGUZ9f9iXyGdQsdWhSjn7vRL rmsrtQDAbFw6noGoNwiDGH5h16wYgBBVKeC4Co/ARZolMnxDd31rloMAbQAXi6Orm4OUV4i9 X-Proofpoint-ORIG-GUID: hnp0cvvtGcbV92BnpHMfGeASS_vEPkMC X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 66207180004 X-Stat-Signature: z35yo7q3xbowspbttx3ga7y3mb1xk1d3 X-Rspam-User: X-HE-Tag: 1749494263-100138 X-HE-Meta: U2FsdGVkX1/40SvPoibLI9sI9HK01kkDu8gK0PnU5nnuMsq70grLUccA3Xi1RQEcDca2UT1TMnfM7Lsf7w+kJ9I2PocPplEOcrr5elxfUd1vJgJULIhIlc2U5txqgKQZlVsZdnJIRDgls3kr8AGKmPmq9Dh2Cg+rkLnYDdyMqDKuRn6Na6ib1qEsMbcoqe5s5PlZGVhF8Q//h1iTk2V8pzvULh5IFflh5m2fwCD/ybjQMH23wUDJ95iydWkykCL4b8uX7lwie6WKqKhjmKJIr77JGcoPO3hMkX3n6Uv+/ZpdlV3P45KnF0Hv7Y8TxNUovytTxvVNkp1owysuWArfeamqRlQbwlzP7KWffm1pT727WmyADkE1kaSd0FCdQ/5bBAqL6X7C6gIKLXqgzhqICKHoIvM3THxn2EdCn9/PIeHJAiuqBOGGj9YgJ+PK/rQQPucgVmj1CJFNW9tasL8efjZn3Y72XTNhkHWG226tGFl9MYEJLoWvCac+RYi8Gfl08iSL5AmrViv5PBA3llBWNak15COGA/k2JOsTi5I48cCUunGtd8pb/av0PwW8u17QOYpXR82ygyjjFj/YhpbYcNHhDo4KwbHIrl2r2rAGvW82UQeALNleQu3V+iPwJD7NtcETOJbkbqelr5i2wpRJxdPbxF3A7sBLF813/1YutdZfQ6JRb5ZrJfzuHh4kQm4Rl7scm0bm2TORa6yIYB9gnPKUB+uO9a1UqAqWY6a8ZUm04ZiM+vgoLK/AXS2eOtQnnYS5uP4dJsuESiaxEJFrPtyZ4nzaqHo4zoJ3rJYhPvZMaXc/j17qcZsZOdfZmCMEa5uJ+ca4b0yczt3DWFFJzVC9+tn9PEBHlsJL4VtNNKyBY1iXg+uvduux7SeudaWBxPfGc0a78QYzVuNWv4INtWcYhheVJt1Qd3s99PiDE7X0cfVN7id1dSDSQk8r/nXzUF4FcTLh0bNcPkcF9Lf FFBSqLTE da+PNUiI5OZoM0AezaPHmCZrE3p4JXFJsTchW4cZnb5fm+tjz8udyiYPJ2tMRv6GTvI9ZQxsSnWgO0ZaJs1Iv4BSM56kaeN7lFn129yfzboCwXH3HsJfoJGNVHYcNtGxXceQVDk5gB8CGOZXtwTYx3vpO8J2VTGsiPoA7rB/oZ/KCA1bDTUC8VD3UP2s03AM2mVjz+blCUbZQgd+332Q5i7W/RtIst4bRpE00yTmKVMBoN9elhSUSWpFNqo2PZLkGK3JQTUEoyKIQgdRe9QIq6Txgb3tkNXY0viCeqHOzjezmWZgWIOBgcWdQayd8B2dfma/p19PE8gXUemvtHs8lS1gG2RDOhCWzbxTlIAQpdFPZZv67t/95qsrpUAVVzPqVBwYpLk5BXtzUQb+yLQXPGPphwuO6WDDUSnjow46rbNcy+2y//J92XEAmYronktwizsf2B6bbM2QH0YDYmi4tITqaTMqxt7dOHu5kCc/hVReSv+vdtXfXszn8EVCXG9RpDrUEDthBr8yJzgqRKCE8Q6ft4I0TPHnaB3iAYQ0yCE3jx5WEt4y9WS7ust3yHMcznjm9Cz18VWHp5spZfFaL2/Nq5mI8zgfWRAL6BJmUjuPqoJ3THD4RXHqudsQYstL9dVCe2hrmZMdstHEpW6o4B3/K1I7EcowvLMg3RJomrVZhtTY0YQIUj5rr9ZM8ril1JTJwqRD48wrdVInrimUZ3XXR5DukrowGQnoJCVVBxoHY2KO/revYoeV9tH5p9z7ikD59HksEL+uxM4yXqvVMgye3sw6COPwqMLH/VYfEVLkuuFcJ+NRb3qfyahmMWpWYpGjV X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Andrew - apologies, please attach the tags as below which I mistakenly didn't propagate... Thanks! (note to self, figure out b4 :P) On Mon, Jun 09, 2025 at 05:57:49PM +0100, Lorenzo Stoakes wrote: > Nested file systems, that is those which invoke call_mmap() within their > own f_op->mmap() handlers, may encounter underlying file systems which > provide the f_op->mmap_prepare() hook introduced by commit > c84bf6dd2b83 ("mm: introduce new .mmap_prepare() file callback"). > > We have a chicken-and-egg scenario here - until all file systems are > converted to using .mmap_prepare(), we cannot convert these nested > handlers, as we can't call f_op->mmap from an .mmap_prepare() hook. > > So we have to do it the other way round - invoke the .mmap_prepare() hook > from an .mmap() one. > > in order to do so, we need to convert VMA state into a struct vm_area_desc > descriptor, invoking the underlying file system's f_op->mmap_prepare() > callback passing a pointer to this, and then setting VMA state accordingly > and safely. > > This patch achieves this via the compat_vma_mmap_prepare() function, which > we invoke from call_mmap() if f_op->mmap_prepare() is specified in the > passed in file pointer. > > We place the fundamental logic into mm/vma.h where VMA manipulation > belongs. We also update the VMA userland tests to accommodate the changes. > > The compat_vma_mmap_prepare() function and its associated machinery is > temporary, and will be removed once the conversion of file systems is > complete. > > We carefully place this code so it can be used with CONFIG_MMU and also > with cutting edge nommu silicon. > > Signed-off-by: Lorenzo Stoakes > Reported-by: Jann Horn > Closes: https://lore.kernel.org/linux-mm/CAG48ez04yOEVx1ekzOChARDDBZzAKwet8PEoPM4Ln3_rk91AzQ@mail.gmail.com/ > Fixes: c84bf6dd2b83 ("mm: introduce new .mmap_prepare() file callback"). Reviewed-by: Pedro Falcato Reviewed-by: Vlastimil Babka > --- > > Apologies for the quick turn-around here, but I'm keen to address the silly > kernel-doc and nommu issues here. > > v2: > * Propagated tags (thanks everyone!) > * Corrected nommu issue by carefully positioning code in mm/util.c and mm/vma.h. > * Fixed ';' typo in kernel-doc comment. > > v1: > https://lore.kernel.org/all/20250609092413.45435-1-lorenzo.stoakes@oracle.com/ > > include/linux/fs.h | 6 ++-- > mm/util.c | 39 ++++++++++++++++++++++++ > mm/vma.c | 1 - > mm/vma.h | 51 ++++++++++++++++++++++++++++++++ > tools/testing/vma/vma_internal.h | 16 ++++++++++ > 5 files changed, 110 insertions(+), 3 deletions(-) > > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 05abdabe9db7..8fe41a2b7527 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -2274,10 +2274,12 @@ static inline bool file_has_valid_mmap_hooks(struct file *file) > return true; > } > > +int compat_vma_mmap_prepare(struct file *file, struct vm_area_struct *vma); > + > static inline int call_mmap(struct file *file, struct vm_area_struct *vma) > { > - if (WARN_ON_ONCE(file->f_op->mmap_prepare)) > - return -EINVAL; > + if (file->f_op->mmap_prepare) > + return compat_vma_mmap_prepare(file, vma); > > return file->f_op->mmap(file, vma); > } > diff --git a/mm/util.c b/mm/util.c > index 448117da071f..23a9bc26ef68 100644 > --- a/mm/util.c > +++ b/mm/util.c > @@ -1131,3 +1131,42 @@ void flush_dcache_folio(struct folio *folio) > } > EXPORT_SYMBOL(flush_dcache_folio); > #endif > + > +/** > + * compat_vma_mmap_prepare() - Apply the file's .mmap_prepare() hook to an > + * existing VMA > + * @file: The file which possesss an f_op->mmap_prepare() hook > + * @vma: The VMA to apply the .mmap_prepare() hook to. > + * > + * Ordinarily, .mmap_prepare() is invoked directly upon mmap(). However, certain > + * 'wrapper' file systems invoke a nested mmap hook of an underlying file. > + * > + * Until all filesystems are converted to use .mmap_prepare(), we must be > + * conservative and continue to invoke these 'wrapper' filesystems using the > + * deprecated .mmap() hook. > + * > + * However we have a problem if the underlying file system possesses an > + * .mmap_prepare() hook, as we are in a different context when we invoke the > + * .mmap() hook, already having a VMA to deal with. > + * > + * compat_vma_mmap_prepare() is a compatibility function that takes VMA state, > + * establishes a struct vm_area_desc descriptor, passes to the underlying > + * .mmap_prepare() hook and applies any changes performed by it. > + * > + * Once the conversion of filesystems is complete this function will no longer > + * be required and will be removed. > + * > + * Returns: 0 on success or error. > + */ > +int compat_vma_mmap_prepare(struct file *file, struct vm_area_struct *vma) > +{ > + struct vm_area_desc desc; > + int err; > + > + err = file->f_op->mmap_prepare(vma_to_desc(vma, &desc)); > + if (err) > + return err; > + set_vma_from_desc(vma, &desc); > + > + return 0; > +} > diff --git a/mm/vma.c b/mm/vma.c > index 01b1d26d87b4..3cdd0aaa10aa 100644 > --- a/mm/vma.c > +++ b/mm/vma.c > @@ -3153,7 +3153,6 @@ int __vm_munmap(unsigned long start, size_t len, bool unlock) > return ret; > } > > - > /* Insert vm structure into process list sorted by address > * and into the inode's i_mmap tree. If vm_file is non-NULL > * then i_mmap_rwsem is taken here. > diff --git a/mm/vma.h b/mm/vma.h > index 0db066e7a45d..d92e6c906c96 100644 > --- a/mm/vma.h > +++ b/mm/vma.h > @@ -222,6 +222,53 @@ static inline int vma_iter_store_gfp(struct vma_iterator *vmi, > return 0; > } > > + > +/* > + * Temporary helper functions for file systems which wrap an invocation of > + * f_op->mmap() but which might have an underlying file system which implements > + * f_op->mmap_prepare(). > + */ > + > +static inline struct vm_area_desc *vma_to_desc(struct vm_area_struct *vma, > + struct vm_area_desc *desc) > +{ > + desc->mm = vma->vm_mm; > + desc->start = vma->vm_start; > + desc->end = vma->vm_end; > + > + desc->pgoff = vma->vm_pgoff; > + desc->file = vma->vm_file; > + desc->vm_flags = vma->vm_flags; > + desc->page_prot = vma->vm_page_prot; > + > + desc->vm_ops = NULL; > + desc->private_data = NULL; > + > + return desc; > +} > + > +static inline void set_vma_from_desc(struct vm_area_struct *vma, > + struct vm_area_desc *desc) > +{ > + /* > + * Since we're invoking .mmap_prepare() despite having a partially > + * established VMA, we must take care to handle setting fields > + * correctly. > + */ > + > + /* Mutable fields. Populated with initial state. */ > + vma->vm_pgoff = desc->pgoff; > + if (vma->vm_file != desc->file) > + vma_set_file(vma, desc->file); > + if (vma->vm_flags != desc->vm_flags) > + vm_flags_set(vma, desc->vm_flags); > + vma->vm_page_prot = desc->page_prot; > + > + /* User-defined fields. */ > + vma->vm_ops = desc->vm_ops; > + vma->vm_private_data = desc->private_data; > +} > + > int > do_vmi_align_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, > struct mm_struct *mm, unsigned long start, > @@ -570,4 +617,8 @@ int create_init_stack_vma(struct mm_struct *mm, struct vm_area_struct **vmap, > int relocate_vma_down(struct vm_area_struct *vma, unsigned long shift); > #endif > > +struct vm_area_desc *vma_to_desc(struct vm_area_struct *vma, > + struct vm_area_desc *desc); > +void set_vma_from_desc(struct vm_area_struct *vma, struct vm_area_desc *desc); > + > #endif /* __MM_VMA_H */ > diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_internal.h > index 77b2949d874a..675a55216607 100644 > --- a/tools/testing/vma/vma_internal.h > +++ b/tools/testing/vma/vma_internal.h > @@ -159,6 +159,14 @@ typedef __bitwise unsigned int vm_fault_t; > > #define ASSERT_EXCLUSIVE_WRITER(x) > > +/** > + * swap - swap values of @a and @b > + * @a: first value > + * @b: second value > + */ > +#define swap(a, b) \ > + do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) > + > struct kref { > refcount_t refcount; > }; > @@ -1479,4 +1487,12 @@ static inline vm_flags_t ksm_vma_flags(const struct mm_struct *, const struct fi > return vm_flags; > } > > +static inline void vma_set_file(struct vm_area_struct *vma, struct file *file) > +{ > + /* Changing an anonymous vma with this is illegal */ > + get_file(file); > + swap(vma->vm_file, file); > + fput(file); > +} > + > #endif /* __MM_VMA_INTERNAL_H */ > -- > 2.49.0 >