From: Simon Wilkinson Date: Wed, 28 Apr 2010 00:13:30 +0000 (+0100) Subject: Linux: Register number sysctls only when desperate X-Git-Tag: openafs-devel-1_5_75~347 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=d02f9a0b0b95ac6ada6be0b2b9a1e164f75a425d Linux: Register number sysctls only when desperate 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 Tested-by: Derrick Brashear --- diff --git a/acinclude.m4 b/acinclude.m4 index a4eb04a..7aaef2a 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -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 diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c index c8b5bfb..a8f7fac 100644 --- a/src/afs/LINUX/osi_sysctl.c +++ b/src/afs/LINUX/osi_sysctl.c @@ -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, diff --git a/src/afs/LINUX24/osi_sysctl.c b/src/afs/LINUX24/osi_sysctl.c index 89bd63d..9933c3a 100644 --- a/src/afs/LINUX24/osi_sysctl.c +++ b/src/afs/LINUX24/osi_sysctl.c @@ -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 diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 8b4fd94..bc62aec 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -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 ], - [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],