[dm-devel] [PATCH]: dm-user w/ Linux 2.6.20

Stephen.Wilson at amd.com Stephen.Wilson at amd.com
Tue Apr 17 23:10:35 UTC 2007


Kernel Module: dm-user.ko

Found at: http://static.danplanet.com/hg/dm-userspace.ring

This patch fixes compilation issues for dm-user module when compiling for kernels equal or greater than Linux 2.6.20. In particular fixing up driver to work with newer workqueue API and fixing a couple deprecated type issues. There should be no functional changes to the driver with this patch.

Stephen Wilson
Operating System Research Center
AMD Corporation

Signed-off-by: Stephen Wilson <Stephen Wilson amd com>

diff -r 1af4bd771b30 module/dm-user.h
--- a/module/dm-user.h	Thu Jan 25 17:25:11 2007 -0800
+++ b/module/dm-user.h	Tue Apr 17 15:42:29 2007 -0500
@@ -19,13 +19,23 @@
 
 #ifndef __DM_USER_H
 #define __DM_USER_H
-
+#include <linux/version.h>
 #include <linux/dm-userspace.h>
 
 #include <linux/hardirq.h>
 #include <linux/slab.h>
 
 #define DMU_KEY_LEN 256
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+#define INIT_WORKQ(_wq, _routine)	INIT_WORK(_wq, _routine, _wq)
+#define PREPARE_WORKQ(_wq, _routine)	PREPARE_WORK(_wq, _routine, _wq)
+#define WORK_ARG_TYPE void
+#else
+#define INIT_WORKQ(_wq, _routine)	INIT_WORK(_wq, _routine)
+#define PREPARE_WORKQ(_wq, _routine)	PREPARE_WORK(_wq, _routine)
+#define WORK_ARG_TYPE struct work_struct
+#endif
 
 extern struct target_type userspace_target;
 extern mempool_t *request_pool;
@@ -115,7 +125,7 @@ struct dmu_request {
 
 
 extern void add_tx_request(struct dmu_device *dev, struct dmu_request *req);
-extern void endio_worker(void *data);
+extern void endio_worker(WORK_ARG_TYPE *data);
 
 /* Find and grab a reference to a target device */
 struct target_device *find_target(struct dmu_device *dev,
diff -r 1af4bd771b30 module/dm-userspace-cache.c
--- a/module/dm-userspace-cache.c	Thu Jan 25 17:25:11 2007 -0800
+++ b/module/dm-userspace-cache.c	Tue Apr 17 15:42:27 2007 -0500
@@ -37,7 +37,7 @@
 
 #define DM_MSG_PREFIX "dm-userspace-cache"
 
-static kmem_cache_t *map_cache;
+static struct kmem_cache *map_cache;
 
 struct dmu_mappings {
 	struct list_head *table;
diff -r 1af4bd771b30 module/dm-userspace-chardev.c
--- a/module/dm-userspace-chardev.c	Thu Jan 25 17:25:11 2007 -0800
+++ b/module/dm-userspace-chardev.c	Tue Apr 17 15:42:27 2007 -0500
@@ -147,7 +147,7 @@ static void send_userspace_message(struc
 	 * then it needs to be freed after sending
 	 */
 	if (list_empty(&req->list)) {
- 		INIT_WORK(&req->task, endio_worker, req);
+ 		INIT_WORKQ(&req->task, endio_worker);
 		schedule_work(&req->task);
 	}
 }
@@ -306,9 +306,9 @@ static void copy_block(struct dmu_device
 	kcopyd_copy(dev->kcopy, &src, 1, &dst, 0, flush_block, req);
 }
 
-static void map_worker(void *data)
-{
-	struct dmu_request *req = data;
+static void map_worker(WORK_ARG_TYPE *data)
+{
+	struct dmu_request *req = container_of(data, struct dmu_request, task);
 	struct dmu_msg_map_response *msg = &req->response;
 	struct dmu_device *dev = req->dev;
 	struct target_device *src_dev, *dst_dev;
@@ -393,7 +393,7 @@ static void do_map_bio(struct dmu_device
 
 	memcpy(&req->response, msg, sizeof(req->response));
 
-	INIT_WORK(&req->task, map_worker, req);
+	INIT_WORKQ(&req->task, map_worker);
 	schedule_work(&req->task);
 }
 
diff -r 1af4bd771b30 module/dm-userspace.c
--- a/module/dm-userspace.c	Thu Jan 25 17:25:11 2007 -0800
+++ b/module/dm-userspace.c	Tue Apr 17 15:42:27 2007 -0500
@@ -40,7 +40,7 @@
 
 #define DM_MSG_PREFIX     "dm-userspace"
 
-static kmem_cache_t *request_cache;
+static struct kmem_cache *request_cache;
 mempool_t *request_pool;
 
 spinlock_t devices_lock;
@@ -51,9 +51,9 @@ int nocache;
 /* Device number for the control device */
 dev_t dmu_dev;
 
-void endio_worker(void *data)
-{
-	struct dmu_request *req = data;
+void endio_worker(WORK_ARG_TYPE *data)
+{
+	struct dmu_request *req = container_of(data, struct dmu_request, task);
 	struct dmu_device *dev = req->dev;
 
 	spin_lock(&dev->lock);
@@ -63,7 +63,7 @@ void endio_worker(void *data)
 		atomic_dec(&dev->total);
 		wake_up_interruptible(&dev->lowmem);
 	} else {
-		PREPARE_WORK(&req->task, endio_worker, req);
+		PREPARE_WORKQ(&req->task, endio_worker);
 		schedule_work(&req->task);
 	}
 	spin_unlock(&dev->lock);
@@ -474,7 +474,7 @@ static int dmu_end_io(struct dm_target *
 		add_tx_request(req->dev, req);
 		ret = 1;
 	} else {
-		INIT_WORK(&req->task, endio_worker, req);
+		INIT_WORKQ(&req->task, endio_worker);
 		schedule_work(&req->task);
 	}
 





More information about the dm-devel mailing list