From: Thomas Stibor Date: Mon, 30 Dec 2013 19:00:32 +0000 (-0500) Subject: LU-4372 gss: Compatibility cache_register_net 2.6.x/3.3 kernel X-Git-Tag: 2.5.55~50 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=035f3e4bf7532839dd88a4ae330fd67542e17cdd LU-4372 gss: Compatibility cache_register_net 2.6.x/3.3 kernel 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 Signed-off-by: James Simmons Change-Id: Iaee5aa7e60e1bd08735c345f413a2344c2850f57 Reviewed-on: http://review.whamcloud.com/8528 Reviewed-by: Andreas Dilger Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Bob Glossman --- diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 962d0b7..f070c08 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -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 +],[ + 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 diff --git a/lustre/ptlrpc/gss/gss_svc_upcall.c b/lustre/ptlrpc/gss/gss_svc_upcall.c index b8d33ac..7e6d21a 100644 --- a/lustre/ptlrpc/gss/gss_svc_upcall.c +++ b/lustre/ptlrpc/gss/gss_svc_upcall.c @@ -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); }