summaryrefslogtreecommitdiff
path: root/fs/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 47b20086e9f3..d9f77ff60b55 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -966,13 +966,19 @@ const char *get_link(struct nameidata *nd)
int error;
const char *res;
- if (nd->flags & LOOKUP_RCU) {
+ if (!(nd->flags & LOOKUP_RCU)) {
+ touch_atime(&last->link);
+ cond_resched();
+ } else if (atime_needs_update(&last->link, inode)) {
if (unlikely(unlazy_walk(nd, NULL, 0)))
return ERR_PTR(-ECHILD);
+ touch_atime(&last->link);
}
- cond_resched();
- touch_atime(&last->link);
+ if (nd->flags & LOOKUP_RCU) {
+ if (unlikely(unlazy_walk(nd, NULL, 0)))
+ return ERR_PTR(-ECHILD);
+ }
error = security_inode_follow_link(dentry, inode,
nd->flags & LOOKUP_RCU);