From patchwork Wed Aug 9 04:34:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hugh Dickins X-Patchwork-Id: 13347422 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 0A0CFC04A94 for ; Wed, 9 Aug 2023 04:35:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8DA746B0071; Wed, 9 Aug 2023 00:35:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 889FB6B0074; Wed, 9 Aug 2023 00:35:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 752388D0002; Wed, 9 Aug 2023 00:35:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 661E96B0071 for ; Wed, 9 Aug 2023 00:35:00 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3E5281A049D for ; Wed, 9 Aug 2023 04:35:00 +0000 (UTC) X-FDA: 81103301160.28.5220F2C Received: from mail-yb1-f178.google.com (mail-yb1-f178.google.com [209.85.219.178]) by imf14.hostedemail.com (Postfix) with ESMTP id 5A757100019 for ; Wed, 9 Aug 2023 04:34:58 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=vAzcYUsb; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of hughd@google.com designates 209.85.219.178 as permitted sender) smtp.mailfrom=hughd@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691555698; 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=fTcwtqovj/n/LD3Icai5ShB8o9Zi6NmsgjgaBMH67ps=; b=wHueWa4sXcDazgCMjm72/ptoyjS3h9rFzRBhpj/t+zOT8i5ceOB8m50eP+90LTxY/VRaX0 KedYuwYjzrFlqC4Lcnnusev8QkTlUk1zbJScSpWzlx562a3AgxZBa53BoyVsozBzPPl/ki CrvOdCN1vFGjyI9UJAmgbklPhezyzwc= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=vAzcYUsb; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of hughd@google.com designates 209.85.219.178 as permitted sender) smtp.mailfrom=hughd@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691555698; a=rsa-sha256; cv=none; b=qNoMjXGYNcMt3XR2bL2LplWOHIXj/eQEAWaQsC1uwb9hc8Os1gwyv4/yrftzMztvPsV9Wy JO9+eJDee2yElRShS54DaQu29LfzGT46JJsio3xVdkyDR/6mR7i67w0WRLGpIX7t4P+OJK BOkivvIg2TfJq6q+JpHS5+Rngwa0N2I= Received: by mail-yb1-f178.google.com with SMTP id 3f1490d57ef6-d593a63e249so1891090276.3 for ; Tue, 08 Aug 2023 21:34:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1691555697; x=1692160497; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:from:to:cc:subject:date:message-id:reply-to; bh=fTcwtqovj/n/LD3Icai5ShB8o9Zi6NmsgjgaBMH67ps=; b=vAzcYUsbMguHrchC9hn1CB5osMk/5YiGsgK2RYGkiVTG6y4+Y3oMgkq6hSzJnCK0io 3Ip0koO49LOYhVedkmqMZB+RDZkLYAOLd2zPtQ4qwtftMWaGwkQQudBVKheQz+SLQaal ZsXqL1XPhXf09s7c2NmiwIIKjqFMqYoaOqVBJXWEdX/pg2dDzHCG+bKLqIJA6U7Q3MVN 36liji+AHJWyLgr5x93GFh/6fl9PwkPArG8a5guP4Pz0Xkfg5yptXlr6sZyAaDLJECM7 l0E2bsZWY4rLln97xOdUzijmTFxcPPrakoc/PcuKyj0ZZysgXgTO+H1G4WoQDiTqJQCF SG4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691555697; x=1692160497; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fTcwtqovj/n/LD3Icai5ShB8o9Zi6NmsgjgaBMH67ps=; b=O8uon5m3Sye2Wf+Fx0MNkIIHVewcO5fiGgGjxcVHsS+Ay/GwPcrWONyzoxwHYZrwJV xI2gSI2oepG61ld8ywlaCCeKueoixgG1Zfr23U8ETM+td3U8svdNQHgOy0Amjo08isxG 0i9K8NMCUo9bV1xkO6qlgNqdglO3zwHS/E0r6/UUR8aqDyrobntniTnIeWqDRzFrts+s Ie9jgSf8zzCchfe/LduMvZ98v5cVTcwlDCBhf8lpp0lBcuSfcITl37PfR96RhD1UEN+2 3v3Hcv5ngkQyRetGaK0l274OgvKvfegubskNfLHIhna6z6HZqNeEbBlTBIH5smCgpZUJ Gm+A== X-Gm-Message-State: AOJu0Yz7GDr7v0jj4x+nnLuSV/D9xOGKIwNX0RMneCVrsNJdz25H/d+r wurtyJ8i+LKvbP7VNRhYPJNqJQ== X-Google-Smtp-Source: AGHT+IHKKV4hQ5vytluAdPVMcaWjO0NzAaMwo9dYu1hyneZrdnCvcm251k5acja++/q3pN0aSKgfDA== X-Received: by 2002:a0d:e811:0:b0:576:d65d:2802 with SMTP id r17-20020a0de811000000b00576d65d2802mr1729866ywe.3.1691555697390; Tue, 08 Aug 2023 21:34:57 -0700 (PDT) Received: from ripple.attlocal.net (172-10-233-147.lightspeed.sntcca.sbcglobal.net. [172.10.233.147]) by smtp.gmail.com with ESMTPSA id y139-20020a0dd691000000b00570589c5aedsm3785800ywd.7.2023.08.08.21.34.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Aug 2023 21:34:57 -0700 (PDT) Date: Tue, 8 Aug 2023 21:34:54 -0700 (PDT) From: Hugh Dickins X-X-Sender: hugh@ripple.attlocal.net To: Christian Brauner cc: Andrew Morton , Oleksandr Tymoshenko , Carlos Maiolino , Jeff Layton , Chuck Lever , Jan Kara , Miklos Szeredi , Daniel Xu , Chris Down , Tejun Heo , Greg Kroah-Hartman , Matthew Wilcox , Christoph Hellwig , Pete Zaitcev , Helge Deller , Topi Miettinen , Yu Kuai , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH vfs.tmpfs 4/5] tmpfs: trivial support for direct IO In-Reply-To: Message-ID: <7c12819-9b94-d56-ff88-35623aa34180@google.com> References: MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 5A757100019 X-Stat-Signature: e3j49wd4o5rjutigr7npyx7czx5gpnj4 X-Rspam-User: X-HE-Tag: 1691555698-87616 X-HE-Meta: U2FsdGVkX1/GOpAYZP/C0G+g4mnnp1SlRr+ADxkvMhwTEZesDLJCuQFQJBP21DQIpuAmM7rDEcH+H7yaNgpdCWsJpBJvAONoNJTslmWSMxlFp80kUCnrtEFSjwLxrLwyTHOKf5jZyR2g3g60+yCtOfsScICFZVBYKhFIiycuKb3Y4LO4uNO1WS4BIuq/MWZqKqZm0H5eX0G9nF10oNlP2FZG1RVSGZAyG4WGCG182BtzOtWRJ5Ashf5ssHGYeksheEfJULUm0mBsRFNPa2kOuKg1tgZIVyjHfo5q3fuzVHJHMMgrLfDao+c9fVykvCpXPh4St2ZDeD34XNydrlIozrPCmivffwi+BiNFxVbHPQvxwVs6aOOVUsuObKGqHx58tdvH8/KldUCI60wltwgblStanAgEybvlmgCflYNZEB09I513Hx9xpWUaVf0OkgDppvXrlAfKp/a0qign+llHJ6xE/AHrs9ti7cRjHoe9X+zQUEmmIh+RmEhwF9Bopg4CMIaEe+Qw8n/W6cl95RdAPikMSQpAMMWdSPAKUBW6ZvZqNjU0bSmVWlp2sfrxjQR2xYcJL7aHRvkNovk4IHL8F5T1q4fAbZRS6m3GZCmQJHZmcmk0KvEg1fgdWvt42XvzpAVzkdPQ3E3KeoOwTm9yxvSn6ZStR/FLH7j0zhadjJyztIxfgguYDL/0BMwlXcYlNkrNT5ph02mNWDCF5G3l0G4XAhAKvfLYlm2nO+57Rm41J0cc1DY9GHMo06vo0Dtrd0pGkPNl8YewG2NzhOScXC5iX1Wjh/lWO8aO6p7lWjQVXJ1zU4kX+LQzxShDJTgImWJW5mcLqCQW5YlBOlViNtkmrTofamrqNqc5HUnCkuN0Q+S0OhztqMqbvUvxoKzLt8ET0V8UUpine7Zrs3POMQ4zNKZWMyNcZa8otSf7VJVrRk09ycGSlPrCSkGUALR1sr92RhdWVE/+AHvdEND AUE8yGb/ TMX7iDHru9xaR6UBxSD8bXvd8dXhcGodEPGU+Sz9YKqigtXEonBaTj+PVmkNcIRRUq8jPberjXbCl+Vyd1brEEOInmoNbLEXf1RnrcuyIqpW9W51HzdcS1kZ0s+a8lpVrFIsjgwQl1wY30CsS2oqL6KgQjuKnWyU31e0KbelYM5pUD7Wa2teDyh6oykNCtvW3aBwdRFCMgGybe3gmenpmR7xzkGEsRSAvb158V+CzLqllW2FkctqdHTyVS8rqeJalrzSxGtwM0lg8Hd5QMWECrG20zvOYFTPiNFRRGvbEARafCyDgBNA+8ORgghVBYWzmr0/AEUfpgb+jB6s7xH/8uELMTSg11p4vdwGAa0DZAjm5MTgxHMCt8EnhdY4YVsuSFO1Dx3VR0QPVDjN8F8RBPHdEKg== 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: Depending upon your philosophical viewpoint, either tmpfs always does direct IO, or it cannot ever do direct IO; but whichever, if tmpfs is to stand in for a more sophisticated filesystem, it can be helpful for tmpfs to support O_DIRECT. So, give tmpfs a shmem_direct_IO() method, of the simplest kind: by just returning 0 done, it leaves all the work to the buffered fallback (and everything else just happens to work out okay - in particular, its dirty pages don't get lost to invalidation). xfstests auto generic which were not run on tmpfs before but now pass: 036 091 113 125 130 133 135 198 207 208 209 210 211 212 214 226 239 263 323 355 391 406 412 422 427 446 451 465 551 586 591 609 615 647 708 729 with no new failures. LTP dio tests which were not run on tmpfs before but now pass: dio01 through dio30, except for dio04 and dio10, which fail because tmpfs dio read and write allow odd count: tmpfs could be made stricter, but would that be an improvement? Signed-off-by: Hugh Dickins Reviewed-by: Jan Kara --- mm/shmem.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mm/shmem.c b/mm/shmem.c index 7420b510a9f3..4d5599e566df 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2720,6 +2720,16 @@ shmem_write_end(struct file *file, struct address_space *mapping, return copied; } +static ssize_t shmem_direct_IO(struct kiocb *iocb, struct iov_iter *iter) +{ + /* + * Just leave all the work to the buffered fallback. + * Some LTP tests may expect us to enforce alignment restrictions, + * but the fallback works just fine with any alignment, so allow it. + */ + return 0; +} + static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to) { struct file *file = iocb->ki_filp; @@ -4421,6 +4431,7 @@ const struct address_space_operations shmem_aops = { #ifdef CONFIG_TMPFS .write_begin = shmem_write_begin, .write_end = shmem_write_end, + .direct_IO = shmem_direct_IO, #endif #ifdef CONFIG_MIGRATION .migrate_folio = migrate_folio,