Revert "Linux: kmem_cache_create fix and cleanup"
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Fri, 9 Oct 2009 23:46:08 +0000 (00:46 +0100)
committerDerrick Brashear <shadow|account-1000005@unknown>
Sun, 11 Oct 2009 17:44:37 +0000 (10:44 -0700)
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 <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

acinclude.m4
src/afs/LINUX/osi_compat.h
src/afs/LINUX/osi_vfsops.c
src/cf/linux-test4.m4

index 5a452c7..275bc22 100644 (file)
@@ -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
index 0ce841b..b0982a5 100644 (file)
@@ -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
index bd4d603..aa80111 100644 (file)
@@ -23,7 +23,6 @@
 #include "afs/afs_stats.h"
 #include <linux/smp_lock.h>
 
-#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;
index b9fd21f..6763f15 100644 (file)
@@ -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 <linux/slab.h>],
-[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], [