[SCSI] fc transport: pre-emptively terminate i/o upon dev_loss_tmo timeout
Pre-emptively terminate i/o on the rport if dev_loss_tmo has fired. The desire is to terminate everything, so that the i/o is cleaned up prior to the sdev's being unblocked, thus any outstanding timeouts/aborts are avoided. Also, we do this early enough such that the rport's port_id field is still valid. FCOE libFC code needs this info to find the i/o's to terminate. Signed-off-by: James Smart <james.smart@emulex.com> [michaelc@cs.wisc.edu: remove extra scsi_target_unblock call] Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
73208dfd7a
commit
f78badb1ae
@ -3012,6 +3012,16 @@ fc_timeout_deleted_rport(struct work_struct *work)
|
|||||||
rport->port_state = FC_PORTSTATE_NOTPRESENT;
|
rport->port_state = FC_PORTSTATE_NOTPRESENT;
|
||||||
rport->flags &= ~FC_RPORT_FAST_FAIL_TIMEDOUT;
|
rport->flags &= ~FC_RPORT_FAST_FAIL_TIMEDOUT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pre-emptively kill I/O rather than waiting for the work queue
|
||||||
|
* item to teardown the starget. (FCOE libFC folks prefer this
|
||||||
|
* and to have the rport_port_id still set when it's done).
|
||||||
|
*/
|
||||||
|
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||||
|
fc_terminate_rport_io(rport);
|
||||||
|
|
||||||
|
BUG_ON(rport->port_state != FC_PORTSTATE_NOTPRESENT);
|
||||||
|
|
||||||
/* remove the identifiers that aren't used in the consisting binding */
|
/* remove the identifiers that aren't used in the consisting binding */
|
||||||
switch (fc_host->tgtid_bind_type) {
|
switch (fc_host->tgtid_bind_type) {
|
||||||
case FC_TGTID_BIND_BY_WWPN:
|
case FC_TGTID_BIND_BY_WWPN:
|
||||||
@ -3035,9 +3045,6 @@ fc_timeout_deleted_rport(struct work_struct *work)
|
|||||||
* went away and didn't come back - we'll remove
|
* went away and didn't come back - we'll remove
|
||||||
* all attached scsi devices.
|
* all attached scsi devices.
|
||||||
*/
|
*/
|
||||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
|
||||||
|
|
||||||
scsi_target_unblock(&rport->dev);
|
|
||||||
fc_queue_work(shost, &rport->stgt_delete_work);
|
fc_queue_work(shost, &rport->stgt_delete_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user