|
@@ -61,6 +61,11 @@ static inline struct Scsi_Host *rport_to_shost(struct srp_rport *r)
|
|
|
return dev_to_shost(r->dev.parent);
|
|
|
}
|
|
|
|
|
|
+static inline struct srp_rport *shost_to_rport(struct Scsi_Host *shost)
|
|
|
+{
|
|
|
+ return transport_class_to_srp_rport(&shost->shost_gendev);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* srp_tmo_valid() - check timeout combination validity
|
|
|
* @reconnect_delay: Reconnect delay in seconds.
|
|
@@ -628,9 +633,11 @@ static enum blk_eh_timer_return srp_timed_out(struct scsi_cmnd *scmd)
|
|
|
struct scsi_device *sdev = scmd->device;
|
|
|
struct Scsi_Host *shost = sdev->host;
|
|
|
struct srp_internal *i = to_srp_internal(shost->transportt);
|
|
|
+ struct srp_rport *rport = shost_to_rport(shost);
|
|
|
|
|
|
pr_debug("timeout for sdev %s\n", dev_name(&sdev->sdev_gendev));
|
|
|
- return i->f->reset_timer_if_blocked && scsi_device_blocked(sdev) ?
|
|
|
+ return rport->fast_io_fail_tmo < 0 && rport->dev_loss_tmo < 0 &&
|
|
|
+ i->f->reset_timer_if_blocked && scsi_device_blocked(sdev) ?
|
|
|
BLK_EH_RESET_TIMER : BLK_EH_NOT_HANDLED;
|
|
|
}
|
|
|
|