aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sysctl.h
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-11-30 07:50:18 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:55:16 -0500
commit29e796fd4de54b8f5bc30d897611210ece4fd0f2 (patch)
treea05b5e87e7b6c4d1820d892c4aabc438ccee58e5 /include/linux/sysctl.h
parentbe0ea7d5da3d99140bde7e5cea328eb111731700 (diff)
sysctl: Add register_sysctl_paths function
There are a number of modules that register a sysctl table somewhere deeply nested in the sysctl hierarchy, such as fs/nfs, fs/xfs, dev/cdrom, etc. They all specify several dummy ctl_tables for the path name. This patch implements register_sysctl_path that takes an additional path name, and makes up dummy sysctl nodes for each component. This patch was originally written by Olaf Kirch and brought to my attention and reworked some by Olaf Hering. I have changed a few additional things so the bugs are mine. After converting all of the easy callers Olaf Hering observed allyesconfig ARCH=i386, the patch reduces the final binary size by 9369 bytes. .text +897 .data -7008 text data bss dec hex filename 26959310 4045899 4718592 35723801 2211a19 ../vmlinux-vanilla 26960207 4038891 4718592 35717690 221023a ../O-allyesconfig/vmlinux So this change is both a space savings and a code simplification. CC: Olaf Kirch <okir@suse.de> CC: Olaf Hering <olaf@aepfle.de> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Serge Hallyn <serue@us.ibm.com> Cc: Daniel Lezcano <dlezcano@fr.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/sysctl.h')
-rw-r--r--include/linux/sysctl.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 4f5047df8a9e..3b6e2c9fbb2e 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -1059,7 +1059,15 @@ struct ctl_table_header
1059 struct completion *unregistering; 1059 struct completion *unregistering;
1060}; 1060};
1061 1061
1062/* struct ctl_path describes where in the hierarchy a table is added */
1063struct ctl_path {
1064 const char *procname;
1065 int ctl_name;
1066};
1067
1062struct ctl_table_header *register_sysctl_table(struct ctl_table * table); 1068struct ctl_table_header *register_sysctl_table(struct ctl_table * table);
1069struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
1070 struct ctl_table *table);
1063 1071
1064void unregister_sysctl_table(struct ctl_table_header * table); 1072void unregister_sysctl_table(struct ctl_table_header * table);
1065int sysctl_check_table(struct ctl_table *table); 1073int sysctl_check_table(struct ctl_table *table);