From d705e26eac5c4327ef1499cd59228e123f03971f Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sat, 10 Oct 2009 00:46:08 +0100 Subject: [PATCH] Revert "Linux: kmem_cache_create fix and cleanup" This reverts commit 6133d25397b8365d450c99b8bc147972f8600074. This patch breaks builds on RHEL5.3 - revert it until we can come up with a fix. Reviewed-on: http://gerrit.openafs.org/640 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- acinclude.m4 | 1 - src/afs/LINUX/osi_compat.h | 50 -------------------------------------- src/afs/LINUX/osi_vfsops.c | 39 +++++++++++++++++++++++------ src/cf/linux-test4.m4 | 18 -------------- 4 files changed, 32 insertions(+), 76 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 5a452c75a..275bc22c9 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -895,7 +895,6 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_STRUCT_PROC_DIR_ENTRY_HAS_OWNER LINUX_HAVE_KMEM_CACHE_T LINUX_KMEM_CACHE_CREATE_TAKES_DTOR - LINUX_KMEM_CACHE_CREATE_CTOR_TAKES_VOID LINUX_D_PATH_TAKES_STRUCT_PATH LINUX_NEW_EXPORT_OPS LINUX_CONFIG_H_EXISTS diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h index 0ce841b02..b0982a594 100644 --- a/src/afs/LINUX/osi_compat.h +++ b/src/afs/LINUX/osi_compat.h @@ -89,54 +89,4 @@ grab_cache_page_write_begin(struct address_space *mapping, pgoff_t index, } #endif -extern void init_once(void *); -#if defined(HAVE_KMEM_CACHE_T) -static inline int -init_once_kmem_cache_t(void * foo, kmem_cache_t * cachep, unsigned long flags) { - init_once(foo); - return 0; -} -#define init_once_func init_once_kmem_cache_t -#elif defined(KMEM_CACHE_INIT) -static inline int -init_once_kmem_cache_init(struct kmem_cache * cachep, void * foo) { - init_once(foo); - return 0; -} -#define init_once_func init_once_kmem_cache_init -#elif !defined(KMEM_CACHE_CTOR_TAKES_VOID) -static inline int -init_once_compat(void * foo, struct kmem_cache * cachep, unsigned long flags) { - init_once(foo); - return 0; -} -#define init_once_func init_once_compat -#else -#define init_once_func init_once -#endif - -#ifndef SLAB_RECLAIM_ACCOUNT -#define SLAB_RECLAIM_ACCOUNT 0 -#endif - -#if defined(HAVE_KMEM_CACHE_T) -#define afs_kmem_cache_t kmem_cache_t -#else -#define afs_kmem_cache_t struct kmem_cache -#endif - -static inline afs_kmem_cache_t * -afs_kmem_cache_create(const char *cache_name, size_t size, size_t size2, - unsigned long flags, void (*ctor)(void *)) { - return kmem_cache_create(cache_name, size, size2, flags, ctor -#if defined(KMEM_CACHE_TAKES_DTOR) - , NULL -#endif - ); -} - -#if defined(SLAB_KERNEL) -#define GFP_KERNEL SLAB_KERNEL -#endif - #endif diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index bd4d603e6..aa80111e6 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -23,7 +23,6 @@ #include "afs/afs_stats.h" #include -#include "osi_compat.h" struct vcache *afs_globalVp = 0; struct vfs *afs_globalVFS = 0; @@ -217,14 +216,22 @@ afs_notify_change(struct dentry *dp, struct iattr *iattrp) #if defined(STRUCT_SUPER_HAS_ALLOC_INODE) -static afs_kmem_cache_t *afs_inode_cachep; +#if defined(HAVE_KMEM_CACHE_T) +static kmem_cache_t *afs_inode_cachep; +#else +struct kmem_cache *afs_inode_cachep; +#endif static struct inode * afs_alloc_inode(struct super_block *sb) { struct vcache *vcp; +#if defined(SLAB_KERNEL) + vcp = (struct vcache *) kmem_cache_alloc(afs_inode_cachep, SLAB_KERNEL); +#else vcp = (struct vcache *) kmem_cache_alloc(afs_inode_cachep, GFP_KERNEL); +#endif if (!vcp) return NULL; @@ -237,8 +244,14 @@ afs_destroy_inode(struct inode *inode) kmem_cache_free(afs_inode_cachep, inode); } -void -init_once(void * foo) +static void +#if defined(HAVE_KMEM_CACHE_T) +init_once(void * foo, kmem_cache_t * cachep, unsigned long flags) +#elif defined(KMEM_CACHE_INIT) +init_once(struct kmem_cache * cachep, void * foo) +#else +init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) +#endif { struct vcache *vcp = (struct vcache *) foo; @@ -252,9 +265,21 @@ init_once(void * foo) int afs_init_inodecache(void) { - afs_inode_cachep = afs_kmem_cache_create("afs_inode_cache", - sizeof(struct vcache), 0, - SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, init_once_func); +#ifndef SLAB_RECLAIM_ACCOUNT +#define SLAB_RECLAIM_ACCOUNT 0 +#endif + +#if defined(KMEM_CACHE_TAKES_DTOR) + afs_inode_cachep = kmem_cache_create("afs_inode_cache", + sizeof(struct vcache), + 0, SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, + init_once, NULL); +#else + afs_inode_cachep = kmem_cache_create("afs_inode_cache", + sizeof(struct vcache), + 0, SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, + init_once); +#endif if (afs_inode_cachep == NULL) return -ENOMEM; return 0; diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index b9fd21fa5..6763f1558 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -974,24 +974,6 @@ AC_DEFUN([LINUX_KMEM_CACHE_CREATE_TAKES_DTOR], [ ac_cv_linux_kmem_cache_create_takes_dtor=no)]) AC_MSG_RESULT($ac_cv_linux_kmem_cache_create_takes_dtor)]) -AC_DEFUN([LINUX_KMEM_CACHE_CREATE_CTOR_TAKES_VOID], [ - AC_MSG_CHECKING([whether kmem_cache_create constructor function takes a void pointer argument]) - AC_CACHE_VAL([ac_cv_linux_kmem_cache_create_ctor_takes_void], [ - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -Werror" - AC_TRY_KBUILD( -[#include ], -[void _ctor(void *v) { }; -kmem_cache_create(NULL, 0, 0, 0, _ctor);], - ac_cv_linux_kmem_cache_create_ctor_takes_void=yes, - ac_cv_linux_kmem_cache_create_ctor_takes_void=no) - CPPFLAGS="$save_CPPFLAGS" -]) - AC_MSG_RESULT($ac_cv_linux_kmem_cache_create_ctor_takes_void) - if test "x$ac_cv_linux_kmem_cache_create_ctor_takes_void" = "xyes"; then - AC_DEFINE([KMEM_CACHE_CTOR_TAKES_VOID], 1, [define if kmem_cache_create constructor function takes a single void pointer argument]) - fi]) - AC_DEFUN([LINUX_FS_STRUCT_FOP_HAS_SENDFILE], [ AC_MSG_CHECKING([for sendfile in struct file_operations]) AC_CACHE_VAL([ac_cv_linux_fs_struct_fop_has_sendfile], [ -- 2.39.5