aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptspi.c
diff options
context:
space:
mode:
authorMatthew Wilcox <[email protected]>2014-03-27 20:40:36 +0000
committerChristoph Hellwig <[email protected]>2014-05-28 16:13:25 +0000
commita48ac9e5d4f3555bdec2fd61e49fc71b26810d68 (patch)
treece61a979e4ff2e0f684a25d7861bec07752200a2 /drivers/message/fusion/mptspi.c
parentfusion: Add free msg frames to the head, not tail of list (diff)
downloadkernel-a48ac9e5d4f3555bdec2fd61e49fc71b26810d68.tar.gz
kernel-a48ac9e5d4f3555bdec2fd61e49fc71b26810d68.zip
fusion: Remove use of DEF_SCSI_QCMD
Removing the host_lock from the I/O submission path gives a huge scalability improvement. Signed-off-by: Matthew Wilcox <[email protected]> Reviewed-by: Nicholas Bellinger <[email protected]> Reviewed-by: Praveen Krishnamoorthy <[email protected]> Acked-by: Sreekanth Reddy <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]>
Diffstat (limited to 'drivers/message/fusion/mptspi.c')
-rw-r--r--drivers/message/fusion/mptspi.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c
index 5653e505f91f..49d11338294b 100644
--- a/drivers/message/fusion/mptspi.c
+++ b/drivers/message/fusion/mptspi.c
@@ -780,33 +780,31 @@ static int mptspi_slave_configure(struct scsi_device *sdev)
}
static int
-mptspi_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
+mptspi_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt)
{
- struct _MPT_SCSI_HOST *hd = shost_priv(SCpnt->device->host);
+ struct _MPT_SCSI_HOST *hd = shost_priv(shost);
VirtDevice *vdevice = SCpnt->device->hostdata;
MPT_ADAPTER *ioc = hd->ioc;
if (!vdevice || !vdevice->vtarget) {
SCpnt->result = DID_NO_CONNECT << 16;
- done(SCpnt);
+ SCpnt->scsi_done(SCpnt);
return 0;
}
if (SCpnt->device->channel == 1 &&
mptscsih_is_phys_disk(ioc, 0, SCpnt->device->id) == 0) {
SCpnt->result = DID_NO_CONNECT << 16;
- done(SCpnt);
+ SCpnt->scsi_done(SCpnt);
return 0;
}
if (spi_dv_pending(scsi_target(SCpnt->device)))
ddvprintk(ioc, scsi_print_command(SCpnt));
- return mptscsih_qcmd(SCpnt,done);
+ return mptscsih_qcmd(SCpnt);
}
-static DEF_SCSI_QCMD(mptspi_qcmd)
-
static void mptspi_slave_destroy(struct scsi_device *sdev)
{
struct scsi_target *starget = scsi_target(sdev);