All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: Jens Axboe <axboe@kernel.dk>, Al Viro <viro@zeniv.linux.org.uk>,
	Christoph Hellwig <hch@infradead.org>
Cc: David Howells <dhowells@redhat.com>,
	Matthew Wilcox <willy@infradead.org>, Jan Kara <jack@suse.cz>,
	Jeff Layton <jlayton@kernel.org>,
	David Hildenbrand <david@redhat.com>,
	Jason Gunthorpe <jgg@nvidia.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Hillf Danton <hdanton@sina.com>,
	Christian Brauner <brauner@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Christoph Hellwig <hch@lst.de>, Tyler Hicks <code@tyhicks.com>,
	ecryptfs@vger.kernel.org
Subject: [PATCH v22 17/31] ecryptfs: Provide a splice-read wrapper
Date: Mon, 22 May 2023 14:50:04 +0100	[thread overview]
Message-ID: <20230522135018.2742245-18-dhowells@redhat.com> (raw)
In-Reply-To: <20230522135018.2742245-1-dhowells@redhat.com>

Provide a splice_read wrapper for ecryptfs to update the access time on the
lower file after the operation.  Splicing from a direct I/O fd will update
the access time when ->read_iter() is called.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Christoph Hellwig <hch@lst.de>
cc: Al Viro <viro@zeniv.linux.org.uk>
cc: Jens Axboe <axboe@kernel.dk>
cc: Tyler Hicks <code@tyhicks.com>
cc: ecryptfs@vger.kernel.org
cc: linux-fsdevel@vger.kernel.org
cc: linux-block@vger.kernel.org
cc: linux-mm@kvack.org
---
 fs/ecryptfs/file.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index 268b74499c28..284395587be0 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -44,6 +44,31 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
 	return rc;
 }
 
