aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptspi.c
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew.r.wilcox@intel.com>2014-03-27 16:40:36 -0400
committerChristoph Hellwig <hch@lst.de>2014-05-28 12:13:25 -0400
commita48ac9e5d4f3555bdec2fd61e49fc71b26810d68 (patch)
treece61a979e4ff2e0f684a25d7861bec07752200a2 /drivers/message/fusion/mptspi.c
parentecc3bc982596cb66bd7f951e2f36503f4841c0c8 (diff)
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 <matthew.r.wilcox@intel.com> Reviewed-by: Nicholas Bellinger <nab@linux-iscsi.org> Reviewed-by: Praveen Krishnamoorthy <Praveen.krishnamoorthy@lsi.com> Acked-by: Sreekanth Reddy <Sreekanth.reddy@lsi.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
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)
780} 780}
781 781
782static int 782static int
783mptspi_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) 783mptspi_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt)
784{ 784{
785 struct _MPT_SCSI_HOST *hd = shost_priv(SCpnt->device->host); 785 struct _MPT_SCSI_HOST *hd = shost_priv(shost);
786 VirtDevice *vdevice = SCpnt->device->hostdata; 786 VirtDevice *vdevice = SCpnt->device->hostdata;
787 MPT_ADAPTER *ioc = hd->ioc; 787 MPT_ADAPTER *ioc = hd->ioc;
788 788
789 if (!vdevice || !vdevice->vtarget) { 789 if (!vdevice || !vdevice->vtarget) {
790 SCpnt->result = DID_NO_CONNECT << 16; 790 SCpnt->result = DID_NO_CONNECT << 16;
791 done(SCpnt); 791 SCpnt->scsi_done(SCpnt);
792 return 0; 792 return 0;
793 } 793 }
794 794
795 if (SCpnt->device->channel == 1 && 795 if (SCpnt->device->channel == 1 &&
796 mptscsih_is_phys_disk(ioc, 0, SCpnt->device->id) == 0) { 796 mptscsih_is_phys_disk(ioc, 0, SCpnt->device->id) == 0) {
797 SCpnt->result = DID_NO_CONNECT << 16; 797 SCpnt->result = DID_NO_CONNECT << 16;
798 done(SCpnt); 798 SCpnt->scsi_done(SCpnt);
799 return 0; 799 return 0;
800 } 800 }
801 801
802 if (spi_dv_pending(scsi_target(SCpnt->device))) 802 if (spi_dv_pending(scsi_target(SCpnt->device)))
803 ddvprintk(ioc, scsi_print_command(SCpnt)); 803 ddvprintk(ioc, scsi_print_command(SCpnt));
804 804
805 return mptscsih_qcmd(SCpnt,done); 805 return mptscsih_qcmd(SCpnt);
806} 806}
807 807
808static DEF_SCSI_QCMD(mptspi_qcmd)
809
810static void mptspi_slave_destroy(struct scsi_device *sdev) 808static void mptspi_slave_destroy(struct scsi_device *sdev)
811{ 809{
812 struct scsi_target *starget = scsi_target(sdev); 810 struct scsi_target *starget = scsi_target(sdev);