From: behlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>
Date: Wed, 27 Feb 2008 19:09:51 +0000 (+0000)
Subject: Lots of build fixes.  This is turning out to be a very good
X-Git-Tag: zfs-0.8.0-rc1~152^2~974
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1b59d2620ae2bd977e67e292f9bebc43049872c;p=zfs

Lots of build fixes.  This is turning out to be a very good
idea since it forcefully codifing the ABI.  Since the shim
layer is no longer linked at build time in to the test suite
we can;'t cut any corners and get away with it.

Everything is working now with the exception of sorting
setting Module.symvers properly.  This may take a little
Makefile reorg.



git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@5 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c
---

diff --git a/include/linux-callb.h b/include/linux-callb.h
index 6ffcfb76e..0a34ad2cf 100644
--- a/include/linux-callb.h
+++ b/include/linux-callb.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_CALLB_H
-#define _LINUX_CALLB_H
+#ifndef _SOLARIS_CALLB_H
+#define _SOLARIS_CALLB_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux-mutex.h>
 
 #define DEBUG_CALLB
@@ -41,5 +42,5 @@ typedef struct callb_cpr {
 }
 #endif
 
-#endif  /* _LINUX_CALLB_H */
+#endif  /* _SOLARIS_CALLB_H */
 
diff --git a/include/linux-condvar.h b/include/linux-condvar.h
index e4a1779a5..8f5cb922a 100644
--- a/include/linux-condvar.h
+++ b/include/linux-condvar.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_CONDVAR_H
-#define _LINUX_CONDVAR_H
+#ifndef _SOLARIS_CONDVAR_H
+#define _SOLARIS_CONDVAR_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux/wait.h>
 
 /* The kcondvar_t struct is protected by mutex taken externally before
@@ -198,4 +199,4 @@ cv_broadcast(kcondvar_t *cvp)
 	if (atomic_read(&cvp->cv_waiters) > 0)
 		wake_up_all(&cvp->cv_event);
 }
-#endif /* _LINUX_CONDVAR_H */
+#endif /* _SOLARIS_CONDVAR_H */
diff --git a/include/linux-cred.h b/include/linux-cred.h
index d342aa016..946810d5e 100644
--- a/include/linux-cred.h
+++ b/include/linux-cred.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_CRED_H
-#define _LINUX_CRED_H
+#ifndef _SOLARIS_CRED_H
+#define _SOLARIS_CRED_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux/types.h>
 
 /* XXX - Portions commented out because we really just want to have the type
@@ -36,5 +37,5 @@ typedef struct cred {
 }
 #endif
 
-#endif  /* _LINUX_CRED_H */
+#endif  /* _SOLARIS_CRED_H */
 
diff --git a/include/linux-generic.h b/include/linux-generic.h
index e36baef0e..ee77cba57 100644
--- a/include/linux-generic.h
+++ b/include/linux-generic.h
@@ -1,10 +1,12 @@
-#ifndef _LINUX_GENERIC_H
-#define _LINUX_GENERIC_H
+#ifndef _SOLARIS_GENERIC_H
+#define _SOLARIS_GENERIC_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
+
 /* Missing defines.
  */
 #define INT32_MAX                       INT_MAX
@@ -14,7 +16,7 @@ extern "C" {
 #define MAXNAMELEN                      256
 #define MAXPATHLEN                      PATH_MAX
 #define __va_list                       va_list
-#define _KERNEL                         1
+#define _KERNEL                         __KERNEL__
 #define max_ncpus                       64
 
 /* 0..MAX_PRIO-1:		Process priority
@@ -63,10 +65,10 @@ extern "C" {
 
 /* Missing globals
  */
-static int p0 = 0;
+extern int p0;
 
 #ifdef  __cplusplus
 }
 #endif
 
