diff options
Diffstat (limited to 'fs/proc/root.c')
| -rw-r--r-- | fs/proc/root.c | 17 | 
1 files changed, 3 insertions, 14 deletions
| diff --git a/fs/proc/root.c b/fs/proc/root.c index 9889a92d2e01..c6e9fac26bac 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c @@ -100,14 +100,13 @@ static struct dentry *proc_mount(struct file_system_type *fs_type,  	int err;  	struct super_block *sb;  	struct pid_namespace *ns; -	struct proc_inode *ei;  	char *options;  	if (flags & MS_KERNMOUNT) {  		ns = (struct pid_namespace *)data;  		options = NULL;  	} else { -		ns = current->nsproxy->pid_ns; +		ns = task_active_pid_ns(current);  		options = data;  	} @@ -130,13 +129,6 @@ static struct dentry *proc_mount(struct file_system_type *fs_type,  		sb->s_flags |= MS_ACTIVE;  	} -	ei = PROC_I(sb->s_root->d_inode); -	if (!ei->pid) { -		rcu_read_lock(); -		ei->pid = get_pid(find_pid_ns(1, ns)); -		rcu_read_unlock(); -	} -  	return dget(sb->s_root);  } @@ -153,6 +145,7 @@ static struct file_system_type proc_fs_type = {  	.name		= "proc",  	.mount		= proc_mount,  	.kill_sb	= proc_kill_sb, +	.fs_flags	= FS_USERNS_MOUNT,  };  void __init proc_root_init(void) @@ -163,12 +156,8 @@ void __init proc_root_init(void)  	err = register_filesystem(&proc_fs_type);  	if (err)  		return; -	err = pid_ns_prepare_proc(&init_pid_ns); -	if (err) { -		unregister_filesystem(&proc_fs_type); -		return; -	} +	proc_self_init();  	proc_symlink("mounts", NULL, "self/mounts");  	proc_net_init(); |