Whamcloud - gitweb
LU-4372 gss: Compatibility cache_register_net 2.6.x/3.3 kernel 28/8528/6
authorThomas Stibor <thomas@stibor.net>
Mon, 30 Dec 2013 19:00:32 +0000 (14:00 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 14 Jan 2014 17:34:16 +0000 (17:34 +0000)
Since 3.4 cache_register/cache_unregister are removed.
This patch provides a compatibility function to support
kernels 2.6.x to 3.3. Note, since 2.6.37
cache_register_net/cache_unregister_net are defined,
but not exported (no EXPORT_SYMBOL) and thus cannot
be loaded by the module loader. In 3.3
cache_register_net/cache_unregister_net
are exported. This patch is related to LU-4012.

Signed-off-by: Thomas Stibor <thomas@stibor.net>
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: Iaee5aa7e60e1bd08735c345f413a2344c2850f57
Reviewed-on: http://review.whamcloud.com/8528
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
lustre/autoconf/lustre-core.m4
lustre/ptlrpc/gss/gss_svc_upcall.c

index 962d0b7..f070c08 100644 (file)
@@ -1035,6 +1035,29 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
+# 3.4 cache_register/cache_unregister are removed
+# see kernel commit 2c5f846747526e2b83c5f1b8e69016be0e2e87c0
+# Note, since 2.6.37 cache_register_net/cache_unregister_net
+# are defined, but not exported.
+# 3.3 cache_register_net/cache_unregister_net are
+# exported and replacing cache_register/cache_unregister in 3.4
+#
+AC_DEFUN([LC_HAVE_CACHE_REGISTER],
+[AC_MSG_CHECKING([if have cache_register])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/sunrpc/cache.h>
+],[
+       cache_register(NULL);
+],[
+       AC_DEFINE(HAVE_CACHE_REGISTER, 1,
+                 [have cache_register])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
 # 3.5 renames end_writeback() back to clear_inode()...
 # see kernel commit dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430
 #
@@ -1407,6 +1430,7 @@ AC_DEFUN([LC_PROG_LINUX],
         LC_MIGRATEPAGE_4ARGS
         LC_SUPEROPS_USE_DENTRY
         LC_INODEOPS_USE_UMODE_T
+        LC_HAVE_CACHE_REGISTER
 
         # 3.4
         LC_TOUCH_ATIME_1ARG
index b8d33ac..7e6d21a 100644 (file)
@@ -112,6 +112,28 @@ static inline unsigned long hash_mem(char *buf, int length, int bits)
         return hash >> (BITS_PER_LONG - bits);
 }
 
+/* This compatibility can be removed once kernel 3.3 is used,
+ * since cache_register_net/cache_unregister_net are exported.
+ * Note that since kernel 3.4 cache_register and cache_unregister
+ * are removed.
+*/
+static inline int _cache_register_net(struct cache_detail *cd, struct net *net)
+{
+#ifdef HAVE_CACHE_REGISTER
+       return cache_register(cd);
+#else
+       return cache_register_net(cd, net);
+#endif
+}
+static inline void _cache_unregister_net(struct cache_detail *cd,
+                                        struct net *net)
+{
+#ifdef HAVE_CACHE_REGISTER
+       cache_unregister(cd);
+#else
+       cache_unregister_net(cd, net);
+#endif
+}
 /****************************************
  * rsi cache                            *
  ****************************************/
@@ -1081,13 +1103,13 @@ int __init gss_init_svc_upcall(void)
         */
        cfs_get_random_bytes(&__ctx_index, sizeof(__ctx_index));
 
-       rc = cache_register_net(&rsi_cache, &init_net);
+       rc = _cache_register_net(&rsi_cache, &init_net);
        if (rc != 0)
                return rc;
 
-       rc = cache_register_net(&rsc_cache, &init_net);
+       rc = _cache_register_net(&rsc_cache, &init_net);
        if (rc != 0) {
-               cache_unregister_net(&rsi_cache, &init_net);
+               _cache_unregister_net(&rsi_cache, &init_net);
                return rc;
        }
 
@@ -1114,8 +1136,8 @@ int __init gss_init_svc_upcall(void)
 void gss_exit_svc_upcall(void)
 {
        cache_purge(&rsi_cache);
-       cache_unregister_net(&rsi_cache, &init_net);
+       _cache_unregister_net(&rsi_cache, &init_net);
 
        cache_purge(&rsc_cache);
-       cache_unregister_net(&rsc_cache, &init_net);
+       _cache_unregister_net(&rsc_cache, &init_net);
 }