aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_transport_fc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_transport_fc.c')
-rw-r--r--drivers/scsi/scsi_transport_fc.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 1e71abf0607a..062304de4854 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -3012,6 +3012,16 @@ fc_timeout_deleted_rport(struct work_struct *work)
3012 rport->port_state = FC_PORTSTATE_NOTPRESENT; 3012 rport->port_state = FC_PORTSTATE_NOTPRESENT;
3013 rport->flags &= ~FC_RPORT_FAST_FAIL_TIMEDOUT; 3013 rport->flags &= ~FC_RPORT_FAST_FAIL_TIMEDOUT;
3014 3014
3015 /*
3016 * Pre-emptively kill I/O rather than waiting for the work queue
3017 * item to teardown the starget. (FCOE libFC folks prefer this
3018 * and to have the rport_port_id still set when it's done).
3019 */
3020 spin_unlock_irqrestore(shost->host_lock, flags);
3021 fc_terminate_rport_io(rport);
3022
3023 BUG_ON(rport->port_state != FC_PORTSTATE_NOTPRESENT);
3024
3015 /* remove the identifiers that aren't used in the consisting binding */ 3025 /* remove the identifiers that aren't used in the consisting binding */
3016 switch (fc_host->tgtid_bind_type) { 3026 switch (fc_host->tgtid_bind_type) {
3017 case FC_TGTID_BIND_BY_WWPN: 3027 case FC_TGTID_BIND_BY_WWPN:
@@ -3035,9 +3045,6 @@ fc_timeout_deleted_rport(struct work_struct *work)
3035 * went away and didn't come back - we'll remove 3045 * went away and didn't come back - we'll remove
3036 * all attached scsi devices. 3046 * all attached scsi devices.
3037 */ 3047 */
3038 spin_unlock_irqrestore(shost->host_lock, flags);
3039
3040 scsi_target_unblock(&rport->dev);
3041 fc_queue_work(shost, &rport->stgt_delete_work); 3048 fc_queue_work(shost, &rport->stgt_delete_work);
3042} 3049}
3043 3050