aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ips.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/ips.c')
-rw-r--r--drivers/scsi/ips.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index fbc2cb6667a1..6dfcb4fbccdd 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -819,12 +819,15 @@ ips_eh_abort(Scsi_Cmnd * SC)
819 ips_ha_t *ha; 819 ips_ha_t *ha;
820 ips_copp_wait_item_t *item; 820 ips_copp_wait_item_t *item;
821 int ret; 821 int ret;
822 unsigned long cpu_flags;
823 struct Scsi_Host *host;
822 824
823 METHOD_TRACE("ips_eh_abort", 1); 825 METHOD_TRACE("ips_eh_abort", 1);
824 826
825 if (!SC) 827 if (!SC)
826 return (FAILED); 828 return (FAILED);
827 829
830 host = SC->device->host;
828 ha = (ips_ha_t *) SC->device->host->hostdata; 831 ha = (ips_ha_t *) SC->device->host->hostdata;
829 832
830 if (!ha) 833 if (!ha)
@@ -833,6 +836,8 @@ ips_eh_abort(Scsi_Cmnd * SC)
833 if (!ha->active) 836 if (!ha->active)
834 return (FAILED); 837 return (FAILED);
835 838
839 IPS_LOCK_SAVE(host->host_lock, cpu_flags);
840
836 /* See if the command is on the copp queue */ 841 /* See if the command is on the copp queue */
837 item = ha->copp_waitlist.head; 842 item = ha->copp_waitlist.head;
838 while ((item) && (item->scsi_cmd != SC)) 843 while ((item) && (item->scsi_cmd != SC))
@@ -851,6 +856,8 @@ ips_eh_abort(Scsi_Cmnd * SC)
851 /* command must have already been sent */ 856 /* command must have already been sent */
852 ret = (FAILED); 857 ret = (FAILED);
853 } 858 }
859
860 IPS_UNLOCK_RESTORE(host->host_lock, cpu_flags);
854 return ret; 861 return ret;
855} 862}
856 863
@@ -866,7 +873,7 @@ ips_eh_abort(Scsi_Cmnd * SC)
866/* */ 873/* */
867/****************************************************************************/ 874/****************************************************************************/
868static int 875static int
869ips_eh_reset(Scsi_Cmnd * SC) 876__ips_eh_reset(Scsi_Cmnd * SC)
870{ 877{
871 int ret; 878 int ret;
872 int i; 879 int i;
@@ -1053,6 +1060,18 @@ ips_eh_reset(Scsi_Cmnd * SC)
1053 1060
1054} 1061}
1055 1062
1063static int
1064ips_eh_reset(Scsi_Cmnd * SC)
1065{
1066 int rc;
1067
1068 spin_lock_irq(SC->device->host->host_lock);
1069 rc = __ips_eh_reset(SC);
1070 spin_unlock_irq(SC->device->host->host_lock);
1071
1072 return rc;
1073}
1074
1056/****************************************************************************/ 1075/****************************************************************************/
1057/* */ 1076/* */
1058/* Routine Name: ips_queue */ 1077/* Routine Name: ips_queue */