|
@@ -3059,6 +3059,7 @@ _scsih_tm_tr_send(struct MPT2SAS_ADAPTER *ioc, u16 handle)
|
|
|
"handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, handle,
|
|
|
(unsigned long long)sas_address));
|
|
|
_scsih_ublock_io_device(ioc, handle);
|
|
|
+ sas_target_priv_data->handle = MPT2SAS_INVALID_DEVICE_HANDLE;
|
|
|
}
|
|
|
|
|
|
smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx);
|
|
@@ -5201,6 +5202,9 @@ _scsih_remove_device(struct MPT2SAS_ADAPTER *ioc,
|
|
|
if (sas_device_backup.starget && sas_device_backup.starget->hostdata) {
|
|
|
sas_target_priv_data = sas_device_backup.starget->hostdata;
|
|
|
sas_target_priv_data->deleted = 1;
|
|
|
+ _scsih_ublock_io_device(ioc, sas_device_backup.handle);
|
|
|
+ sas_target_priv_data->handle =
|
|
|
+ MPT2SAS_INVALID_DEVICE_HANDLE;
|
|
|
}
|
|
|
|
|
|
_scsih_ublock_io_device(ioc, sas_device_backup.handle);
|
|
@@ -5354,7 +5358,7 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc,
|
|
|
_scsih_sas_topology_change_event_debug(ioc, event_data);
|
|
|
#endif
|
|
|
|
|
|
- if (ioc->shost_recovery || ioc->remove_host || ioc->pci_error_recovery)
|
|
|
+ if (ioc->remove_host || ioc->pci_error_recovery)
|
|
|
return;
|
|
|
|
|
|
if (!ioc->sas_hba.num_phys)
|
|
@@ -5415,6 +5419,9 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc,
|
|
|
switch (reason_code) {
|
|
|
case MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED:
|
|
|
|
|
|
+ if (ioc->shost_recovery)
|
|
|
+ break;
|
|
|
+
|
|
|
if (link_rate == prev_link_rate)
|
|
|
break;
|
|
|
|
|
@@ -5428,6 +5435,9 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc,
|
|
|
break;
|
|
|
case MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED:
|
|
|
|
|
|
+ if (ioc->shost_recovery)
|
|
|
+ break;
|
|
|
+
|
|
|
mpt2sas_transport_update_links(ioc, sas_address,
|
|
|
handle, phy_number, link_rate);
|
|
|
|
|
@@ -7091,7 +7101,13 @@ mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
|
|
|
_scsih_search_responding_sas_devices(ioc);
|
|
|
_scsih_search_responding_raid_devices(ioc);
|
|
|
_scsih_search_responding_expanders(ioc);
|
|
|
+ if (!ioc->is_driver_loading) {
|
|
|
+ _scsih_prep_device_scan(ioc);
|
|
|
+ _scsih_search_responding_sas_devices(ioc);
|
|
|
+ _scsih_search_responding_raid_devices(ioc);
|
|
|
+ _scsih_search_responding_expanders(ioc);
|
|
|
_scsih_error_recovery_delete_devices(ioc);
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -7126,17 +7142,7 @@ _firmware_event_work(struct work_struct *work)
|
|
|
_scsih_scan_for_devices_after_reset(ioc);
|
|
|
break;
|
|
|
case MPT2SAS_PORT_ENABLE_COMPLETE:
|
|
|
- if (!ioc->is_driver_loading && ioc->shost_recovery) {
|
|
|
- _scsih_prep_device_scan(ioc);
|
|
|
- _scsih_search_responding_sas_devices(ioc);
|
|
|
- _scsih_search_responding_raid_devices(ioc);
|
|
|
- _scsih_search_responding_expanders(ioc);
|
|
|
- }
|
|
|
-
|
|
|
- if (ioc->start_scan)
|
|
|
- ioc->start_scan = 0;
|
|
|
- else
|
|
|
- complete(&ioc->port_enable_done);
|
|
|
+ ioc->start_scan = 0;
|
|
|
|
|
|
|
|
|
|