diff options
Diffstat (limited to 'drivers/scsi/ips.c')
| -rw-r--r-- | drivers/scsi/ips.c | 21 |
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 | /****************************************************************************/ |
| 868 | static int | 875 | static int |
| 869 | ips_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 | ||
| 1063 | static int | ||
| 1064 | ips_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 */ |
