diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-05-10 10:50:41 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-05-10 22:20:16 -0400 |
commit | 4f697a5e173023a4f566339452a9d6f2cc7bd7dc (patch) | |
tree | d022bb1616e24f9488aa94e9d609e03c67508c62 | |
parent | 6920a4405e6ff7813de4d5a9eb5e0b475e41a06b (diff) | |
download | linux-4f697a5e173023a4f566339452a9d6f2cc7bd7dc.tar.gz linux-4f697a5e173023a4f566339452a9d6f2cc7bd7dc.tar.bz2 linux-4f697a5e173023a4f566339452a9d6f2cc7bd7dc.zip |
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 <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/namei.c | 12 |
1 files 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 @@ OK: ; } 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)) { |