|
@@ -2222,7 +2222,7 @@ _scsih_ublock_io_device(struct MPT2SAS_ADAPTER *ioc, u16 handle)
|
|
|
MPT2SAS_INFO_FMT "SDEV_RUNNING: "
|
|
|
"handle(0x%04x)\n", ioc->name, handle));
|
|
|
sas_device_priv_data->block = 0;
|
|
|
- scsi_device_set_state(sdev, SDEV_RUNNING);
|
|
|
+ scsi_internal_device_unblock(sdev);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2251,7 +2251,7 @@ _scsih_block_io_device(struct MPT2SAS_ADAPTER *ioc, u16 handle)
|
|
|
MPT2SAS_INFO_FMT "SDEV_BLOCK: "
|
|
|
"handle(0x%04x)\n", ioc->name, handle));
|
|
|
sas_device_priv_data->block = 1;
|
|
|
- scsi_device_set_state(sdev, SDEV_BLOCK);
|
|
|
+ scsi_internal_device_block(sdev);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2327,6 +2327,7 @@ _scsih_block_io_to_children_attached_directly(struct MPT2SAS_ADAPTER *ioc,
|
|
|
u16 handle;
|
|
|
u16 reason_code;
|
|
|
u8 phy_number;
|
|
|
+ u8 link_rate;
|
|
|
|
|
|
for (i = 0; i < event_data->NumEntries; i++) {
|
|
|
handle = le16_to_cpu(event_data->PHY[i].AttachedDevHandle);
|
|
@@ -2337,6 +2338,11 @@ _scsih_block_io_to_children_attached_directly(struct MPT2SAS_ADAPTER *ioc,
|
|
|
MPI2_EVENT_SAS_TOPO_RC_MASK;
|
|
|
if (reason_code == MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING)
|
|
|
_scsih_block_io_device(ioc, handle);
|
|
|
+ if (reason_code == MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED) {
|
|
|
+ link_rate = event_data->PHY[i].LinkRate >> 4;
|
|
|
+ if (link_rate >= MPI2_SAS_NEG_LINK_RATE_1_5)
|
|
|
+ _scsih_ublock_io_device(ioc, handle);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3690,6 +3696,9 @@ _scsih_remove_device(struct MPT2SAS_ADAPTER *ioc, u16 handle)
|
|
|
le32_to_cpu(mpi_reply.IOCLogInfo)));
|
|
|
|
|
|
out:
|
|
|
+
|
|
|
+ _scsih_ublock_io_device(ioc, handle);
|
|
|
+
|
|
|
mpt2sas_transport_port_remove(ioc, sas_device->sas_address,
|
|
|
sas_device->parent_handle);
|
|
|
|
|
@@ -3871,10 +3880,6 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc, u8 VF_ID,
|
|
|
link_rate_);
|
|
|
}
|
|
|
}
|
|
|
- if (reason_code == MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED) {
|
|
|
- if (link_rate_ >= MPI2_SAS_NEG_LINK_RATE_1_5)
|
|
|
- _scsih_ublock_io_device(ioc, handle);
|
|
|
- }
|
|
|
if (reason_code == MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED) {
|
|
|
if (link_rate_ < MPI2_SAS_NEG_LINK_RATE_1_5)
|
|
|
break;
|