diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-01-23 00:26:00 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-01-24 19:40:29 -0500 |
commit | 9eb47c26f09e27506d343ef52e634b2a50ee21ef (patch) | |
tree | 6055ec285771cf35c233d63c783b5c8381847094 | |
parent | 6a75ce167c53b41f15088d3c2c7e51c89dc8798a (diff) |
sysctl: Add a root pointer to ctl_table_set
Add a ctl_table_root pointer to ctl_table set so it is easy to
go from a ctl_table_set to a ctl_table_root.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-rw-r--r-- | fs/proc/proc_sysctl.c | 3 | ||||
-rw-r--r-- | include/linux/sysctl.h | 3 | ||||
-rw-r--r-- | net/sysctl_net.c | 5 |
3 files changed, 8 insertions, 3 deletions
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index d9c3ae6afe4c..65c13dddceae 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c | |||
@@ -45,6 +45,7 @@ static struct ctl_table_header root_table_header = { | |||
45 | static struct ctl_table_root sysctl_table_root = { | 45 | static struct ctl_table_root sysctl_table_root = { |
46 | .root_list = LIST_HEAD_INIT(sysctl_table_root.root_list), | 46 | .root_list = LIST_HEAD_INIT(sysctl_table_root.root_list), |
47 | .default_set.list = LIST_HEAD_INIT(root_table_header.ctl_entry), | 47 | .default_set.list = LIST_HEAD_INIT(root_table_header.ctl_entry), |
48 | .default_set.root = &sysctl_table_root, | ||
48 | }; | 49 | }; |
49 | 50 | ||
50 | static DEFINE_SPINLOCK(sysctl_lock); | 51 | static DEFINE_SPINLOCK(sysctl_lock); |
@@ -1348,9 +1349,11 @@ void unregister_sysctl_table(struct ctl_table_header * header) | |||
1348 | EXPORT_SYMBOL(unregister_sysctl_table); | 1349 | EXPORT_SYMBOL(unregister_sysctl_table); |
1349 | 1350 | ||
1350 | void setup_sysctl_set(struct ctl_table_set *p, | 1351 | void setup_sysctl_set(struct ctl_table_set *p, |
1352 | struct ctl_table_root *root, | ||
1351 | int (*is_seen)(struct ctl_table_set *)) | 1353 | int (*is_seen)(struct ctl_table_set *)) |
1352 | { | 1354 | { |
1353 | INIT_LIST_HEAD(&p->list); | 1355 | INIT_LIST_HEAD(&p->list); |
1356 | p->root = root; | ||
1354 | p->is_seen = is_seen; | 1357 | p->is_seen = is_seen; |
1355 | } | 1358 | } |
1356 | 1359 | ||
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index e40b8f6e5d0e..e73ba33cbf08 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -1047,6 +1047,7 @@ struct ctl_table_header | |||
1047 | 1047 | ||
1048 | struct ctl_table_set { | 1048 | struct ctl_table_set { |
1049 | struct list_head list; | 1049 | struct list_head list; |
1050 | struct ctl_table_root *root; | ||
1050 | int (*is_seen)(struct ctl_table_set *); | 1051 | int (*is_seen)(struct ctl_table_set *); |
1051 | }; | 1052 | }; |
1052 | 1053 | ||
@@ -1069,6 +1070,7 @@ struct ctl_path { | |||
1069 | void proc_sys_poll_notify(struct ctl_table_poll *poll); | 1070 | void proc_sys_poll_notify(struct ctl_table_poll *poll); |
1070 | 1071 | ||
1071 | extern void setup_sysctl_set(struct ctl_table_set *p, | 1072 | extern void setup_sysctl_set(struct ctl_table_set *p, |
1073 | struct ctl_table_root *root, | ||
1072 | int (*is_seen)(struct ctl_table_set *)); | 1074 | int (*is_seen)(struct ctl_table_set *)); |
1073 | extern void retire_sysctl_set(struct ctl_table_set *set); | 1075 | extern void retire_sysctl_set(struct ctl_table_set *set); |
1074 | 1076 | ||
@@ -1103,6 +1105,7 @@ static inline void unregister_sysctl_table(struct ctl_table_header * table) | |||
1103 | } | 1105 | } |
1104 | 1106 | ||
1105 | static inline void setup_sysctl_set(struct ctl_table_set *p, | 1107 | static inline void setup_sysctl_set(struct ctl_table_set *p, |
1108 | struct ctl_table_root *root, | ||
1106 | int (*is_seen)(struct ctl_table_set *)) | 1109 | int (*is_seen)(struct ctl_table_set *)) |
1107 | { | 1110 | { |
1108 | } | 1111 | } |
diff --git a/net/sysctl_net.c b/net/sysctl_net.c index 07c6b879c8b2..e998c6448046 100644 --- a/net/sysctl_net.c +++ b/net/sysctl_net.c | |||
@@ -74,8 +74,7 @@ static struct ctl_table_root net_sysctl_ro_root = { | |||
74 | 74 | ||
75 | static int __net_init sysctl_net_init(struct net *net) | 75 | static int __net_init sysctl_net_init(struct net *net) |
76 | { | 76 | { |
77 | setup_sysctl_set(&net->sysctls, | 77 | setup_sysctl_set(&net->sysctls, &net_sysctl_root, is_seen); |
78 | is_seen); | ||
79 | return 0; | 78 | return 0; |
80 | } | 79 | } |
81 | 80 | ||
@@ -95,7 +94,7 @@ static __init int net_sysctl_init(void) | |||
95 | ret = register_pernet_subsys(&sysctl_pernet_ops); | 94 | ret = register_pernet_subsys(&sysctl_pernet_ops); |
96 | if (ret) | 95 | if (ret) |
97 | goto out; | 96 | goto out; |
98 | setup_sysctl_set(&net_sysctl_ro_root.default_set, NULL); | 97 | setup_sysctl_set(&net_sysctl_ro_root.default_set, &net_sysctl_ro_root, NULL); |
99 | register_sysctl_root(&net_sysctl_ro_root); | 98 | register_sysctl_root(&net_sysctl_ro_root); |
100 | register_sysctl_root(&net_sysctl_root); | 99 | register_sysctl_root(&net_sysctl_root); |
101 | out: | 100 | out: |