Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 295464
b: refs/heads/master
c: 60a47a2
h: refs/heads/master
v: v3
  • Loading branch information
Eric W. Biederman committed Jan 25, 2012
1 parent 0829704 commit e7e04c6
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0e47c99d7fe25e0f3907d9f3401079169d904891
refs/heads/master: 60a47a2e823cbe6b609346bffff61a00c0c76470
30 changes: 12 additions & 18 deletions trunk/fs/proc/proc_sysctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1084,8 +1084,7 @@ static int insert_links(struct ctl_table_header *head)

/**
* __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
*
Expand Down Expand Up @@ -1126,26 +1125,24 @@ static int insert_links(struct ctl_table_header *head)
* 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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -1299,8 +1295,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,

/**
* __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
*
Expand All @@ -1310,8 +1305,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
* 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;
Expand All @@ -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 {
Expand All @@ -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;
}

Expand Down Expand Up @@ -1384,7 +1378,7 @@ struct ctl_table_header *__register_sysctl_paths(
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);
Expand Down
4 changes: 2 additions & 2 deletions trunk/include/linux/sysctl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1079,10 +1079,10 @@ extern void retire_sysctl_set(struct ctl_table_set *set);

void register_sysctl_root(struct ctl_table_root *root);
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_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_header *register_sysctl_table(struct ctl_table * table);
struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
Expand Down
10 changes: 3 additions & 7 deletions trunk/net/sysctl_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,19 +105,15 @@ subsys_initcall(net_sysctl_init);
struct ctl_table_header *register_net_sysctl_table(struct net *net,
const struct ctl_path *path, struct ctl_table *table)
{
struct nsproxy namespaces;
namespaces = *current->nsproxy;
namespaces.net_ns = net;
return __register_sysctl_paths(&net_sysctl_root,
&namespaces, path, table);
return __register_sysctl_paths(&net->sysctls, path, table);
}
EXPORT_SYMBOL_GPL(register_net_sysctl_table);

struct ctl_table_header *register_net_sysctl_rotable(const
struct ctl_path *path, struct ctl_table *table)
{
return __register_sysctl_paths(&net_sysctl_ro_root,
&init_nsproxy, path, table);
return __register_sysctl_paths(&net_sysctl_ro_root.default_set,
path, table);
}
EXPORT_SYMBOL_GPL(register_net_sysctl_rotable);

Expand Down

0 comments on commit e7e04c6

Please sign in to comment.