From patchwork Sun Mar 16 04:29:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Popple X-Patchwork-Id: 14018330 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 3E3BDC282DE for ; Sun, 16 Mar 2025 04:30:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 66D38280005; Sun, 16 Mar 2025 00:30:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 61BD2280001; Sun, 16 Mar 2025 00:30:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 449B4280005; Sun, 16 Mar 2025 00:30:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 24959280001 for ; Sun, 16 Mar 2025 00:30:03 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 04F12B6C5B for ; Sun, 16 Mar 2025 04:30:04 +0000 (UTC) X-FDA: 83226136728.12.1F7A4FA Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2047.outbound.protection.outlook.com [40.107.101.47]) by imf23.hostedemail.com (Postfix) with ESMTP id 33D10140009 for ; Sun, 16 Mar 2025 04:30:00 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=QL60k9+r; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf23.hostedemail.com: domain of apopple@nvidia.com designates 40.107.101.47 as permitted sender) smtp.mailfrom=apopple@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=1742099401; 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=sdENcUd4EUUfm/VFpPMJTnHakQTHxg72+suy6RP57ZM=; b=1kewo1nc6z2/YMEYPZRpsz1NeC4sVeTknnXJB2VesDUH+nkoa/bn+4KSAqVWSgBUWvGYhK i45CSoF3p4NYHGATQhVdmtUJ/PyVGtaIYOynU82OUI6Ba0veVAWCpG9kKIA4uZShXxlwzc 1OgvYGOUWe9yytUVIapmjpqXcxlOX7Q= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1742099401; a=rsa-sha256; cv=pass; b=D6XosrQdfpqXADcmtj+U5Edz3/jke1CcrA3SmPo8Udepgen+AyGKs4suLQjQGJ2DLNaQBL 9s+F9lcshR9vASFEpql8Yc5KDEWmdQDXdxCyS1VRLPpsNiHLZd79HySuIKqaeZN2Cs34jL xZhfO8oVjuLrnYk2ZLs3wpx4hfaZSjk= ARC-Authentication-Results: i=2; imf23.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=QL60k9+r; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf23.hostedemail.com: domain of apopple@nvidia.com designates 40.107.101.47 as permitted sender) smtp.mailfrom=apopple@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=kGh24G6RYQs98F4XBluPLZkuU/UsPv/DhEPlpQ/eSj3WgVqSEP8hbCkS/mL5/7AAa9y4ciirftBruTcUFbjwjmDJW70OrNNtawH0SZiBoGtadAwaCOmugskjVLeHiZEFisFNmM2Hgp8tPWuj51XnvcqGCw/lT23SI0tahU7pzPwQWUBeG/Fc2fPPA6d1X71AZEVYofE5pg5vPvPgSp5PCg+o+SHtkcDcQi1ACtPXGq2sptPvRB8YcMTSRZcZp8GhedezYTpH8hHhgKP/jcEV90G6baFya3HKFUBayVh631hIOFvr81tOB15C89NFhWNSUaM7bq51CLv0qeLKn9ZzGA== 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=sdENcUd4EUUfm/VFpPMJTnHakQTHxg72+suy6RP57ZM=; b=nRuNuaC1C1O1rvlbT2+TSSNTP6OnWefk3Itv5KbEQzMDYDzrRsMYlo44gDhaWW1HkSLbU8mESFP2+klmMbQ475RrB4vv7oXXB+3/GVX7TbwyKfm7zwDK9wA33ONNuVjPNT82NkRQwfZ8u5sxx50qVo2l7GRBUjpjWaZuOSs0321+KRAVQk2/JidLvGJvw8s7OtxvKtSCKXraRX2D/eOlWe6mZJg6jTbKWuouEMU+6tCJwXUO8rTDWTqFgnEGnc3T9mncNoG5ShknxJBZKIyrZvJ/mHg/Ox2AZsos5kppd/B77cDAq6wdhmj5PCmh2K2FZoEQPkVjoJBjiTQlZBmYhA== 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=sdENcUd4EUUfm/VFpPMJTnHakQTHxg72+suy6RP57ZM=; b=QL60k9+rXdwzTX58x0TqrMmKHMXcTPGt3ZeWkCDjhLQmilxQxVenXGGfcpnFlDExsGJiGV/rCtk0GlZw82LXMj2+Gu57GDw/nBs0SfRBeuDZrTlcth3Yiq8SneM38bL8oDUqaJBj7lWIAozSZOcuELHIC+o+xfMA1v8MXHLKUAQpJVv2PtjztRy+YkWwPTj4lMW+1gESTNAhy0y7e9RJ+CZW0B27dqpmDKNb4QCbgXIT6qvuTey1sy/UNgW/C59OoX7jvg7QOXdLd1GxBsw+TXN9JH4oY6LHoKIkhEPoX5GxwzfCmTCKFxFvaK0zw8KtstQie2iEoSWFAdMZqqBHTQ== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by LV3PR12MB9260.namprd12.prod.outlook.com (2603:10b6:408:1b4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.33; Sun, 16 Mar 2025 04:29:58 +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.8511.031; Sun, 16 Mar 2025 04:29:58 +0000 From: Alistair Popple To: linux-mm@kvack.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Alistair Popple Subject: [PATCH RFC 2/6] mm/migrate: Support file-backed pages with migrate_vma Date: Sun, 16 Mar 2025 15:29:25 +1100 Message-ID: <1371381f755a8f04a8228e52c36ddfde72949b57.1742099301.git-series.apopple@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: X-ClientProxiedBy: SY5P282CA0066.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:203::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_|LV3PR12MB9260:EE_ X-MS-Office365-Filtering-Correlation-Id: cc247eb4-1830-4a2e-451c-08dd64433574 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: 6TZKyWZM2wzwaReLO1Da+cIoN+JaPmlehwmYggKo3hDRXALd7VCcmTqEO/oGNs22aodYK2tNBM7Ipy9znjbn1chtmRJy5uxmYqYxPTUSg9GzqHXkTpyACE6kUhIxKzLHxBVQcogS5NIjUnclDN5PnnfNN6MEiv67BJ/CT6jQuhPDAB9XaaER9aVjFbdmYVm4CgtBr6eUaKL3vYvlyL4wXA/361QJpAbnB31fq3xatMos1ArdpIVB27SZFifA6E48/w5kBIE4QjAq1/OyvLswFOQ7r4vpsuVfug49/TGhF+kxrmapao/zLjaCA0JhCpFC8i57MfSqFEaiOHjRZotuHoe/xx5TmBWx67T406TjarxvG2OSDezPo96OCkvytYXsQVRzFe5y1IBAc+HQ2M+TRHIJYqBdS88ZA4it4tph4cFKYrLMPVcZvGqSGsiaBvfxLhqCHG5IekH8jIopCsj61PqBU1Q3x/hnSaKf1dNq/xw10vAqgxNhdQmJHfvwir1jJrIVZB7WnDdKlqmMongwlhCYyusqON1AJ5ARxYoKeAD4X5BOS0W2pcj0fI9qV3Ie3QiDAbYIrhvR/llwlEbAV85IjHePkYBqMN2oPWkLWkfZ6MdShZ89QiFH3uhUZ2F3bflIAbANajhNx00MjeuAReNYAbn2sFCYTSIZS5h6VrRYiCIernmKGX4tawzv8Bz4Tp+rp44U91MMuSS69xz8V8v+UnuVMXUEv14c00io6jyNv5yn2ru/MxRbQCxTSq7weVnV71lH1pfaH9CU07b1Xu1wiD4P5zCXc5CaOThVBgKn7rZqWq6wiqU5As5U27GN66JwfpE/9njt6c4W1bNQ1+g4vTLz0ywvyoUvdE9FW/cFJQL7Ybi5s2gInvbg1B0DyeDCQTri3HrCO0ehOP3We+nowlq+PMnnQgPCfJUkeQ+kGUe0dCnrrQG1fYILHb4mTMUbXwEmBvQAxpNnQP4Fgrda0AFwl8daA0+Cu4omfethSYvWLVhckj405Q3GWdNjW27h5ZEfeiyiwmmiNGjUdwAAFhqTopP3V5e0YPZ2eg3PxmLt5CedSOivCkKWQDQGyg4Dpv40s5wzJtfTsK+aZYzvsvKtkKGrWxeLTkDAT/F8UjM79XEPdiyDm7CMFUCrIw4lpuzoF9qt/DaAtXKkrICJqYjQ9jfc9HdCut46bAiEdqW9FZ/7JljQND029XwCrEw8vjeo9niOS6jJ4JM/y45xxO4oHt6KxTHADyCsysNS74ybJBS2ZM2Xj88NtjfJHgyGHWWrAzFS+ZCClw2sGhKLETFQuh0N+pU4PmPLr0cW3+IwT6Fy1F051nNTU/BWlc67gCHjdS+lIRGjmZHwaD0YDHBO6VwTNBTO+fBR2By+3onCNzKiTyyCyzLwc6wK 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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lP9udXUJYc8WHB6jgoDTg1HNSzWfNpNeGsQ67SZSqVLqHcZlAlyQ1C2Gf/UM7GMLZEjZOglcOEZHwDE9PPvIlPfguK4U0/QEdu90e8/5xZFwaYrzkxg1qEy1jq3T6IFsNrCPTG15zvgGwlZKJw28aQ9UhZRy9n+eMiry1ba+esvjxenXAmYZTOl/l0fxxM2rbsPCAGEmT0+ttgCgThDWoe6L+TVj6Fc/sSLY7rzNUV/LVDEv485pni59M9rpVTXK/K5waK1qy2eLN+gHEcFfpWvRVwKdBC5569o9oGUFNzYaYl0BPQFVt4MwyLOTftALZNOgmzeYJIuntDd9Maa753Wpoaupn+fPIU1H1VtaWUVsj2n51SWsI9cYkson2kj3+wItJlhWEtTbMzZgcHNql+1ShPwPGpYbxyIWbaROz9vSJcOmDoJuo7hd2zBi7N78fr9eLX5jNxOPiFS/AaQIv6df6slMNMdU+/jANIaRBRPDqWiJkRUekoPQLpgylYP+UxMvDsi61B31SbqdKNXypcFm9AX8KF7vSpnywH9td/Z11/bf+CSDm9Cdc6LKpuiFFfLZz6cjnrvPw36KKumzYVJoZLoaLj0GkdXNt5bAkCd2UF6B7WtXfqOZyGs3IMUNrI6jM9rhQvAVE16/jJZcTSshbtI5Srj4eiKzmMiZmiqjfzE+PHyrMyL53zAkiBV7XLW5x6eQ+cEHEXkQPb/pUjA8JvXw2y//gsnwsUuZLAollwttSZpresRhmmVDLaW8f/p0u5Uuu4aQ+M4PQXQMeBf2zhitOfTpTBSKGCwnaMC1GtzPFiU3m9VQ60zVfNLn/xnZet6Qt2//DUiXpjWt+Hbz+NMPED7eKK/R4xNKYRsgpCfnl0o3eaFWqR+Kiyon3tCTHWeGTqjipPndtEmpUUmfuB18FZ29+pYt35ilfTPDA8MxWZoeMw/v7CDM6ZHIAn4WWz9Mwf+TbNEdr2yuTXRl6+KOY8bg+QrzzFKyQihFNe1fo/6LR38AixOnK9AYb1eAaXmX3HAnz74oKGDRxREE27QZJu4cT3DEF/I204Flrpim1ZGkuRU2Qlt/nQ+5dRRievwekV2cYeO7P1PeZTtASpPhmG8qrHQ6jj6JD/2OM6YzxYjCtqddmW5CpMc0McKo83FMOi34TqY67yllL205e34oLCWMMtk0jSPs3o/w0tJ1u2o74lrmRTzt0sbYr8MnhuZasNvL2vTT1vj9KioEuli3PczAickMXEtHYyYFWV02sgmlRmN7nU7GngiuTJRsaYVhg/az5AVUOd5uFc6IR4iojKiH+jlGmtCebbmKExmDFuSDO3V+0dQhjKHNKsSBx3+Pti0BpqNyCXQOBtVpfoQay9FCnq8htbyKwE34GcXa7Ve3gRIXaGRkKJlETlnZg45aORkAfls8//JHaqpDtF20CynxAFAzBldK5MgmK39ZoSB+om5w17h3LcODC0i4wVW631vuDuWKbe7DRhqcdpP8mjRfiQeqjBMWefrCPqyvNwGa/X6pMYWJeJadRWI/SothIAHp0KCBiJzh8PnTv4iJIMskHvhUqwigwZfwYEBbAOgH5y+9Cph23deg X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: cc247eb4-1830-4a2e-451c-08dd64433574 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2025 04:29:58.1631 (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: Q8eHt9mRyL037xuZemLULfTsA3ulReyRYa/9f1ylnj4ITYkiOUIkfjYDFbZAAxtANMiPSx1iXB1/zNtdKkBHBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR12MB9260 X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 33D10140009 X-Stat-Signature: b1faagfuozyfj4ctxt1oz3s5ihhhsean X-HE-Tag: 1742099400-182099 X-HE-Meta: U2FsdGVkX1882ztdGQDTCCR3CQIFx/tD66Qh8DEP8jIX0m0GOacWypDwzrN6Z4C4dDWA95IajZ2L16aCbd1LFvY3ePP1d4JjYuarMDRO7p5PxXwpP14YNYxjTAZq1p2dnpxB77yLjDXPcrZGg0+TR73FwCmmACKCJh4SkC7ffRjxZoWLCdiTVbe8NF5G1skpdnmdvHgxmAbwLYPchZpUWYcVw8AXMDSrk/aWISg2BIKz8rTxF6qEXimlZNFY/U0W8ky5Ak2Lgloufnk+E7xdeQINBsRZSqoHfs10LyYMzrh2haEmqdn9tnzK8aehB37xFq3Sw5duSfy4Yb756U7JM4wSNDt8rj/DIatBeLMg+eFLbmI66ITfBu6ascVPvc/s+fwZMdS3oqEK75xGRO9/0KDfJlIdDcJrdfVmB85DV7DTT3Si5xnYJN80S7FIiL2Ah3XxIk/5OJhP8bmDEBkHfz7UqiavYPJOf5vChr+OqRbJ56RPTsj5LzXtaH/XJtt2U53/i/uwcvtcWTjCzKWD3DtVjG+F/OueWwG04mZzNBdGozoMtLnV46ZTwsOClR4afhPltnqPxNT22XCyImt+uRvhxZYXZz3vjFj/xd/+Tya8/uMhVQaxcMTNNQXkpNGQieZR5itpabb0ImJnoFYzM3BO/74cXFl+nkiB8nglzcuhUn0n85nRFIMrZG9MpHfRxeBfhhLTk/DfyCrC+FCl0hyLr9G8qzOkhlPmFkBFXaoMjEkMINA2ksmO8hyht8LlXheusmW3C4RHrL0E+ql7pXAnbkQG7gSzjuIf5tmwm9607RcqubZFi1DeZ1bManGhf9xTi3F1Weamo/g5whNoxzZ41TEPrg1mkVDE+2aKE5veMrAr0d89cPibuLfub6kG9dMsj3mf9RyL7IBHBq4VINxzlrtemgMIINuSYZqU7fh7gJiB2uq5+dN8vYZmpebHTtPGwg91jhbYmW1+D/g uGJBb89u dO97xCyqd9yG6oIGzb85b9LnJ4yJywYKm0kpx/G3Sy4auwXspzFU2cIg4vO1SRcF8ZBENl3D/F//bYMJy1TVSJvZ1NpJiCG0un3B4lGAiPWqDkGyQEsZvQJ/Kb81hphe+7/FlQUJjza+m4DbES54mSB1eYqh6guu8dH3IhQuAD9NklOZaj2BTpKQAGSAx93BZ9elpZJuE0otFmp4T9EoXzthbci3aIq5sPc3T+LNMW/aCxOsUxchfe3pmxz9eTciig3je3ec7ogoeQJ8mzCDXv79TfjtC4IaG7jiQ5SVuyrNG+QpymgwkAmtx2qSZR08NyWYkheX8jKwp10MAunAzvFx7U/AF59aVHr8MLJ6bTBYLm0F7ItjnKGLZ3VTNzyttQ00E9KHYLTzec+2eWSIVlL8b7JAUNmEsuGNBvqPLQ3Oh4zPIKow8l4n8uA== 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: This adds support for migrating file backed pages with the migrate_vma calls. Note that this does not support migrating file backed pages to device private pages, only CPU addressable memory. However add the extra refcount argument to support faulting on device privatge pages in future. Signed-off-by: Alistair Popple --- Known issues with the RFC: - Some filesystems (eg. xfs, nfs) can insert higher order compound pages in the pagecache. Migration will fail for such pages. --- include/linux/migrate.h | 4 ++++ mm/migrate.c | 19 +++++++++++-------- mm/migrate_device.c | 11 +++++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 29919fa..9023d0f 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -222,6 +222,10 @@ struct migrate_vma { struct page *fault_page; }; +int fallback_migrate_folio(struct address_space *mapping, + struct folio *dst, struct folio *src, enum migrate_mode mode, + int extra_count); + int migrate_vma_setup(struct migrate_vma *args); void migrate_vma_pages(struct migrate_vma *migrate); void migrate_vma_finalize(struct migrate_vma *migrate); diff --git a/mm/migrate.c b/mm/migrate.c index fb19a18..11fca43 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -749,9 +749,10 @@ EXPORT_SYMBOL(folio_migrate_flags); static int __migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, void *src_private, - enum migrate_mode mode) + enum migrate_mode mode, int extra_count) { - int rc, expected_count = folio_expected_refs(mapping, src); + int rc; + int expected_count = folio_expected_refs(mapping, src) + extra_count; /* Check whether src does not have extra refs before we do more work */ if (folio_ref_count(src) != expected_count) @@ -788,7 +789,7 @@ int migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode) { BUG_ON(folio_test_writeback(src)); /* Writeback must be complete */ - return __migrate_folio(mapping, dst, src, NULL, mode); + return __migrate_folio(mapping, dst, src, NULL, mode, 0); } EXPORT_SYMBOL(migrate_folio); @@ -942,7 +943,8 @@ EXPORT_SYMBOL_GPL(buffer_migrate_folio_norefs); int filemap_migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode) { - return __migrate_folio(mapping, dst, src, folio_get_private(src), mode); + return __migrate_folio(mapping, dst, src, + folio_get_private(src), mode, 0); } EXPORT_SYMBOL_GPL(filemap_migrate_folio); @@ -990,8 +992,9 @@ static int writeout(struct address_space *mapping, struct folio *folio) /* * Default handling if a filesystem does not provide a migration function. */ -static int fallback_migrate_folio(struct address_space *mapping, - struct folio *dst, struct folio *src, enum migrate_mode mode) +int fallback_migrate_folio(struct address_space *mapping, + struct folio *dst, struct folio *src, enum migrate_mode mode, + int extra_count) { if (folio_test_dirty(src)) { /* Only writeback folios in full synchronous migration */ @@ -1011,7 +1014,7 @@ static int fallback_migrate_folio(struct address_space *mapping, if (!filemap_release_folio(src, GFP_KERNEL)) return mode == MIGRATE_SYNC ? -EAGAIN : -EBUSY; - return migrate_folio(mapping, dst, src, mode); + return __migrate_folio(mapping, dst, src, NULL, mode, extra_count); } /* @@ -1052,7 +1055,7 @@ static int move_to_new_folio(struct folio *dst, struct folio *src, rc = mapping->a_ops->migrate_folio(mapping, dst, src, mode); else - rc = fallback_migrate_folio(mapping, dst, src, mode); + rc = fallback_migrate_folio(mapping, dst, src, mode, 0); } else { const struct movable_operations *mops; diff --git a/mm/migrate_device.c b/mm/migrate_device.c index afc033b..7bcc177 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -763,11 +763,18 @@ static void __migrate_device_pages(unsigned long *src_pfns, if (migrate && migrate->fault_page == page) extra_cnt = 1; - r = folio_migrate_mapping(mapping, newfolio, folio, extra_cnt); + if (mapping) + r = fallback_migrate_folio(mapping, newfolio, folio, + MIGRATE_SYNC, extra_cnt); + else + r = folio_migrate_mapping(mapping, newfolio, folio, + extra_cnt); if (r != MIGRATEPAGE_SUCCESS) src_pfns[i] &= ~MIGRATE_PFN_MIGRATE; - else + else if (!mapping) folio_migrate_flags(newfolio, folio); + else + folio->mapping = NULL; } if (notified)