diff options
Diffstat (limited to 'community-testing/vhba-module/vhba-kernel2.6.37.patch')
-rw-r--r-- | community-testing/vhba-module/vhba-kernel2.6.37.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/community-testing/vhba-module/vhba-kernel2.6.37.patch b/community-testing/vhba-module/vhba-kernel2.6.37.patch new file mode 100644 index 000000000..e2b619c74 --- /dev/null +++ b/community-testing/vhba-module/vhba-kernel2.6.37.patch @@ -0,0 +1,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 + |