From 886801b069fab1e6fc94003221dcfe18e05ac376 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. Change-Id: Iba0f107f299c6515e4e560d7596e6187bd68e399 Reviewed-on: http://gerrit.openafs.org/904 Tested-by: Marc Dionne Reviewed-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/LINUX/osi_sysctl.c | 32 ++++++++++++++++++++++++++++++++ src/cf/linux-test4.m4 | 14 ++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index 5fc6e30..01c2e17 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -975,6 +975,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 if test "x$ac_cv_linux_have_iget" = "xno"; then AC_DEFINE([LINUX_USE_FH], 1, [define to use linux file handles for cache files]) diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c index 4ee95a4..a2747ad 100644 --- a/src/afs/LINUX/osi_sysctl.c +++ b/src/afs/LINUX/osi_sysctl.c @@ -36,11 +36,13 @@ 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, .maxlen = sizeof(afs_int32), @@ -48,11 +50,13 @@ 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, .maxlen = sizeof(afs_int32), @@ -60,11 +64,13 @@ 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, .maxlen = sizeof(afs_int32), @@ -72,11 +78,13 @@ 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, .maxlen = sizeof(afs_int32), @@ -84,11 +92,13 @@ 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, .maxlen = sizeof(afs_int32), @@ -96,11 +106,13 @@ 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, .maxlen = sizeof(afs_int32), @@ -108,11 +120,13 @@ 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 = 7, #endif +#endif .procname = "afs_blocksUsed", .data = &afs_blocksUsed, .maxlen = sizeof(afs_int32), @@ -120,11 +134,13 @@ 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 = 8, #endif +#endif .procname = "afs_blocksUsed_0", .data = &afs_blocksUsed_0, .maxlen = sizeof(afs_int32), @@ -132,11 +148,13 @@ 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 = 9, #endif +#endif .procname = "afs_blocksUsed_1", .data = &afs_blocksUsed_1, .maxlen = sizeof(afs_int32), @@ -144,11 +162,13 @@ 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 = 10, #endif +#endif .procname = "afs_blocksUsed_2", .data = &afs_blocksUsed_2, .maxlen = sizeof(afs_int32), @@ -156,11 +176,13 @@ 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 = 11, #endif +#endif .procname = "afs_pct1", .data = &afs_pct1, .maxlen = sizeof(afs_int32), @@ -168,11 +190,13 @@ 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 = 12, #endif +#endif .procname = "afs_pct2", .data = &afs_pct2, .maxlen = sizeof(afs_int32), @@ -180,11 +204,13 @@ 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 = 13, #endif +#endif .procname = "afs_cacheBlocks", .data = &afs_cacheBlocks, .maxlen = sizeof(afs_int32), @@ -192,11 +218,13 @@ 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 = 14, #endif +#endif .procname = "md5inum", .data = &afs_new_inum, .maxlen = sizeof(afs_int32), @@ -208,11 +236,13 @@ 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, .child = afs_sysctl_table @@ -223,11 +253,13 @@ static ctl_table fs_sysctl_table[] = { int osi_sysctl_init() { +#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME) #if defined(REGISTER_SYSCTL_TABLE_NOFLAG) afs_sysctl = register_sysctl_table(fs_sysctl_table); #else afs_sysctl = register_sysctl_table(fs_sysctl_table, 0); #endif +#endif if (!afs_sysctl) return -1; diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index bd30b75..4df6f51 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1323,3 +1323,17 @@ _sb.s_bdi= NULL;], AC_DEFINE([STRUCT_SUPER_BLOCK_HAS_S_BDI], 1, [define if struct super_block has an s_bdi member]) 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]) + -- 1.9.4