summaryrefslogtreecommitdiff
path: root/community-testing/vhba-module/vhba-kernel2.6.37.patch
blob: e2b619c74ba8e68b540ab98b4c63d3bf84c45967 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
From 9ad7ec7fae387f05249b9f4e6accb3bc3b0b8b0f Mon Sep 17 00:00:00 2001
From: Alexandre Rostovtsev <tetromino@gmail.com>
Date: Thu, 6 Jan 2011 03:39:26 -0500
Subject: [PATCH] Make vhba compatible with kernel 2.6.37 SCSI host API

Due to the SCSI host lock push-down changes introduced in 2.6.37 (see
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=f281233d3eba15fb225d21ae2e228fd4553d824a
for more details), trying to use current vhba on 2.6.37 leads to oopses
and kernel panics - e.g. see http://bugs.gentoo.org/show_bug.cgi?id=350753

Add some #ifdefs to enable compatibility both with 2.6.37 and older API.
Note that if future kernel versions remove the DEF_SCSI_QCMD macro, this
issue will need to be revisited.

Signed-off-by: Alexandre Rostovtsev <tetromino@gmail.com>
---
 vhba-module/vhba.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/vhba-module/vhba.c b/vhba-module/vhba.c
index 059f6ce..9d13016 100644
--- a/vhba-module/vhba.c
+++ b/vhba-module/vhba.c
@@ -27,6 +27,7 @@
 #include <linux/miscdevice.h>
 #include <linux/poll.h>
 #include <linux/slab.h>
+#include <linux/version.h>
 #ifdef CONFIG_COMPAT
 #include <linux/compat.h>
 #endif
@@ -363,7 +364,7 @@ static void vhba_free_command(struct vhba_command *vcmd)
         spin_unlock_irqrestore(&vhost->cmd_lock, flags);
 }
 
-static int vhba_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
+static int vhba_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
 {
         struct vhba_device *vdev;
         int retval;
@@ -388,6 +389,12 @@ static int vhba_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmn
         return retval;
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
+DEF_SCSI_QCMD(vhba_queuecommand)
+#else
+#define vhba_queuecommand vhba_queuecommand_lck
+#endif
+
 static int vhba_abort(struct scsi_cmnd *cmd)
 {
         struct vhba_device *vdev;
-- 
1.7.3.4