diff options
author | Mateusz Guzik <mjguzik@gmail.com> | 2025-04-08 09:36:41 +0200 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-04-08 11:08:24 +0200 |
commit | e45960c279b098ebc0c2becbd27b3d60732c77ea (patch) | |
tree | b36c162bd0402bde9f263947064366e4b8906355 | |
parent | c9b380a0171aa6c05659330483bdabc1aabef173 (diff) |
fs: unconditionally use atime_needs_update() in pick_link()
Vast majority of the time the func returns false.
This avoids a branch to determine whether we are in RCU mode.
Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
Link: https://lore.kernel.org/20250408073641.1799151-1-mjguzik@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r-- | fs/namei.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/namei.c b/fs/namei.c index 360a86ca1f02..ae2643ff14dc 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1905,13 +1905,13 @@ static const char *pick_link(struct nameidata *nd, struct path *link, unlikely(link->mnt->mnt_flags & MNT_NOSYMFOLLOW)) return ERR_PTR(-ELOOP); - if (!(nd->flags & LOOKUP_RCU)) { + if (unlikely(atime_needs_update(&last->link, inode))) { + if (nd->flags & LOOKUP_RCU) { + if (!try_to_unlazy(nd)) + return ERR_PTR(-ECHILD); + } touch_atime(&last->link); cond_resched(); - } else if (atime_needs_update(&last->link, inode)) { - if (!try_to_unlazy(nd)) - return ERR_PTR(-ECHILD); - touch_atime(&last->link); } error = security_inode_follow_link(link->dentry, inode, |