From 4f697a5e173023a4f566339452a9d6f2cc7bd7dc Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 10 May 2015 10:50:41 -0400 Subject: [PATCH] namei: simpler treatment of symlinks with nothing other that / in the body Instead of saving name and branching to OK:, where we'll immediately restore it, and call walk_component() with WALK_PUT|WALK_GET and nd->last_type being LAST_BIND, which is equivalent to put_link(nd), err = 0, we can just treat that the same way we'd treat procfs-style "jump" symlinks - do put_link(nd) and move on. Signed-off-by: Al Viro --- fs/namei.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 678aeef85490..c5eb77a57974 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1865,11 +1865,13 @@ static int link_path_walk(const char *name, struct nameidata *nd) ; } nd->inode = nd->path.dentry->d_inode; - nd->stack[nd->depth - 1].name = name; - if (!*s) - goto OK; - name = s; - continue; + if (unlikely(!*s)) { + put_link(nd); + } else { + nd->stack[nd->depth - 1].name = name; + name = s; + continue; + } } } if (!d_can_lookup(nd->path.dentry)) {