namei: pass both WALK_GET and WALK_MORE to should_follow_link()

... and pull put_link() logics into it.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/fs/namei.c b/fs/namei.c
index 57d6092..5d31f0b 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1725,6 +1725,8 @@
 	return 1;
 }
 
+enum {WALK_GET = 1, WALK_MORE = 2};
+
 /*
  * Do we need to follow links? We _really_ want to be able
  * to do this check without having to look at inode->i_op,
@@ -1732,12 +1734,14 @@
  * for the common case.
  */
 static inline int should_follow_link(struct nameidata *nd, struct path *link,
-				     int follow,
+				     int flags,
 				     struct inode *inode, unsigned seq)
 {
+	if (!(flags & WALK_MORE) && nd->depth)
+		put_link(nd);
 	if (likely(!d_is_symlink(link->dentry)))
 		return 0;
-	if (!follow && !(nd->flags & LOOKUP_FOLLOW))
+	if (!(flags & WALK_GET) && !(nd->flags & LOOKUP_FOLLOW))
 		return 0;
 	/* make sure that d_is_symlink above matches inode */
 	if (nd->flags & LOOKUP_RCU) {
@@ -1747,8 +1751,6 @@
 	return pick_link(nd, link, inode, seq);
 }
 
-enum {WALK_GET = 1, WALK_MORE = 2};
-
 static int walk_component(struct nameidata *nd, int flags)
 {
 	struct path path;
@@ -1789,9 +1791,7 @@
 		inode = d_backing_inode(path.dentry);
 	}
 
-	if (!(flags & WALK_MORE) && nd->depth)
-		put_link(nd);
-	err = should_follow_link(nd, &path, flags & WALK_GET, inode, seq);
+	err = should_follow_link(nd, &path, flags, inode, seq);
 	if (unlikely(err))
 		return err;
 	path_to_nameidata(&path, nd);
@@ -2616,8 +2616,6 @@
 		dput(path.dentry);
 		return -ENOENT;
 	}
-	if (nd->depth)
-		put_link(nd);
 	path.mnt = nd->path.mnt;
 	error = should_follow_link(nd, &path, 0,
 				   d_backing_inode(path.dentry), 0);
@@ -3313,8 +3311,6 @@
 	seq = 0;	/* out of RCU mode, so the value doesn't matter */
 	inode = d_backing_inode(path.dentry);
 finish_lookup:
-	if (nd->depth)
-		put_link(nd);
 	error = should_follow_link(nd, &path, 0, inode, seq);
 	if (unlikely(error))
 		return error;