diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sysctl.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index b3ee791ad663..3ca1d5ff0319 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -1240,6 +1240,23 @@ int do_sysctl_strategy (ctl_table *table, | |||
1240 | } | 1240 | } |
1241 | #endif /* CONFIG_SYSCTL_SYSCALL */ | 1241 | #endif /* CONFIG_SYSCTL_SYSCALL */ |
1242 | 1242 | ||
1243 | static void sysctl_set_parent(struct ctl_table *parent, struct ctl_table *table) | ||
1244 | { | ||
1245 | for (; table->ctl_name || table->procname; table++) { | ||
1246 | table->parent = parent; | ||
1247 | if (table->child) | ||
1248 | sysctl_set_parent(table, table->child); | ||
1249 | } | ||
1250 | } | ||
1251 | |||
1252 | static __init int sysctl_init(void) | ||
1253 | { | ||
1254 | sysctl_set_parent(NULL, root_table); | ||
1255 | return 0; | ||
1256 | } | ||
1257 | |||
1258 | core_initcall(sysctl_init); | ||
1259 | |||
1243 | /** | 1260 | /** |
1244 | * register_sysctl_table - register a sysctl hierarchy | 1261 | * register_sysctl_table - register a sysctl hierarchy |
1245 | * @table: the top-level table structure | 1262 | * @table: the top-level table structure |
@@ -1318,6 +1335,7 @@ struct ctl_table_header *register_sysctl_table(ctl_table * table) | |||
1318 | INIT_LIST_HEAD(&tmp->ctl_entry); | 1335 | INIT_LIST_HEAD(&tmp->ctl_entry); |
1319 | tmp->used = 0; | 1336 | tmp->used = 0; |
1320 | tmp->unregistering = NULL; | 1337 | tmp->unregistering = NULL; |
1338 | sysctl_set_parent(NULL, table); | ||
1321 | spin_lock(&sysctl_lock); | 1339 | spin_lock(&sysctl_lock); |
1322 | list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry); | 1340 | list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry); |
1323 | spin_unlock(&sysctl_lock); | 1341 | spin_unlock(&sysctl_lock); |