link_path_walk: handle get_link() returning ERR_PTR() immediately
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 18 Apr 2015 23:10:36 +0000 (19:10 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 11 May 2015 02:19:55 +0000 (22:19 -0400)
If we get ERR_PTR() from get_link(), we are guaranteed to get err != 0
when we break out of do-while, so we are going to hit if (err) return err;
shortly after it.  Pull that into the if (IS_ERR(s)) body.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c

index d729ef7cbf46ffa366f9b30638bf85f03e3f8966..99374704c17ddf45bdc0fb6e689f28a7b46f8490 100644 (file)
@@ -1792,7 +1792,9 @@ static int link_path_walk(const char *name, struct nameidata *nd)
 
                                if (unlikely(IS_ERR(s))) {
                                        err = PTR_ERR(s);
-                                       break;
+                                       current->link_count--;
+                                       nd->depth--;
+                                       return err;
                                }
                                err = 0;
                                if (likely(s)) {