|
@@ -576,25 +576,22 @@ int sas_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
|
|
return FAILED;
|
|
|
}
|
|
|
|
|
|
-/* Attempt to send a phy (bus) reset */
|
|
|
int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd)
|
|
|
{
|
|
|
- struct domain_device *dev = cmd_to_domain_dev(cmd);
|
|
|
- struct sas_phy *phy = sas_get_local_phy(dev);
|
|
|
- struct Scsi_Host *host = cmd->device->host;
|
|
|
int res;
|
|
|
+ struct Scsi_Host *host = cmd->device->host;
|
|
|
+ struct domain_device *dev = cmd_to_domain_dev(cmd);
|
|
|
+ struct sas_internal *i = to_sas_internal(host->transportt);
|
|
|
|
|
|
if (current != host->ehandler)
|
|
|
return sas_queue_reset(dev, SAS_DEV_RESET, 0, 0);
|
|
|
|
|
|
- res = sas_phy_reset(phy, 1);
|
|
|
- if (res)
|
|
|
- SAS_DPRINTK("Bus reset of %s failed 0x%x\n",
|
|
|
- kobject_name(&phy->dev.kobj),
|
|
|
- res);
|
|
|
- sas_put_local_phy(phy);
|
|
|
+ if (!i->dft->lldd_I_T_nexus_reset)
|
|
|
+ return FAILED;
|
|
|
|
|
|
- if (res == TMF_RESP_FUNC_SUCC || res == TMF_RESP_FUNC_COMPLETE)
|
|
|
+ res = i->dft->lldd_I_T_nexus_reset(dev);
|
|
|
+ if (res == TMF_RESP_FUNC_SUCC || res == TMF_RESP_FUNC_COMPLETE ||
|
|
|
+ res == -ENODEV)
|
|
|
return SUCCESS;
|
|
|
|
|
|
return FAILED;
|