Re: [PATCH 07/11] vfs: add nowait parameter for file_accessed()

From: Christian Brauner
Date: Mon Sep 04 2023 - 05:51:57 EST


On Sun, Aug 27, 2023 at 09:28:31PM +0800, Hao Xu wrote:
> From: Hao Xu <howeyxu@xxxxxxxxxxx>
>
> Add a boolean parameter for file_accessed() to support nowait semantics.
> Currently it is true only with io_uring as its initial caller.
>
> Signed-off-by: Hao Xu <howeyxu@xxxxxxxxxxx>
> ---
> arch/s390/hypfs/inode.c | 2 +-
> block/fops.c | 2 +-
> fs/btrfs/file.c | 2 +-
> fs/btrfs/inode.c | 2 +-
> fs/coda/dir.c | 4 ++--
> fs/ext2/file.c | 4 ++--
> fs/ext4/file.c | 6 +++---
> fs/f2fs/file.c | 4 ++--
> fs/fuse/dax.c | 2 +-
> fs/fuse/file.c | 4 ++--
> fs/gfs2/file.c | 2 +-
> fs/hugetlbfs/inode.c | 2 +-
> fs/nilfs2/file.c | 2 +-
> fs/orangefs/file.c | 2 +-
> fs/orangefs/inode.c | 2 +-
> fs/pipe.c | 2 +-
> fs/ramfs/file-nommu.c | 2 +-
> fs/readdir.c | 2 +-
> fs/smb/client/cifsfs.c | 2 +-
> fs/splice.c | 2 +-
> fs/ubifs/file.c | 2 +-
> fs/udf/file.c | 2 +-
> fs/xfs/xfs_file.c | 6 +++---
> fs/zonefs/file.c | 4 ++--
> include/linux/fs.h | 5 +++--
> mm/filemap.c | 8 ++++----
> mm/shmem.c | 6 +++---
> 27 files changed, 43 insertions(+), 42 deletions(-)
>
> diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
> index ee919bfc8186..55f562027c4f 100644
> --- a/arch/s390/hypfs/inode.c
> +++ b/arch/s390/hypfs/inode.c
> @@ -157,7 +157,7 @@ static ssize_t hypfs_read_iter(struct kiocb *iocb, struct iov_iter *to)
> if (!count)
> return -EFAULT;
> iocb->ki_pos = pos + count;
> - file_accessed(file);
> + file_accessed(file, false);

Why? If all you do is skip atime update anyway then just add something
like:

bool file_needs_atime(struct file *file)
{
return !(file->f_flags & O_NOATIME) &&
atime_needs_update(&file->f_path, d_inode(path->dentry));
}

and then

if (file_needs_atime(file) && IOURING_WANTS_ASYNC)
return -EAGAIN;

instead of touching all this code.