Currently the non-nd_set_link based versions of ->follow_link are expected to do a path_put(&nd->path). This calling convention is unexpected, undocumented and doesn't match what the nd_set_link-based instance do. Move the path_put out of the only non-nd_set_link based ->follow_link instance into the caller. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- fs/namei.c | 3 +-- fs/proc/base.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) Index: linux-2.6/fs/namei.c =================================================================== --- linux-2.6.orig/fs/namei.c 2012-06-18 12:46:47.560143542 +0200 +++ linux-2.6/fs/namei.c 2012-06-18 12:47:02.424143920 +0200 @@ -615,7 +615,7 @@ follow_link(struct path *link, struct na *p = dentry->d_inode->i_op->follow_link(dentry, nd); error = PTR_ERR(*p); if (IS_ERR(*p)) - goto out_put_link; + goto out_put_nd_path; error = 0; s = nd_get_link(nd); @@ -640,7 +640,6 @@ follow_link(struct path *link, struct na out_put_nd_path: path_put(&nd->path); -out_put_link: path_put(link); return error; } Index: linux-2.6/fs/proc/base.c =================================================================== --- linux-2.6.orig/fs/proc/base.c 2012-06-18 12:46:47.560143542 +0200 +++ linux-2.6/fs/proc/base.c 2012-06-18 12:47:02.424143920 +0200 @@ -1427,16 +1427,20 @@ static int proc_exe_link(struct dentry * static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd) { struct inode *inode = dentry->d_inode; + struct path path; int error = -EACCES; - /* We don't need a base pointer in the /proc filesystem */ - path_put(&nd->path); - /* Are we allowed to snoop on the tasks file descriptors? */ if (!proc_fd_access_allowed(inode)) goto out; - error = PROC_I(inode)->op.proc_get_link(dentry, &nd->path); + error = PROC_I(inode)->op.proc_get_link(dentry, &path); + if (error) + goto out; + + path_put(&nd->path); + nd->path = path; + return NULL; out: return ERR_PTR(error); } -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html