aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas/mpt2sas_transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_transport.c')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_transport.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_transport.c b/drivers/scsi/mpt2sas/mpt2sas_transport.c
index 686695b155c..a53086d0381 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_transport.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_transport.c
@@ -140,11 +140,18 @@ _transport_set_identify(struct MPT2SAS_ADAPTER *ioc, u16 handle,
140 u32 device_info; 140 u32 device_info;
141 u32 ioc_status; 141 u32 ioc_status;
142 142
143 if (ioc->shost_recovery) {
144 printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n",
145 __func__, ioc->name);
146 return -EFAULT;
147 }
148
143 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, 149 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0,
144 MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, handle))) { 150 MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, handle))) {
145 printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 151 printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n",
152
146 ioc->name, __FILE__, __LINE__, __func__); 153 ioc->name, __FILE__, __LINE__, __func__);
147 return -1; 154 return -ENXIO;
148 } 155 }
149 156
150 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 157 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
@@ -153,7 +160,7 @@ _transport_set_identify(struct MPT2SAS_ADAPTER *ioc, u16 handle,
153 printk(MPT2SAS_ERR_FMT "handle(0x%04x), ioc_status(0x%04x)" 160 printk(MPT2SAS_ERR_FMT "handle(0x%04x), ioc_status(0x%04x)"
154 "\nfailure at %s:%d/%s()!\n", ioc->name, handle, ioc_status, 161 "\nfailure at %s:%d/%s()!\n", ioc->name, handle, ioc_status,
155 __FILE__, __LINE__, __func__); 162 __FILE__, __LINE__, __func__);
156 return -1; 163 return -EIO;
157 } 164 }
158 165
159 memset(identify, 0, sizeof(identify)); 166 memset(identify, 0, sizeof(identify));
@@ -288,21 +295,17 @@ _transport_expander_report_manufacture(struct MPT2SAS_ADAPTER *ioc,
288 void *psge; 295 void *psge;
289 u32 sgl_flags; 296 u32 sgl_flags;
290 u8 issue_reset = 0; 297 u8 issue_reset = 0;
291 unsigned long flags;
292 void *data_out = NULL; 298 void *data_out = NULL;
293 dma_addr_t data_out_dma; 299 dma_addr_t data_out_dma;
294 u32 sz; 300 u32 sz;
295 u64 *sas_address_le; 301 u64 *sas_address_le;
296 u16 wait_state_count; 302 u16 wait_state_count;
297 303
298 spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags); 304 if (ioc->shost_recovery) {
299 if (ioc->ioc_reset_in_progress) {
300 spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
301 printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n", 305 printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n",
302 __func__, ioc->name); 306 __func__, ioc->name);
303 return -EFAULT; 307 return -EFAULT;
304 } 308 }
305 spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
306 309
307 mutex_lock(&ioc->transport_cmds.mutex); 310 mutex_lock(&ioc->transport_cmds.mutex);
308 311
@@ -806,6 +809,12 @@ mpt2sas_transport_update_phy_link_change(struct MPT2SAS_ADAPTER *ioc,
806 struct _sas_node *sas_node; 809 struct _sas_node *sas_node;
807 struct _sas_phy *mpt2sas_phy; 810 struct _sas_phy *mpt2sas_phy;
808 811
812 if (ioc->shost_recovery) {
813 printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n",
814 __func__, ioc->name);
815 return;
816 }
817
809 spin_lock_irqsave(&ioc->sas_node_lock, flags); 818 spin_lock_irqsave(&ioc->sas_node_lock, flags);
810 sas_node = _transport_sas_node_find_by_handle(ioc, handle); 819 sas_node = _transport_sas_node_find_by_handle(ioc, handle);
811 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); 820 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
@@ -1025,7 +1034,6 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
1025 void *psge; 1034 void *psge;
1026 u32 sgl_flags; 1035 u32 sgl_flags;
1027 u8 issue_reset = 0; 1036 u8 issue_reset = 0;
1028 unsigned long flags;
1029 dma_addr_t dma_addr_in = 0; 1037 dma_addr_t dma_addr_in = 0;
1030 dma_addr_t dma_addr_out = 0; 1038 dma_addr_t dma_addr_out = 0;
1031 u16 wait_state_count; 1039 u16 wait_state_count;
@@ -1045,14 +1053,11 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
1045 return -EINVAL; 1053 return -EINVAL;
1046 } 1054 }
1047 1055
1048 spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags); 1056 if (ioc->shost_recovery) {
1049 if (ioc->ioc_reset_in_progress) {
1050 spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
1051 printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n", 1057 printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n",
1052 __func__, ioc->name); 1058 __func__, ioc->name);
1053 return -EFAULT; 1059 return -EFAULT;
1054 } 1060 }
1055 spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
1056 1061
1057 rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex); 1062 rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex);
1058 if (rc) 1063 if (rc)