Linux: deal with ctl_name removal
authorMarc Dionne <marc.c.dionne@gmail.com>
Thu, 10 Dec 2009 00:06:18 +0000 (19:06 -0500)
committerDerrick Brashear <shadow|account-1000005@unknown>
Thu, 10 Dec 2009 00:49:18 +0000 (16:49 -0800)
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 <marc.c.dionne@gmail.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

acinclude.m4
src/afs/LINUX/osi_sysctl.c
src/cf/linux-test4.m4

index 5fc6e30..01c2e17 100644 (file)
@@ -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])
index 4ee95a4..a2747ad 100644 (file)
@@ -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;
 
index bd30b75..4df6f51 100644 (file)
@@ -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 <linux/sysctl.h>],
+[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])
+