diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4 index bec57e5fba0b96156306e516d412373a63308b94..3ed69b48f3ad5215486eb1a824a9416ece40fa0d 100644 --- a/lnet/autoconf/lustre-lnet.m4 +++ b/lnet/autoconf/lustre-lnet.m4 @@ -1120,7 +1120,7 @@ LB_LINUX_TRY_COMPILE([ # 2.6.21 api change. 'register_sysctl_table' use only one argument, # instead of more old which need two. -AC_DEFUN([LL_2ARGS_REGISTER_SYSCTL], +AC_DEFUN([LN_2ARGS_REGISTER_SYSCTL], [AC_MSG_CHECKING([check register_sysctl_table want 2 args]) LB_LINUX_TRY_COMPILE([ #include <linux/sysctl.h> @@ -1135,6 +1135,29 @@ LB_LINUX_TRY_COMPILE([ ]) ]) +# 2.6.21 uses struct kmem_cache instead of kmem_cache_s for +# kmem_cache_t +AC_DEFUN([LN_KMEM_CACHE_S], +[AC_MSG_CHECKING([check kernel has struct kmem_cache_s]) +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_LINUX_TRY_COMPILE([ + #include <linux/slab.h> +],[ + struct kmem_cache_s *cachep = NULL; + + kmem_cache_free(cachep, NULL); + +],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KMEM_CACHE_n, 1, + [kernel has struct kmem_cache_s]) +],[ + AC_MSG_RESULT(NO) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) + # # LN_PROG_LINUX # @@ -1170,7 +1193,8 @@ LN_ATOMIC_PANIC_NOTIFIER # 2.6.20 LN_3ARGS_INIT_WORK # 2.6.21 -LL_2ARGS_REGISTER_SYSCTL +LN_2ARGS_REGISTER_SYSCTL +LN_KMEM_CACHE_S ]) # diff --git a/lnet/include/libcfs/linux/linux-mem.h b/lnet/include/libcfs/linux/linux-mem.h index 7591213ffbe6d14a466447f7daf84f90e24af4ef..9a49dda33207cd35721713ff7a249368bd594404 100644 --- a/lnet/include/libcfs/linux/linux-mem.h +++ b/lnet/include/libcfs/linux/linux-mem.h @@ -97,7 +97,11 @@ extern void cfs_free_large(void *addr); * SLAB allocator * XXX Liang: move these declare to public file */ -typedef kmem_cache_t cfs_mem_cache_t; +#ifdef HAVE_KMEM_CACHE_S +typedef struct kmem_cache_s cfs_mem_cache_t; +#else +typedef struct kmem_cache cfs_mem_cache_t; +#endif extern cfs_mem_cache_t * cfs_mem_cache_create (const char *, size_t, size_t, unsigned long); extern int cfs_mem_cache_destroy ( cfs_mem_cache_t * ); extern void *cfs_mem_cache_alloc ( cfs_mem_cache_t *, int);