From 4d4c0e28532c1fe0cc46a21de4aa858f9fc7816d Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 9 Dec 2009 19:06:18 -0500 Subject: [PATCH] Linux: deal with ctl_name removal The binary sysctl interface will be removed in kernel 2.6.33 and ctl_name will be dropped from the ctl_table structure. Make the code that uses ctl_name conditional on a configure test. (cherry picked from commit 886801b069fab1e6fc94003221dcfe18e05ac376) Change-Id: Iba0f107f299c6515e4e560d7596e6187bd68e399 Reviewed-on: http://gerrit.openafs.org/904 Tested-by: Marc Dionne Reviewed-by: Derrick Brashear Reviewed-on: http://gerrit.openafs.org/1013 Tested-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/LINUX/osi_sysctl.c | 14 ++++++++++++++ src/cf/linux-test4.m4 | 14 ++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index 9b5d8b0be..b76f8d6f7 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -815,6 +815,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_INIT_WORK_HAS_DATA LINUX_REGISTER_SYSCTL_TABLE_NOFLAG LINUX_SYSCTL_TABLE_CHECKING + LINUX_STRUCT_CTL_TABLE_HAS_CTL_NAME LINUX_HAVE_IGET LINUX_HAVE_I_SIZE_READ LINUX_FS_STRUCT_NAMEIDATA_HAS_PATH diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c index eee5c17ab..391deaa47 100644 --- a/src/afs/LINUX/osi_sysctl.c +++ b/src/afs/LINUX/osi_sysctl.c @@ -28,10 +28,12 @@ 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) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 1, +#endif #endif .procname = "hm_retry_RO", .data = &hm_retry_RO, @@ -40,10 +42,12 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME) #if defined(SYSCTL_TABLE_CHECKING) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 2, +#endif #endif .procname = "hm_retry_RW", .data = &hm_retry_RW, @@ -52,10 +56,12 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME) #if defined(SYSCTL_TABLE_CHECKING) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 3, +#endif #endif .procname = "hm_retry_int", .data = &hm_retry_int, @@ -64,10 +70,12 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME) #if defined(SYSCTL_TABLE_CHECKING) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 4, +#endif #endif .procname = "GCPAGs", .data = &afs_gcpags, @@ -76,10 +84,12 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME) #if defined(SYSCTL_TABLE_CHECKING) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 5, +#endif #endif .procname = "rx_deadtime", .data = &afs_rx_deadtime, @@ -88,10 +98,12 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME) #if defined(SYSCTL_TABLE_CHECKING) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 6, +#endif #endif .procname = "bkVolPref", .data = &afs_bkvolpref, @@ -104,10 +116,12 @@ 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) .ctl_name = CTL_UNNUMBERED, #else .ctl_name = 1, +#endif #endif .procname = "afs", .mode = 0555, diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index b2ec0c85b..4ac688fa0 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1215,3 +1215,17 @@ AC_DEFUN([LINUX_POSIX_TEST_LOCK_CONFLICT_ARG], [ if test "x$ac_cv_linux_posix_test_lock_conflict_arg" = "xyes"; then AC_DEFINE([POSIX_TEST_LOCK_CONFLICT_ARG], 1, [define if posix_test_lock takes a conflict argument]) fi]) + +AC_DEFUN([LINUX_STRUCT_CTL_TABLE_HAS_CTL_NAME], [ + AC_MSG_CHECKING([if struct ctl_table has ctl_name]) + AC_CACHE_VAL([ac_cv_linux_struct_ctl_table_has_ctl_name], [ + AC_TRY_KBUILD( +[#include ], +[struct ctl_table _t; +_t.ctl_name = 0;], + ac_cv_linux_struct_ctl_table_has_ctl_name=yes, + ac_cv_linux_struct_ctl_table_has_ctl_name=no)]) + AC_MSG_RESULT($ac_cv_linux_struct_ctl_table_has_ctl_name) + if test "x$ac_cv_linux_struct_ctl_table_has_ctl_name" = "xyes"; then + AC_DEFINE([STRUCT_CTL_TABLE_HAS_CTL_NAME], 1, [define if struct ctl_table has a ctl_name member]) + fi]) -- 2.39.5