|
@@ -1240,6 +1240,23 @@ int do_sysctl_strategy (ctl_table *table,
|
|
}
|
|
}
|
|
#endif /* CONFIG_SYSCTL_SYSCALL */
|
|
#endif /* CONFIG_SYSCTL_SYSCALL */
|
|
|
|
|
|
|
|
+static void sysctl_set_parent(struct ctl_table *parent, struct ctl_table *table)
|
|
|
|
+{
|
|
|
|
+ for (; table->ctl_name || table->procname; table++) {
|
|
|
|
+ table->parent = parent;
|
|
|
|
+ if (table->child)
|
|
|
|
+ sysctl_set_parent(table, table->child);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static __init int sysctl_init(void)
|
|
|
|
+{
|
|
|
|
+ sysctl_set_parent(NULL, root_table);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+core_initcall(sysctl_init);
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* register_sysctl_table - register a sysctl hierarchy
|
|
* register_sysctl_table - register a sysctl hierarchy
|
|
* @table: the top-level table structure
|
|
* @table: the top-level table structure
|
|
@@ -1318,6 +1335,7 @@ struct ctl_table_header *register_sysctl_table(ctl_table * table)
|
|
INIT_LIST_HEAD(&tmp->ctl_entry);
|
|
INIT_LIST_HEAD(&tmp->ctl_entry);
|
|
tmp->used = 0;
|
|
tmp->used = 0;
|
|
tmp->unregistering = NULL;
|
|
tmp->unregistering = NULL;
|
|
|
|
+ sysctl_set_parent(NULL, table);
|
|
spin_lock(&sysctl_lock);
|
|
spin_lock(&sysctl_lock);
|
|
list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry);
|
|
list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry);
|
|
spin_unlock(&sysctl_lock);
|
|
spin_unlock(&sysctl_lock);
|