From: Mateusz Guzik Date: Tue, 8 Apr 2025 07:36:41 +0000 (+0200) Subject: fs: unconditionally use atime_needs_update() in pick_link() X-Git-Tag: v6.16-rc1~223^2~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e45960c279b098ebc0c2becbd27b3d60732c77ea;p=thirdparty%2Flinux.git 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 Link: https://lore.kernel.org/20250408073641.1799151-1-mjguzik@gmail.com Signed-off-by: Christian Brauner --- diff --git a/fs/namei.c b/fs/namei.c index 360a86ca1f027..ae2643ff14dc7 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,