aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/libfc/fc_rport.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index dec7bae0e56d..717575934152 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -214,6 +214,7 @@ static void fc_rport_state_enter(struct fc_rport *rport,
214 214
215static void fc_rport_work(struct work_struct *work) 215static void fc_rport_work(struct work_struct *work)
216{ 216{
217 u32 port_id;
217 struct fc_rport_libfc_priv *rdata = 218 struct fc_rport_libfc_priv *rdata =
218 container_of(work, struct fc_rport_libfc_priv, event_work); 219 container_of(work, struct fc_rport_libfc_priv, event_work);
219 enum fc_rport_event event; 220 enum fc_rport_event event;
@@ -279,8 +280,12 @@ static void fc_rport_work(struct work_struct *work)
279 rport_ops->event_callback(lport, rport, event); 280 rport_ops->event_callback(lport, rport, event);
280 if (trans_state == FC_PORTSTATE_ROGUE) 281 if (trans_state == FC_PORTSTATE_ROGUE)
281 put_device(&rport->dev); 282 put_device(&rport->dev);
282 else 283 else {
284 port_id = rport->port_id;
283 fc_remote_port_delete(rport); 285 fc_remote_port_delete(rport);
286 lport->tt.exch_mgr_reset(lport, 0, port_id);
287 lport->tt.exch_mgr_reset(lport, port_id, 0);
288 }
284 } else 289 } else
285 mutex_unlock(&rdata->rp_mutex); 290 mutex_unlock(&rdata->rp_mutex);
286} 291}