-#endif  /* _LINUX_GENERIC_H */
+#endif  /* _SOLARIS_GENERIC_H */
diff --git a/include/linux-kmem.h b/include/linux-kmem.h
index f08590d1d..3025e1a97 100644
--- a/include/linux-kmem.h
+++ b/include/linux-kmem.h
@@ -1,5 +1,5 @@
-#ifndef _LINUX_KMEM_H
-#define	_LINUX_KMEM_H
+#ifndef _SOLARIS_KMEM_H
+#define	_SOLARIS_KMEM_H
 
 #ifdef	__cplusplus
 extern "C" {
@@ -8,6 +8,7 @@ extern "C" {
 #undef DEBUG_KMEM
 #undef DEBUG_KMEM_UNIMPLEMENTED
 
+#include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/mm.h>
 #include <linux/spinlock.h>
@@ -147,15 +148,18 @@ typedef int (*kmem_constructor_t)(void *, void *, int);
 typedef void (*kmem_destructor_t)(void *, void *);
 typedef void (*kmem_reclaim_t)(void *);
 
-kmem_cache_t *
+extern kmem_cache_t *
 __kmem_cache_create(char *name, size_t size, size_t align,
-        int (*constructor)(void *, void *, int),
-        void (*destructor)(void *, void *),
-        void (*reclaim)(void *),
+        kmem_constructor_t constructor,
+        kmem_destructor_t destructor,
+        kmem_reclaim_t reclaim,
         void *priv, void *vmp, int flags);
 
 void
-__kmem_cache_destroy(kmem_cache_t *cache);
+extern __kmem_cache_destroy(kmem_cache_t *cache);
+
+void
+extern __kmem_reap(void);
 
 #define kmem_cache_create(name,size,align,ctor,dtor,rclm,priv,vmp,flags) \
         __kmem_cache_create(name,size,align,ctor,dtor,rclm,priv,vmp,flags)
@@ -163,11 +167,10 @@ __kmem_cache_destroy(kmem_cache_t *cache);
 #define kmem_cache_alloc(cache, flags)  kmem_cache_alloc(cache, flags)
 #define kmem_cache_free(cache, ptr)     kmem_cache_free(cache, ptr)
 #define kmem_cache_reap_now(cache)      kmem_cache_shrink(cache)
-#define kmem_reap()			__kmem_reap()
-
+#define kmem_reap()                     __kmem_reap()
 
 #ifdef	__cplusplus
 }
 #endif
 
-#endif	/* _LINUX_KMEM_H */
+#endif	/* _SOLARIS_KMEM_H */
diff --git a/include/linux-kstat.h b/include/linux-kstat.h
index 27aefdb9d..eb65811ef 100644
--- a/include/linux-kstat.h
+++ b/include/linux-kstat.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_KSTAT_H
-#define _LINUX_KSTAT_H
+#ifndef _SOLARIS_KSTAT_H
+#define _SOLARIS_KSTAT_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux-types.h>
 
 /* XXX - The minimum functionality here is stubbed out but nothing works. */
@@ -132,5 +133,5 @@ kstat_delete(kstat_t *ksp)
 }
 #endif
 
-#endif  /* _LINUX_KSTAT_H */
+#endif  /* _SOLARIS_KSTAT_H */
 
diff --git a/include/linux-mutex.h b/include/linux-mutex.h
index 1fea2e7d1..46406cf59 100644
--- a/include/linux-mutex.h
+++ b/include/linux-mutex.h
@@ -1,10 +1,12 @@
-#ifndef _LINUX_MUTEX_H
-#define	_LINUX_MUTEX_H
+#ifndef _SOLARIS_MUTEX_H
+#define	_SOLARIS_MUTEX_H
 
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
+
 /* See the "Big Theory Statement" in solaris mutex.c.
  *
  * Spin mutexes apparently aren't needed by zfs so we assert
@@ -19,7 +21,7 @@ extern "C" {
 
 #define KM_MAGIC		0x42424242
 #define KM_POISON		0x84
-	
+
 typedef struct {
 	int km_magic;
 	char *km_name;
@@ -115,4 +117,4 @@ mutex_owner(kmutex_t *mp)
 }
 #endif
 
-#endif	/* _LINUX_MUTEX_H */
+#endif	/* _SOLARIS_MUTEX_H */
diff --git a/include/linux-random.h b/include/linux-random.h
index 78327d0f0..68ca8dde7 100644
--- a/include/linux-random.h
+++ b/include/linux-random.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_RANDOM_H
-#define	_LINUX_RANDOM_H
+#ifndef _SOLARIS_RANDOM_H
+#define	_SOLARIS_RANDOM_H
 
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux/random.h>
 
 /* FIXME:
@@ -34,4 +35,4 @@ random_get_pseudo_bytes(uint8_t *ptr, size_t len)
 }
 #endif
 
-#endif	/* _LINUX_RANDOM_H */
+#endif	/* _SOLARIS_RANDOM_H */
diff --git a/include/linux-rwlock.h b/include/linux-rwlock.h
index 6ceafddf8..d212059e7 100644
--- a/include/linux-rwlock.h
+++ b/include/linux-rwlock.h
@@ -1,6 +1,7 @@
-#ifndef _LINUX_RWLOCK_H
-#define	_LINUX_RWLOCK_H
+#ifndef _SOLARIS_RWLOCK_H
+#define	_SOLARIS_RWLOCK_H
 