+/*
+ * ecryptfs_splice_read_update_atime
+ *
+ * generic_file_splice_read updates the atime of upper layer inode.  But, it
+ * doesn't give us a chance to update the atime of the lower layer inode.  This
+ * function is a wrapper to generic_file_read.  It updates the atime of the
+ * lower level inode if generic_file_read returns without any errors. This is
+ * to be used only for file reads.  The function to be used for directory reads
+ * is ecryptfs_read.
+ */
+static ssize_t ecryptfs_splice_read_update_atime(struct file *in, loff_t *ppos,
+						 struct pipe_inode_info *pipe,
+						 size_t len, unsigned int flags)
+{
+	ssize_t rc;
+	const struct path *path;
+
+	rc = generic_file_splice_read(in, ppos, pipe, len, flags);
+	if (rc >= 0) {
+		path = ecryptfs_dentry_to_lower_path(in->f_path.dentry);
+		touch_atime(path);
+	}
+	return rc;
+}
+
 struct ecryptfs_getdents_callback {
 	struct dir_context ctx;
 	struct dir_context *caller;
@@ -414,5 +439,5 @@ const struct file_operations ecryptfs_main_fops = {
 	.release = ecryptfs_release,
 	.fsync = ecryptfs_fsync,
 	.fasync = ecryptfs_fasync,
-	.splice_read = generic_file_splice_read,
+	.splice_read = ecryptfs_splice_read_update_atime,
 };


  parent reply	other threads:[~2023-05-22 13:54 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-22 13:49 [PATCH v22 00/31] splice: Kill ITER_PIPE David Howells
2023-05-22 13:49 ` [PATCH v22 01/31] splice: Fix filemap_splice_read() to use the correct inode David Howells
2023-05-22 13:49 ` [PATCH v22 02/31] splice: Make filemap_splice_read() check s_maxbytes David Howells
2023-05-22 13:49 ` [PATCH v22 03/31] splice: Rename direct_splice_read() to copy_splice_read() David Howells
2023-05-22 13:49 ` [PATCH v22 04/31] splice: Clean up copy_splice_read() a bit David Howells
2023-05-22 13:49 ` [PATCH v22 05/31] splice: Make do_splice_to() generic and export it David Howells
2023-05-22 13:49 ` [PATCH v22 06/31] splice: Check for zero count in vfs_splice_read() David Howells
2023-05-22 13:49 ` [PATCH v22 07/31] splice: Make splice from an O_DIRECT fd use copy_splice_read() David Howells
2023-05-22 13:49 ` [PATCH v22 08/31] splice: Make splice from a DAX file " David Howells
2023-05-22 13:49   ` David Howells
2023-05-22 13:49 ` [PATCH v22 09/31] shmem: Implement splice-read David Howells
2023-05-22 13:49 ` [PATCH v22 10/31] overlayfs: " David Howells
2023-05-22 13:49 ` [PATCH v22 11/31] coda: " David Howells
2023-05-22 13:49 ` [PATCH v22 12/31] tty, proc, kernfs, random: Use copy_splice_read() David Howells
2023-05-22 13:50 ` [PATCH v22 13/31] net: Make sock_splice_read() use copy_splice_read() by default David Howells
2023-05-22 13:50 ` [PATCH v22 14/31] 9p: Add splice_read wrapper David Howells
2023-05-22 13:50 ` [PATCH v22 15/31] afs: Provide a splice-read wrapper David Howells
2023-05-22 13:50 ` [PATCH v22 16/31] ceph: " David Howells
2023-05-22 13:50 ` David Howells [this message]
2023-05-22 13:50 ` [PATCH v22 18/31] ext4: " David Howells
2023-05-22 13:50 ` [PATCH v22 19/31] f2fs: " David Howells
2023-05-22 13:50   ` [f2fs-dev] " David Howells
2023-05-24  3:01   ` Chao Yu
2023-05-24  3:01     ` [f2fs-dev] " Chao Yu
2023-07-06  0:18   ` patchwork-bot+f2fs
2023-07-06  0:18     ` patchwork-bot+f2fs
2023-05-22 13:50 ` [PATCH v22 20/31] nfs: " David Howells
2023-05-22 13:50 ` [PATCH v22 21/31] ntfs3: " David Howells
2023-05-22 13:50 ` [PATCH v22 22/31] ocfs2: " David Howells
2023-05-22 13:50   ` [Ocfs2-devel] " David Howells via Ocfs2-devel
2023-05-22 13:50 ` [PATCH v22 23/31] orangefs: " David Howells
2023-05-22 13:50 ` [PATCH v22 24/31] xfs: " David Howells
2023-05-22 13:50 ` [PATCH v22 25/31] zonefs: " David Howells
2023-05-23  2:48   ` Damien Le Moal
2023-05-23 20:43   ` David Howells
2023-05-24 23:13     ` Damien Le Moal
2023-05-22 13:50 ` [PATCH v22 26/31] trace: Convert trace/seq to use copy_splice_read() David Howells
2023-05-22 13:50 ` [PATCH v22 27/31] cifs: Use filemap_splice_read() David Howells
2023-05-22 13:50 ` [PATCH v22 28/31] splice: Use filemap_splice_read() instead of generic_file_splice_read() David Howells
2023-05-22 13:50 ` [PATCH v22 29/31] splice: Remove generic_file_splice_read() David Howells
2023-05-22 13:50 ` [PATCH v22 30/31] iov_iter: Kill ITER_PIPE David Howells
2023-05-22 13:50 ` [PATCH v22 31/31] splice: kdoc for filemap_splice_read() and copy_splice_read() David Howells
2023-05-23 17:47 ` [PATCH v22 00/31] splice: Kill ITER_PIPE Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230522135018.2742245-18-dhowells@redhat.com \
    --to=dhowells@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=brauner@kernel.org \
    --cc=code@tyhicks.com \
    --cc=david@redhat.com \
    --cc=ecryptfs@vger.kernel.org \
    --cc=hch@infradead.org \
    --cc=hch@lst.de \
    --cc=hdanton@sina.com \
    --cc=jack@suse.cz \
    --cc=jgg@nvidia.com \
    --cc=jlayton@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=logang@deltatee.com \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.