From patchwork Fri Feb 28 03:31:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Popple X-Patchwork-Id: 13995612 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 2E92BC19F32 for ; Fri, 28 Feb 2025 03:36:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C25DF280010; Thu, 27 Feb 2025 22:36:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BB022280004; Thu, 27 Feb 2025 22:36:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A0309280010; Thu, 27 Feb 2025 22:36:57 -0500 (EST) 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 830CC280004 for ; Thu, 27 Feb 2025 22:36:57 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3BDEC122132 for ; Fri, 28 Feb 2025 03:36:57 +0000 (UTC) X-FDA: 83167942074.29.62AF318 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2072.outbound.protection.outlook.com [40.107.244.72]) by imf11.hostedemail.com (Postfix) with ESMTP id 78BA94000B for ; Fri, 28 Feb 2025 03:36:54 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=mu+doOP7; spf=pass (imf11.hostedemail.com: domain of apopple@nvidia.com designates 40.107.244.72 as permitted sender) smtp.mailfrom=apopple@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); 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=1740713814; 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=o9MotQOSY0LVsCQPw+Q39CqMR5NnyIi9vRj90M2RfZw=; b=D46DtxubrPsQYxb99iXh+66iBcOqKPHqGY1xUkf45yze7ZMMtuWnu6qbWm/CiQ5q8fA1N3 rDyql66O80ZdGFJyGAF+B1X4mdkPZyVHnFwz6F61wRwkjDD1N24jmq5iJCZew6AZ3/tg3/ ZimM9zhZbRT7ozicdFPSQoV6v6+6OVU= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740713814; a=rsa-sha256; cv=pass; b=7dpYi+I9EjSuja63XVew4rwO7PPPyvct58QY8qu35WZ8R2d71UlgHs+W6UQMm7SnQICBJk CMzVUU2D7VxZ2y/+zWZHd5NknuYLlhQyPFYMdeEmrlR4cl7wKkyPMbEr/u9TW7kUqy5TwS IY3sGwZutiYRiwDB97V/tI777mDBbQI= ARC-Authentication-Results: i=2; imf11.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=mu+doOP7; spf=pass (imf11.hostedemail.com: domain of apopple@nvidia.com designates 40.107.244.72 as permitted sender) smtp.mailfrom=apopple@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mTciidwqJU0jHr52dekYLPeelCAkzIDd8ceMh7RFDgsT2oYQCp1hH40IQ2z2lnVYJx71XtekseL+Z1FR+/9bZxhgtG1W5B6DJpbYbAMmThNwSJDelSWaf0KSkVRlamPVt08mRxn1vkFzXfGkl+JoXw2nCV9bVxWxZ8eBdBprKoWX01/043CtG+9slLW+SVKaclX6m32FcTMqC9TvN8/WRw+dl8aEaaOFQ3ne/LdftR2EolL87LffevwcVOFl6SdntQXHkntx4v3zP7TnoYKYdm5txd0i4oJVmU5SejLmoXbkaFv3AHkA3p8cGh0HuWIQK1shBhY+JfmeQBfcubjhRg== 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=o9MotQOSY0LVsCQPw+Q39CqMR5NnyIi9vRj90M2RfZw=; b=fwny091JVd0pdEyknQF0uIzlE58GJ61SLNlEa6wQcugzPXYFxoxmNCbrbbSD/QS75Xt0q56OEHUEliz31UGKEFoGgXtnAZzKUGv7LNoEzvg1MifC/zJAa3nCIFAQygrqy/TWEymMNAPex9HcgfPP5q+gfIzPiJCNOEx+MKqn05whll5wjzDv+bXArFWEvavuvhEkwj57pbQ0heBt0qVMyRsB7Abs9Di7VBUt8af5OihkMc+7GSSxN2mTdwlyR7UReFNPxgHj6mH3LV+Ivi0RGtCLf0P+DFlLzp11txF9qFYMCTwr3VzjZYfwC7S0or2OKcHTQd9Llgmhh3//uv+r0Q== 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=o9MotQOSY0LVsCQPw+Q39CqMR5NnyIi9vRj90M2RfZw=; b=mu+doOP7uN02urvArLCJ75oOSy+cI/AqZjlh7PvXqjwuxfCYQDkO3bj6oLQ49kF8Lt39U5m2D9GdrQm38/+DpbJpmVWCSiRKmukGF6mtL8UO4NVRK2Ek1fAvr03qAkdNaAA/7/LojPfl4HYYhQDCBOOjcMY8eK53WUo9WfQOzfipCx5f78yb/WiUtVsV/k3G1ZK6+UwnoN+CVMyRTKuJ0brYSoZuBtZqqm7skvMg3CIAHm7W6zHvyMkq4YGlgY9r4LZZbQAboUaWL8rdaPImuvfgAS0hzMmDHWwnY8Q5TuQVef29CUwjd5LCPe4Ti6O78T2FbByvdSTO47bTRTpqJg== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by SJ2PR12MB7991.namprd12.prod.outlook.com (2603:10b6:a03:4d1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.22; Fri, 28 Feb 2025 03:32:25 +0000 Received: from DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe]) by DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe%7]) with mapi id 15.20.8489.018; Fri, 28 Feb 2025 03:32:25 +0000 From: Alistair Popple To: akpm@linux-foundation.org, dan.j.williams@intel.com, linux-mm@kvack.org Cc: Alistair Popple , Alison Schofield , lina@asahilina.net, zhang.lyra@gmail.com, gerald.schaefer@linux.ibm.com, vishal.l.verma@intel.com, dave.jiang@intel.com, logang@deltatee.com, bhelgaas@google.com, jack@suse.cz, jgg@ziepe.ca, catalin.marinas@arm.com, will@kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, dave.hansen@linux.intel.com, ira.weiny@intel.com, willy@infradead.org, djwong@kernel.org, tytso@mit.edu, linmiaohe@huawei.com, david@redhat.com, peterx@redhat.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, jhubbard@nvidia.com, hch@lst.de, david@fromorbit.com, chenhuacai@kernel.org, kernel@xen0n.name, loongarch@lists.linux.dev Subject: [PATCH v9 13/20] mm/memory: Add vmf_insert_page_mkwrite() Date: Fri, 28 Feb 2025 14:31:08 +1100 Message-ID: <4ce3aa984c060f370105e0bfef1035869578be47.1740713401.git-series.apopple@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: X-ClientProxiedBy: SY5PR01CA0051.ausprd01.prod.outlook.com (2603:10c6:10:1fc::11) To DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB7726:EE_|SJ2PR12MB7991:EE_ X-MS-Office365-Filtering-Correlation-Id: 883ee873-7778-4a3f-3954-08dd57a884ca X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: /DsuOmG4D2FZhQtBclOH7l9I3CTZYOVupg8Hha01e7UGqkltXtsJslrmsR3E/m0K26/NjGAcw6mALzRXmzIrT8/NHlBAXbKI+e25tn/gPyJI//qPqYtHKOOVxqFdU63eRq98b4QHFOIWa/6mRDIa2xblN9w/aAMazNs2OCXjSp4XV7lVMscz4oGDhHAQDSmxeoU6hfpcLT4lvdEYH8/fxXH6hEa3lKZDFjnEq3si7VcC+c7BGSmZmPJXtIb1EfLKe+B3IsaM5kAxOPM52ZP8HqRVrBi7pdoCt9HIUy/JuA4HlXSp3keKwj4ugKBNkAava3vgZjaxJeh41IFLWlh15cuZmaXQkOFKAM9bQTfSx2LF7NXQt3StBBK4/xTn1O7XMgW9SdHuWSmj/UQelEALPS5Orbe07OVJ+MMrdP+UWINQxqxfMSAraEc6X3tlQuvGZD+oThBsW2Qg6K4HCifHq7SAWvi61s9uXa4JKhG/3n417qs7eTxi6Jpsqsm0eBNnO/fUSDmE61sQ1/4YN8h3BylBFJwdi40mXQ1K1+G2sBiGEDJUSE6xMmIYGIOAkzXjqOxmxGo/XIGlJ3eHjJZ+wOzLWXQCwlDUgcrAqR+QuUg78R7mdBWW3wJ4YtQILmoep1CBYKncWeUrWucivayV3iFmBjyfrhSVZYcN80+2WytU7RWrzFY8xz9Is4g+QBPsCd0zQxC9bPcZ2VBTbBGfzj+oXte3UiHZR1KqMHbz6rzHEjNEvoO61DWUTwuLBzMCWxCr1jEx3stU6JcJwOr07et1JVTxN40nxR+YXWovMVIA+91Ihs1XRy1tfh9B5ZylHb9KlqnIcFFJTBO+Zg5VB5omgRriPWxeI/n+GswHWDXFAb7wEUJCVIU4rfcpDBvp+nNOrX9XqGW905trUUhbIlTshsVObje2y38Mj+acSuUpeFUPtkwK4tKnRM+LdMeVxm0FOeDiEVSzbtVb4jBeh+NVa1GZUH5/CFVVJkm1llEl8theEI3stsy8CH+V+IHorsK1y6oPl7grHBTdM1HX8vScxbDd4o6gL774dBXiFoU0oqayq4Edj27bsF4ShcfJqo2fDrQlJ0T0+e7AT4Ods75TGRg2HA+nnjRt/wBvl2k53UUkOR7keTXv5/RqlkV4x7P86cw1UuQnT/lW0lAR/AVrtEBACd4m1Il4D18S5aqb8tTbGrC+YR2yTryHh6NK49+w/X7nckNkGtmMpOiT5KjP/0ys7akijIhVjLiM5feww6v9lDNuEbMseObGA+Y92GAy5bDXHWvklJKY83s3PeEYxcCCNznbqC9u+sa91Q+gquDgNbfXu8vN/QsLm2Jd9MbYHMOZaMqh41ihLXpl1Reqbx+QCmwlPS7lyHaYCNzoASPSKXxDguO748j7c0RA X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB7726.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HI9RyjoQRtff868b7y8ASyId4HgMAMe3BGnDouAnWzu/uYKM7wQ0EZZSNd/DZOShzghQqSOY2y9JIgBBlCmZ7X+Scn3IkYtuswlDhP+wplkaK6DpiSr3RohplJszNdCVbEOz+g9Z82vry6PShFt6FW6692cEBhbTbHTINwOGJYWryKk5gR97O9+tJKpSZxjGsZQiYaz13DyXTDv54uE7RlfI+IN7CnBmDMe/LVr/wDn16rt0P/2rlBL0ig8TwNOW8OmtcpwazHtQA6Kawn7mlzV5zc5s1fOQQG/9wWOfxZTSPL9Oz/UrpJJPFlQSX4FOjP5CTyoYH1A/9jNO7jMAu7V7b5fFjMdF5WNO0y8l0Ua8xrYmjMnarU4EoJ5Alwgh3YS0dUj/V8kWHm2Wqtpc38SYgKqQVruvnpZWkbpcO3TKXZPIIFVvBucjYj9/EgHJNW7dAqucF6vu1xEW5ZWksrlMaw7tv3izkJC8AJhYTqRXLLuDvtXTvOOmOaNCvJRscn3DnoMMWc1NGa8BS5GHbyQHl1rKEpcVThmKN3zIMW2sLu3AuT8EjgszykpuS3jU0NkAGTH2yM3czyY5+z6Yji2ZkZtTVRX+ZTCxB+o0hZNcozsF9JD+ELSMbbXV8K7UmG10n+eFTtFPts/xOuehEgjR/sdSn/0jXUoA3VmjpDmfakJD+e2JNS3erci8ojYnPk7fTUs+FxO4UUJHyqBw5piaimfvP4/RHDV8eqZZqDssRT2Od+QAc0JHVeh+Uhze/t8iwC5Lv75jO/WQxVJ6xFs+flNcm8PaYLxih7+9+yhg3h31/K4E746dn+0nK81njrWbnL9+YFY7t2+03h6NM+d/b8uK2piworovpnrAf4p8CBxN1ycgHKSUHA5Klx61HkWxKoCcluYnqy3b/1OI3srr/2d2rfhX6v5fIGNekb1oZYio+9ng57bL0g5ACXr3y0X02chzIBDJzpkkqA0b1LVm5MeKNen5ptKEOhqkVk2E/SfqGGzEaJzse+ZmrCQ5P1WvdXlvz3Y88s1VQEkWyRUzG87Ghm2dppPqaKKjQZup4mtX4sxC6RrCLZ7MJpSOlPDg1wLmrWRFVEhfr4IGervmwD0CKgkJEarTL3O3Oyh/EET+EXvi47kD16Q29N3WSQ81u3cRSfMcgLIHuNYL4uyIBlkMc3pLgBOGlldVJkANAcmeB+tzSW1oub3P9Nid/d2XsT7xe7wJUpTWa2xRjiA4qWrY1clZr/m98l+n9uLM+x+PHiFLSVnFFaIPYddUJb9+/o4Nvj8oMS32cgNqb8kwk0RrpJwjJc5aamZvfNMzY5/0M6MWZkKAr94ZIq8GOImoDIxBhmOcc9Pg3Xa31CvyEd06KYRHFwQidDxLcog1064r4EdzmmTm6d4xeBEVd2Jqt42KM5lNCTpoGqQ6E83YDaIM9S282CwMEe6+MmKDHnwtpklqP+UhIgkI+Rwxyn6CA1u5gTnX+91Ho/tlLPcXptU/iDLFKYXuM1NyRfwsWCj4rrnP2qeGsQH3ZsL9U5ub7+NVLi+nOZfASIsbFmv14pqOLGnKIaT+FiH0k96wXgfBVWAhCffZiF/gE7yi X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 883ee873-7778-4a3f-3954-08dd57a884ca X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Feb 2025 03:32:25.4061 (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: 7jBjNko09tisvOWAzm3MedK7t9041xmxk6n9sPT4ks60612mt1ur4HnCCMpJQaRcBYcVejPDtiZGydRyrH3yWw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB7991 X-Stat-Signature: cd3ocrhxyippwtirmff5j71jgihsheh1 X-Rspamd-Queue-Id: 78BA94000B X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1740713814-669875 X-HE-Meta: U2FsdGVkX1/AC2nDvXzKjVYtUfhERYv6w6DW5AhZ3WKKNgyNCeq69tNGc86CUK9Wqze8ZofcFZ4mIueTgXxJf4TnU+H48OYAwqIw/UvVST6J3Bpi9aaJRguYGMaqd3Ecsfl/Y+OoF/VI3vZ/6BPJUt4RWd695ODEVoLFR4YI9csyBOsQzfY+aw1qezyNObch3QipNdwFZ+djkpM8tmFwEDeCFCUKBhG1vJokLMzqGK9dNNabmbmPqISqUWft+a/brgGeI5CIvFJldmtVo+Z8Rm18TwFgVyT+/9J3kQu/EKq/zQLWnq/BLDY/B0UaoZt0YhJN+comOG6THrqauD9UMHt6v5LqqaMvDxM28kuy1K6y48sz6Pjx+m+8mw7t6cmystYrrsyVq9v5+sm5f3tPcVvgLvpDKuyCgA67mb2aNPfiOFG+EFV4H3sDhBNneB/KuxuWCVvm2JzNICPClgR7wm+UibUipT8nvCxVkIjhvwbDfLzQoVWwpradnOvwz69LenL9TDKgRvcrOIBU1N0K/0fRAMUHKbz6bkgn6H0PlGv8hoqyP2AwzVSBjiFFAmluWxtCh78VsptqjQrPcKBMmMCsmgdNwkx/Lf4IFKheRHxC9w/WIbSF9GFOzmHup1strqyKccyqaz6P6ppS6WYCRLqcu9fKdhJHzxHdWwaGQ8Rv58fTmuxEmKCwJR865nMzdsFhBo0rseciWjkQVNvJJDRlxGmjecrIUf0aq9HNmgYvtJ8NW7WqnUJZ/KDwqgpwG/eEeUYJ9OiFo1KLA5j2N744Qo1JfpljkL9rYkVCRg++gy5RQ6UYkt7pSza7cBqCST+EfhkaM+1Rpf4x3ybnW/Y31brTEppsLbSRP4cV5Y5kQuAI00d53yc+qtgfWiCzvnxN+QCT1/lUkxOUa2Se8qwTGA5KnAwa10jilJ85pGj0oNZIsP/joC66lDPWm0FTtRkjnYelgAianJlsazj jsffBbhj YT2yxPUKtud8XUjQnEwEiFAC1Bowo8wckdMloOMcPa1nSL7ygrI3Fde8XjOUf1wX7ApO/NpnjoPVwFP9A3e7uUGmlJN2E+QeZ1b8ksq0wdt0wnJ6GuZBQFyiZs+zWgYKL1Bw7zOY/+yMbL+/1pbbmFEtBUw5bGCl/jo5vHe9xh21cztL9ksUD361xBlyFmp5JX0VGta9u7kRNQrPLhai9n0CXCyj66Xsx6AnwKfLJGIknazp2y1ODrY9OYblg7tWyCXgZSs1PRTnlf7PXAAfq/GbFwboupgtcVmfkan8bLn4IQIjAeM63BOBmnx3twFK7A/agSTSOvIMjA+Hy3iBKkySsQC1MyZPYI867v+S2D47PiMqQzK2diGOBLZjXywNxMFFoZg98XCo5Th6vQ5C0vr2LYna3iid4i9t+J7anTLC9HXbhIVqXISwc8ssB3h6+eDZhvAD7h4Sy0SOn1H6o3p2owPvGr+aHGcXflapc/6JJ+Ic= 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: Currently to map a DAX page the DAX driver calls vmf_insert_pfn. This creates a special devmap PTE entry for the pfn but does not take a reference on the underlying struct page for the mapping. This is because DAX page refcounts are treated specially, as indicated by the presence of a devmap entry. To allow DAX page refcounts to be managed the same as normal page refcounts introduce vmf_insert_page_mkwrite(). This will take a reference on the underlying page much the same as vmf_insert_page, except it also permits upgrading an existing mapping to be writable if requested/possible. Signed-off-by: Alistair Popple Acked-by: David Hildenbrand --- Changes for v8: - Remove temp suggested by David. Changes for v7: - Fix vmf_insert_page_mkwrite by removing pfn gunk as suggested by David. Updates from v2: - Rename function to make not DAX specific - Split the insert_page_into_pte_locked() change into a separate patch. Updates from v1: - Re-arrange code in insert_page_into_pte_locked() based on comments from Jan Kara. - Call mkdrity/mkyoung for the mkwrite case, also suggested by Jan. --- include/linux/mm.h | 2 ++ mm/memory.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index fabd537..d1f260d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3638,6 +3638,8 @@ int vm_map_pages(struct vm_area_struct *vma, struct page **pages, unsigned long num); int vm_map_pages_zero(struct vm_area_struct *vma, struct page **pages, unsigned long num); +vm_fault_t vmf_insert_page_mkwrite(struct vm_fault *vmf, struct page *page, + bool write); vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr, diff --git a/mm/memory.c b/mm/memory.c index becfaf4..a978b77 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2624,6 +2624,26 @@ static vm_fault_t __vm_insert_mixed(struct vm_area_struct *vma, return VM_FAULT_NOPAGE; } +vm_fault_t vmf_insert_page_mkwrite(struct vm_fault *vmf, struct page *page, + bool write) +{ + pgprot_t pgprot = vmf->vma->vm_page_prot; + unsigned long addr = vmf->address; + int err; + + if (addr < vmf->vma->vm_start || addr >= vmf->vma->vm_end) + return VM_FAULT_SIGBUS; + + err = insert_page(vmf->vma, addr, page, pgprot, write); + if (err == -ENOMEM) + return VM_FAULT_OOM; + if (err < 0 && err != -EBUSY) + return VM_FAULT_SIGBUS; + + return VM_FAULT_NOPAGE; +} +EXPORT_SYMBOL_GPL(vmf_insert_page_mkwrite); + vm_fault_t vmf_insert_mixed(struct vm_area_struct *vma, unsigned long addr, pfn_t pfn) {