From patchwork Fri Jan 31 18:28:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Stoakes X-Patchwork-Id: 13955659 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 08AA3C02196 for ; Fri, 31 Jan 2025 18:30:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7212D280005; Fri, 31 Jan 2025 13:30:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6AAA5280001; Fri, 31 Jan 2025 13:30:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 487CF280005; Fri, 31 Jan 2025 13:30:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 1D6C9280001 for ; Fri, 31 Jan 2025 13:30:37 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 11600161130 for ; Fri, 31 Jan 2025 18:30:24 +0000 (UTC) X-FDA: 83068587168.06.CF94D54 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf01.hostedemail.com (Postfix) with ESMTP id A95B840016 for ; Fri, 31 Jan 2025 18:30:20 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b="hahjzEm/"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=HVe9LGj9; spf=pass (imf01.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=1738348220; 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:in-reply-to:references:references:dkim-signature; bh=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b=II/2qrJ4e/rMbuIaiMnMGAhMDZ7cHply2ub6NS56r4X835RWVxe60YfbNDHr5hPtJw9Gvr xzxp2huaXQhNY8uVPJ35FgBoQrbUYiq8YAyl9oe/0znTfEiRdp/p/k7DmOh+Zqop5ao/0X Qt1z+zI+zxXfPmZsvRbZLrMZbdgKYTw= ARC-Authentication-Results: i=2; imf01.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b="hahjzEm/"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=HVe9LGj9; spf=pass (imf01.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=1738348220; a=rsa-sha256; cv=pass; b=sjbU5cosSfEdVfyEvWkqcvM9w5G7Ecbvw9k04hBc+349WATDyP2qh7AVG2RzrZH0Etbaro aLA6tyRs4koZAjXmMi5+qR3jiXmuNLJOTTndQkOEpGwgkckaONc5GUZsBZEYlDsGJozGFF htew5QnPMLog2QVxg3x12HMaZw+M/VU= Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50VIJfuA008394; Fri, 31 Jan 2025 18:30:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b= hahjzEm/epDCWh3zvMGNKLk2HxeaC/X+oZIpf8AqHKqY6o4IRDDZ6ffn50h9Aoy2 cwlG9XHQ9/o89oLoBuFqU4J8GKCmRWTx9LhevqdRr37MuukHudN3BGfrFWEoTp9V uoqcrDzJAcmikGnOjAbTj3ZNaFqphHPnUYYi+smhswVCVgt2bR66Wfs4yFptupzF WXu4AIS3MNcdFNBbo0azucKlkpwVTA+R31yXzv97+ukct8aDroNpJyKOTMZ3E3HZ 7NFYeVURu7PnVZ0NAJJi9pkWRWp4tU6KZDkvvJSlsjp9Rbcaji7SdHDB663ZGLbE STAV1GeMpiyJTO5ZC3DtDA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44h3pwg0s9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:02 +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 50VHQeJF008949; Fri, 31 Jan 2025 18:30:01 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2177.outbound.protection.outlook.com [104.47.56.177]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44gg1gqkm0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pIhDb8XGPPGrRxE/vjzB7dJsSqC7sxIgk3Kc4YDtY1geZdRwwzuvOgtuS5AucB8Aw/GvEJ7C+4KE70CYkhifX6S3nvBcuMYCOjx1wva/0bFwJPnPM0YneFVM3bv5Apy3wVd3npjlIvxhs7HtKSSG3F8F5xb4o3lG4UPFpFD0R16cugp1uLbhSMheAfiEuTsbH+jgSKDVsZVYF29BUJaHRsA7F+qXeUiQzEgcTiB56v5MhAJpe9FeTaKUz/Vst5xJjnlaaQUmSVMJeXMaFaV2vItt18XSaqM3GExdKGtm2D6olpNgmTDOBE1ut5Q+ORx6ImvgJ96SpKxNsccJqAMqFg== 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=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b=jkJk/GMq/3Fg4CN1yV8B2orB8ivxzdX2rwGQ1px3v8V/YX9000EOIf1WHOW+hSes4LvMK6Iv++1iJKA/vJ30Y0LxFSYZ7/rdy/IbHs5o1c0UhMm8k253Y3jo8kgO5klSvvJcsvWhv1bv7+dE8xelD/B6nKZxb1XVwEPV3pih8HWbzfshFqozt3YU8Lgd4fOpAyM8iOf/mBXhvFWDKNr0DaEHjnmegSb2o38RvJByhyokj/RVWDiyPHGDpsvSjVsFHOWE8iD4r1rUuORFePDPiJtoavlr09soCHc8KksF5kErUM7IlT04aCrFU7VeOWjNpDL3MGWCPUFhDFrVsuyQwQ== 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=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b=HVe9LGj9vHv83Hc7pJNg72j81ZZITovrtot8nhGCC6ojEm7FhMFs4KbArdnFB4tC+TKt6/sOHpjvoANeYKep8+cHV6Edx8Pd3KlXRijgCr0oHKz0p5JBF7xOGAnEy+vkr7QIfn4QAkyJJ8h8fJgzXKTBoSCrDXY7VIUIWKbWJuQ= Received: from BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) by PH0PR10MB4407.namprd10.prod.outlook.com (2603:10b6:510:31::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 18:29:59 +0000 Received: from BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9]) by BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9%6]) with mapi id 15.20.8398.020; Fri, 31 Jan 2025 18:29:59 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jaya Kumar , Simona Vetter , Helge Deller , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Matthew Wilcox , David Hildenbrand , Kajtar Zsolt , Maira Canal Subject: [PATCH 1/3] mm: refactor rmap_walk_file() to separate out traversal logic Date: Fri, 31 Jan 2025 18:28:56 +0000 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: LO4P123CA0245.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a7::16) To BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB3366:EE_|PH0PR10MB4407:EE_ X-MS-Office365-Filtering-Correlation-Id: 14ccb904-197c-444f-88ec-08dd42254491 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: e38rIdzb+DmloN2yGQvwVQQBVhvk+rJoPPo7nLIqtJNQ1eSYnwTwnmLB/ekluQoW5ir2ZQ87Z3aBsXFa/RsIqfN72OX1R7Gww/Dcd8pqOKfER7PvEWaKZKWzeY/MqqxxsJiqDevZ6LOwcERiGw3idblWBQs3VRcNLLyyIWe1ZCldwOXLjPscv2MLlISHUDgdoyVvFz97Gj/uQTbjGhnv7kEe7MWasJCTYNrQ4Yubte4wbb6khYIcD0fdWP6fVvCfTaV7F01IMYIDZnEcbLN7jmq7JrIPQDaYP5clG5XdGv0Itbk1NSlhMewVBlA7/Gqpd1WA02uPCeNoEOYzvaiHCHXGaSTMkxl0QEcGEFnBNuU5hxml+W4W0FR9Z5zO6MroMkn4WVWfoAf7WA8cqGLcCYlAOxyKvxjerfDHw4eGl6pQVg6lm+9MUOudHWoPZZ0V52Irt7QHxI6iQO2mA7eRJx2vVYa40dmQxdXV9FeYxOuUUJtDgR3pVjqQszs2oyHvKM+c1oulvmKgqTsT54A+RViWUt+ZMvqXyOZfRpMQv3hVpDbvgthCf01RS9UB1a9jV/0S3JUtXBb7xow1NFE2I2oJtnuoTaQD3Ks8igy5xqSBm3COSnIu0/tE1mTTAIUd2sV4w1nJkflBCrGLkz/FAGLuqSMRp5grYS05kJBXaFcthE2e5rMMGJ5YtS6l1EnFVhvCjebhmWyVycjcu9LJDn0x56U2+Cfs8NZIKk5V78VqR+LjMbcBCjLql4PlMl4KdzsUJv9BYj5CazpJ1uJ/X6P6lVanH313SS2nAfDrx3c2wm3H1TanRMW3REkARyn0/FDACHsnZawlKvqNAyuPSgoCKnDq/WYogrJ8Xis3nHQug03l3H9w8g4ng0w87dWndOrvc0FUdo44uN7M9T/nS7w1/ZwP6IsvtCjGeGD7vbdBLKIVKHc3IcdP+cHLyAitUcO3Ij9+IacfSGPrSAc/ZqGkaWZROQMdeyatcZvGMKsg0n/lryXIO21k+amJAKCKLhXo10EC5kfM4q9VlyV8jkqIHe6aeAhtdtPse7OTzNwwjbosYhbqd4Okv096umrugO28IpswdZuyC9Ba9epEAWxSjQFnF//KAHpHKPrbYSZPtyzVObnxcoi1c4rGcddw5pvLiRSivzgYBfDSqfoKAaqxP7xzQfLd3KksWDntoe6stcFYZWNOXgi6V9l5A/4+g3BZNd6r9n3XaDmdy96cz4mw4BSLma0dI5rFiMoDDJe5bO0krSaC/9B5+PfPVEKCSfDFPpxBh3DOn2jdVfJde6x/zCqDwDRlZ+t1mSv8WzWiin7W/ma/AB38S5WgxdZbDpOlJucEak2yoXr7qVI33ye6KeQwzohAfE8n137/WpQZqU8mNxUqOn4dxvnKCodI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB3366.namprd10.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: oo2kvIJ1LMg9hYNBzmn9/ouM/X0D34/FtPMXdtA6JdA6eOw6R/TvcMwCuQQOD9fKgzdNPU+aw4jkUTSDn1hDw66HYNOsi5qHmyMlgSwZz4q3Oz7oIr90imwi1dehhYCtPrNRqVJ+mmdJ2WPf1pHAO4THnltFlGHGv8JBIumaMJSC2vzj13dtLaVLep1+45uUiS/l6LEGCPQCz3QQ3Ke7lUKWYnRiKm9loKgIvDe3FCl/1Debv64BIjBV92zYdY/WDdgHh1OuBuGY21yWVnT0Cr/AD0l4XXISvpZjv9Wgzv0u7wq9ChArXaNOPdVmXe35MKHn1fcDgp2N0ap29/MHR66rFvKQIaI98OPg5uCm0hbvO4+7XMah6ImrS9c/m900YQn64ZeDiU4CioE6pFqzlQZt/MtuIc7OdzJHJOeShhflyFJhfeJvB36V6xB4KOgRWFDqfHJJq7sYvqOtSQp/X47i3j/g7AaIQPMUtbFF99+iY2VtIAHMq1So1hqcXz7ArYmRx8tVeOI8fZfb9yitYt7+zKu/zvlwxq9bXCdAwSpGJzXHlUgcNYjjYkzIOTPGUOVA0/gjcV0/XxVsSEF+ozc9RrlQXQBaFbUHoIv7KDutX6KQcBzxkPMhI78He3dgrUyLlEIvM7oDBXITw7aEKnq+nVkf+ho36jAZ/A2VyMUYD+u0hXE7v807um9vaW2Cz6gA7fLbZbkJodVjJhFxt+HliNy/HQ7BdPc3r6wyBJ5/CTY/wP4M7jp1sHz3YHpws0V5WtRKXuprhI2dMXRncms5LeRxA5HcREoyue0BUFEc2Yg5+J3jShowhNWxD/i4nZ+7r1+wO1hhF0pTx6yUhGlWybguX2aKuP9b9MwOdTLAGi85iO+0hw0fMW85cUdYQuDCJCUh2wTfJTOW8Z3/zmtpWDm+OBtsgDzXhkNu8n91ysoFXnQfeEWbtbdF9RMv/EaMNOfXDC50Wdxm7qC099vaNjaBjYjlAQBLfcHHOLKWq1vAaruBMv+iX+abiD346zlAtN0btXCs3YATipXeBtO6GVhTPxWp8bCpIiY89D/WmdesY7xFs3YmEF7cL5/H9AO0xPuopomy1GjgvqLC6jHWGkDRxEOrqAf4c1cYzL05HO8kqNFsYDyWAzEXCowWnpZowNyYTKId471bwMZdaTe89n+yLnhXKJoNvc335K0f5dECPaQ14QJFsd2KI16mPgO20tj+91eopPSdiw+tT3Gs3JwWcf/GIZNgNpSk/sZIhcPgZ6c/lJ23fcqpVEyXua504SbRKH+ITOV5qU2LAiQ1TCiHPhp4kQWdqxp2ELgjMFOOZ5g9NXl3GfNo5SmmuUk0A4MTHb0Flg7TRp9E+CdyAlYJG3CKf3XMQ6sc4l449N5L/HOXInhZ5XdgEBXbq8HxzX0arz3obBVQ6zT+98Ru50au9BK2CcxIz+PJgn/4qeUuWdD5dlU0GJoPX8uSiem387hXVVaPLkMNxdvEup9e5ykA4yS4qFBHx1JxJd1YcShiJp3BviDaIJBXx68EAfU+FYC8k2b+4HCau0xi5NJrPOelzJxjf9beKSPK/MPfGUsTF6Q+dCnlKjKbPih6YP93ryBrvi3mC1yCUjZ3QQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: agSzGupkqCGk0voEuKuOODbchiGb3HYil10Y6T5xxBW5qeCjRnuxMwPaktNgbNQJmw+WsE88WS6oQa/YKZce31RPKphxvg0+C6MRAo+L7acNrVNZLV6gKXt+4TLtSSGjUO8Q8t04/7w8anVYXH2RZqZVOgUE+t2re+ZJjAw773q4sGCIVErbcG0g7j0A4Q18w0y6iI8xIAdGhrdhhv7RHWE/1Mto1E8UELS7E8WcwoYOs85qWXOd/TsZoDTl8mF7pyNNJhJZTwoDHz9km0N1EsaGUJoxNwJMdcAMVmo2OyElRFCi/fgLwXkbCgoRbNgb1nt/+U8eol1kPvZGqqs1MMxdTxBCN04Kyszw3NTnCdBT20KUsvpEMaJk14qMv+PLcNxOs77Tt35NxJHLQmKXWrcl+tPnUDay6AR0EF1lG/nNVBISar9Zegj0VPJICW9hLmNSFTY/ClJpGDir+HIv0ibfLR2HZT5BvZ0T14HV7OJ+lL10XAujqe/i57ZfkBfQc/AiwxKDDlDIHro/7U2pTF/dMFX09YeVKslRdkuKuMAWSNDP0KWEbjnYAMhNzcy4m+FZHjCIlFW3DRT1PT7DyFNmu7Fp2Gw/XVP2BKHel/M= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14ccb904-197c-444f-88ec-08dd42254491 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3366.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 18:29:58.9310 (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: XZKOWuGmybWRfqT+SlFsMn/6fHWLrpEVp4+ldJ9AeshX/goVqjutePqF0+Ugq2QTE5y2Csw9kgf3CA+/aV3Gf5U6eiiOaNzR+mJJN/PAfgI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4407 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-31_06,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 bulkscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2501310139 X-Proofpoint-GUID: cOFu9VZt_LZVgTnQMYeONU3u5gCRdcoi X-Proofpoint-ORIG-GUID: cOFu9VZt_LZVgTnQMYeONU3u5gCRdcoi X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: A95B840016 X-Stat-Signature: 31n66oyndjqpr9pzs61hfhzgajw1kujo X-Rspam-User: X-HE-Tag: 1738348220-994718 X-HE-Meta: U2FsdGVkX1/x/ORl+BFoB3OdKUjCfFmuwBbVfJ26tCjQ/ZGhj7ZzF/+gZJP3qKOMK2cDSZaZveeYj1WXmAoOrSXAhvyhNaVYjPvAphgRECd0x/OZKK2IF1IO4E8nmSTfRDrISxHG9uosPHNV9UnGB9GggYNKuMFlU38ZeaXpu2w3/FUiJBFTf9GRJ62g/f0uJtWoomp4Mdlx3RaSYuWxuedesatehMb/+tWxvepae4Wv0VJjak10SpzNmEKidKC7Nl5PJU9ENxk5Exloxtg/18UoSexSS9H9i7t9XiyPe75plR8EzhJ2+oF1wiVWwQ0Mw62OCkFTXnQ4ogdljmCp35i/OFWE7WYRQ6jGfff0CnssTvoh2x4OgAsSH0iO4LE63JUC61GW2ZX66oFTmiCGqcxwfUb36/YG4+NA1t3SAqH9usVL3ICS3+kuHrhvMmXc+/EltVev2pIUAZEi1TGC3/FiLycTUhpS+mwubBRrz8sGvE5K8dgtpjYXRxGXal5tfBWEA5F5Z6s1so8JgVWgexWFfc6SQt1uYFH2KTJhBQGZ6J50S34axkJ0tdNDhhRnUNwBdXJms/6y/cMmJElgVludPT+JLDKJut0Kvf2gz7svSp3b6p5/iE+D6lZUsl2iz2wNBgU8kPLbMF3C7joo9IgABLFIEhKg9w1iIHNAq3dRUluwixQFe/Se0YIdl4F3vZcaERzHjaIlB224qOV5GXyhQ+i3ZlN/xLaqbdtMGTCwBXuCmkUJMJWUqieyikwL8C7kbwDZ2rfo5FJyaEcFckwcIdYY1P/6uB6RAGaLGkKrJ+TWhGACo4KcWoki2T409w105x2q8Ia1NgSyT21qUopsAVfwWf3bbmk9IaxzhM5Bgo1LwHYEyLrl2YOTqDQ55zMg7YHN2uYMBbryNH6UDarvjnELBumf5gkXSb6hlF1HC833plY7nZkbeQkN3lZy7itwWh6N6BHr7iNsfq1 TzvuuQwg ItVMrUuEgNTycdywtTlH4wdtAlDyJBcs8p91MVYXVZXIaSmHpAypQG3BU9r1zONkS3UqfUVw03R+CNn45E4AVAXpPZVH9QJ1yFdS4vmLfKy2Nh9T1BYVmwOGt8l9N+4BHz46TKdT4BARIiA1f3qSxDxzmGSfc3OzmEgYF1y3I9/qmFLJff1KodEKi+VLih8ox2wqKNG/IdKqqvnx1q4SmwmwcB0bOQ7Rs8CeqykOU9yd0fKpxXy/uIeKUV88BEZE0hKxgy40s9Z7Uo5TJdm8C50/t7NHUOKrMBSvJKo9XZIcWkyGIBgSgQOskIB+qOKIjgaly1BnyEeBaEO3/V+jVEEVWgpqAqW/uywtQek1mnFCdeKT9DnnZBgDIENrTw8hqoG4X+71xswuFGbYNbMc4PKDhvDl5RxcWEcdl9AliQGKOfpbUB9DGAaxYPARBWnWgrhJrOGwiheaVXzwG5W0bm0vLjx5ESkOmSVFSwgt01kYf/3sz2mZ4KW6mfY3zLJnInukCoO/9NXexjLRXgEM84236BvnIdhS2QL2mgy3LU1PtZmmq9cJAQgkZel5d9HZrgzXAmzsbwKQqbMoghmjaBojHCrGl9yAR7M12UH5jLj2hv3b/D40aveTi2rgtIZ9FblbNx4/yyEM2Iv22KmxmY0p4kPHwtC0nZvVNg+w5eLHOdxJRM7ZFaQq6hg== 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: In order to permit the traversal of the reverse mapping at a specified mapping and offset rather than those specified by an input folio, we need to separate out the portion of the rmap file logic which deals with this traversal from those parts of the logic which interact with the folio. This patch achieves this by adding a new static __rmap_walk_file() function which rmap_walk_file() invokes. This function permits the ability to pass NULL folio, on the assumption that the caller has provided for this correctly in the callbacks specified in the rmap_walk_control object. Though it provides for this, and adds debug asserts to ensure that, should a folio be specified, these are equal to the mapping and offset specified in the folio, there should be no functional change as a result of this patch. The reason for adding this is to enable for future changes to permit users to be able to traverse mappings of userland-mapped kernel memory, write-protecting those mappings to enable page_mkwrite() or pfn_mkwrite() fault handlers to be retriggered on subsequent dirty. Signed-off-by: Lorenzo Stoakes --- mm/rmap.c | 79 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index c6c4d4ea29a7..a2ff20c2eccd 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -2653,35 +2653,37 @@ static void rmap_walk_anon(struct folio *folio, anon_vma_unlock_read(anon_vma); } -/* - * rmap_walk_file - do something to file page using the object-based rmap method - * @folio: the folio to be handled - * @rwc: control variable according to each walk type - * @locked: caller holds relevant rmap lock +/** + * __rmap_walk_file() - Traverse the reverse mapping for a file-backed mapping + * of a page mapped within a specified page cache object at a specified offset. * - * Find all the mappings of a folio using the mapping pointer and the vma chains - * contained in the address_space struct it points to. + * @folio: Either the folio whose mappings to traverse, or if NULL, + * the callbacks specified in @rwc will be configured such + * as to be able to look up mappings correctly. + * @mapping: The page cache object whose mapping VMAs we intend to + * traverse. If @folio is non-NULL, this should be equal to + * folio_mapping(folio). + * @pgoff_start: The offset within @mapping of the page which we are + * looking up. If @folio is non-NULL, this should be equal + * to folio_pgoff(folio). + * @nr_pages: The number of pages mapped by the mapping. If @folio is + * non-NULL, this should be equal to folio_nr_pages(folio). + * @rwc: The reverse mapping walk control object describing how + * the traversal should proceed. + * @locked: Is the @mapping already locked? If not, we acquire the + * lock. */ -static void rmap_walk_file(struct folio *folio, - struct rmap_walk_control *rwc, bool locked) +static void __rmap_walk_file(struct folio *folio, struct address_space *mapping, + pgoff_t pgoff_start, unsigned long nr_pages, + struct rmap_walk_control *rwc, bool locked) { - struct address_space *mapping = folio_mapping(folio); - pgoff_t pgoff_start, pgoff_end; + pgoff_t pgoff_end = pgoff_start + nr_pages - 1; struct vm_area_struct *vma; - /* - * The page lock not only makes sure that page->mapping cannot - * suddenly be NULLified by truncation, it makes sure that the - * structure at mapping cannot be freed and reused yet, - * so we can safely take mapping->i_mmap_rwsem. - */ - VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); - - if (!mapping) - return; + VM_WARN_ON_FOLIO(folio && mapping != folio_mapping(folio), folio); + VM_WARN_ON_FOLIO(folio && pgoff_start != folio_pgoff(folio), folio); + VM_WARN_ON_FOLIO(folio && nr_pages != folio_nr_pages(folio), folio); - pgoff_start = folio_pgoff(folio); - pgoff_end = pgoff_start + folio_nr_pages(folio) - 1; if (!locked) { if (i_mmap_trylock_read(mapping)) goto lookup; @@ -2696,8 +2698,7 @@ static void rmap_walk_file(struct folio *folio, lookup: vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff_start, pgoff_end) { - unsigned long address = vma_address(vma, pgoff_start, - folio_nr_pages(folio)); + unsigned long address = vma_address(vma, pgoff_start, nr_pages); VM_BUG_ON_VMA(address == -EFAULT, vma); cond_resched(); @@ -2710,12 +2711,38 @@ static void rmap_walk_file(struct folio *folio, if (rwc->done && rwc->done(folio)) goto done; } - done: if (!locked) i_mmap_unlock_read(mapping); } +/* + * rmap_walk_file - do something to file page using the object-based rmap method + * @folio: the folio to be handled + * @rwc: control variable according to each walk type + * @locked: caller holds relevant rmap lock + * + * Find all the mappings of a folio using the mapping pointer and the vma chains + * contained in the address_space struct it points to. + */ +static void rmap_walk_file(struct folio *folio, + struct rmap_walk_control *rwc, bool locked) +{ + /* + * The folio lock not only makes sure that folio->mapping cannot + * suddenly be NULLified by truncation, it makes sure that the structure + * at mapping cannot be freed and reused yet, so we can safely take + * mapping->i_mmap_rwsem. + */ + VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); + + if (!folio->mapping) + return; + + __rmap_walk_file(folio, folio->mapping, folio->index, + folio_nr_pages(folio), rwc, locked); +} + void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc) { if (unlikely(folio_test_ksm(folio)))