From: Al Viro <v...@zeniv.linux.org.uk>

... it does nothing if nd->last_type is LAST_BIND.

Signed-off-by: Al Viro <v...@zeniv.linux.org.uk>
---
 fs/namei.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index 6e6630c..5366b6d 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1854,7 +1854,11 @@ static int link_path_walk(const char *name, struct 
nameidata *nd)
                                        return err;
                                }
                                err = 0;
-                               if (likely(s)) {
+                               if (unlikely(!s)) {
+                                       /* jumped */
+                                       put_link(nd, &link, cookie);
+                                       break;
+                               } else {
                                        if (*s == '/') {
                                                if (!nd->root.mnt)
                                                        set_root(nd);
@@ -1869,9 +1873,9 @@ static int link_path_walk(const char *name, struct 
nameidata *nd)
                                                put_link(nd, &link, cookie);
                                                break;
                                        }
+                                       err = walk_component(nd, &next, 
LOOKUP_FOLLOW);
+                                       put_link(nd, &link, cookie);
                                }
-                               err = walk_component(nd, &next, LOOKUP_FOLLOW);
-                               put_link(nd, &link, cookie);
                        } while (err > 0);
 
                        nd->link_count--;
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to