[Oracleasm-commits] jlbec commits r396 - in trunk: . kapi-compat/include kernel

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Wed Dec 3 16:07:44 PST 2008


Author: jlbec
Date: 2008-12-03 16:07:44 -0800 (Wed, 03 Dec 2008)
New Revision: 396

Added:
   trunk/kapi-compat/include/kmem_cache_create.h
   trunk/kapi-compat/include/slab_ctor_three_arg.h
   trunk/kapi-compat/include/slab_ctor_two_arg.h
   trunk/kapi-compat/include/slab_ctor_verify.h
Modified:
   trunk/Makefile
   trunk/configure.in
   trunk/kernel/oracleasm.c
Log:

oracleasm: slab build changes.

There have been a lot of changes to the slab code since we last worked
against mainline.

1) SLAB_CTOR_VERIFY disappeared.  The slab ctor is only called for real
   construction.
2) The slab dtor disappeared.  That's OK, we only passed NULL.
3) The slab ctor flags disappeared.  No one was using them.
4) The slab ctor cachep disappeared.  No one was using it.

This leaves us a lot of compatibility modes.  So, we check each in turn.

For dtor disappearing, we just need a compat handle for
kmem_cache_create.  Easy.

For the various versions of the ctor, we basically test and provide a
wrapper for each possibility.  The main oracleasm.c file just has the
modern one-argument version.



Modified: trunk/Makefile
===================================================================
--- trunk/Makefile	2008-12-04 00:06:22 UTC (rev 395)
+++ trunk/Makefile	2008-12-04 00:07:44 UTC (rev 396)
@@ -16,10 +16,14 @@
 # 
 SUBDIRS = include kernel documents vendor
 
-KAPI_COMPAT_FILES =			\
-	kapi-compat/include/i_blksize.h	\
-	kapi-compat/include/i_mutex.h	\
-	kapi-compat/include/i_private.h
+KAPI_COMPAT_FILES =					\
+	kapi-compat/include/i_blksize.h			\
+	kapi-compat/include/i_mutex.h			\
+	kapi-compat/include/i_private.h			\
+	kapi-compat/include/kmem_cache_create.h		\
+	kapi-compat/include/slab_ctor_three_arg.h	\
+	kapi-compat/include/slab_ctor_two_arg.h		\
+	kapi-compat/include/slab_ctor_verify.h
 
 #
 # Extra (non-source) files to distribute

Modified: trunk/configure.in
===================================================================
--- trunk/configure.in	2008-12-04 00:06:22 UTC (rev 395)
+++ trunk/configure.in	2008-12-04 00:07:44 UTC (rev 396)
@@ -207,6 +207,37 @@
     $kernelincludes, blksize_compat_header="i_blksize.h", , [i_blksize])
   KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $blksize_compat_header"
 
+  kmem_cache_create_header=
+  OCFS2_CHECK_KERNEL_INCLUDES([kmem_cache_create() with dtor arg in slab.h],
+    linux/slab.h, $kernelincludes, kmem_cache_create_header="kmem_cache_create.h", ,
+    [^.*void (\*)(void \*, .*kmem_cache.* \*, unsigned long),])
+  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $kmem_cache_create_header"
+
+  slab_ctor_header=
+  OCFS2_CHECK_KERNEL_INCLUDES([SLAB_CTOR_VERIFY in slab.h], linux/slab.h,
+    $kernel_includes, slab_ctor_headre=slab_ctor_verify.h, ,
+    [SLAB_CTOR_VERIFY])
+
+  if test "x$slab_ctor_header" = "x"; then
+    # We know that a kernel with dtor also has a three-arg ctor
+    if test "x$kmem_cache_create_header" != "x"; then
+      slab_ctor_header=slab_ctor_three_arg.h
+    else
+      OCFS2_CHECK_KERNEL_INCLUDES([three argument ctor in slab.h],
+        linux/slab.h, $kernelincludes,
+        slab_ctor_header=slab_ctor_three_arg.h, ,
+        [^.*void (\*)(void \*, .*kmem_cache.* \*, unsigned long))])
+    fi
+  fi
+
+  if test "x$slab_ctor_header" = "x"; then
+    OCFS2_CHECK_KERNEL_INCLUDES([two argument ctor in slab.h], linux/slab.h,
+      $kernelincludes, slab_ctor_header=slab_ctor_two_arg.h, ,
+      [^.*void (\*)(.*kmem_cache.* \*, void \*))])
+  fi
+
+  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $slab_ctor_header"
+
   # using -include has two advantages:
   #  the source doesn't need to know to include compat headers
   #  the compat header file names don't go through the search path

