Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 571f824c authored by Abhijeet Joglekar's avatar Abhijeet Joglekar Committed by James Bottomley
Browse files

[SCSI] libfc: when rport goes away (re-plogi), clean up exchanges to/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: default avatarAbhijeet Joglekar <abjoglek@cisco.com>
Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 1f6ff364
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);
}