diff options
Diffstat (limited to 'fs/proc/proc_sysctl.c')
| -rw-r--r-- | fs/proc/proc_sysctl.c | 30 | 
1 files changed, 12 insertions, 18 deletions
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index ec54a57c469..e0d3e7e59cb 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c @@ -1084,8 +1084,7 @@ out:  /**   * __register_sysctl_table - register a leaf sysctl table - * @root: List of sysctl headers to register on - * @namespaces: Data to compute which lists of sysctl entries are visible + * @set: Sysctl tree to register on   * @path: The path to the directory the sysctl table is in.   * @table: the top-level table structure   * @@ -1126,26 +1125,24 @@ out:   * to the table header on success.   */  struct ctl_table_header *__register_sysctl_table( -	struct ctl_table_root *root, -	struct nsproxy *namespaces, +	struct ctl_table_set *set,  	const char *path, struct ctl_table *table)  { +	struct ctl_table_root *root = set->dir.header.root;  	struct ctl_table_header *links = NULL;  	struct ctl_table_header *header;  	const char *name, *nextname; -	struct ctl_table_set *set;  	struct ctl_dir *dir;  	header = kzalloc(sizeof(struct ctl_table_header), GFP_KERNEL);  	if (!header)  		return NULL; -	init_header(header, root, NULL, table); +	init_header(header, root, set, table);  	if (sysctl_check_table(path, table))  		goto fail;  	spin_lock(&sysctl_lock); -	header->set = set = lookup_header_set(root, namespaces);  	dir = &set->dir;  	dir->header.nreg++;  	spin_unlock(&sysctl_lock); @@ -1223,8 +1220,7 @@ static int count_subheaders(struct ctl_table *table)  }  static int register_leaf_sysctl_tables(const char *path, char *pos, -	struct ctl_table_header ***subheader, -	struct ctl_table_root *root, struct nsproxy *namespaces, +	struct ctl_table_header ***subheader, struct ctl_table_set *set,  	struct ctl_table *table)  {  	struct ctl_table *ctl_table_arg = NULL; @@ -1261,7 +1257,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,  	/* Register everything except a directory full of subdirectories */  	if (nr_files || !nr_dirs) {  		struct ctl_table_header *header; -		header = __register_sysctl_table(root, namespaces, path, files); +		header = __register_sysctl_table(set, path, files);  		if (!header) {  			kfree(ctl_table_arg);  			goto out; @@ -1286,7 +1282,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,  			goto out;  		err = register_leaf_sysctl_tables(path, child_pos, subheader, -						  root, namespaces, entry->child); +						  set, entry->child);  		pos[0] = '\0';  		if (err)  			goto out; @@ -1299,8 +1295,7 @@ out:  /**   * __register_sysctl_paths - register a sysctl table hierarchy - * @root: List of sysctl headers to register on - * @namespaces: Data to compute which lists of sysctl entries are visible + * @set: Sysctl tree to register on   * @path: The path to the directory the sysctl table is in.   * @table: the top-level table structure   * @@ -1310,8 +1305,7 @@ out:   * See __register_sysctl_table for more details.   */  struct ctl_table_header *__register_sysctl_paths( -	struct ctl_table_root *root, -	struct nsproxy *namespaces, +	struct ctl_table_set *set,  	const struct ctl_path *path, struct ctl_table *table)  {  	struct ctl_table *ctl_table_arg = table; @@ -1337,7 +1331,7 @@ struct ctl_table_header *__register_sysctl_paths(  		table = table->child;  	}  	if (nr_subheaders == 1) { -		header = __register_sysctl_table(root, namespaces, new_path, table); +		header = __register_sysctl_table(set, new_path, table);  		if (header)  			header->ctl_table_arg = ctl_table_arg;  	} else { @@ -1351,7 +1345,7 @@ struct ctl_table_header *__register_sysctl_paths(  		header->ctl_table_arg = ctl_table_arg;  		if (register_leaf_sysctl_tables(new_path, pos, &subheader, -						root, namespaces, table)) +						set, table))  			goto err_register_leaves;  	} @@ -1384,7 +1378,7 @@ err_register_leaves:  struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,  						struct ctl_table *table)  { -	return __register_sysctl_paths(&sysctl_table_root, current->nsproxy, +	return __register_sysctl_paths(&sysctl_table_root.default_set,  					path, table);  }  EXPORT_SYMBOL(register_sysctl_paths);  |