Commit d912b0cc1a617d7c590d57b7ea971d50c7f02503
Committed by
Linus Torvalds
1 parent
77b14db502
Exists in
master
and in
4 other branches
[PATCH] sysctl: add a parent entry to ctl_table and set the parent entry
Add a parent entry into the ctl_table so you can walk the list of parents and find the entire path to a ctl_table entry. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Stephen Smalley <sds@tycho.nsa.gov> Cc: James Morris <jmorris@namei.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 19 additions and 0 deletions Side-by-side Diff
include/linux/sysctl.h
... | ... | @@ -1022,6 +1022,7 @@ |
1022 | 1022 | int maxlen; |
1023 | 1023 | mode_t mode; |
1024 | 1024 | ctl_table *child; |
1025 | + ctl_table *parent; /* Automatically set */ | |
1025 | 1026 | proc_handler *proc_handler; /* Callback for text formatting */ |
1026 | 1027 | ctl_handler *strategy; /* Callback function for all r/w */ |
1027 | 1028 | struct proc_dir_entry *de; /* /proc control block */ |
kernel/sysctl.c
... | ... | @@ -1240,6 +1240,23 @@ |
1240 | 1240 | } |
1241 | 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 | 1261 | * register_sysctl_table - register a sysctl hierarchy |
1245 | 1262 | * @table: the top-level table structure |
... | ... | @@ -1318,6 +1335,7 @@ |
1318 | 1335 | INIT_LIST_HEAD(&tmp->ctl_entry); |
1319 | 1336 | tmp->used = 0; |
1320 | 1337 | tmp->unregistering = NULL; |
1338 | + sysctl_set_parent(NULL, table); | |
1321 | 1339 | spin_lock(&sysctl_lock); |
1322 | 1340 | list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry); |
1323 | 1341 | spin_unlock(&sysctl_lock); |