From patchwork Tue Feb 18 03:55:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Popple X-Patchwork-Id: 13978899 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 F21A9C02198 for ; Tue, 18 Feb 2025 03:56:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8C0542800C4; Mon, 17 Feb 2025 22:56:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8714A2800BF; Mon, 17 Feb 2025 22:56:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 69CFE2800C4; Mon, 17 Feb 2025 22:56:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 4BED42800BF for ; Mon, 17 Feb 2025 22:56:32 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id DAA601A18F0 for ; Tue, 18 Feb 2025 03:56:31 +0000 (UTC) X-FDA: 83131703382.18.BD42949 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2057.outbound.protection.outlook.com [40.107.223.57]) by imf10.hostedemail.com (Postfix) with ESMTP id 1A8F7C0005 for ; Tue, 18 Feb 2025 03:56:28 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=qRwSeiW1; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf10.hostedemail.com: domain of apopple@nvidia.com designates 40.107.223.57 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=1739850989; 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=9tvVmUd8MTa61zBY6TluXmKwkBsI5wuLIycCgCcsc2Q=; b=4AWCR3x4ht5406N5g7cS8/zfLkjldSRGNWKqaRtW6EasoTyo7wb645aPo98ZRxXXDZx9Q+ qWT+ffWMMcBuwZAxsHYGHgT+gdSxvGvz7XgZsVkP2VMAmS3J5MTzeq/c3Xik+rdh6nbfBs QxYrUpaUBrSb1KT1MW110fTLYD5g5vU= ARC-Authentication-Results: i=2; imf10.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=qRwSeiW1; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf10.hostedemail.com: domain of apopple@nvidia.com designates 40.107.223.57 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1739850989; a=rsa-sha256; cv=pass; b=tnKXXORFIygibcWFmDxsr8tQrYZuJcH3iU7JBENDh8aPQiCNO1JaW41kO40TQIx6guPvvD 7O09PglNaNT9Nyy+ZbCMaeHnrUHfAALoPQH2OI+k0pAL5Dl6NVXUTsACHUfjf3EZsZIyJY elX6W4IqFOgHqhia7ZTiC/wjocIfD14= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j6tXNo1JAz2ABbsAJ7s6uxWpWvPaHsSLLeaVZk7JVE1M9EJsk1YtYkdHHNpE1B3KHWO6Vvsov8PbTuWVfeHfWDDGIwvX9f0F06Jjrzq5kVNrnMDdUVI1gOiGG4S1nwRNlcGHb9IJKmMq+uT0EsRXNtOQL0eDinqzK3M28WdH4baRa88vosaiPU1iCNmwYjzWAMCTSdPgOjz+ecUhGZ/Dbf2eU9h+De7S7WaW8r5HNpaWjU4rdE22bW6yDLQ+9ah9N94VxI83wvCporh7BsEiV+lQwxWe0ifqWse+HVotj1h+WkLXf1WNNb3Wfi/q+fDbDsJrWpSEWu8Y7ckKL5BZHQ== 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=9tvVmUd8MTa61zBY6TluXmKwkBsI5wuLIycCgCcsc2Q=; b=k8lQgavUv5pFUoOAvLxw348bp8wPj68ZPLqqQwZeJkCOIYdap5Kwdgv7qfF1eKxmWCUkiUg1+48t+E2hlvsFR127CeWP0EjFjWjC4XE1X0G3R3sRdJ2yJaxaiTtJSl6emNcToKOf7rEjHWOCEudQUr4D/xI+eg/MaiIj+wNU/eJNRFvM0JNN/fLcFhY3gK1MTCnZFFSTIGL4fcrY9zBrNfEhbh7Eyg48zQEa0E+FAkVkJoT6a3vTthjL0w3YHiV5M5h9yBSCPacV3HINKaU1sNISDXsOG2qRF1QTBP3YuoHrlAI/ycyRLxY1+Oo5IC44K+KLmjHbPDI6CGiK23tqpQ== 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=9tvVmUd8MTa61zBY6TluXmKwkBsI5wuLIycCgCcsc2Q=; b=qRwSeiW1hQQbWdP5e76p3eybbckwAjsqbnSwMhmvrP+BNbTAoCsG+P7btnZ3Q+Ex1SOle+KMTbv0xWOLVDTQljBSPmaY6vSOyfXUjNSAwH22sCy3V5SKYo69YP338064AfI4VNlIaJtuIBSU1wH6NYRQSOG5V/ReaNx4hHBN3a191QR21Cnw3AAlkM7eXPft26dzkIaRHvNJEflyTw9QvCNkdMh5skltKeQbNZwvxgrw7Kq/s8Pn730wmSSYCRxmKok0H2yoCBMslvSHGJnbmUoDqHrvsFOw5HygoRCjMedlwwfH/3EneFBzBPPfXu/J6OCvPAyP0LC7AshgTua86A== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by CH3PR12MB7593.namprd12.prod.outlook.com (2603:10b6:610:141::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.19; Tue, 18 Feb 2025 03:56: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.8445.017; Tue, 18 Feb 2025 03:56: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 v8 07/20] fs/dax: Ensure all pages are idle prior to filesystem unmount Date: Tue, 18 Feb 2025 14:55:23 +1100 Message-ID: <2d3cf575bbd095084993154be2f0aa7442e5cd28.1739850794.git-series.apopple@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: X-ClientProxiedBy: SY6PR01CA0140.ausprd01.prod.outlook.com (2603:10c6:10:1b9::15) To DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB7726:EE_|CH3PR12MB7593:EE_ X-MS-Office365-Filtering-Correlation-Id: 9347dcfc-8b9a-4d99-c5df-08dd4fd03729 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: EjpSiqSrY6xJe6K6tKhAihGyRZm2LPyogubHX9MBm2S8idt6bu87pZvcrY40ZClQ4CYR+xkB7WHzb+Oj5Eyw9RXrdtcrZe642o6YwkpZsoej7N3sj+BUF9rAnfWZKfR2URmxdqBZ09ixE7qkDjZ27grGzdlBCDj0cG/dj2P+Ny/Uu0vEf8KV4WYm/iktwBX229yaMC/gddU/3sHCepqj3FFWmGQ9fASCfwOhcrg1EcWMgItPrtid2Z/98onysv51OZM/Xc2e4ethzSJvtJQLwAum4zxVqkx1E+OX6kpWUOVc0fToxTT3vIYaF4DtDYQ1Ivbm2OeGIwK6o2Atikx9m4C286Mr4Nclikbi//kvQCGt2lcw13iNqOahXZXEZbjROzk9Puc01PoBoxUzcpXPpIeiRYZqUyYxxwyMTdRcmsqWXUA+HBX3Q7uuekKu/+gF/T1uyWi4GpfzgTyc4ZqYHbTofrXVhryFl8kUcfZmzDKxHQ/2w5q4146AGTCphCsJvH0s758WasGQSNviA52oQAVVm9nJp7AXGJoz+lz+etQl7RnZyxG9F25t+X2MCX6tBTU778eQJArPW7OaVkZ9ae/+Al8ApXM1flNAeSA1oZaT6p3MtW2p+DgkTty6aw3LVw3D+u+nel0syua/f4P6dF2wSC+RKBemw5sQ+ltbTkgDZzDzNWI73q/xjlj9u3TKhTWj4QrOHU8XYLLbLGX7dFe7WSJXW9pnu8t5vtyTFTNNcOZQZgoD5PQqydKWoZ2i8EBJuzxP0UgPMU6MOEC2N/cCM8TtvCdDQzGWRTYq9NvlQdCHpG75RrEZGGcXxxKc5RUCQoGEfP4bfButw3Wp+og7wZEqtq/30IDcVlYsnQQONXWuRmH6IAcTPUG2fvYLivzqJ8LOHCpmJY5S1BcJDF7c8iiCBq/hh4Lp6v+sqz4msbce16NCx5afHAH0QCwzpGlpdGlj/PvDTrB6hu6zozq+X2IXRyvTq7NyIh48D3wYw3qJs0Lc2HYX3rOdte5ONTDkVsTO1KlDBpKVdd/uhYbGWeR/givpAcRAkDiAS3l3BU06BVVnEK2arwmA7XPQM0fOilV7RCvXoaFg++tYgyFBAz1VbjBgBsvYj7DhkbInIiYaZwX++9mjMGYMUn6Jf7Q/1+3UgqoypbjZdJikKinAJDmv6nRpKdglwU+X64ZOct1avVLFuBpkg+44ZTcemtfgNlpIzTHnSx6niGG2q1DfTD/ouvWJw9SWRkHMoRXIpSmohFXhm3lC6jrPhOnObyqb6h3zG/0SSJO9rLfeAIi9JrGO+9Bf1sScLx+VggP8weWIpiVwVlEmBHFcVnfqp05Z6my1boZmQvPGeipESZPtAhHW1Tm2L4Y9zqGpg42JfSoNjjKFOFKX2ZAQ0t21 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)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2Z4gVizkErRuq+LLVsdgVduoPVwW69hz/Enj0UxQ/RsFJy7M4mWCnuLe/LUB5hFOIaqYKsrgNfuO6LGzEL97aMPna9bTu6pOuhbvyBh94itJTBjJmgHDo3jQ1C0OZc02U8mFV/kwWygjDos3tI3AFtNNyJePWLiozQSo7PkHKwlbpNZuvbgD6t18idPqFvZzPAkXXY0dANT/lyrJbqsT9tgE7VdxhDMtIxe+h0a++oMtrLjN5yKrIWeQBZBRFT48C2tQq8dbupsoxsIULm1UEqhwdbUWQV66Tkr06zyBGCZsky2X3at0X6XQfiO70Puvdf0T3+30UkH+LV2eJzq6NnpE+Cj/Xrbazk2MKrV+Jo+BqtHs80YaufA9j/JYyS1n1EMlRsJCFQodb6MvADaebhH7qET6eyk15iZOEVX98q3oSbof+zsOUmQJjp+WtSRKZ2XH5uwJSi2hew/uZOTDbImnHXgT3TNLK0LJDv+haqbL57LhdPiiMK7mETyc6m9JYMdp8rQYvjwa2LqpoWH9LvgM4wdWkrRRfjLluPzZMieEG6XF6F9c6VXufn1kjlbEsyfSq54aL6xEjwtkLnYcOZOHUgLrFm2QwNxejZX96/VstL3X+2hj/xAiYrrltwYD/HnA+wC/q6WYGRLOG+6wOG37eDknzfCtLOhTbg2930vLORdZcM17m5Ul9oLHZ8SNk3i6qv2UWbnR70s+pwGMZejUBRWj3R5Y0SlHW/srsGM6a1iuNtM780mM9cplH+xvhNkRIR1SyVOW/mGMjzHkuFpYsmKJcP2coCRJj03Yf8BcMMAtwN/oPA8jbjrel9v+UWh+iuNGZ9NMqg4l0iusparbbg9GDDibqC4erpzuPUyZ0o/UFYZDvCJuXrsS/Z0RgFjRT/7T/5KcPX2MJbpGTbhDLVkFqzYKUyEGXowW4FhCH0nd8ZWLfKsKX5v5NlxzFDxNVOmwDzbkyKwjIOUnixYIHwDpBTJcx8g1c6vqS6tv6wJMccd4pr99IKDKnnfE6JF0vRp4sWH8YKfBokEj4oQ9+j1SB/38FXo35gNZYU+3JKCVo2LtNfYRgfeKnfBvcRoX9NsLtswlHgtNAx6N64aVYNcWZHArT/QnBXsAH2KIcGOg/yTFIxNQJpUqnTGe0S6FDUpacP0h1qKe6WdrF2a6GzXJyBkJErlBi9lnJNH3DOYBFzKc31S9QrWTb5PEs5+9H0GCKucZjOA+PTWmdu8TiT/4HSvUatGbVha/Xnf7gM0EgWD4lrdG5qGewZcnYLyfZDxED8vIMVlVtKJoELuJ/T6vq5DPasj6AqkmzXlipAo+YwWfqO+xpeVjUFXVwHNqzgmZfpQ4xzCupQyCfULD8ySzsEfvy9WDbgf08dYjOUS9Q4e+byvYEH0AEjJW0PSitlVOdVaoLgt3Z1ENctyVyM6cILF5ByUxbeq7rA+D1XskUkMc35KFKj3Em/PYdBzlAIxnLCuWroNGTf9uKJ5eNIlUuO28rweOkSYuBDK0ZRe/hfaRpVbIvKP+mPPPPmmQZw8/NaIymtnXqXMViL8fUjbRbhlBXBLW7qUDVN5ipaXdFhKelB/zn34z264N X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9347dcfc-8b9a-4d99-c5df-08dd4fd03729 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2025 03:56:25.6611 (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: 3nn7A9KsOFW+Y9PY1nQ8+q0G9YjrF9F9NA4bRcNhDmCGtObJkGeru2hVuhPHl2C0BnnaYgxXtBwXhVzemlV1BQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB7593 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 1A8F7C0005 X-Stat-Signature: c7gonapnuimr58pdbpzjwyqdjyiy6sio X-Rspam-User: X-HE-Tag: 1739850988-805029 X-HE-Meta: U2FsdGVkX1+gzZ4u/ne40Q0WRKO/PL4WgIJBZUx9vzqZcVFvHSl6IG+1vMxABmeBnk5Lru6k61Ukq2ZnRAB15EBFbwF3zHtypG45OGC9ehQjroHIfuqFBvZ9vL/P1xryzvbxTTQg/rcnLUsp6ughIt2YfRFx8Tl4a0W9JdUYiM+bJ69whrJNxP0mwqGNOzpAGpT/MqGxzCfJKimBvm9Zc45ZuD/70twLDRkCBHyUC2n00uUZEJB5bpblM1eD6OfCZRh+onaHAkC9fTZOZjgGgzUjr8nD1OFlHU+0W/i6TnRsNcibtYbVi2P8JmzmxtZHof7HTpoSSq8rLJoL8UoXePBkjugl7L8Qd28WKSJab9qTp6qO//ao8LyeBelw2ZzD/ZQ8VB8/7JlvR/pXXTz9lBLyaPH3UxYAtl64Vyn5jVje9t7NrxzX0bbNcXes18k7iiIsiFXVSXsgC2Fr10ZWufzuFHIZVVwxBqUtijM1FlGfeK/eQPPGPd4O/hlgxmkpErW4Cniy15SWVfUGCH5l6cEq1vhzR0r9lXUrl5o4XOQ5c5aqMV7kD6Xh94My0K8+LmcNUN1RCmvVwvQN4zqMU1I2PgRPFlYdxfenTOZx04LACdu6pbuNjjZnpeSOVDxr0iFvcKrVIBznsj5c4m7JSIZNaLYW+h4bgHLh6aJjGmHHK+VtE9wWTWUAW21t7LKUoIFA7WSJRz0WEn2k+E73d2iCbmrbJhwbMnqemkkhsLwD0WgyAALOopNQ1Vf8chEcUsI76cdKzKmky/O94StWZIdOGt4R3/kcIfyhlLD0+VYhVEvCtxrvh494rC9zNNr/NnrqLHPSv90CuhIzKKqbQLQsj7dvyy4kMfUftBoOFkE5PQFLuF+F+Sgy1BWTfihusq8Lrao8zNLao06Wh8d6f7INtTlP60cc0XLZsd2CtdaNs7/b4LpgdrFsgv4W+VBTuR+C9wpHqNqPlmdEv5x UZyNtbO0 VfFV49GsAgnvAv9mPsBz4bovmS4WozshbXzeYTJRGh9CKp5jPNCrMYwA9EWUJrxySOj833gaRu3MrHxlztXW7gRQS7vcmsNugY1eTbsZYwR3H1Evythp0ByKaEfMBcm57d1XkymcCNPK7PX+S5phrmovDjw3U1gL28XlzI8FSQUuWe6ijC0S7fRa8suh1aoc9V6F5Ylan0F8FZNT1E/9cEVl8EGlUyW8bhFHgu+P9tkt7Pofl2ZPa6CEbo6XjUI/Rpk7T4GBjQLZYLulLuJrGry9mJPMczK9Wp3rmV+EQMNIRaAbWNMdKHojwvocB77uUfK9se8iaKVPmUuB5DZas+xHu+fDDc6wnB/frDLBuUispPh1lLKf2RWGPezJSSU/9OZ/9vY45oKu6EhsnjQursKBVPmK1JpGkwZHo 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: File systems call dax_break_mapping() prior to reallocating file system blocks to ensure the page is not undergoing any DMA or other accesses. Generally this is needed when a file is truncated to ensure that if a block is reallocated nothing is writing to it. However filesystems currently don't call this when an FS DAX inode is evicted. This can cause problems when the file system is unmounted as a page can continue to be under going DMA or other remote access after unmount. This means if the file system is remounted any truncate or other operation which requires the underlying file system block to be freed will not wait for the remote access to complete. Therefore a busy block may be reallocated to a new file leading to corruption. Signed-off-by: Alistair Popple --- Changes for v7: - Don't take locks during inode eviction as suggested by Darrick and therefore remove the callback for dax_break_mapping_uninterruptible(). - Use common definition of dax_page_is_idle(). - Fixed smatch suggestion in dax_break_mapping_uninterruptible(). - Rename dax_break_mapping_uninterruptible() to dax_break_layout_final() as suggested by Dan. Changes for v5: - Don't wait for pages to be idle in non-DAX mappings --- fs/dax.c | 27 +++++++++++++++++++++++++++ fs/ext4/inode.c | 2 ++ fs/xfs/xfs_super.c | 12 ++++++++++++ include/linux/dax.h | 5 +++++ 4 files changed, 46 insertions(+) diff --git a/fs/dax.c b/fs/dax.c index 14fbe51..bc538ba 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -884,6 +884,13 @@ static int wait_page_idle(struct page *page, TASK_INTERRUPTIBLE, 0, 0, cb(inode)); } +static void wait_page_idle_uninterruptible(struct page *page, + struct inode *inode) +{ + ___wait_var_event(page, dax_page_is_idle(page), + TASK_UNINTERRUPTIBLE, 0, 0, schedule()); +} + /* * Unmaps the inode and waits for any DMA to complete prior to deleting the * DAX mapping entries for the range. @@ -919,6 +926,26 @@ int dax_break_layout(struct inode *inode, loff_t start, loff_t end, } EXPORT_SYMBOL_GPL(dax_break_layout); +void dax_break_layout_final(struct inode *inode) +{ + struct page *page; + + if (!dax_mapping(inode->i_mapping)) + return; + + do { + page = dax_layout_busy_page_range(inode->i_mapping, 0, + LLONG_MAX); + if (!page) + break; + + wait_page_idle_uninterruptible(page, inode); + } while (true); + + dax_delete_mapping_range(inode->i_mapping, 0, LLONG_MAX); +} +EXPORT_SYMBOL_GPL(dax_break_layout_final); + /* * Invalidate DAX entry if it is clean. */ diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 2342bac..3cc8da6 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -181,6 +181,8 @@ void ext4_evict_inode(struct inode *inode) trace_ext4_evict_inode(inode); + dax_break_layout_final(inode); + if (EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL) ext4_evict_ea_inode(inode); if (inode->i_nlink) { diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index d92d7a0..22abe0e 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -751,6 +751,17 @@ xfs_fs_drop_inode( return generic_drop_inode(inode); } +STATIC void +xfs_fs_evict_inode( + struct inode *inode) +{ + if (IS_DAX(inode)) + dax_break_layout_final(inode); + + truncate_inode_pages_final(&inode->i_data); + clear_inode(inode); +} + static void xfs_mount_free( struct xfs_mount *mp) @@ -1215,6 +1226,7 @@ static const struct super_operations xfs_super_operations = { .destroy_inode = xfs_fs_destroy_inode, .dirty_inode = xfs_fs_dirty_inode, .drop_inode = xfs_fs_drop_inode, + .evict_inode = xfs_fs_evict_inode, .put_super = xfs_fs_put_super, .sync_fs = xfs_fs_sync_fs, .freeze_fs = xfs_fs_freeze, diff --git a/include/linux/dax.h b/include/linux/dax.h index 2fbb262..2333c30 100644 --- a/include/linux/dax.h +++ b/include/linux/dax.h @@ -232,6 +232,10 @@ static inline int __must_check dax_break_layout(struct inode *inode, { return 0; } + +static inline void dax_break_layout_final(struct inode *inode) +{ +} #endif bool dax_alive(struct dax_device *dax_dev); @@ -266,6 +270,7 @@ static inline int __must_check dax_break_layout_inode(struct inode *inode, { return dax_break_layout(inode, 0, LLONG_MAX, cb); } +void dax_break_layout_final(struct inode *inode); int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff, struct inode *dest, loff_t destoff, loff_t len, bool *is_same,