Added: trunk/kapi-compat/include/kmem_cache_create.h
===================================================================
--- trunk/kapi-compat/include/kmem_cache_create.h	                        (rev 0)
+++ trunk/kapi-compat/include/kmem_cache_create.h	2008-12-04 00:07:44 UTC (rev 396)
@@ -0,0 +1,6 @@
+#ifndef KAPI_KMEM_CACHE_CREATE_H
+#define KAPI_KMEM_CACHE_CREATE_H
+
+#define kapi_kmem_cache_create(a, b, c, d, e)	kmem_cache_create(a, b, c, d, e, NULL)
+
+#endif

Added: trunk/kapi-compat/include/slab_ctor_three_arg.h
===================================================================
--- trunk/kapi-compat/include/slab_ctor_three_arg.h	                        (rev 0)
+++ trunk/kapi-compat/include/slab_ctor_three_arg.h	2008-12-04 00:07:44 UTC (rev 396)
@@ -0,0 +1,25 @@
+#ifndef KAPI_SLAB_CTOR_THREE_ARG_H
+#define KAPI_SLAB_CTOR_THREE_ARG_H
+
+#include <linux/slab.h>
+
+static void init_asmdisk_once(void *foo);
+static void instance_init_once(void *foo);
+
+static void slab_ctor_three_arg_init_asmdisk_once(void *foo,
+						  struct kmem_cache *cachep,
+						  unsigned long flags)
+{
+	init_asmdisk_once(foo);
+}
+#define kapi_init_asmdisk_once slab_ctor_three_arg_init_asmdisk_once
+
+static void slab_ctor_three_arg_instance_init_once(void *foo,
+						   struct kmem_cache *cachep,
+						   unsigned long flags)
+{
+	instance_init_once(foo);
+}
+#define kapi_instance_init_once slab_ctor_three_arg_instance_init_once
+
+#endif

Added: trunk/kapi-compat/include/slab_ctor_two_arg.h
===================================================================
--- trunk/kapi-compat/include/slab_ctor_two_arg.h	                        (rev 0)
+++ trunk/kapi-compat/include/slab_ctor_two_arg.h	2008-12-04 00:07:44 UTC (rev 396)
@@ -0,0 +1,23 @@
+#ifndef KAPI_SLAB_CTOR_TWO_ARG_H
+#define KAPI_SLAB_CTOR_TWO_ARG_H
+
+#include <linux/slab.h>
+
+static void init_asmdisk_once(void *foo);
+static void instance_init_once(void *foo);
+
+static void slab_ctor_two_arg_init_asmdisk_once(struct kmem_cache *cachep,
+						void *foo)
+{
+	init_asmdisk_once(foo);
+}
+#define kapi_init_asmdisk_once slab_ctor_two_arg_init_asmdisk_once
+
+static void slab_ctor_two_arg_instance_init_once(struct kmem_cache *cachep,
+						 void *foo)
+{
+	instance_init_once(foo);
+}
+#define kapi_instance_init_once slab_ctor_two_arg_instance_init_once
+
+#endif

