]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Linux: Register number sysctls only when desperate
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Wed, 28 Apr 2010 00:13:30 +0000 (01:13 +0100)
committerDerrick Brashear <shadow@dementia.org>
Wed, 28 Apr 2010 04:43:15 +0000 (21:43 -0700)
The AFS sysctl interface was trying to register numeric system
calls whenever the kernel would let it. This is anti-social, as
we've never had sysctl numbers allocated to us. In kernels newer
than 2.6.24, this misbehaviour is detected and punished. In recent
kernels, the binary interface has gone away entirely.

Since 2.6.19, the kernel has supported allocated unnumbered system
calls. These are only available via /proc/sys (and not the using
the legacy, binary, API), but they're really the only interface
available to us.

Change the sysctl registration code to use unnumbered calls whenever
they are available. Unnumbered calls aren't available in 2.4.x, so
completely remove that code there.

Change-Id: I882117ca2250894f479292026fed84ff0b5e7972
Reviewed-on: http://gerrit.openafs.org/1871
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
acinclude.m4
src/afs/LINUX/osi_sysctl.c
src/afs/LINUX24/osi_sysctl.c
src/cf/linux-test4.m4

index a4eb04a98ba0c86955336fe5a48342fff0c94bef..7aaef2a67bc339ef7251bf84fd4011aa75e1b17c 100644 (file)
@@ -935,7 +935,6 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
                 LINUX_KEY_ALLOC_NEEDS_CRED
                 LINUX_INIT_WORK_HAS_DATA
                 LINUX_REGISTER_SYSCTL_TABLE_NOFLAG
-                LINUX_SYSCTL_TABLE_CHECKING
                 LINUX_EXPORTS_INIT_MM
                  LINUX_EXPORTS_SYS_CHDIR
                  LINUX_EXPORTS_SYS_OPEN
