diff options
Diffstat (limited to 'drivers/scsi/mpt2sas')
-rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_scsih.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index f9ce31950314..1f289882a298 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c | |||
@@ -3059,6 +3059,7 @@ _scsih_tm_tr_send(struct MPT2SAS_ADAPTER *ioc, u16 handle) | |||
3059 | "handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, handle, | 3059 | "handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, handle, |
3060 | (unsigned long long)sas_address)); | 3060 | (unsigned long long)sas_address)); |
3061 | _scsih_ublock_io_device(ioc, handle); | 3061 | _scsih_ublock_io_device(ioc, handle); |
3062 | sas_target_priv_data->handle = MPT2SAS_INVALID_DEVICE_HANDLE; | ||
3062 | } | 3063 | } |
3063 | 3064 | ||
3064 | smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx); | 3065 | smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx); |
@@ -5201,6 +5202,9 @@ _scsih_remove_device(struct MPT2SAS_ADAPTER *ioc, | |||
5201 | if (sas_device_backup.starget && sas_device_backup.starget->hostdata) { | 5202 | if (sas_device_backup.starget && sas_device_backup.starget->hostdata) { |
5202 | sas_target_priv_data = sas_device_backup.starget->hostdata; | 5203 | sas_target_priv_data = sas_device_backup.starget->hostdata; |
5203 | sas_target_priv_data->deleted = 1; | 5204 | sas_target_priv_data->deleted = 1; |
5205 | _scsih_ublock_io_device(ioc, sas_device_backup.handle); | ||
5206 | sas_target_priv_data->handle = | ||
5207 | MPT2SAS_INVALID_DEVICE_HANDLE; | ||
5204 | } | 5208 | } |
5205 | 5209 | ||
5206 | _scsih_ublock_io_device(ioc, sas_device_backup.handle); | 5210 | _scsih_ublock_io_device(ioc, sas_device_backup.handle); |
@@ -5354,7 +5358,7 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc, | |||
5354 | _scsih_sas_topology_change_event_debug(ioc, event_data); | 5358 | _scsih_sas_topology_change_event_debug(ioc, event_data); |
5355 | #endif | 5359 | #endif |
5356 | 5360 | ||
5357 | if (ioc->shost_recovery || ioc->remove_host || ioc->pci_error_recovery) | 5361 | if (ioc->remove_host || ioc->pci_error_recovery) |
5358 | return; | 5362 | return; |
5359 | 5363 | ||
5360 | if (!ioc->sas_hba.num_phys) | 5364 | if (!ioc->sas_hba.num_phys) |
@@ -5415,6 +5419,9 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc, | |||
5415 | switch (reason_code) { | 5419 | switch (reason_code) { |
5416 | case MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED: | 5420 | case MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED: |
5417 | 5421 | ||
5422 | if (ioc->shost_recovery) | ||
5423 | break; | ||
5424 | |||
5418 | if (link_rate == prev_link_rate) | 5425 | if (link_rate == prev_link_rate) |
5419 | break; | 5426 | break; |
5420 | 5427 | ||
@@ -5428,6 +5435,9 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc, | |||
5428 | break; | 5435 | break; |
5429 | case MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED: | 5436 | case MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED: |
5430 | 5437 | ||
5438 | if (ioc->shost_recovery) | ||
5439 | break; | ||
5440 | |||
5431 | mpt2sas_transport_update_links(ioc, sas_address, | 5441 | mpt2sas_transport_update_links(ioc, sas_address, |
5432 | handle, phy_number, link_rate); | 5442 | handle, phy_number, link_rate); |
5433 | 5443 | ||
@@ -7091,7 +7101,13 @@ mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) | |||
7091 | _scsih_search_responding_sas_devices(ioc); | 7101 | _scsih_search_responding_sas_devices(ioc); |
7092 | _scsih_search_responding_raid_devices(ioc); | 7102 | _scsih_search_responding_raid_devices(ioc); |
7093 | _scsih_search_responding_expanders(ioc); | 7103 | _scsih_search_responding_expanders(ioc); |
7104 | if (!ioc->is_driver_loading) { | ||
7105 | _scsih_prep_device_scan(ioc); | ||
7106 | _scsih_search_responding_sas_devices(ioc); | ||
7107 | _scsih_search_responding_raid_devices(ioc); | ||
7108 | _scsih_search_responding_expanders(ioc); | ||
7094 | _scsih_error_recovery_delete_devices(ioc); | 7109 | _scsih_error_recovery_delete_devices(ioc); |
7110 | } | ||
7095 | break; | 7111 | break; |
7096 | } | 7112 | } |
7097 | } | 7113 | } |
@@ -7126,17 +7142,7 @@ _firmware_event_work(struct work_struct *work) | |||
7126 | _scsih_scan_for_devices_after_reset(ioc); | 7142 | _scsih_scan_for_devices_after_reset(ioc); |
7127 | break; | 7143 | break; |
7128 | case MPT2SAS_PORT_ENABLE_COMPLETE: | 7144 | case MPT2SAS_PORT_ENABLE_COMPLETE: |
7129 | if (!ioc->is_driver_loading && ioc->shost_recovery) { | 7145 | ioc->start_scan = 0; |
7130 | _scsih_prep_device_scan(ioc); | ||
7131 | _scsih_search_responding_sas_devices(ioc); | ||
7132 | _scsih_search_responding_raid_devices(ioc); | ||
7133 | _scsih_search_responding_expanders(ioc); | ||
7134 | } | ||
7135 | |||
7136 | if (ioc->start_scan) | ||
7137 | ioc->start_scan = 0; | ||
7138 | else | ||
7139 | complete(&ioc->port_enable_done); | ||
7140 | 7146 | ||
7141 | 7147 | ||
7142 | 7148 | ||