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 4CAD4D2F7D1 for ; Wed, 16 Oct 2024 22:17:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DF4DE6B0089; Wed, 16 Oct 2024 18:17:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DA4816B008A; Wed, 16 Oct 2024 18:17:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C1DD56B008C; Wed, 16 Oct 2024 18:17:26 -0400 (EDT) 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 9F8386B0089 for ; Wed, 16 Oct 2024 18:17:26 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id BC803AC1B1 for ; Wed, 16 Oct 2024 22:17:05 +0000 (UTC) X-FDA: 82680877272.03.AE0F7EB Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2074.outbound.protection.outlook.com [40.107.101.74]) by imf13.hostedemail.com (Postfix) with ESMTP id 013E520016 for ; Wed, 16 Oct 2024 22:17:13 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=JUCRkjAg; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf13.hostedemail.com: domain of apopple@nvidia.com designates 40.107.101.74 as permitted sender) smtp.mailfrom=apopple@nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1729116925; a=rsa-sha256; cv=pass; b=rjaNjz4yAhdU/EcI1X7mpGoioEOM7nFRF9qR9DPLxCD1GGox6L7c1cOfvgRQI/X4RednIM cOQdGtCI9+1EiZr/uQlzndwfdvXbs7zQK4MSddLhdvUhW3PGmQL2uPBMLwq3qK+I0vFs3j f0H0qxlzz6XbjtHZHnyO9n/b7IRZMcY= ARC-Authentication-Results: i=2; imf13.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=JUCRkjAg; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf13.hostedemail.com: domain of apopple@nvidia.com designates 40.107.101.74 as permitted sender) smtp.mailfrom=apopple@nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729116925; 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=7p3Fd4MWvIdhDFX9svRUYG0oiFvfUQue8R3RYFRhgfw=; b=EhePecK1A2QFc0fE9VIlR0M+1tflxNJgiFzZAwjPo8bR+tWoCEXd8ZJfjNWIcnCFBg5i9q zI159tyQsFnOonP6UA5zUcox8EtISO/OZkGQLToTH/SEl4cof/j0UrFEZb9Slk3OBNAFLv 0HgVMtixlwYVvpRAGH951pULrdfQuSY= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=K33l5KVnhznccbAJbniljFG/qdzOGPHcsAxRPQY18ZXnzK7nTsyku1hZym6TCoaHdgkYngCPWs4C5tYHnu1jNDf1rAYVTGvD3DMC+S2ev7Lfw4DPmroOw0cGwEU3AwaJUKkbcIBz9u67HYWrmPuARoJlZOl2ugca59Cg6CKLm5e3XzEIi2wn/9GUuI80dLhTbGrMeK7ByvjQa9CzwBm3vPW7O9b6DnFKyDyd4Upnzilwlo3kieuy7wZX4ViyjaHieKOsCDkC8ZoZEkX4org+sW6d5j1GBpxUlFivaQVgwdzm/Co7W36UyNqePHdfyodbz6YJtCe1FQWtkRQEdNdgiA== 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=7p3Fd4MWvIdhDFX9svRUYG0oiFvfUQue8R3RYFRhgfw=; b=xaszbDZ1xvArcDGKg0psvjjtH10czl10C5hXQWvC75h0D09XRMn/dxemRYAqW34ysLvRA1+kXmEg+atgEExaTKT7cgMznz6kBdIEvObVPBk+Dlv5HzznNCPwmgsqRbrTaueudQ/YYx4K4vpLPbnNNJn1EdemyPJDd7R6xtN/n+UBQrUoiNJtLe9OO0iYNOY4lInHjFIZoiAmJnrmGCMisSHsxYjR33T2WFs8yCFF7U0Vr4sfBxjnhokoZYK+NGUvP9X8g5d0/zsrorO2SdKrv3xOl1EDEAQyjU68Dneun5GJBQAYCJb/s2oB9PBQs3m1WwI0Azb0L/dQHRR69hugPQ== 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=7p3Fd4MWvIdhDFX9svRUYG0oiFvfUQue8R3RYFRhgfw=; b=JUCRkjAgo1SnAaQXFkKVBoVhFJQSlRXy114SSAQahpSNFsFROdM38tT7NOhsnUTZ1ZZC6ccUtevcluaKt59vn7/1pZKdnhA93ijBIyLOnzUK57HDI8o2SibYUAmn3GqZ+CszC8s/6+UVKXwYvYFWwVIy+KIQ1eUG7UUdjk7MxDxXGOcvvF9ci5JZkDiHuEjGeZntvd0YF3jAJYIYj43yJ0fZkMmVb7Q0DVbYLJAFSebXxESJn4FPvMfOfrTTgfTWlYFZ4CsK0eSVaW2jyfJ+m+OEMU4cAkBvMERn3fSyRHlUucEtPGRmKUtGAGv7e8xkeO4p8+rWq6vMv+CZIs2JEA== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by DM4PR12MB6325.namprd12.prod.outlook.com (2603:10b6:8:a4::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8069.18; Wed, 16 Oct 2024 22:17:19 +0000 Received: from DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe]) by DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe%3]) with mapi id 15.20.8069.016; Wed, 16 Oct 2024 22:17:19 +0000 References: <20241016202242.456953-1-jhubbard@nvidia.com> User-agent: mu4e 1.10.8; emacs 29.1 From: Alistair Popple To: John Hubbard Cc: Andrew Morton , LKML , linux-mm@kvack.org, Shigeru Yoshida , David Hildenbrand , Jason Gunthorpe , Minchan Kim , Pasha Tatashin Subject: Re: [PATCH] mm/gup: stop leaking pinned pages in low memory conditions Date: Thu, 17 Oct 2024 09:13:32 +1100 In-reply-to: <20241016202242.456953-1-jhubbard@nvidia.com> Message-ID: <87ttdbofpw.fsf@nvdebian.thelocal> Content-Type: text/plain X-ClientProxiedBy: SY6PR01CA0118.ausprd01.prod.outlook.com (2603:10c6:10:1b8::7) To DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB7726:EE_|DM4PR12MB6325:EE_ X-MS-Office365-Filtering-Correlation-Id: 5beefa60-ada1-4758-cb37-08dcee304cc9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?KrNhfB0hAhIZq5j2uf1efppg5mII/7vlTrusrvSCPjt33Yys9I6dAIDdBnoG?= =?us-ascii?Q?vY2Tl2zinLAp2hBXN8zFSncbQt1n6+BnGttsZw4+sQTypMNVlVkDJUbJ0c3H?= =?us-ascii?Q?7z2yA0ZV0w4wYQLVyX0rQMhAKFmi75gnPD2l7ZTb6TMnOuguPoekX6kAr8tL?= =?us-ascii?Q?5ptOTiTmiLleI/PKIYfSJYwrYYdIZLQUDpVWCDVspfvJxc8f69G4lmBJfRhw?= =?us-ascii?Q?JI1JeuFwWvQs0tAEAWLJUdn7eypZB/NltW96QB6oK+EUSSL6sxJdz2jYa+r/?= =?us-ascii?Q?p21D0WvycGxjMwWFHFSQsOYG0B04iY3b5T264MpGGha0mEaDAUmU06J97JuJ?= =?us-ascii?Q?/KOugkMKgZt6NQXv7XHvBl3TnPfTEwU6qNyjyiynft2MVqjD/puQHHeFoHp4?= =?us-ascii?Q?seZzsuHCtL6BbLByMjEHrUwHakuVuYaqI4CgtEKSW14xWAWn5i6VGHWv/wc3?= =?us-ascii?Q?YkA0A8Bjmdyc/oi/cNUy1EzdYDyXkkw0xx5k4zXYodxFGy2TBMRS4xxVljzc?= =?us-ascii?Q?9UBtlyCWSaWAuTTBs2AC1IBvK4jRDVaRLuAJLFp7u17DHYUjq0xSSeFomPpB?= =?us-ascii?Q?/OZbf5yU/citg5wh3bPhANgTTUwdPoBVHxHmbKTot/Nsgjt+hIlcWmoT6fmI?= =?us-ascii?Q?6UwxwEbpseo67Q5k2JzuEnpBd9aVtHwLllba7lklucRFi5g0S8G+2+2N2WaP?= =?us-ascii?Q?PD/SQ9jPpEa2GNQIEkhFDbPTc5J4i4VmBCcODADLzKjXgZb7j2QU5/D9TWi8?= =?us-ascii?Q?pGkKuHelR+bkJhvoOxcHmlFfLs+KgIu1IOal+z87c0yqPuQwxdAd1S/ldqJ3?= =?us-ascii?Q?yNdq4JjuI+XhD+0csbedACMYYI0ZJv6DvX1iJWLQSrLQqaQImF0+3Cf13QFn?= =?us-ascii?Q?SRMEF2Px6bH8SfT8HqPESyLpO2fB5oJcWISQytU2/Q71gYxkfb9sYGl2RTTM?= =?us-ascii?Q?kFNHaI0Vjj1GYuxnOQM3aNtEFm8+JyfyHuJa8BrXB/p6SdoqzZ+y3iCHKvBb?= =?us-ascii?Q?axsfyCD/G7lZJT0dLYBDJ3FaLprnWbQA7dL7qOnIUmi6r8PyQmTGfXqwqzyY?= =?us-ascii?Q?VPU4FfCWeiUYHaRZwt0SWXwFRWSI34z/BOFCCP9saDFYs83Q+sY+eX4o0x5C?= =?us-ascii?Q?T5Wq9Rw/pTRJXe7ZUOherw4wgowJ+ykPLo+2wr0z2RWF1lus0xqFDujk3zdN?= =?us-ascii?Q?3S2nLK+ix8T9lSaTNoWFtqEffM1N1FPulq0ex6mcRRWUE+++l1GSGItAJNLy?= =?us-ascii?Q?WrymeZe2Hrft4N//1cCaw4tIDeXsacGh9grpLas7B0dgFoCBO6Tz3GZufsYn?= =?us-ascii?Q?nFHHybV6qUggL5Hv8wHwPjE0?= 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)(366016)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QF5GT3zO1ni7q/Ynon0rve69VUZOHS0n3edhuFMzto96HSrS1OiK6iRWX0Il?= =?us-ascii?Q?tQ6AGhrQ1cBvFKoNvNnOBv8vEb27gHnfrknRH2THQT7UyIWTxIeeRe910/E2?= =?us-ascii?Q?rs1MzMQSTKqBdLPukXKLkMjkiVmGxIwja6nQdjOxL5Q1AnzKTolgkYUPT+1z?= =?us-ascii?Q?dDtyKfvRZpkPP+g6JSYBUZCIfuTJ6RNcIZGC09jMX5dB30vhcHSvHxmUL2d1?= =?us-ascii?Q?iPTnAS7Qvkyt0As+5UBO1LwRriNOWFiqpoGGlMqt+ED/YNLBwOe5aDBQaYP3?= =?us-ascii?Q?UoJlD2XqR2PPivdwxnS7DV806zmpbgO2VgLFLMWPVxpep8hnohRaMsLNap7c?= =?us-ascii?Q?c51u10MCiMFShm7L5/Grpgi86BZ9NgHr/um1siOcDfDBZBunJOcdKzlbyQid?= =?us-ascii?Q?XU9CsuuKsZIttjFw09vD81vskHRXsfzdYubYylIZyXC9ZPjdYrnCbEDsi1X5?= =?us-ascii?Q?2vUfabOmsuxCB9xw1lCVRDxzTYvsfZc0vlWui8CyalSFlFmcqzoWsyFEmjYP?= =?us-ascii?Q?EyNbtg98raGO45zQAUulEPB1j2OCl0ZhQz3Kzu9UDU4mxgIEyGwVPwCd5uF4?= =?us-ascii?Q?hxz3TYuD+XSPvj7WBN10dLuZoJ0l5hEly28R+M8yGAiSiI6FNjSSD6TcrnIn?= =?us-ascii?Q?NV4gKC2DQ7kzBpk45X70UkSNa7vB1oJY1OazDmWIUB3g4Ct9CqrRnz/R7GDE?= =?us-ascii?Q?000+TEwaQVjUFzvSVT76w6GYiP/R4HusWicc5I/QmM26mMKjcbwHVJWOL4N3?= =?us-ascii?Q?zHTB+6Vo2hKLeaQLI5r0PQbaplvYOPvlYv3565J8Q+9C1lNGclrXkMUXzPXJ?= =?us-ascii?Q?tec29WxaI8lYQgZdD6HSuRpe8FDIIKCygTqrCFGVZvUqQxM7SsFDYaWSIgrg?= =?us-ascii?Q?CIsX3nSvu4dvhf+cOhhZUmCZM1OAS7eiwgRQl1mqdWRuniZN2RUulE1dMHBA?= =?us-ascii?Q?Huoi6ClRHZyodYPsY+5tvMevmOYTysheW8LQ4FYqm/0kuYsYL3gCEx5IdDoj?= =?us-ascii?Q?c8aTHS6QMiJWjEtJT4eOnJClmCgV419ykordntMEBsd1DVAMRr7i4HIyi8Io?= =?us-ascii?Q?IGs2nlp5l4zi/dU9S5xFJRXwJzq5mxn8tDZ0mAF/GyMp6fg7z/kluS/CPPhT?= =?us-ascii?Q?524AF4vPR2iPjif/04lNgnbJzpZOpxwm+QRLMGHmkpLLnZofUagi0KmXhM7U?= =?us-ascii?Q?2knhRPWSGKm/i685yQvPFgG9yzr3/MF4U7knY+P0un38LsZ7iluu70EnH1kN?= =?us-ascii?Q?1OTCpBJ5BSKx24XX/GFoUbwVzndv+pJxy2tZwdae4Qo2Pt2TrrO+RqkhTbNn?= =?us-ascii?Q?eycgwzlKN8M8K/tdfQAbCdEepEB61gkIhH4T9wDYHgZoagleICsXBqoZiIN9?= =?us-ascii?Q?R1x+ynQAgZgZAY6luKkO0p6UU+XzwrUpJBaVIwVgs4OxASqUqgPdHpUERXvm?= =?us-ascii?Q?UlYQxrn/9s5lucaBcvbm46AwmxnNgvyYRxT3mIMDDd1iwuCyYqH/ShFoRi5b?= =?us-ascii?Q?N0MISUSET3QlXos11XMZ3h6jG92CWVKs/XHV5F1ip8yLitGW6pcuF5EoWpvd?= =?us-ascii?Q?RsfnD147J3JP/jWalup1KX/bB+O30BEOuuhQw0ah?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5beefa60-ada1-4758-cb37-08dcee304cc9 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2024 22:17:19.6663 (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: 7bzjv8ZmZauog1XxP2O6wqBx4XNb8dAN6hV2A+8C8PTorVlUpp+JigYT9cGjl2EcSaRpHxvbsy9j5ehoiiN6EA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6325 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 013E520016 X-Stat-Signature: mybr1r35ynz46rcjpxmn4mbh4ns1x7c1 X-Rspam-User: X-HE-Tag: 1729117033-427491 X-HE-Meta: U2FsdGVkX185lj7QvlQtpfAql2pX96cJuv24wYmR2BukJbRaujxhQ2vqWMBPKAb30zwsfwcVxF9xZFcHnvMpzEyW4p0jUHs+Ie0MgPAg30UDYpPSxsqPqtpN10yMAUk/Sbg1GhiW/LgZ34CzdcpdBdy9mFS1xEhAe1X8j3llgRpXS4IQjx2MAA+xevSY8HJHNiWC3Yxv2fT2oHN37TVrfrNUB8XnACYvrbKTJVuAJ1cZwiKY00VlHbQhiaqAHf4avrzZlx8CaBYWMrSwnTGECvzcpVEdZXpeTTmcEn0oSPEsyY720okHD3pFEHqZLA5Z8RLg8fTG9epf7fOGiJYx/MNUEqGMXyXeBq3u9R6KgVJt2ZsaIqKYG/kZYrga//+U735ueozdrFIWWfog6r3LzGmL4byQmN4Xibz66WIo/qNYTq/R7JqD7NMX0YaLfI6xxZPd0wPOJIrqkpq33NpRN9qnebOYH94/QvIhVl4XI8weOyfTE46pl3mCz/Y8K5sba3OIzuttj6z7qwk2/B+Xs9IFmI1bqEuXt73TUXQFS5G8W6/w2gKSwdy1tGaJg03oJSQq/w/Q7mhAnVR18rP+6hT8eGE81CkcEXhlD8W6EzMEHu4c4Vm1/468UmFZVGRT1LZKkqitW6PbuJnL0nP8zZAUthcLUyAhaFoQr6OUmMcGkFfMO79Kp9yYA7ztjWir5yaagSxIIXA8r6AuDe+ubP6D0ymODiCZ8jMPn0JA8nvSpSeikQ5i65GKvi4457FHZgQGEytnuwLyNce474CELxnHW65FflxUuC71c/tKAQsnjSTL1i5XHFUZa0kR26FWdwe7P+bpGKwq82LU5CZqy/GPgTtQ9CVojsmFUNexg+q0DR5vGCr6DKa3/NMr7s2nsexfO60jNjL5FKU8RUHQwvXoqLel4BpWEmr9zObtrf63z4Gyb/0CD2y7KAZhYaQJZTvKcN4OkZ5aI05VGQQ nRGtJ5rX cB0OJ3xgiMCfZkApr2BPpBVS7B90f1sSyOaV+dyJME27y20+XWdvtfn7BGHkqOCcUG+3SeoVQWreZHxcQLrc2k8VXrv7M3btrxC2x8T3wXngGYlRPDbF6fRV4ph9tW+c4veVHZxP7wGxmzx8CbjCsQ6R4OBistb0xsX6wG8mfhR0Za2nRaoP5yyecceukAOplsQmdUiaGtOegrNlDk0W8AHVp+6sLpSYsYC5I+Avrle0I/bccEmv9oWiTij8dR2LV2PmyovpQwgt8VwvKLfZXioXsYd0yxu8HAiecsC/qpzLnHglY9tApjAmSeenPwLUxBfUp 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: John Hubbard writes: > If a driver tries to call any of the pin_user_pages*(FOLL_LONGTERM) > family of functions, and requests "too many" pages, then the call will > erroneously leave pages pinned. This is visible in user space as an > actual memory leak. > > Repro is trivial: just make enough pin_user_pages(FOLL_LONGTERM) calls > to exhaust memory. > > The root cause of the problem is this sequence, within > __gup_longterm_locked(): > > __get_user_pages_locked() > rc = check_and_migrate_movable_pages() > > ...which gets retried in a loop. The loop error handling is incomplete, > clearly due to a somewhat unusual and complicated tri-state error API. > But anyway, if -ENOMEM, or in fact, any unexpected error is returned > from check_and_migrate_movable_pages(), then __gup_longterm_locked() > happily returns the error, while leaving the pages pinned. > > In the failed case, which is an app that requests (via a device driver) > 30720000000 bytes to be pinned, and then exits, I see this: > > $ grep foll /proc/vmstat > nr_foll_pin_acquired 7502048 > nr_foll_pin_released 2048 > > And after applying this patch, it returns to balanced pins: > > $ grep foll /proc/vmstat > nr_foll_pin_acquired 7502048 > nr_foll_pin_released 7502048 > > Fix this by unpinning the pages that __get_user_pages_locked() has > pinned, in such error cases. > > Fixes: 24a95998e9ba ("mm/gup.c: simplify and fix check_and_migrate_movable_pages() return codes") > Cc: Alistair Popple > Cc: Shigeru Yoshida > Cc: David Hildenbrand > Cc: Jason Gunthorpe > Cc: Minchan Kim > Cc: Pasha Tatashin > Signed-off-by: John Hubbard > --- > mm/gup.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/mm/gup.c b/mm/gup.c > index a82890b46a36..24acf53c8294 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -2492,6 +2492,17 @@ static long __gup_longterm_locked(struct mm_struct *mm, > > /* FOLL_LONGTERM implies FOLL_PIN */ > rc = check_and_migrate_movable_pages(nr_pinned_pages, pages); > + > + /* > + * The __get_user_pages_locked() call happens before we know > + * that whether it's possible to successfully complete the whole > + * operation. To compensate for this, if we get an unexpected > + * error (such as -ENOMEM) then we must unpin everything, before > + * erroring out. > + */ > + if (rc != -EAGAIN && rc != 0) > + unpin_user_pages(pages, nr_pinned_pages); I know this is going to fall out of the loop in the next line but given this is an error handling case it would be nice if this was made explicit here with a break statement. It looks correct to me though so: Reviewed-by: Alistair Popple > + > } while (rc == -EAGAIN); > memalloc_pin_restore(flags); > return rc ? rc : nr_pinned_pages;