Skip to content

Commit

Permalink
[SCSI] libfc: when rport goes away (re-plogi), clean up exchanges to/…
Browse files Browse the repository at this point in the history
…from rport

When a rport goes away, libFC does a plogi which will reset exchanges
    at the rport. Clean exchanges at our end, both in transport and libFC.
    If transport hooks into exch_mgr_reset, it will call back into
    fc_exch_mgr_reset() to clean up libFC exchanges.

Signed-off-by: Abhijeet Joglekar <abjoglek@cisco.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
  • Loading branch information
Abhijeet Joglekar authored and James Bottomley committed Mar 6, 2009
1 parent 1f6ff36 commit 571f824
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/scsi/libfc/fc_rport.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ static void fc_rport_state_enter(struct fc_rport *rport,

static void fc_rport_work(struct work_struct *work)
{
u32 port_id;
struct fc_rport_libfc_priv *rdata =
container_of(work, struct fc_rport_libfc_priv, event_work);
enum fc_rport_event event;
Expand Down Expand Up @@ -279,8 +280,12 @@ static void fc_rport_work(struct work_struct *work)
rport_ops->event_callback(lport, rport, event);
if (trans_state == FC_PORTSTATE_ROGUE)
put_device(&rport->dev);
else
else {
port_id = rport->port_id;
fc_remote_port_delete(rport);
lport->tt.exch_mgr_reset(lport, 0, port_id);
lport->tt.exch_mgr_reset(lport, port_id, 0);
}
} else
mutex_unlock(&rdata->rp_mutex);
}
Expand Down

0 comments on commit 571f824

Please sign in to comment.