diff options
Diffstat (limited to 'fs/proc/thread_self.c')
| -rw-r--r-- | fs/proc/thread_self.c | 22 | 
1 files changed, 10 insertions, 12 deletions
diff --git a/fs/proc/thread_self.c b/fs/proc/thread_self.c index a8371993b4fb..947b0f4fd0a1 100644 --- a/fs/proc/thread_self.c +++ b/fs/proc/thread_self.c @@ -1,5 +1,4 @@  #include <linux/sched.h> -#include <linux/namei.h>  #include <linux/slab.h>  #include <linux/pid_namespace.h>  #include "internal.h" @@ -20,21 +19,20 @@ static int proc_thread_self_readlink(struct dentry *dentry, char __user *buffer,  	return readlink_copy(buffer, buflen, tmp);  } -static void *proc_thread_self_follow_link(struct dentry *dentry, struct nameidata *nd) +static const char *proc_thread_self_follow_link(struct dentry *dentry, void **cookie)  {  	struct pid_namespace *ns = dentry->d_sb->s_fs_info;  	pid_t tgid = task_tgid_nr_ns(current, ns);  	pid_t pid = task_pid_nr_ns(current, ns); -	char *name = ERR_PTR(-ENOENT); -	if (pid) { -		name = kmalloc(PROC_NUMBUF + 6 + PROC_NUMBUF, GFP_KERNEL); -		if (!name) -			name = ERR_PTR(-ENOMEM); -		else -			sprintf(name, "%d/task/%d", tgid, pid); -	} -	nd_set_link(nd, name); -	return NULL; +	char *name; + +	if (!pid) +		return ERR_PTR(-ENOENT); +	name = kmalloc(PROC_NUMBUF + 6 + PROC_NUMBUF, GFP_KERNEL); +	if (!name) +		return ERR_PTR(-ENOMEM); +	sprintf(name, "%d/task/%d", tgid, pid); +	return *cookie = name;  }  static const struct inode_operations proc_thread_self_inode_operations = {  |