From: Al Viro <[email protected]>

move increment of ->depth to the point where we'd discovered
that get_link() has not returned an error, adjust exits
accordingly.

Signed-off-by: Al Viro <[email protected]>
---
 fs/namei.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index 800cf7e..51bcbec 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2001,8 +2001,11 @@ static int trailing_symlink(struct nameidata *nd)
        s = get_link(nd);
        if (unlikely(IS_ERR(s)))
                return PTR_ERR(s);
-       if (unlikely(!s))
+       nd->depth++;
+       if (unlikely(!s)) {
+               nd->depth--;
                return 0;
+       }
        if (*s == '/') {
                if (!nd->root.mnt)
                        set_root(nd);
@@ -2012,12 +2015,14 @@ static int trailing_symlink(struct nameidata *nd)
                nd->flags |= LOOKUP_JUMPED;
        }
        nd->inode = nd->path.dentry->d_inode;
-       nd->depth++;
        error = link_path_walk(s, nd);
-       nd->depth--;
-       if (unlikely(error))
+       if (unlikely(error)) {
+               nd->depth--;
                put_link(nd);
-       return error;
+               return error;
+       }
+       nd->depth--;
+       return 0;
 }
 
 static inline int lookup_last(struct nameidata *nd)
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
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