From patchwork Tue Feb 4 22:47:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Popple X-Patchwork-Id: 13960032 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 7640FC02193 for ; Tue, 4 Feb 2025 22:48:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E62BC6B008A; Tue, 4 Feb 2025 17:48:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E11726B008C; Tue, 4 Feb 2025 17:48:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C3D816B0092; Tue, 4 Feb 2025 17:48:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id A43716B008A for ; Tue, 4 Feb 2025 17:48:53 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 47EF7A025E for ; Tue, 4 Feb 2025 22:48:53 +0000 (UTC) X-FDA: 83083753746.21.97CDADE Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2076.outbound.protection.outlook.com [40.107.243.76]) by imf25.hostedemail.com (Postfix) with ESMTP id 7F9B7A0006 for ; Tue, 4 Feb 2025 22:48:50 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=iYXWRh0k; spf=pass (imf25.hostedemail.com: domain of apopple@nvidia.com designates 40.107.243.76 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.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=1738709330; 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=xy8qh7i3mZHDo6zytroBAIKc7I21BKCOmZX9uuIf+jc=; b=2YVAjrOc1B+ZyuGLvf+joRDBrWRF492ujG+hTkwFCJAmuwH9M1Y/jrmWi+LPVvM6SUHpGG Tudqo76OPj1ANmk8D9toYcb530r4t/N/5wRG/vUmnrX+ZeaVBx4Q3zCRRRbd0A1xuccnMu PzIE/0UiidfT5EhJnEzrK7Jf+ZPVPZc= ARC-Authentication-Results: i=2; imf25.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=iYXWRh0k; spf=pass (imf25.hostedemail.com: domain of apopple@nvidia.com designates 40.107.243.76 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1738709330; a=rsa-sha256; cv=pass; b=OF/inHvNgJPkbMkCBQkY0tdR8XUD5XJs0lLEq3GVVJsnXZ/Yl9z0I7TAQUHvbT1D72rx/w 1HBUl6aEBEtiSjN8ZiW3UklmHb1c+Y60oj6WhkmQINqj4Ffybn5npN0bHznV9TNIGhZfzq zYI6aZ7P26DOT0wLSJyalXjK9d5Aj3E= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=igbXI7AwUY+/zcXGmse+b6AjzXtTc81D6u7pFVkVD1ZLd92Wh31E7xjoucbYrcOeRKDBjIRePmYza8SZrS1ae03dn4m4lR9BRraXU5Pwdu269S+ZJqB55+vngfKRL/Smn3DJ1Eiy3MopEOSl0zaZVmIEjL8lsOfz0jEgQCBHSIyqWdpNGP2hag12XJuUsp/ZGv5Kwq2SyaE7Gi9J+/TZpLeEPAbVMQ29I+wiirjdeppEiHjnnWbo4XJcnYkWVhCMd8OJqMb0f/soqFbFa3/qXaPok13bI9AC6/K0SxL2P7LY/SrFlBesYiGeSe7gjaUOKb8xeD7CMZyE5aI3Zvuv6A== 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=xy8qh7i3mZHDo6zytroBAIKc7I21BKCOmZX9uuIf+jc=; b=vD52Z/5IQ26a+f4d2F/wlhOpm5tEOcB4BhvzYz2tJYYwbfI6UAAuoSj0pBaEx6UgcXy/8L01wolPoh9Zphj2s4Kfdt11L2gPLmqrUiJfOLCSlE7K6eACgLZmRnr8v2KjpYGaH5gCEGZ19CnBBH6Cu1otXdMMTyfIu+t2H7oQed+dRGWDQVlNnkv+0Tk6+JWiW0Q+p39aIeXG2Kyd1NKUBrIMp1CAl0sQ2gkJWLbcRIukGz0c6O2me9enbHHrAJ31ABSInkSaDC+yLIrVssF4kp7P8K1sxU9KwhTgKaiXQaOPnzmwjDTWiDZH9vaNcTBv6hY5selNJ84TH+OFRKb0kg== 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=xy8qh7i3mZHDo6zytroBAIKc7I21BKCOmZX9uuIf+jc=; b=iYXWRh0kdopltWs0Bmv3QN7bS792gQ8iunuLfKaZm9sJOAmhWpgwEP2KV+PekTVY1J7BRCdH6s0C3TfITJeOfJjv+ro4FwHb1sMZwAWNGzuGRDOpMnodUwA3MT45QIdU1ZqR3LoryXas/ldSu1ByWkST1mCKdUR8P/ZY7ND2+eX4SUJnzxJp89OxKcyeuBZ2VyhrAL/8//i00YqaYee8O/+oyv49kMVHA6sN+uEs38eRjlmMpIBaAVABCD7lWKI07OknIQdj92XjGyE8j2DiaF4Gt9lIgTyIK3NTl+70RKpAZf5AkRxfY3IZc2L9phgSxHrj3+QBwKBs+F88ZeIgXA== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by IA1PR12MB8537.namprd12.prod.outlook.com (2603:10b6:208:453::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.22; Tue, 4 Feb 2025 22:48:46 +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.8398.025; Tue, 4 Feb 2025 22:48:46 +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 v7 02/20] fs/dax: Return unmapped busy pages from dax_layout_busy_page_range() Date: Wed, 5 Feb 2025 09:47:59 +1100 Message-ID: <23432568750f099d32b473f64b7e35f0671d429e.1738709036.git-series.apopple@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: X-ClientProxiedBy: SY5P282CA0147.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:205::6) To DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB7726:EE_|IA1PR12MB8537:EE_ X-MS-Office365-Filtering-Correlation-Id: 2bb8d060-8c54-4588-b70d-08dd456e150e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: mOEyr54a6D5XFS+w9L7gjCe4u+hot5lR8g5eit9F+Xh0+AYugKYGkjy1Qq55ucL1HR+3+ROEDZECehic4Yq69XyDwRaQyUFN/PMP6KbmpSJt4p53z/8eBfzqV8xR/d6sI1Lt78H7xn6j5mfzcF0l81An6cMLnyWtQp9eRV2xBwQfDyTqTIVU49oZqCReK5n3v11oonv1wqEp8iYSnjGJeh4Q4DWaejw/nqTC20kK/4w2CCD14P+h311mvNkCf/IUhKrogZvkt2x0NCkqLPQNPVrh4CpwKg9DRoHEj1I0t95nDBRAoFLP0VWaugKXXb2Qo1afjzLzXjVY+opaAmhKFRUusV6hOhMwMWYjvx3KOEp90ZyECXUCJgPQeT7NfXDoJw27DtCL6lIETovEugG0W6X9+lqP7/KjV2L2jj6gKRFuy9HP6gm/XhYQG78DAdz1lihJaPPEUr3ydFZlSm/ccSmhJUB3gv5Y0gA81WeDVQqRjf4gVfBxQY835iHTBlrPgyQZ76zaLII+IkzgZJXRk8ZF7JLUX71oYuyFPmEYVe7xFoc6hbwW8coKNtOGCNjsKrJJlnGekxqyKhEHI2vULEpjsCaKy8NwJVt2FdJXd33ryW8bjFvo9pBepbTTUNkRgnx/KSOUHRWKN/UqC+ZdcE0T/9n2CaL+R5oLpDPJjsTizGkj/O2ya0tJoeNmJfDnlUc/zznvrDGH5Acrwsov1yteaWvDke5An0H1BAfwto6x60vvloEDsqfjkLrJLOa3NhfkDClDI/0VU9TIOvD/1kxr0XwNTGQsjIwdC95HZ5TS0cXxWzUsvnwjxJPXNVTPxVbmOefM+0rlBF+NsDxsx40B3bUKRjZzqVgQ0AUa0kmnxv0psOBIRTRx6smibnd8//N8K+xJSnweyBPMMb4O+0r0FUUaLW+ur29EYlJ0VNy8FerN8o4eY9DscAODXw9mLzwTlzkxJwrttWxygrnEKqt578jBYM7LqV4NotMYCHy1+YrEctcyNh8KH9hQUGmkZF6it5PnAZuyYpFyDfvyk/Lf2Ao1J5HpgiG1WLeDMNwNxJsaC3E5Mogtl9yfUrvBcZkrp6dn2je/+EP4PFLl0MKyo7PUsjUxmVNKi808siOkpeIpqnfQYNWN+aU8r7VuXckDwH/BJRgbVvl/IWDQJRM4TaBCwi6cAJjldygyRweJXv7msLoL3+L2ncBkHtw9RmKFYIGUti8dzk+q+Rigm8h8mrOUnVdJnZx/x7ZFB/NDHf9TEVbQNjnFdKs3QqqXyiAypQ3IVRIpcLP9tCURI7fjtxlNqmOhi5JQwZY1iH6keH1X5M3+seMuqq8w8IvBwdijkJbB1bqq0Gxfpqg+5grm/nksf8rFtf6GUF4Aeh2mZc8haYA5nqvjsAGFOF/6 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)(366016)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dILrTOIXuKFcGczDMogueiHpyrOzJeidqVuHq5LcVvBbz+M0BmJOktpy0IfQ10M6MoBzYW7Q+7qYu8rDOYXBMeid+OXh9EHRHLpvtsS2j2xU3tJiom/GkDR/jMwzH3PDOwed7Ksa/zdAvN4gcUvM6a/Eqhap1od84IjJuheJVEMzGYaBrnxJU/oN83a2gDu7Vi4/qxIW0gdfOk09Gn6noX5Ht69JqLyxTnanDF8bqqqgRPerk7MWOqz3lQ91waSs8hnrJe/i+qJEWVsDlhiHCwh03B1eAjeaN/Mgge3oX9SGKNaTet/6UaXH6M/mpRCQYpHgp2w9+7zNBx5iYWEncXfKMlnjpDW+TkwynDxOQ7Uj7X6By8sAm1WQ6dOX649IQRV20lGJMZrP6YpIV30UDPrLDppHLJ73JHi/f+CoRCEJ9OJO5eOuuf2EL92DY6CYBbp5tvZTFUc2MpxuaK1VOQLx46EoUJZW+SwKmFry81ZPYtBcriXfWJodo6TB3NzsFG6VMuUeme4qeF7raco7p9nObIbq1B8b2QhKeicZOxvI8DBa2tteb580J0oGyIt898MZMcIQGM4lJFSVb3gF6/JpCg9KnaD280hLOIMQSoaHxR+Y7iPR8R/ltECgb3pWRJOm/98WfvfOHxzJnnjAX7/6Iq9F1qPfeWF2776xWnWxtXmijam0npGETBYj6hOwyHezcxYSE3kq9gIcxkazylKMCbnw3IaqKgzhS6ERLufKbyjyp81e/R8EWFiPJouXV/5RckJ/m2OHKtN/gu3HIFCZIdAzPvAi00o7540hb1TOAFmWjrZVm7k5SAbXwVZFbpalaz0YfLRncWoiLCCNF8j/X1XyF6aA/tGH4D2t/CZiZMw4d/b/RAdu5wNTO3sda8TCk7H85OMOCdI80O1VqItME7QXDRl3HwLxwI+GYy2zG18T9vmCiQqPlAyou1nhz/a8emu+qZ8KIN3bULbRHHT0FpYmSc8KmwT4QfaeEM41yRHnYfBvXru4uXICF4vadSBTd45/wj6BKjHmSLl2QELePi3M3oOZr26zlQqcANhWGqEn6Uc41AJuhL5NcEepHptHwKJK4Ad3mST4Q4C5IQtSI9hPEFGw5DqW1gnw7YGHWlIQVSgt1WnzKaV2tzb7mI1qcIaMKS0Vuj3XdOQVHUcRn9ob2Y6sB/sQwtKD5a58622c51pJAXRb4Dsrj+vSCsUJCg4/xZAECKm8K+g81vI1nL83UgrwiCWZ84qw4nk1noeI9V405AAsNjCBSp8N7nk67kstdBOKq19MGkfiNJkAY+Q8zS9RCx+xOSn4wXZICrUYIZZdIReqCnqnY447H99THs3/xgHJaIKfw0dgTPwNzt78KCVgRDGhStuvcHCNoJy1HPEnYFQ/G3mFSMHwvyRuPpPaEV/JZnfyTDk+Fd4Az7jw+S7j6fHUdurpeOqREpLla7fn54yKlwkwsvR0X01v0ThADepxsx0eLHl828zhTE7CopnuXwdmGDgzK5T0PI6oFZc/hzQ0gRLZ0bFGPh28cy7Xz9ySMuWZhjjuj9GQjwZfutkUBjEoGrHeILkIAfbU0SWdrRGsrhmql39n X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2bb8d060-8c54-4588-b70d-08dd456e150e X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 22:48:45.9629 (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: wUdy80ipMeX4mocuzkhDeTzlIC1WDKcecGvDuTnnC2wGs8E7VXFzZPSmSscx8LdtzQWSoLKtH6Hbs2t8ymD4lA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB8537 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 7F9B7A0006 X-Stat-Signature: ha63kaxbtxzck94s3gp78qp6qoxnk8q8 X-HE-Tag: 1738709330-6792 X-HE-Meta: U2FsdGVkX18koZCuUNwUvf2bM84ohiGUzArLkx9pcbf37u9etMzLiNF13Ha6/p/JVqKB6y/veZ2jg0cqYw8Fka6crmrrspHQ08/GApsX19Yb2sqcXv07sa0dOww4bHKr4cqpjbRmqolgB/wH9FAHs/idlbgmxU6ppy6gV2flw7GNUAaNAlP0u14DffVy0p5Grski9XpFuhwdnHEXDhq7+jycfaOtwK8GQnYvuVUIgSBwgHoRPgLJdDcxehwFWIGypZ5nBdy2OC607K5TltXqySgoLNFb8E6OvlUJ8IEkr429aBwzwGCbwhXCIno+i8L4BAHt/Wq+vkN9YtysCMANr8nHBG5jx6tDfwfzrY50YTA/4HMCmKuZEoA8bHKjkVkdyoirP3JYzY/r62bhIiWXSBgHGvON/909aiCtuiLyIUh62F9/pJJtdlSCHPQXfX12JBEtNTWqaXpqRuTWPdLOvm6couOISiTX6XJGGdhOojomQCA+boPasc7HjomeM5ZlPKOEIerlFw1TJrYApf5NWbiRREnT2AdQjMaPtSUSr0kK+j/0W5ndtGFUyuACheEb8JmJ8eEqEfi7x2UC91QuiJtyUbOvNUd8hRXMjll1l4tTwnLu1IvHiVuSa1+KyxSS2Cv0i+5sV/BrRazr5k0TjhnX2nlNV8fjA1CN4DTJR5+ZfDTfQe2JipaHQAAzkc4MX5TUUhUQJMEuybfgoa3YVhN7HLRCW2kYMaLjbp26mlpnqhXtPhVGhiRFe0pqUbqWhPBqHOIz/mlWRo4MzqOa2MN0LHBnXIE/ILwj+nvw+dNmFgW9RUmxzi4atG6ddqMjxpefbZMQhszPXjeDHlG4vqN7GAogkouenxW4N5CUlzvexdBccLrMm1Ig9gbaO7kkc6qygvnzjLwVFOigxhUo3sr95z68cqcJyVRruCLZpRWEBKQm7KqLRuhrvZrONR8EVme/NZpotm0T0cHZZbO 2LLXH1on JC2PjCHsgY/RBdlKWfyqbSqbmTkXjiJRFCkzVSnmBrkPvRn9xw9rkW61pGaYVQXCmmCME8XNBLzUgrRAkyrLjgDg4Z5DJ8L4V8qAog3HXPVXt2CDjjUlrPb3YjNaYMvuChbxLu43sVFSyN/nlDiBcFtUO8aBVY1lSGyDBNyaCPRGKnF3CNz5TxqJikpMVDoDjKBcM+pDVTR746R/grKuoMOpIoNcd5O5metgM1H65s7FbEZwtZte4X3KliFZGGE+ON5lWX7ZtXQpsuFlU15+3N94r/Aer/1vtzfu07IbeYDUGqo8tQ0JVNjZVod1wx8g7K2+ILvhPeWtAWEuUJfQbDaMKIpkCcokCUyIMMrP7CoAhb34al9s91eyXDwustWPFjNGvpTzHCTjqw12r6WZTClofR1G8Up6lpkgJ55/Vv7TT3fxEkJnDcl3a6i7hYcxx9WhS85L5Ts1d7Fa5xFcK92LmKOJE0J+VbigxkZwYJ+7L6MQ= 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: dax_layout_busy_page_range() is used by file systems to scan the DAX page-cache to unmap mapping pages from user-space and to determine if any pages in the given range are busy, either due to ongoing DMA or other get_user_pages() usage. Currently it checks to see the file mapping is mapped into user-space with mapping_mapped() and returns early if not, skipping the check for DMA busy pages. This is wrong as pages may still be undergoing DMA access even if they have subsequently been unmapped from user-space. Fix this by dropping the check for mapping_mapped(). Signed-off-by: Alistair Popple Suggested-by: Dan Williams Reviewed-by: Dan Williams Acked-by: Balbir Singh --- fs/dax.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/dax.c b/fs/dax.c index 21b4740..5133568 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -690,7 +690,7 @@ struct page *dax_layout_busy_page_range(struct address_space *mapping, if (IS_ENABLED(CONFIG_FS_DAX_LIMITED)) return NULL; - if (!dax_mapping(mapping) || !mapping_mapped(mapping)) + if (!dax_mapping(mapping)) return NULL; /* If end == LLONG_MAX, all pages from start to till end of file */