+#include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/rwsem.h>
 #include <asm/current.h>
@@ -32,7 +33,7 @@ typedef struct {
 	int rw_magic;
 	char *rw_name;
 	struct rw_semaphore rw_sem;
-	struct task_struct *rw_owner; 	/* holder of the write lock */
+	struct task_struct *rw_owner;	/* holder of the write lock */
 } krwlock_t;
 
 static __inline__ void
@@ -196,11 +197,11 @@ rw_tryupgrade(krwlock_t *rwlp)
 	 * read lock and reacquire it for writing since
 	 * we know there are no waiters */
 	up_read(&rwlp->rw_sem);
-	
+
 	/* returns 1 if success, 0 if contention */
 	result = down_write_trylock(&rwlp->rw_sem);
-	
-	/* Check if upgrade failed.  Should not ever happen 
+
+	/* Check if upgrade failed.  Should not ever happen
 	 * if we got to this point */
 	BUG_ON(!result);
 	BUG_ON(rwlp->rw_owner != NULL);
@@ -220,4 +221,4 @@ rw_owner(krwlock_t *rwlp)
 }
 #endif
 
-#endif	/* _LINUX_RWLOCK_H */
+#endif	/* _SOLARIS_RWLOCK_H */
diff --git a/include/linux-taskq.h b/include/linux-taskq.h
index 9680178df..90081b25e 100644
--- a/include/linux-taskq.h
+++ b/include/linux-taskq.h
@@ -1,5 +1,5 @@
-#ifndef _LINUX_TASKQ_H
-#define _LINUX_TASKQ_H
+#ifndef _SOLARIS_TASKQ_H
+#define _SOLARIS_TASKQ_H
 
 #ifdef  __cplusplus
 extern "C" {
@@ -19,6 +19,7 @@ extern "C" {
  * forces us to implement dynamic workqueues.  Which is all very doable
  * with a little effort.
  */
+#include <linux/module.h>
 #include <linux/workqueue.h>
 #include <linux/gfp.h>
 #include <linux/slab.h>
@@ -83,4 +84,4 @@ extern taskq_t *__taskq_create(const char *, int, pri_t, int, int, uint_t);
 }
 #endif
 
-#endif  /* _LINUX_TASKQ_H */
+#endif  /* _SOLARIS_TASKQ_H */
diff --git a/include/linux-thread.h b/include/linux-thread.h
index a1e1296a3..bcee08e47 100644
--- a/include/linux-thread.h
+++ b/include/linux-thread.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_THREAD_H
-#define _LINUX_THREAD_H
+#ifndef _SOLARIS_THREAD_H
+#define _SOLARIS_THREAD_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux/mm.h>
 #include <linux/spinlock.h>
 #include <linux-types.h>
@@ -35,14 +36,15 @@ typedef struct proc_s {
 	int foo;
 } proc_t;
 
-kthread_t * __thread_create(caddr_t stk, size_t  stksize,
+extern kthread_t *__thread_create(caddr_t stk, size_t  stksize,
                             void (*proc)(void *), void *args,
                             size_t len, proc_t *pp, int state,
                             pri_t pri);
+extern void __thread_exit(void);
 
 #ifdef  __cplusplus
 }
 #endif
 
-#endif  /* _LINUX_THREAD_H */
+#endif  /* _SOLARIS_THREAD_H */
 
diff --git a/include/linux-time.h b/include/linux-time.h
index 792811c69..2bbc7b257 100644
--- a/include/linux-time.h
+++ b/include/linux-time.h
@@ -1,7 +1,5 @@
-#ifndef _TIME_H
-#define _TIME_H
-
-#pragma ident   "%Z%%M% %I%     %E% SMI"        /* SVr4.0 1.16  */
+#ifndef _SOLARIS_TIME_H
+#define _SOLARIS_TIME_H
 
 /*
  * Structure returned by gettimeofday(2) system call,
@@ -12,6 +10,7 @@
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux/time.h>
 #include <linux-types.h>
 
@@ -61,4 +60,4 @@ gethrestime_sec(void)
 }
 #endif
 
-#endif  /* _TIME_H */
+#endif  /* _SOLARIS_TIME_H */
diff --git a/include/linux-timer.h b/include/linux-timer.h
index 0ff296ede..faee64755 100644
--- a/include/linux-timer.h
+++ b/include/linux-timer.h
@@ -1,10 +1,11 @@
-#ifndef _LINUX_TIMER_H
-#define _LINUX_TIMER_H
+#ifndef _SOLARIS_TIMER_H
+#define _SOLARIS_TIMER_H
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#include <linux/module.h>
 #include <linux/sched.h>
 #include <linux/timer.h>
 
@@ -17,5 +18,5 @@ extern "C" {
 }
 #endif
 
-#endif  /* _LINUX_TIMER_H */
+#endif  /* _SOLARIS_TIMER_H */
 
diff --git a/include/linux-types.h b/include/linux-types.h
index af692e364..d61b2f21f 100644
--- a/include/linux-types.h
+++ b/include/linux-types.h
@@ -1,5 +1,5 @@
-#ifndef _LINUX_TYPES_H
-#define	_LINUX_TYPES_H
+#ifndef _SOLARIS_TYPES_H
+#define	_SOLARIS_TYPES_H
 
 #ifdef	__cplusplus
 extern "C" {
@@ -24,4 +24,4 @@ typedef short				pri_t;
 }
 #endif
 
-#endif	/* _LINUX_TYPES_H */
+#endif	/* _SOLARIS_TYPES_H */
diff --git a/include/splat-ctl.h b/include/splat-ctl.h
index 89b8eb7b0..5cc715879 100644
--- a/include/splat-ctl.h
+++ b/include/splat-ctl.h
@@ -1,11 +1,40 @@
 #ifndef _SPLAT_CTL_H
-#define _SPLAY_CTL_H
+#define _SPLAT_CTL_H
 
-#ifdef _KERNEL
+#ifdef __KERNEL__
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/slab.h>
+#include <linux/sched.h>
+#include <linux/elf.h>
+#include <linux/limits.h>
+#include <linux/version.h>
+#include <linux/vmalloc.h>
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/list.h>
 #include <asm/ioctls.h>
 #include <asm/uaccess.h>
-#include <linux/list.h>
-#endif /* _KERNEL */
+#include <stdarg.h>
+
+#include <linux-generic.h>
+#include <linux-types.h>
+#include <linux-kmem.h>
+#include <linux-mutex.h>
+#include <linux-condvar.h>
+#include <linux-random.h>
+#include <linux-thread.h>
+#include <linux-taskq.h>
+#include <linux-rwlock.h>
+#include <linux-timer.h>
+#include <linux-time.h>
+#include <linux-cred.h>
+#include <linux-kstat.h>
+#include <linux-callb.h>
+
+#endif /* __KERNEL__ */
 
 #define KZT_VERSION			"v1.0"
 #define KZT_VERSION_SIZE		64
@@ -70,7 +99,7 @@ typedef struct kzt_cmd {
 #define KZT_TEST_UNKNOWN		0xFFF
 
 
-#ifdef _KERNEL
+#ifdef __KERNEL__
 #define KZT_SUBSYSTEM_INIT(type)                                        \
 ({      kzt_subsystem_t *_sub_;                                         \
                                                                         \
@@ -79,7 +108,7 @@ typedef struct kzt_cmd {
                 printk(KERN_ERR "Error initializing: " #type "\n");     \
         } else {                                                        \
                 spin_lock(&kzt_module_lock);                            \
-                list_add_tail(&(_sub_->subsystem_list), 		\
+                list_add_tail(&(_sub_->subsystem_list),		\
 		              &kzt_module_list);			\
                 spin_unlock(&kzt_module_lock);                          \
         }                                                               \
@@ -92,10 +121,10 @@ typedef struct kzt_cmd {
 	_id_ = kzt_##type##_id();                                       \
         spin_lock(&kzt_module_lock);                                    \
         list_for_each_entry_safe(_sub_, _tmp_,  &kzt_module_list,	\
-		                 subsystem_list) { 			\
+		                 subsystem_list) {			\
                 if (_sub_->desc.id == _id_) {                           \
                         list_del_init(&(_sub_->subsystem_list));        \
-        		spin_unlock(&kzt_module_lock);                  \
+                        spin_unlock(&kzt_module_lock);                  \
                         kzt_##type##_fini(_sub_);                       \
 			spin_lock(&kzt_module_lock);			\
                         _flag_ = 1;                                     \
@@ -128,7 +157,7 @@ typedef struct kzt_cmd {
 
 #define KZT_TEST_FINI(sub, tid)						\
 ({      kzt_test_t *_test_, *_tmp_;                                     \
-        int _flag_ = 0;                                          	\
+        int _flag_ = 0;							\
                                                                         \
         spin_lock(&((sub)->test_lock));					\
         list_for_each_entry_safe(_test_, _tmp_,				\
@@ -141,7 +170,7 @@ typedef struct kzt_cmd {
         spin_unlock(&((sub)->test_lock));				\
                                                                         \
 	if (!_flag_)                                                    \
-                printk(KERN_ERR "Error finalizing: " #tid "\n");       	\
+                printk(KERN_ERR "Error finalizing: " #tid "\n");	\
 })
 
 typedef int (*kzt_test_func_t)(struct file *, void *);
@@ -181,7 +210,7 @@ typedef struct kzt_info {
 	spin_lock(&_info_->info_lock);					\
 									\
 	/* Don't allow the kernel to start a write in the red zone */	\
-	if ((int)(_info_->info_head - _info_->info_buffer) > 		\
+	if ((int)(_info_->info_head - _info_->info_buffer) >		\
 	    (KZT_INFO_BUFFER_SIZE -KZT_INFO_BUFFER_REDZONE)) {		\
 		_rc_ = -EOVERFLOW;					\
 	} else {							\
@@ -206,6 +235,24 @@ kzt_subsystem_t * kzt_taskq_init(void);
 kzt_subsystem_t * kzt_thread_init(void);
 kzt_subsystem_t * kzt_time_init(void);
 
-#endif /* _KERNEL */
+void kzt_condvar_fini(kzt_subsystem_t *);
+void kzt_kmem_fini(kzt_subsystem_t *);
+void kzt_mutex_fini(kzt_subsystem_t *);
+void kzt_krng_fini(kzt_subsystem_t *);
+void kzt_rwlock_fini(kzt_subsystem_t *);
+void kzt_taskq_fini(kzt_subsystem_t *);
+void kzt_thread_fini(kzt_subsystem_t *);
+void kzt_time_fini(kzt_subsystem_t *);
+
+int kzt_condvar_id(void);
+int kzt_kmem_id(void);
+int kzt_mutex_id(void);
+int kzt_krng_id(void);
+int kzt_rwlock_id(void);
+int kzt_taskq_id(void);
+int kzt_thread_id(void);
+int kzt_time_id(void);
+
+#endif /* __KERNEL__ */
 
-#endif /* _SPLAY_CTL_H */
+#endif /* _SPLAT_CTL_H */
diff --git a/src/spl/Makefile.in b/src/spl/Makefile.in
index 2a77394d3..82b45a287 100644
--- a/src/spl/Makefile.in
+++ b/src/spl/Makefile.in
@@ -2,7 +2,8 @@
 
 MODULES := spl
 DISTFILES = Makefile.in \
-            linux-kmem.c linux-rwlock.c linux-taskq.c linux-thread.c
+            linux-kmem.c linux-rwlock.c linux-taskq.c \
+            linux-thread.c linux-generic.c
 CPPFLAGS += @KERNELCPPFLAGS@
 
 # Solaris porting layer module
diff --git a/src/spl/linux-generic.c b/src/spl/linux-generic.c
new file mode 100644
index 000000000..fa1ebab85
--- /dev/null
+++ b/src/spl/linux-generic.c
@@ -0,0 +1,8 @@
+#include "linux-generic.h"
+
+/*
+ * Generic support
+ */
+
+int p0 = 0;
+EXPORT_SYMBOL(p0);
diff --git a/src/spl/linux-kmem.c b/src/spl/linux-kmem.c
index e5ebdc175..4dc7c01d8 100644
--- a/src/spl/linux-kmem.c
+++ b/src/spl/linux-kmem.c
@@ -172,9 +172,9 @@ kmem_cache_generic_shrinker(int nr_to_scan, unsigned int gfp_mask)
 
 kmem_cache_t *
 __kmem_cache_create(char *name, size_t size, size_t align,
-        int (*constructor)(void *, void *, int),
-        void (*destructor)(void *, void *),
-        void (*reclaim)(void *),
+        kmem_constructor_t constructor,
+	kmem_destructor_t destructor,
+	kmem_reclaim_t reclaim,
         void *priv, void *vmp, int flags)
 {
         kmem_cache_t *cache;
@@ -216,6 +216,7 @@ __kmem_cache_create(char *name, size_t size, size_t align,
 
         return cache;
 }
+EXPORT_SYMBOL(__kmem_cache_create);
 
 /* Return codes discarded because Solaris implementation has void return */
 void
@@ -239,11 +240,12 @@ __kmem_cache_destroy(kmem_cache_t *cache)
 
 	spin_unlock(&kmem_cache_cb_lock);
 }
+EXPORT_SYMBOL(__kmem_cache_destroy);
 
-void 
+void
 __kmem_reap(void) {
-	/* Since there's no easy hook in to linux to force all the registered 
+	/* Since there's no easy hook in to linux to force all the registered
 	 * shrinkers to run we just run the ones registered for this shim */
 	kmem_cache_generic_shrinker(KMC_REAP_CHUNK, GFP_KERNEL);
 }
-
+EXPORT_SYMBOL(__kmem_reap);
diff --git a/src/spl/linux-rwlock.c b/src/spl/linux-rwlock.c
index e95ec1555..24775c414 100644
--- a/src/spl/linux-rwlock.c
+++ b/src/spl/linux-rwlock.c
@@ -1,4 +1,4 @@
-#include <sys/linux-rwlock.h>
+#include <linux-rwlock.h>
 
 int
 rw_lock_held(krwlock_t *rwlp)
@@ -12,7 +12,7 @@ rw_lock_held(krwlock_t *rwlp)
 #endif
 		return 1;
 	}
-	
+
 	return 0;
 }
 
diff --git a/src/spl/linux-taskq.c b/src/spl/linux-taskq.c
index 0babd2395..ddcf57c3c 100644
--- a/src/spl/linux-taskq.c
+++ b/src/spl/linux-taskq.c
@@ -1,4 +1,4 @@
-#include <sys/linux-taskq.h>
+#include <linux-taskq.h>
 
 /*
  * Task queue interface
@@ -58,6 +58,7 @@ __taskq_dispatch(taskq_t *tq, task_func_t func, void *priv, uint_t flags)
 
         return (taskqid_t)wq;
 }
+EXPORT_SYMBOL(__taskq_dispatch);
 
 /* XXX - Most args ignored until we decide if it's worth the effort
  *       to emulate the solaris notion of dynamic thread pools.  For
@@ -72,7 +73,8 @@ taskq_t *
 __taskq_create(const char *name, int nthreads, pri_t pri,
                int minalloc, int maxalloc, uint_t flags)
 {
-	/* NOTE: Linux workqueue names are limited to 10 chars */		
+	/* NOTE: Linux workqueue names are limited to 10 chars */
 
         return create_singlethread_workqueue(name);
 }
+EXPORT_SYMBOL(__taskq_create);
diff --git a/src/spl/linux-thread.c b/src/spl/linux-thread.c
index f3caa6365..9785d50d3 100644
--- a/src/spl/linux-thread.c
+++ b/src/spl/linux-thread.c
@@ -15,7 +15,7 @@ typedef struct thread_priv_s {
         wait_queue_head_t tp_waitq;	/* Syncronization wait queue */
 } thread_priv_t;
 
-int
+static int
 thread_generic_wrapper(void *arg)
 {
 	thread_priv_t *tp = (thread_priv_t *)arg;
@@ -38,8 +38,8 @@ thread_generic_wrapper(void *arg)
         spin_unlock(&tp->tp_lock);
 	wake_up(&tp->tp_waitq);
 
-	/* DO NOT USE 'ARG' AFTER THIS POINT, EVER, EVER, EVER! 
-	 * Local variables are used here because after the calling thread 
+	/* DO NOT USE 'ARG' AFTER THIS POINT, EVER, EVER, EVER!
+	 * Local variables are used here because after the calling thread
 	 * has been woken up it will exit and this memory will no longer
 	 * be safe to access since it was declared on the callers stack. */
 	if (func)
@@ -53,6 +53,7 @@ __thread_exit(void)
 {
 	return;
 }
+EXPORT_SYMBOL(__thread_exit);
 
 /* thread_create() may block forever if it cannot create a thread or
  * allocate memory.  This is preferable to returning a NULL which Solaris
@@ -63,7 +64,6 @@ __thread_create(caddr_t stk, size_t  stksize, void (*proc)(void *),
 {
 	thread_priv_t tp;
 	DEFINE_WAIT(wait);
-	kthread_t *task;
 	long pid;
 
 	/* Option pp is simply ignored */
@@ -106,8 +106,9 @@ __thread_create(caddr_t stk, size_t  stksize, void (*proc)(void *),
 
 	/* Verify the pid retunred matches the pid in the task struct */
 	BUG_ON(pid != (tp.tp_task)->pid);
-	
+
 	spin_unlock(&tp.tp_lock);
 
 	return (kthread_t *)tp.tp_task;
 }
+EXPORT_SYMBOL(__thread_create);
diff --git a/src/splat/splat-condvar.c b/src/splat/splat-condvar.c
index eaab2ac0a..7c9b55784 100644
--- a/src/splat/splat-condvar.c
+++ b/src/splat/splat-condvar.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_CONDVAR		0x0500
 #define KZT_CONDVAR_NAME		"condvar"
diff --git a/src/splat/splat-ctl.c b/src/splat/splat-ctl.c
index 5292b0e60..9bff58a65 100644
--- a/src/splat/splat-ctl.c
+++ b/src/splat/splat-ctl.c
@@ -19,13 +19,7 @@
  * Author: Brian Behlendorf
  */
 
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
-
-#include <linux/version.h>
-#include <linux/vmalloc.h>
-#include <linux/module.h>
-#include <linux/device.h>
+#include <splat-ctl.h>
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
 #include <linux/devfs_fs_kernel.h>
@@ -233,7 +227,7 @@ kzt_test_count(kzt_cfg_t *kcfg, unsigned long arg)
 {
 	kzt_subsystem_t *sub;
 	kzt_test_t *test;
-	int rc, i = 0;
+	int i = 0;
 
 	/* Subsystem ID passed as arg1 */
 	sub = kzt_subsystem_find(kcfg->cfg_arg1);
@@ -259,7 +253,7 @@ kzt_test_list(kzt_cfg_t *kcfg, unsigned long arg)
 	kzt_subsystem_t *sub;
 	kzt_test_t *test;
 	kzt_cfg_t *tmp;
-	int size, rc, i = 0;
+	int size, i = 0;
 
 	/* Subsystem ID passed as arg1 */
 	sub = kzt_subsystem_find(kcfg->cfg_arg1);
@@ -309,7 +303,6 @@ static int
 kzt_validate(struct file *file, kzt_subsystem_t *sub, int cmd, void *arg)
 {
         kzt_test_t *test;
-        int rc = 0;
 
         spin_lock(&(sub->test_lock));
         list_for_each_entry(test, &(sub->test_list), test_list) {
@@ -432,7 +425,8 @@ static int
 kzt_ioctl(struct inode *inode, struct file *file,
 	  unsigned int cmd, unsigned long arg)
 {
-	int minor, rc = 0;
+        unsigned int minor = iminor(file->f_dentry->d_inode);
+	int rc = 0;
 
 	/* Ignore tty ioctls */
 	if ((cmd & 0xffffff00) == ((int)'T') << 8)
@@ -588,7 +582,7 @@ static int __init
 kzt_init(void)
 {
 	dev_t dev;
-	int i, rc;
+	int rc;
 
 	spin_lock_init(&kzt_module_lock);
 	INIT_LIST_HEAD(&kzt_module_list);
@@ -603,7 +597,7 @@ kzt_init(void)
 	KZT_SUBSYSTEM_INIT(time);
 
 	dev = MKDEV(KZT_MAJOR, 0);
-        if (rc = register_chrdev_region(dev, KZT_MINORS, "kztctl"))
+        if ((rc = register_chrdev_region(dev, KZT_MINORS, "kztctl")))
 		goto error;
 
 	/* Support for registering a character driver */
@@ -648,7 +642,6 @@ static void
 kzt_fini(void)
 {
 	dev_t dev = MKDEV(KZT_MAJOR, 0);
-        int i;
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
         class_simple_device_remove(dev);
diff --git a/src/splat/splat-kmem.c b/src/splat/splat-kmem.c
index fb40819b5..d0af3fc52 100644
--- a/src/splat/splat-kmem.c
+++ b/src/splat/splat-kmem.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_KMEM		0x0100
 #define KZT_KMEM_NAME			"kmem"
@@ -229,7 +228,7 @@ kzt_kmem_test3(struct file *file, void *arg)
 out_free:
 	if (kcd)
 		kmem_cache_free(cache, kcd);
-out_destroy:
+
 	kmem_cache_destroy(cache);
 	return rc;
 }
@@ -279,7 +278,7 @@ kzt_kmem_test4(struct file *file, void *arg)
 	kcp.kcp_cache = cache;
 
 	for (i = 0; i < KZT_KMEM_OBJ_COUNT; i++) {
- 		/* All allocations need not succeed */
+		/* All allocations need not succeed */
 		kcp.kcp_kcd[i] = kmem_cache_alloc(cache, 0);
 		if (!kcp.kcp_kcd[i]) {
 			kzt_vprint(file, KZT_KMEM_TEST4_NAME,
diff --git a/src/splat/splat-mutex.c b/src/splat/splat-mutex.c
index 254a40de2..47a36308e 100644
--- a/src/splat/splat-mutex.c
+++ b/src/splat/splat-mutex.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_MUTEX		0x0400
 #define KZT_MUTEX_NAME			"mutex"
diff --git a/src/splat/splat-random.c b/src/splat/splat-random.c
index abb654063..412c1d62a 100644
--- a/src/splat/splat-random.c
+++ b/src/splat/splat-random.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_KRNG		0x0300
 #define KZT_KRNG_NAME			"krng"
diff --git a/src/splat/splat-rwlock.c b/src/splat/splat-rwlock.c
index 9820937c3..df4585ea3 100644
--- a/src/splat/splat-rwlock.c
+++ b/src/splat/splat-rwlock.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_RWLOCK		0x0700
 #define KZT_RWLOCK_NAME			"rwlock"
diff --git a/src/splat/splat-taskq.c b/src/splat/splat-taskq.c
index 614e7136c..3d5c075f4 100644
--- a/src/splat/splat-taskq.c
+++ b/src/splat/splat-taskq.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_TASKQ		0x0200
 #define KZT_TASKQ_NAME			"taskq"
diff --git a/src/splat/splat-thread.c b/src/splat/splat-thread.c
index 0741db1fa..34260c2d6 100644
--- a/src/splat/splat-thread.c
+++ b/src/splat/splat-thread.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_THREAD		0x0600
 #define KZT_THREAD_NAME			"thread"
diff --git a/src/splat/splat-time.c b/src/splat/splat-time.c
index b7d4ce86e..3e8007a37 100644
--- a/src/splat/splat-time.c
+++ b/src/splat/splat-time.c
@@ -1,5 +1,4 @@
-#include <sys/zfs_context.h>
-#include <sys/splat-ctl.h>
+#include <splat-ctl.h>
 
 #define KZT_SUBSYSTEM_TIME		0x0800
 #define KZT_TIME_NAME			"time"