Switch proc/self to nd_set_link()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
ac278a9c50
commit
7fee4868be
1 changed files with 19 additions and 5 deletions
|
@ -2369,16 +2369,30 @@ static void *proc_self_follow_link(struct dentry *dentry, struct nameidata *nd)
|
|||
{
|
||||
struct pid_namespace *ns = dentry->d_sb->s_fs_info;
|
||||
pid_t tgid = task_tgid_nr_ns(current, ns);
|
||||
char tmp[PROC_NUMBUF];
|
||||
if (!tgid)
|
||||
return ERR_PTR(-ENOENT);
|
||||
sprintf(tmp, "%d", task_tgid_nr_ns(current, ns));
|
||||
return ERR_PTR(vfs_follow_link(nd,tmp));
|
||||
char *name = ERR_PTR(-ENOENT);
|
||||
if (tgid) {
|
||||
name = __getname();
|
||||
if (!name)
|
||||
name = ERR_PTR(-ENOMEM);
|
||||
else
|
||||
sprintf(name, "%d", tgid);
|
||||
}
|
||||
nd_set_link(nd, name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void proc_self_put_link(struct dentry *dentry, struct nameidata *nd,
|
||||
void *cookie)
|
||||
{
|
||||
char *s = nd_get_link(nd);
|
||||
if (!IS_ERR(s))
|
||||
__putname(s);
|
||||
}
|
||||
|
||||
static const struct inode_operations proc_self_inode_operations = {
|
||||
.readlink = proc_self_readlink,
|
||||
.follow_link = proc_self_follow_link,
|
||||
.put_link = proc_self_put_link,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue