From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: Dominique Martinet <asmadeus@codewreck.org>,
Pavel Begunkov <asml.silence@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
"Darrick J . Wong" <djwong@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-cachefs@redhat.com,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-unionfs@vger.kernel.org, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-s390@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-btrfs@vger.kernel.org, codalist@coda.cs.cmu.edu,
linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
linux-mm@kvack.org, linux-nilfs@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
samba-technical@lists.samba.org, linux-mtd@lists.infradead.org,
Wanpeng Li <wanpengli@tencent.com>
Subject: [PATCH 06/11] vfs: add a nowait parameter for touch_atime()
Date: Sun, 27 Aug 2023 21:28:30 +0800 [thread overview]
Message-ID: <20230827132835.1373581-7-hao.xu@linux.dev> (raw)
In-Reply-To: <20230827132835.1373581-1-hao.xu@linux.dev>
From: Hao Xu <howeyxu@tencent.com>
Add a nowait boolean parameter for touch_atime() to support nowait
semantics. It is true only when io_uring is the initial caller.
Signed-off-by: Hao Xu <howeyxu@tencent.com>
---
fs/cachefiles/namei.c | 2 +-
fs/ecryptfs/file.c | 4 ++--
fs/inode.c | 7 ++++---
fs/namei.c | 4 ++--
fs/nfsd/vfs.c | 2 +-
fs/overlayfs/file.c | 2 +-
fs/overlayfs/inode.c | 2 +-
fs/stat.c | 2 +-
include/linux/fs.h | 4 ++--
kernel/bpf/inode.c | 4 ++--
net/unix/af_unix.c | 4 ++--
11 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d9d22d0ec38a..7a21bf0e36b8 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -591,7 +591,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
* used to keep track of culling, and atimes are only updated by read,
* write and readdir but not lookup or open).
*/
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
dput(dentry);
return true;
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index ce0a3c5ed0ca..3db7006cc440 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -39,7 +39,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
rc = generic_file_read_iter(iocb, to);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(file->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
@@ -64,7 +64,7 @@ static ssize_t ecryptfs_splice_read_update_atime(struct file *in, loff_t *ppos,
rc = filemap_splice_read(in, ppos, pipe, len, flags);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(in->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
diff --git a/fs/inode.c b/fs/inode.c
index 8fefb69e1f84..e83b836f2d09 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1961,17 +1961,17 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
return true;
}
-void touch_atime(const struct path *path)
+int touch_atime(const struct path *path, bool nowait)
{
struct vfsmount *mnt = path->mnt;
struct inode *inode = d_inode(path->dentry);
struct timespec64 now;
if (!atime_needs_update(path, inode))
- return;
+ return 0;
if (!sb_start_write_trylock(inode->i_sb))
- return;
+ return 0;
if (__mnt_want_write(mnt) != 0)
goto skip_update;
@@ -1989,6 +1989,7 @@ void touch_atime(const struct path *path)
__mnt_drop_write(mnt);
skip_update:
sb_end_write(inode->i_sb);
+ return 0;
}
EXPORT_SYMBOL(touch_atime);
diff --git a/fs/namei.c b/fs/namei.c
index e56ff39a79bc..35731d405730 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1776,12 +1776,12 @@ static const char *pick_link(struct nameidata *nd, struct path *link,
return ERR_PTR(-ELOOP);
if (!(nd->flags & LOOKUP_RCU)) {
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
cond_resched();
} else if (atime_needs_update(&last->link, inode)) {
if (!try_to_unlazy(nd))
return ERR_PTR(-ECHILD);
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
}
error = security_inode_follow_link(link->dentry, inode,
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 8a2321d19194..3179e7b5d209 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1569,7 +1569,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
if (unlikely(!d_is_symlink(path.dentry)))
return nfserr_inval;
- touch_atime(&path);
+ touch_atime(&path, false);
link = vfs_get_link(path.dentry, &done);
if (IS_ERR(link))
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 21245b00722a..6ff466ef98ea 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -255,7 +255,7 @@ static void ovl_file_accessed(struct file *file)
inode->i_ctime = upperinode->i_ctime;
}
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
static rwf_t ovl_iocb_to_rwf(int ifl)
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index a63e57447be9..66e03025e748 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -703,7 +703,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
};
if (upperpath.dentry) {
- touch_atime(&upperpath);
+ touch_atime(&upperpath, false);
inode->i_atime = d_inode(upperpath.dentry)->i_atime;
}
}
diff --git a/fs/stat.c b/fs/stat.c
index 7c238da22ef0..713773e61110 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -485,7 +485,7 @@ static int do_readlinkat(int dfd, const char __user *pathname,
if (d_is_symlink(path.dentry) || inode->i_op->readlink) {
error = security_inode_readlink(path.dentry);
if (!error) {
- touch_atime(&path);
+ touch_atime(&path, false);
error = vfs_readlink(path.dentry, buf, bufsiz);
}
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f3e315e8efdd..ba54879089ac 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2201,13 +2201,13 @@ enum file_time_flags {
};
extern bool atime_needs_update(const struct path *, struct inode *);
-extern void touch_atime(const struct path *);
+extern int touch_atime(const struct path *path, bool nowait);
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
static inline void file_accessed(struct file *file)
{
if (!(file->f_flags & O_NOATIME))
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
extern int file_modified(struct file *file);
diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 4174f76133df..bc020b45d5c8 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -517,7 +517,7 @@ static void *bpf_obj_do_get(int path_fd, const char __user *pathname,
raw = bpf_any_get(inode->i_private, *type);
if (!IS_ERR(raw))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return raw;
@@ -591,7 +591,7 @@ struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type typ
return ERR_PTR(ret);
prog = __get_prog_inode(d_backing_inode(path.dentry), type);
if (!IS_ERR(prog))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return prog;
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 123b35ddfd71..5868e4e47320 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -1084,7 +1084,7 @@ static struct sock *unix_find_bsd(struct sockaddr_un *sunaddr, int addr_len,
err = -EPROTOTYPE;
if (sk->sk_type == type)
- touch_atime(&path);
+ touch_atime(&path, false);
else
goto sock_put;
@@ -1114,7 +1114,7 @@ static struct sock *unix_find_abstract(struct net *net,
dentry = unix_sk(sk)->path.dentry;
if (dentry)
- touch_atime(&unix_sk(sk)->path);
+ touch_atime(&unix_sk(sk)->path, false);
return sk;
}
--
2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: Wanpeng Li <wanpengli@tencent.com>,
"Darrick J . Wong" <djwong@kernel.org>,
Dominique Martinet <asmadeus@codewreck.org>,
Dave Chinner <david@fromorbit.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
linux-s390@vger.kernel.org, linux-nilfs@vger.kernel.org,
codalist@coda.cs.cmu.edu, cluster-devel@redhat.com,
linux-cachefs@redhat.com, linux-ext4@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-block@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>,
netdev@vger.kernel.org, samba-technical@lists.samba.org,
linux-unionfs@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mtd@lists.infradead.org, bpf@vger.kernel.org,
Pavel Begunkov <asml.silence@gmail.com>,
linux-btrfs@vger.kernel.org
Subject: [Cluster-devel] [PATCH 06/11] vfs: add a nowait parameter for touch_atime()
Date: Sun, 27 Aug 2023 21:28:30 +0800 [thread overview]
Message-ID: <20230827132835.1373581-7-hao.xu@linux.dev> (raw)
In-Reply-To: <20230827132835.1373581-1-hao.xu@linux.dev>
From: Hao Xu <howeyxu@tencent.com>
Add a nowait boolean parameter for touch_atime() to support nowait
semantics. It is true only when io_uring is the initial caller.
Signed-off-by: Hao Xu <howeyxu@tencent.com>
---
fs/cachefiles/namei.c | 2 +-
fs/ecryptfs/file.c | 4 ++--
fs/inode.c | 7 ++++---
fs/namei.c | 4 ++--
fs/nfsd/vfs.c | 2 +-
fs/overlayfs/file.c | 2 +-
fs/overlayfs/inode.c | 2 +-
fs/stat.c | 2 +-
include/linux/fs.h | 4 ++--
kernel/bpf/inode.c | 4 ++--
net/unix/af_unix.c | 4 ++--
11 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d9d22d0ec38a..7a21bf0e36b8 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -591,7 +591,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
* used to keep track of culling, and atimes are only updated by read,
* write and readdir but not lookup or open).
*/
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
dput(dentry);
return true;
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index ce0a3c5ed0ca..3db7006cc440 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -39,7 +39,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
rc = generic_file_read_iter(iocb, to);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(file->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
@@ -64,7 +64,7 @@ static ssize_t ecryptfs_splice_read_update_atime(struct file *in, loff_t *ppos,
rc = filemap_splice_read(in, ppos, pipe, len, flags);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(in->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
diff --git a/fs/inode.c b/fs/inode.c
index 8fefb69e1f84..e83b836f2d09 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1961,17 +1961,17 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
return true;
}
-void touch_atime(const struct path *path)
+int touch_atime(const struct path *path, bool nowait)
{
struct vfsmount *mnt = path->mnt;
struct inode *inode = d_inode(path->dentry);
struct timespec64 now;
if (!atime_needs_update(path, inode))
- return;
+ return 0;
if (!sb_start_write_trylock(inode->i_sb))
- return;
+ return 0;
if (__mnt_want_write(mnt) != 0)
goto skip_update;
@@ -1989,6 +1989,7 @@ void touch_atime(const struct path *path)
__mnt_drop_write(mnt);
skip_update:
sb_end_write(inode->i_sb);
+ return 0;
}
EXPORT_SYMBOL(touch_atime);
diff --git a/fs/namei.c b/fs/namei.c
index e56ff39a79bc..35731d405730 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1776,12 +1776,12 @@ static const char *pick_link(struct nameidata *nd, struct path *link,
return ERR_PTR(-ELOOP);
if (!(nd->flags & LOOKUP_RCU)) {
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
cond_resched();
} else if (atime_needs_update(&last->link, inode)) {
if (!try_to_unlazy(nd))
return ERR_PTR(-ECHILD);
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
}
error = security_inode_follow_link(link->dentry, inode,
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 8a2321d19194..3179e7b5d209 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1569,7 +1569,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
if (unlikely(!d_is_symlink(path.dentry)))
return nfserr_inval;
- touch_atime(&path);
+ touch_atime(&path, false);
link = vfs_get_link(path.dentry, &done);
if (IS_ERR(link))
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 21245b00722a..6ff466ef98ea 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -255,7 +255,7 @@ static void ovl_file_accessed(struct file *file)
inode->i_ctime = upperinode->i_ctime;
}
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
static rwf_t ovl_iocb_to_rwf(int ifl)
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index a63e57447be9..66e03025e748 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -703,7 +703,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
};
if (upperpath.dentry) {
- touch_atime(&upperpath);
+ touch_atime(&upperpath, false);
inode->i_atime = d_inode(upperpath.dentry)->i_atime;
}
}
diff --git a/fs/stat.c b/fs/stat.c
index 7c238da22ef0..713773e61110 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -485,7 +485,7 @@ static int do_readlinkat(int dfd, const char __user *pathname,
if (d_is_symlink(path.dentry) || inode->i_op->readlink) {
error = security_inode_readlink(path.dentry);
if (!error) {
- touch_atime(&path);
+ touch_atime(&path, false);
error = vfs_readlink(path.dentry, buf, bufsiz);
}
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f3e315e8efdd..ba54879089ac 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2201,13 +2201,13 @@ enum file_time_flags {
};
extern bool atime_needs_update(const struct path *, struct inode *);
-extern void touch_atime(const struct path *);
+extern int touch_atime(const struct path *path, bool nowait);
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
static inline void file_accessed(struct file *file)
{
if (!(file->f_flags & O_NOATIME))
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
extern int file_modified(struct file *file);
diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 4174f76133df..bc020b45d5c8 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -517,7 +517,7 @@ static void *bpf_obj_do_get(int path_fd, const char __user *pathname,
raw = bpf_any_get(inode->i_private, *type);
if (!IS_ERR(raw))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return raw;
@@ -591,7 +591,7 @@ struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type typ
return ERR_PTR(ret);
prog = __get_prog_inode(d_backing_inode(path.dentry), type);
if (!IS_ERR(prog))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return prog;
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 123b35ddfd71..5868e4e47320 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -1084,7 +1084,7 @@ static struct sock *unix_find_bsd(struct sockaddr_un *sunaddr, int addr_len,
err = -EPROTOTYPE;
if (sk->sk_type == type)
- touch_atime(&path);
+ touch_atime(&path, false);
else
goto sock_put;
@@ -1114,7 +1114,7 @@ static struct sock *unix_find_abstract(struct net *net,
dentry = unix_sk(sk)->path.dentry;
if (dentry)
- touch_atime(&unix_sk(sk)->path);
+ touch_atime(&unix_sk(sk)->path, false);
return sk;
}
--
2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: Wanpeng Li <wanpengli@tencent.com>,
"Darrick J . Wong" <djwong@kernel.org>,
Dominique Martinet <asmadeus@codewreck.org>,
Dave Chinner <david@fromorbit.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
linux-s390@vger.kernel.org, linux-nilfs@vger.kernel.org,
codalist@coda.cs.cmu.edu, cluster-devel@redhat.com,
linux-cachefs@redhat.com, linux-ext4@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-block@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>,
netdev@vger.kernel.org, samba-technical@lists.samba.org,
linux-unionfs@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mtd@lists.infradead.org, bpf@vger.kernel.org,
Pavel Begunkov <asml.silence@gmail.com>,
linux-btrfs@vger.kernel.org
Subject: [f2fs-dev] [PATCH 06/11] vfs: add a nowait parameter for touch_atime()
Date: Sun, 27 Aug 2023 21:28:30 +0800 [thread overview]
Message-ID: <20230827132835.1373581-7-hao.xu@linux.dev> (raw)
In-Reply-To: <20230827132835.1373581-1-hao.xu@linux.dev>
From: Hao Xu <howeyxu@tencent.com>
Add a nowait boolean parameter for touch_atime() to support nowait
semantics. It is true only when io_uring is the initial caller.
Signed-off-by: Hao Xu <howeyxu@tencent.com>
---
fs/cachefiles/namei.c | 2 +-
fs/ecryptfs/file.c | 4 ++--
fs/inode.c | 7 ++++---
fs/namei.c | 4 ++--
fs/nfsd/vfs.c | 2 +-
fs/overlayfs/file.c | 2 +-
fs/overlayfs/inode.c | 2 +-
fs/stat.c | 2 +-
include/linux/fs.h | 4 ++--
kernel/bpf/inode.c | 4 ++--
net/unix/af_unix.c | 4 ++--
11 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d9d22d0ec38a..7a21bf0e36b8 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -591,7 +591,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
* used to keep track of culling, and atimes are only updated by read,
* write and readdir but not lookup or open).
*/
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
dput(dentry);
return true;
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index ce0a3c5ed0ca..3db7006cc440 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -39,7 +39,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
rc = generic_file_read_iter(iocb, to);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(file->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
@@ -64,7 +64,7 @@ static ssize_t ecryptfs_splice_read_update_atime(struct file *in, loff_t *ppos,
rc = filemap_splice_read(in, ppos, pipe, len, flags);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(in->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
diff --git a/fs/inode.c b/fs/inode.c
index 8fefb69e1f84..e83b836f2d09 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1961,17 +1961,17 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
return true;
}
-void touch_atime(const struct path *path)
+int touch_atime(const struct path *path, bool nowait)
{
struct vfsmount *mnt = path->mnt;
struct inode *inode = d_inode(path->dentry);
struct timespec64 now;
if (!atime_needs_update(path, inode))
- return;
+ return 0;
if (!sb_start_write_trylock(inode->i_sb))
- return;
+ return 0;
if (__mnt_want_write(mnt) != 0)
goto skip_update;
@@ -1989,6 +1989,7 @@ void touch_atime(const struct path *path)
__mnt_drop_write(mnt);
skip_update:
sb_end_write(inode->i_sb);
+ return 0;
}
EXPORT_SYMBOL(touch_atime);
diff --git a/fs/namei.c b/fs/namei.c
index e56ff39a79bc..35731d405730 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1776,12 +1776,12 @@ static const char *pick_link(struct nameidata *nd, struct path *link,
return ERR_PTR(-ELOOP);
if (!(nd->flags & LOOKUP_RCU)) {
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
cond_resched();
} else if (atime_needs_update(&last->link, inode)) {
if (!try_to_unlazy(nd))
return ERR_PTR(-ECHILD);
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
}
error = security_inode_follow_link(link->dentry, inode,
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 8a2321d19194..3179e7b5d209 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1569,7 +1569,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
if (unlikely(!d_is_symlink(path.dentry)))
return nfserr_inval;
- touch_atime(&path);
+ touch_atime(&path, false);
link = vfs_get_link(path.dentry, &done);
if (IS_ERR(link))
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 21245b00722a..6ff466ef98ea 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -255,7 +255,7 @@ static void ovl_file_accessed(struct file *file)
inode->i_ctime = upperinode->i_ctime;
}
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
static rwf_t ovl_iocb_to_rwf(int ifl)
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index a63e57447be9..66e03025e748 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -703,7 +703,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
};
if (upperpath.dentry) {
- touch_atime(&upperpath);
+ touch_atime(&upperpath, false);
inode->i_atime = d_inode(upperpath.dentry)->i_atime;
}
}
diff --git a/fs/stat.c b/fs/stat.c
index 7c238da22ef0..713773e61110 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -485,7 +485,7 @@ static int do_readlinkat(int dfd, const char __user *pathname,
if (d_is_symlink(path.dentry) || inode->i_op->readlink) {
error = security_inode_readlink(path.dentry);
if (!error) {
- touch_atime(&path);
+ touch_atime(&path, false);
error = vfs_readlink(path.dentry, buf, bufsiz);
}
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f3e315e8efdd..ba54879089ac 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2201,13 +2201,13 @@ enum file_time_flags {
};
extern bool atime_needs_update(const struct path *, struct inode *);
-extern void touch_atime(const struct path *);
+extern int touch_atime(const struct path *path, bool nowait);
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
static inline void file_accessed(struct file *file)
{
if (!(file->f_flags & O_NOATIME))
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
extern int file_modified(struct file *file);
diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 4174f76133df..bc020b45d5c8 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -517,7 +517,7 @@ static void *bpf_obj_do_get(int path_fd, const char __user *pathname,
raw = bpf_any_get(inode->i_private, *type);
if (!IS_ERR(raw))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return raw;
@@ -591,7 +591,7 @@ struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type typ
return ERR_PTR(ret);
prog = __get_prog_inode(d_backing_inode(path.dentry), type);
if (!IS_ERR(prog))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return prog;
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 123b35ddfd71..5868e4e47320 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -1084,7 +1084,7 @@ static struct sock *unix_find_bsd(struct sockaddr_un *sunaddr, int addr_len,
err = -EPROTOTYPE;
if (sk->sk_type == type)
- touch_atime(&path);
+ touch_atime(&path, false);
else
goto sock_put;
@@ -1114,7 +1114,7 @@ static struct sock *unix_find_abstract(struct net *net,
dentry = unix_sk(sk)->path.dentry;
if (dentry)
- touch_atime(&unix_sk(sk)->path);
+ touch_atime(&unix_sk(sk)->path, false);
return sk;
}
--
2.25.1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: Wanpeng Li <wanpengli@tencent.com>,
"Darrick J . Wong" <djwong@kernel.org>,
Dominique Martinet <asmadeus@codewreck.org>,
Dave Chinner <david@fromorbit.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
linux-s390@vger.kernel.org, linux-nilfs@vger.kernel.org,
codalist@coda.cs.cmu.edu, cluster-devel@redhat.com,
linux-cachefs@redhat.com, linux-ext4@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-block@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>,
netdev@vger.kernel.org, samba-technical@lists.samba.org,
linux-unionfs@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mtd@lists.infradead.org, bpf@vger.kernel.o
Subject: [PATCH 06/11] vfs: add a nowait parameter for touch_atime()
Date: Sun, 27 Aug 2023 21:28:30 +0800 [thread overview]
Message-ID: <20230827132835.1373581-7-hao.xu@linux.dev> (raw)
In-Reply-To: <20230827132835.1373581-1-hao.xu@linux.dev>
From: Hao Xu <howeyxu@tencent.com>
Add a nowait boolean parameter for touch_atime() to support nowait
semantics. It is true only when io_uring is the initial caller.
Signed-off-by: Hao Xu <howeyxu@tencent.com>
---
fs/cachefiles/namei.c | 2 +-
fs/ecryptfs/file.c | 4 ++--
fs/inode.c | 7 ++++---
fs/namei.c | 4 ++--
fs/nfsd/vfs.c | 2 +-
fs/overlayfs/file.c | 2 +-
fs/overlayfs/inode.c | 2 +-
fs/stat.c | 2 +-
include/linux/fs.h | 4 ++--
kernel/bpf/inode.c | 4 ++--
net/unix/af_unix.c | 4 ++--
11 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d9d22d0ec38a..7a21bf0e36b8 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -591,7 +591,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
* used to keep track of culling, and atimes are only updated by read,
* write and readdir but not lookup or open).
*/
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
dput(dentry);
return true;
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index ce0a3c5ed0ca..3db7006cc440 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -39,7 +39,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
rc = generic_file_read_iter(iocb, to);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(file->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
@@ -64,7 +64,7 @@ static ssize_t ecryptfs_splice_read_update_atime(struct file *in, loff_t *ppos,
rc = filemap_splice_read(in, ppos, pipe, len, flags);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(in->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
diff --git a/fs/inode.c b/fs/inode.c
index 8fefb69e1f84..e83b836f2d09 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1961,17 +1961,17 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
return true;
}
-void touch_atime(const struct path *path)
+int touch_atime(const struct path *path, bool nowait)
{
struct vfsmount *mnt = path->mnt;
struct inode *inode = d_inode(path->dentry);
struct timespec64 now;
if (!atime_needs_update(path, inode))
- return;
+ return 0;
if (!sb_start_write_trylock(inode->i_sb))
- return;
+ return 0;
if (__mnt_want_write(mnt) != 0)
goto skip_update;
@@ -1989,6 +1989,7 @@ void touch_atime(const struct path *path)
__mnt_drop_write(mnt);
skip_update:
sb_end_write(inode->i_sb);
+ return 0;
}
EXPORT_SYMBOL(touch_atime);
diff --git a/fs/namei.c b/fs/namei.c
index e56ff39a79bc..35731d405730 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1776,12 +1776,12 @@ static const char *pick_link(struct nameidata *nd, struct path *link,
return ERR_PTR(-ELOOP);
if (!(nd->flags & LOOKUP_RCU)) {
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
cond_resched();
} else if (atime_needs_update(&last->link, inode)) {
if (!try_to_unlazy(nd))
return ERR_PTR(-ECHILD);
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
}
error = security_inode_follow_link(link->dentry, inode,
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 8a2321d19194..3179e7b5d209 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1569,7 +1569,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
if (unlikely(!d_is_symlink(path.dentry)))
return nfserr_inval;
- touch_atime(&path);
+ touch_atime(&path, false);
link = vfs_get_link(path.dentry, &done);
if (IS_ERR(link))
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 21245b00722a..6ff466ef98ea 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -255,7 +255,7 @@ static void ovl_file_accessed(struct file *file)
inode->i_ctime = upperinode->i_ctime;
}
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
static rwf_t ovl_iocb_to_rwf(int ifl)
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index a63e57447be9..66e03025e748 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -703,7 +703,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
};
if (upperpath.dentry) {
- touch_atime(&upperpath);
+ touch_atime(&upperpath, false);
inode->i_atime = d_inode(upperpath.dentry)->i_atime;
}
}
diff --git a/fs/stat.c b/fs/stat.c
index 7c238da22ef0..713773e61110 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -485,7 +485,7 @@ static int do_readlinkat(int dfd, const char __user *pathname,
if (d_is_symlink(path.dentry) || inode->i_op->readlink) {
error = security_inode_readlink(path.dentry);
if (!error) {
- touch_atime(&path);
+ touch_atime(&path, false);
error = vfs_readlink(path.dentry, buf, bufsiz);
}
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f3e315e8efdd..ba54879089ac 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2201,13 +2201,13 @@ enum file_time_flags {
};
extern bool atime_needs_update(const struct path *, struct inode *);
-extern void touch_atime(const struct path *);
+extern int touch_atime(const struct path *path, bool nowait);
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
static inline void file_accessed(struct file *file)
{
if (!(file->f_flags & O_NOATIME))
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
extern int file_modified(struct file *file);
diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 4174f76133df..bc020b45d5c8 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -517,7 +517,7 @@ static void *bpf_obj_do_get(int path_fd, const char __user *pathname,
raw = bpf_any_get(inode->i_private, *type);
if (!IS_ERR(raw))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return raw;
@@ -591,7 +591,7 @@ struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type typ
return ERR_PTR(ret);
prog = __get_prog_inode(d_backing_inode(path.dentry), type);
if (!IS_ERR(prog))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return prog;
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 123b35ddfd71..5868e4e47320 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -1084,7 +1084,7 @@ static struct sock *unix_find_bsd(struct sockaddr_un *sunaddr, int addr_len,
err = -EPROTOTYPE;
if (sk->sk_type == type)
- touch_atime(&path);
+ touch_atime(&path, false);
else
goto sock_put;
@@ -1114,7 +1114,7 @@ static struct sock *unix_find_abstract(struct net *net,
dentry = unix_sk(sk)->path.dentry;
if (dentry)
- touch_atime(&unix_sk(sk)->path);
+ touch_atime(&unix_sk(sk)->path, false);
return sk;
}
--
2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: Dominique Martinet <asmadeus@codewreck.org>,
Pavel Begunkov <asml.silence@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
"Darrick J . Wong" <djwong@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-cachefs@redhat.com,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-unionfs@vger.kernel.org, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-s390@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-btrfs@vger.kernel.org, codalist@coda.cs.cmu.edu,
linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
linux-mm@kvack.org, linux-nilfs@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
samba-technical@lists.samba.org, linux-mtd@lists.infradead.org,
Wanpeng Li <wanpengli@tencent.com>
Subject: [PATCH 06/11] vfs: add a nowait parameter for touch_atime()
Date: Sun, 27 Aug 2023 21:28:30 +0800 [thread overview]
Message-ID: <20230827132835.1373581-7-hao.xu@linux.dev> (raw)
In-Reply-To: <20230827132835.1373581-1-hao.xu@linux.dev>
From: Hao Xu <howeyxu@tencent.com>
Add a nowait boolean parameter for touch_atime() to support nowait
semantics. It is true only when io_uring is the initial caller.
Signed-off-by: Hao Xu <howeyxu@tencent.com>
---
fs/cachefiles/namei.c | 2 +-
fs/ecryptfs/file.c | 4 ++--
fs/inode.c | 7 ++++---
fs/namei.c | 4 ++--
fs/nfsd/vfs.c | 2 +-
fs/overlayfs/file.c | 2 +-
fs/overlayfs/inode.c | 2 +-
fs/stat.c | 2 +-
include/linux/fs.h | 4 ++--
kernel/bpf/inode.c | 4 ++--
net/unix/af_unix.c | 4 ++--
11 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d9d22d0ec38a..7a21bf0e36b8 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -591,7 +591,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
* used to keep track of culling, and atimes are only updated by read,
* write and readdir but not lookup or open).
*/
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
dput(dentry);
return true;
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index ce0a3c5ed0ca..3db7006cc440 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -39,7 +39,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
rc = generic_file_read_iter(iocb, to);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(file->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
@@ -64,7 +64,7 @@ static ssize_t ecryptfs_splice_read_update_atime(struct file *in, loff_t *ppos,
rc = filemap_splice_read(in, ppos, pipe, len, flags);
if (rc >= 0) {
path = ecryptfs_dentry_to_lower_path(in->f_path.dentry);
- touch_atime(path);
+ touch_atime(path, false);
}
return rc;
}
diff --git a/fs/inode.c b/fs/inode.c
index 8fefb69e1f84..e83b836f2d09 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1961,17 +1961,17 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
return true;
}
-void touch_atime(const struct path *path)
+int touch_atime(const struct path *path, bool nowait)
{
struct vfsmount *mnt = path->mnt;
struct inode *inode = d_inode(path->dentry);
struct timespec64 now;
if (!atime_needs_update(path, inode))
- return;
+ return 0;
if (!sb_start_write_trylock(inode->i_sb))
- return;
+ return 0;
if (__mnt_want_write(mnt) != 0)
goto skip_update;
@@ -1989,6 +1989,7 @@ void touch_atime(const struct path *path)
__mnt_drop_write(mnt);
skip_update:
sb_end_write(inode->i_sb);
+ return 0;
}
EXPORT_SYMBOL(touch_atime);
diff --git a/fs/namei.c b/fs/namei.c
index e56ff39a79bc..35731d405730 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1776,12 +1776,12 @@ static const char *pick_link(struct nameidata *nd, struct path *link,
return ERR_PTR(-ELOOP);
if (!(nd->flags & LOOKUP_RCU)) {
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
cond_resched();
} else if (atime_needs_update(&last->link, inode)) {
if (!try_to_unlazy(nd))
return ERR_PTR(-ECHILD);
- touch_atime(&last->link);
+ touch_atime(&last->link, false);
}
error = security_inode_follow_link(link->dentry, inode,
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 8a2321d19194..3179e7b5d209 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1569,7 +1569,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
if (unlikely(!d_is_symlink(path.dentry)))
return nfserr_inval;
- touch_atime(&path);
+ touch_atime(&path, false);
link = vfs_get_link(path.dentry, &done);
if (IS_ERR(link))
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 21245b00722a..6ff466ef98ea 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -255,7 +255,7 @@ static void ovl_file_accessed(struct file *file)
inode->i_ctime = upperinode->i_ctime;
}
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
static rwf_t ovl_iocb_to_rwf(int ifl)
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index a63e57447be9..66e03025e748 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -703,7 +703,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
};
if (upperpath.dentry) {
- touch_atime(&upperpath);
+ touch_atime(&upperpath, false);
inode->i_atime = d_inode(upperpath.dentry)->i_atime;
}
}
diff --git a/fs/stat.c b/fs/stat.c
index 7c238da22ef0..713773e61110 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -485,7 +485,7 @@ static int do_readlinkat(int dfd, const char __user *pathname,
if (d_is_symlink(path.dentry) || inode->i_op->readlink) {
error = security_inode_readlink(path.dentry);
if (!error) {
- touch_atime(&path);
+ touch_atime(&path, false);
error = vfs_readlink(path.dentry, buf, bufsiz);
}
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f3e315e8efdd..ba54879089ac 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2201,13 +2201,13 @@ enum file_time_flags {
};
extern bool atime_needs_update(const struct path *, struct inode *);
-extern void touch_atime(const struct path *);
+extern int touch_atime(const struct path *path, bool nowait);
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
static inline void file_accessed(struct file *file)
{
if (!(file->f_flags & O_NOATIME))
- touch_atime(&file->f_path);
+ touch_atime(&file->f_path, false);
}
extern int file_modified(struct file *file);
diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 4174f76133df..bc020b45d5c8 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -517,7 +517,7 @@ static void *bpf_obj_do_get(int path_fd, const char __user *pathname,
raw = bpf_any_get(inode->i_private, *type);
if (!IS_ERR(raw))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return raw;
@@ -591,7 +591,7 @@ struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type typ
return ERR_PTR(ret);
prog = __get_prog_inode(d_backing_inode(path.dentry), type);
if (!IS_ERR(prog))
- touch_atime(&path);
+ touch_atime(&path, false);
path_put(&path);
return prog;
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 123b35ddfd71..5868e4e47320 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -1084,7 +1084,7 @@ static struct sock *unix_find_bsd(struct sockaddr_un *sunaddr, int addr_len,
err = -EPROTOTYPE;
if (sk->sk_type == type)
- touch_atime(&path);
+ touch_atime(&path, false);
else
goto sock_put;
@@ -1114,7 +1114,7 @@ static struct sock *unix_find_abstract(struct net *net,
dentry = unix_sk(sk)->path.dentry;
if (dentry)
- touch_atime(&unix_sk(sk)->path);
+ touch_atime(&unix_sk(sk)->path, false);
return sk;
}
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2023-08-27 13:33 UTC|newest]
Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-27 13:28 [PATCH v6 00/11] io_uring getdents Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 01/11] fs: split off vfs_getdents function of getdents64 syscall Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 02/11] xfs: add NOWAIT semantics for readdir Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 20:44 ` Matthew Wilcox
2023-08-27 20:44 ` Matthew Wilcox
2023-08-27 20:44 ` Matthew Wilcox
2023-08-27 20:44 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 20:44 ` [Cluster-devel] " Matthew Wilcox
2023-08-29 7:41 ` Hao Xu
2023-08-29 7:41 ` Hao Xu
2023-08-29 7:41 ` Hao Xu
2023-08-29 7:41 ` [f2fs-dev] " Hao Xu
2023-08-29 7:41 ` [Cluster-devel] " Hao Xu
2023-08-29 13:05 ` Matthew Wilcox
2023-08-29 13:05 ` Matthew Wilcox
2023-08-29 13:05 ` Matthew Wilcox
2023-08-29 13:05 ` [f2fs-dev] " Matthew Wilcox
2023-08-29 13:05 ` [Cluster-devel] " Matthew Wilcox
2023-09-04 1:02 ` Dave Chinner
2023-09-04 1:02 ` Dave Chinner
2023-09-04 1:02 ` Dave Chinner
2023-09-04 1:02 ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-09-04 1:02 ` [Cluster-devel] " Dave Chinner
2023-08-27 13:28 ` [PATCH 03/11] vfs: add nowait flag for struct dir_context Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 04/11] vfs: add a vfs helper for io_uring file pos lock Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 20:47 ` Matthew Wilcox
2023-08-27 20:47 ` Matthew Wilcox
2023-08-27 20:47 ` Matthew Wilcox
2023-08-27 20:47 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 20:47 ` [Cluster-devel] " Matthew Wilcox
2023-08-27 13:28 ` [PATCH 05/11] vfs: add file_pos_unlock() for io_uring usage Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` Hao Xu [this message]
2023-08-27 13:28 ` [PATCH 06/11] vfs: add a nowait parameter for touch_atime() Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 07/11] vfs: add nowait parameter for file_accessed() Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 21:32 ` Matthew Wilcox
2023-08-27 21:32 ` Matthew Wilcox
2023-08-27 21:32 ` Matthew Wilcox
2023-08-27 21:32 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 21:32 ` [Cluster-devel] " Matthew Wilcox
2023-08-29 7:46 ` Hao Xu
2023-08-29 7:46 ` Hao Xu
2023-08-29 7:46 ` Hao Xu
2023-08-29 7:46 ` [f2fs-dev] " Hao Xu
2023-08-29 7:46 ` [Cluster-devel] " Hao Xu
2023-08-29 11:53 ` Matthew Wilcox
2023-08-29 11:53 ` Matthew Wilcox
2023-08-29 11:53 ` Matthew Wilcox
2023-08-29 11:53 ` [f2fs-dev] " Matthew Wilcox
2023-08-29 11:53 ` [Cluster-devel] " Matthew Wilcox
2023-08-30 6:11 ` Hao Xu
2023-08-30 6:11 ` Hao Xu
2023-08-30 6:11 ` Hao Xu
2023-08-30 6:11 ` [f2fs-dev] " Hao Xu
2023-08-30 6:11 ` [Cluster-devel] " Hao Xu
2023-09-03 22:30 ` Dave Chinner
2023-09-03 22:30 ` Dave Chinner
2023-09-03 22:30 ` Dave Chinner
2023-09-03 22:30 ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-09-03 22:30 ` [Cluster-devel] " Dave Chinner
2023-09-08 0:29 ` Pavel Begunkov
2023-09-08 0:29 ` Pavel Begunkov
2023-09-08 0:29 ` Pavel Begunkov
2023-09-08 0:29 ` [f2fs-dev] " Pavel Begunkov
2023-09-08 0:29 ` [Cluster-devel] " Pavel Begunkov
2023-09-10 22:01 ` Dave Chinner
2023-09-10 22:01 ` Dave Chinner
2023-09-10 22:01 ` Dave Chinner
2023-09-10 22:01 ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-09-10 22:01 ` [Cluster-devel] " Dave Chinner
2023-09-04 9:51 ` Christian Brauner
2023-09-04 9:51 ` Christian Brauner
2023-09-04 9:51 ` Christian Brauner
2023-09-04 9:51 ` [f2fs-dev] " Christian Brauner
2023-09-04 9:51 ` [Cluster-devel] " Christian Brauner
2023-08-27 13:28 ` [PATCH 08/11] vfs: move file_accessed() to the beginning of iterate_dir() Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 09/11] vfs: error out -EAGAIN if atime needs to be updated Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 20:51 ` Matthew Wilcox
2023-08-27 20:51 ` Matthew Wilcox
2023-08-27 20:51 ` Matthew Wilcox
2023-08-27 20:51 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 20:51 ` [Cluster-devel] " Matthew Wilcox
2023-08-27 13:28 ` [PATCH 10/11] vfs: trylock inode->i_rwsem in iterate_dir() to support nowait Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-09-04 9:37 ` Christian Brauner
2023-09-04 9:37 ` Christian Brauner
2023-09-04 9:37 ` Christian Brauner
2023-09-04 9:37 ` [f2fs-dev] " Christian Brauner
2023-09-04 9:37 ` [Cluster-devel] " Christian Brauner
2023-08-27 13:28 ` [PATCH 11/11] io_uring: add support for getdents Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-09-04 9:57 ` [PATCH v6 00/11] io_uring getdents Christian Brauner
2023-09-04 9:57 ` Christian Brauner
2023-09-04 9:57 ` Christian Brauner
2023-09-04 9:57 ` [f2fs-dev] " Christian Brauner
2023-09-04 9:57 ` [Cluster-devel] " Christian Brauner
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=20230827132835.1373581-7-hao.xu@linux.dev \
--to=hao.xu@linux.dev \
--cc=asmadeus@codewreck.org \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=bpf@vger.kernel.org \
--cc=brauner@kernel.org \
--cc=bugs@claycon.org \
--cc=cluster-devel@redhat.com \
--cc=codalist@coda.cs.cmu.edu \
--cc=david@fromorbit.com \
--cc=devel@lists.orangefs.org \
--cc=djwong@kernel.org \
--cc=ecryptfs@vger.kernel.org \
--cc=io-uring@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-cachefs@redhat.com \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-nilfs@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=samba-technical@lists.samba.org \
--cc=shr@fb.com \
--cc=viro@zeniv.linux.org.uk \
--cc=wanpengli@tencent.com \
/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.