index c8b5bfbd3ffcda57dc699c26269f95cae3c5fcd7..a8f7face5181f5c0e24949bf1050ec89ee8c42ca 100644 (file)
@@ -37,7 +37,7 @@ static struct ctl_table_header *afs_sysctl = NULL;
 static ctl_table afs_sysctl_table[] = {
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 1, 
@@ -51,7 +51,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
         .ctl_name      = 2, 
@@ -65,7 +65,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 3, 
@@ -79,7 +79,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 4, 
@@ -93,7 +93,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 5, 
@@ -107,7 +107,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 6, 
@@ -121,7 +121,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 7, 
@@ -135,7 +135,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 8, 
@@ -149,7 +149,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 9, 
@@ -163,7 +163,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 10, 
@@ -177,7 +177,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 11, 
@@ -191,7 +191,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 12, 
@@ -205,7 +205,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 13,
@@ -219,7 +219,7 @@ static ctl_table afs_sysctl_table[] = {
     },
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 14, 
@@ -237,7 +237,7 @@ static ctl_table afs_sysctl_table[] = {
 static ctl_table fs_sysctl_table[] = {
     {
 #if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
-#if defined(SYSCTL_TABLE_CHECKING)
+#if defined(CTL_UNNUMBERED)
        .ctl_name       = CTL_UNNUMBERED, 
 #else
        .ctl_name       = 1, 
index 89bd63d031d5b641bdccced239c0238e28d481e4..9933c3a37c65bc892fadbd8db26d9a5721411d82 100644 (file)
@@ -36,11 +36,7 @@ static struct ctl_table_header *afs_sysctl = NULL;
 
 static ctl_table afs_sysctl_table[] = {
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 1, 
-#endif
        .procname       = "hm_retry_RO",
        .data           = &hm_retry_RO, 
        .maxlen         = sizeof(afs_int32), 
@@ -48,11 +44,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
         .ctl_name      = 2, 
-#endif
         .procname      = "hm_retry_RW",
         .data          = &hm_retry_RW,
        .maxlen         = sizeof(afs_int32), 
@@ -60,11 +52,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 3, 
-#endif
        .procname       = "hm_retry_int",
        .data           = &hm_retry_int, 
        .maxlen         = sizeof(afs_int32), 
@@ -72,11 +60,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 4, 
-#endif
        .procname       = "GCPAGs",
        .data           = &afs_gcpags, 
        .maxlen         = sizeof(afs_int32), 
@@ -84,11 +68,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 5, 
-#endif
        .procname       = "rx_deadtime",
        .data           = &afs_rx_deadtime, 
        .maxlen         = sizeof(afs_int32), 
@@ -96,11 +76,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 6, 
-#endif
        .procname       = "bkVolPref",
        .data           = &afs_bkvolpref, 
        .maxlen         = sizeof(afs_int32), 
@@ -108,11 +84,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 7, 
-#endif
        .procname       = "afs_blocksUsed",
        .data           = &afs_blocksUsed,
        .maxlen         = sizeof(afs_int32), 
@@ -120,11 +92,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 8, 
-#endif
        .procname       = "afs_blocksUsed_0",
        .data           = &afs_blocksUsed_0,
        .maxlen         = sizeof(afs_int32),
@@ -132,11 +100,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 9, 
-#endif
        .procname       = "afs_blocksUsed_1",
        .data           = &afs_blocksUsed_1, 
        .maxlen         = sizeof(afs_int32),
@@ -144,11 +108,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 10, 
-#endif
        .procname       = "afs_blocksUsed_2",
        .data           = &afs_blocksUsed_2, 
        .maxlen         = sizeof(afs_int32), 
@@ -156,11 +116,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 11, 
-#endif
        .procname       = "afs_pct1",
        .data           = &afs_pct1, 
        .maxlen         = sizeof(afs_int32),
@@ -168,11 +124,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 12, 
-#endif
        .procname       = "afs_pct2",
        .data           = &afs_pct2, 
        .maxlen         = sizeof(afs_int32),
@@ -180,11 +132,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 13,
-#endif
        .procname       = "afs_cacheBlocks",
        .data           = &afs_cacheBlocks,
        .maxlen         = sizeof(afs_int32),
@@ -192,11 +140,7 @@ static ctl_table afs_sysctl_table[] = {
        .proc_handler   = &proc_dointvec
     },
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 14, 
-#endif
        .procname       = "md5inum",
        .data           = &afs_new_inum, 
        .maxlen         = sizeof(afs_int32),
@@ -208,11 +152,7 @@ static ctl_table afs_sysctl_table[] = {
 
 static ctl_table fs_sysctl_table[] = {
     {
-#if defined(SYSCTL_TABLE_CHECKING)
-       .ctl_name       = CTL_UNNUMBERED, 
-#else
        .ctl_name       = 1, 
-#endif
        .procname       = "afs", 
        .mode           = 0555, 
        .child          = afs_sysctl_table
index 8b4fd94c77fdd8be4a6338df7c64cc166e8a80b1..bc62aec8d7aeafb2bc1e8b0c3d06778ef64fd05a 100644 (file)
@@ -442,17 +442,6 @@ AC_DEFUN([LINUX_KMEM_CACHE_INIT], [
 ])
 
 
-AC_DEFUN([LINUX_SYSCTL_TABLE_CHECKING], [
-  AC_CHECK_LINUX_BUILD([for sysctl table checking],
-                      [ac_cv_linux_sysctl_table_checking],
-                      [#include <linux/sysctl.h>],
-                      [extern int sysctl_check_table(int) __attribute__((weak));
-                       sysctl_check_table(NULL);],
-                      [SYSCTL_TABLE_CHECKING],
-                      [define if your kernel has sysctl table checking])
-])
-
-
 AC_DEFUN([LINUX_EXPORTS_PROC_ROOT_FS], [
   AC_CHECK_LINUX_BUILD([if proc_root_fs is defined and exported],
                       [ac_cv_linux_exports_proc_root_fs],