diff options
| author | Linus Torvalds <[email protected]> | 2012-03-23 18:08:58 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2012-03-23 18:08:58 -0700 | 
| commit | f1d38e423a697b7aa06e12d3ca4753bcc1aa3531 (patch) | |
| tree | 1cbfd86070f724d5ffe53146d4c67edf14cccf98 /net/sysctl_net.c | |
| parent | dae430c6f6e5d0b98c238c340a41a39e221e8940 (diff) | |
| parent | 4e474a00d7ff746ed177ddae14fa8b2d4bad7a00 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl
Pull sysctl updates from Eric Biederman:
 - Rewrite of sysctl for speed and clarity.
   Insert/remove/Lookup in sysctl are all now O(NlogN) operations, and
   are no longer bottlenecks in the process of adding and removing
   network devices.
   sysctl is now focused on being a filesystem instead of system call
   and the code can all be found in fs/proc/proc_sysctl.c.  Hopefully
   this means the code is now approachable.
   Much thanks is owed to Lucian Grinjincu for keeping at this until
   something was found that was usable.
 - The recent proc_sys_poll oops found by the fuzzer during hibernation
   is fixed.
* git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl: (36 commits)
  sysctl: protect poll() in entries that may go away
  sysctl: Don't call sysctl_follow_link unless we are a link.
  sysctl: Comments to make the code clearer.
  sysctl: Correct error return from get_subdir
  sysctl: An easier to read version of find_subdir
  sysctl: fix memset parameters in setup_sysctl_set()
  sysctl: remove an unused variable
  sysctl: Add register_sysctl for normal sysctl users
  sysctl: Index sysctl directories with rbtrees.
  sysctl: Make the header lists per directory.
  sysctl: Move sysctl_check_dups into insert_header
  sysctl: Modify __register_sysctl_paths to take a set instead of a root and an nsproxy
  sysctl: Replace root_list with links between sysctl_table_sets.
  sysctl: Add sysctl_print_dir and use it in get_subdir
  sysctl: Stop requiring explicit management of sysctl directories
  sysctl: Add a root pointer to ctl_table_set
  sysctl: Rewrite proc_sys_readdir in terms of first_entry and next_entry
  sysctl: Rewrite proc_sys_lookup introducing find_entry and lookup_entry.
  sysctl: Normalize the root_table data structure.
  sysctl: Factor out insert_header and erase_header
  ...
Diffstat (limited to 'net/sysctl_net.c')
| -rw-r--r-- | net/sysctl_net.c | 24 | 
1 files changed, 9 insertions, 15 deletions
diff --git a/net/sysctl_net.c b/net/sysctl_net.c index e75813904f26..c3e65aebecc0 100644 --- a/net/sysctl_net.c +++ b/net/sysctl_net.c @@ -74,15 +74,13 @@ static struct ctl_table_root net_sysctl_ro_root = {  static int __net_init sysctl_net_init(struct net *net)  { -	setup_sysctl_set(&net->sysctls, -			 &net_sysctl_ro_root.default_set, -			 is_seen); +	setup_sysctl_set(&net->sysctls, &net_sysctl_root, is_seen);  	return 0;  }  static void __net_exit sysctl_net_exit(struct net *net)  { -	WARN_ON(!list_empty(&net->sysctls.list)); +	retire_sysctl_set(&net->sysctls);  }  static struct pernet_operations sysctl_pernet_ops = { @@ -90,36 +88,32 @@ static struct pernet_operations sysctl_pernet_ops = {  	.exit = sysctl_net_exit,  }; -static __init int sysctl_init(void) +static __init int net_sysctl_init(void)  {  	int ret;  	ret = register_pernet_subsys(&sysctl_pernet_ops);  	if (ret)  		goto out; -	register_sysctl_root(&net_sysctl_root); -	setup_sysctl_set(&net_sysctl_ro_root.default_set, NULL, NULL); +	setup_sysctl_set(&net_sysctl_ro_root.default_set, &net_sysctl_ro_root, NULL);  	register_sysctl_root(&net_sysctl_ro_root); +	register_sysctl_root(&net_sysctl_root);  out:  	return ret;  } -subsys_initcall(sysctl_init); +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);  |