Added: trunk/kapi-compat/include/slab_ctor_verify.h
===================================================================
--- trunk/kapi-compat/include/slab_ctor_verify.h	                        (rev 0)
+++ trunk/kapi-compat/include/slab_ctor_verify.h	2008-12-04 00:07:44 UTC (rev 396)
@@ -0,0 +1,33 @@
+#ifndef KAPI_SLAB_CTOR_VERIFY_H
+#define KAPI_SLAB_CTOR_VERIFY_H
+
+#include <linux/slab.h>
+
+static void init_asmdisk_once(void *foo);
+static void instance_init_once(void *foo);
+
+static inline int slab_ctor_verify_check_flags(unsigned long flags)
+{
+	return (flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
+		SLAB_CTOR_CONSTRUCTOR;
+}
+
+static void slab_ctor_verify_init_asmdisk_once(void *foo,
+					       struct kmem_cache *cachep,
+					       unsigned long flags)
+{
+	if (slab_ctor_verify_check_flags(flags))
+		init_asmdisk_once(foo);
+}
+#define kapi_init_asmdisk_once slab_ctor_verify_init_asmdisk_once
+
+static void slab_ctor_verify_instance_init_once(void *foo,
+						struct kmem_cache *cachep,
+						unsigned long flags)
+{
+	if (slab_ctor_verify_check_flags(flags))
+		instance_init_once(foo);
+}
+#define kapi_instance_init_once slab_ctor_verify_instance_init_once
+
+#endif

Modified: trunk/kernel/oracleasm.c
===================================================================
--- trunk/kernel/oracleasm.c	2008-12-04 00:06:22 UTC (rev 395)
+++ trunk/kernel/oracleasm.c	2008-12-04 00:07:44 UTC (rev 396)
@@ -133,9 +133,12 @@
 static struct inode_operations asmfs_disk_dir_inode_operations;
 static struct inode_operations asmfs_iid_dir_inode_operations;
 
-static kmem_cache_t	*asm_request_cachep;
-static kmem_cache_t	*asmfs_inode_cachep;
-static kmem_cache_t	*asmdisk_cachep;
+static struct kmem_cache	*asm_request_cachep;
+static struct kmem_cache	*asmfs_inode_cachep;
+static struct kmem_cache	*asmdisk_cachep;
+#ifndef kapi_kmem_cache_create
+# define kapi_kmem_cache_create kmem_cache_create
+#endif
 
 /*
  * asmfs super-block data in memory
@@ -314,17 +317,18 @@
 	kmem_cache_free(asmdisk_cachep, d);
 }
 
-static void init_asmdisk_once(void *foo, kmem_cache_t *cachep, unsigned long flags)
+static void init_asmdisk_once(void *foo)
 {
-	struct asm_disk_info *d = (struct asm_disk_info *)foo;
+	struct asm_disk_info *d = foo;
 
-	if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-	    SLAB_CTOR_CONSTRUCTOR) {
-		memset(d, 0, sizeof(*d));
-		INIT_LIST_HEAD(&d->d_open);
-		inode_init_once(&d->vfs_inode);
-	}
+	memset(d, 0, sizeof(*d));
+	INIT_LIST_HEAD(&d->d_open);
+
+	inode_init_once(&d->vfs_inode);
 }
+#ifndef kapi_init_asmdisk_once
+# define kapi_init_asmdisk_once init_asmdisk_once
+#endif
 
 static void asmdisk_clear_inode(struct inode *inode)
 {
@@ -394,10 +398,11 @@
 static int __init init_asmdiskcache(void)
 {
 	int err;
-	asmdisk_cachep = kmem_cache_create("asmdisk_cache",
-					   sizeof(struct asm_disk_info),
-					   0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-					   init_asmdisk_once, NULL);
+	asmdisk_cachep =
+		kapi_kmem_cache_create("asmdisk_cache",
+				       sizeof(struct asm_disk_info),
+				       0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+				       kapi_init_asmdisk_once);
 	if (!asmdisk_cachep)
 		return -ENOMEM;
 	err = register_filesystem(&asmdisk_type);
@@ -485,26 +490,27 @@
 	kmem_cache_free(asmfs_inode_cachep, ASMFS_I(inode));
 }
 
-static void init_once(void *foo, kmem_cache_t *cachep, unsigned long flags)
+static void instance_init_once(void *foo)
 {
-	struct asmfs_inode_info *aii = (struct asmfs_inode_info *)foo;
+	struct asmfs_inode_info *aii = foo;
 
-	if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-	    SLAB_CTOR_CONSTRUCTOR) {
-		INIT_LIST_HEAD(&aii->i_disks);
-		INIT_LIST_HEAD(&aii->i_threads);
-		spin_lock_init(&aii->i_lock);
+	INIT_LIST_HEAD(&aii->i_disks);
+	INIT_LIST_HEAD(&aii->i_threads);
+	spin_lock_init(&aii->i_lock);
 
-		inode_init_once(&aii->vfs_inode);
-	}
+	inode_init_once(&aii->vfs_inode);
 }
+#ifndef kapi_instance_init_once
+# define kapi_instance_init_once instance_init_once
+#endif
 
 static int init_inodecache(void)
 {
-	asmfs_inode_cachep = kmem_cache_create("asmfs_inode_cache",
-					       sizeof(struct asmfs_inode_info),
-					       0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-					       init_once, NULL);
+	asmfs_inode_cachep =
+		kapi_kmem_cache_create("asmfs_inode_cache",
+				       sizeof(struct asmfs_inode_info),
+				       0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+				       kapi_instance_init_once);
 
 	if (asmfs_inode_cachep == NULL)
 		return -ENOMEM;
@@ -518,10 +524,10 @@
 
 static int init_requestcache(void)
 {
-	asm_request_cachep = kmem_cache_create("asm_request",
-				     	       sizeof(struct asm_request),
-					       0, SLAB_HWCACHE_ALIGN,
-					       NULL, NULL);
+	asm_request_cachep =
+		kapi_kmem_cache_create("asm_request",
+				       sizeof(struct asm_request),
+				       0, SLAB_HWCACHE_ALIGN, NULL);
 	if (asm_request_cachep == NULL)
 		return -ENOMEM;
 	return 0;




More information about the Oracleasm-commits mailing list