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

Commit 41188cf5 authored by Jing Huang's avatar Jing Huang Committed by James Bottomley
Browse files

[SCSI] bfa: fix prli retry issues



Add a max retry limit for PRLI retries. Max retry limit (5) is same as used
in rport PLOGI. Once the retries are exhausted, invoke rport offline so that
existing logic of rport re-discovery can kick-in. Also fixed a bug in rport.c
where one less retry was happening.

Signed-off-by: default avatarJing Huang <huangj@brocade.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent c5073417
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ bfa_fcs_itnim_sm_offline(struct bfa_fcs_itnim_s *itnim,
	switch (event) {
	case BFA_FCS_ITNIM_SM_ONLINE:
		bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
		itnim->prli_retries = 0;
		bfa_fcs_itnim_send_prli(itnim, NULL);
		break;

@@ -218,8 +219,16 @@ bfa_fcs_itnim_sm_prli_retry(struct bfa_fcs_itnim_s *itnim,

	switch (event) {
	case BFA_FCS_ITNIM_SM_TIMEOUT:
		if (itnim->prli_retries < BFA_FCS_RPORT_MAX_RETRIES) {
			itnim->prli_retries++;
			bfa_trc(itnim->fcs, itnim->prli_retries);
			bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
			bfa_fcs_itnim_send_prli(itnim, NULL);
		} else {
			/* invoke target offline */
			bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
			bfa_fcs_rport_logo_imp(itnim->rport);
		}
		break;

	case BFA_FCS_ITNIM_SM_OFFLINE:
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@

#include <fcs/bfa_fcs_rport.h>

#define BFA_FCS_RPORT_MAX_RETRIES               (5)

void bfa_fcs_rport_uf_recv(struct bfa_fcs_rport_s *rport, struct fchs_s *fchs,
			u16 len);
void bfa_fcs_rport_scn(struct bfa_fcs_rport_s *rport);
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ struct bfa_fcs_itnim_s {
	struct bfa_fcs_s      	*fcs;		/*  fcs instance         */
	struct bfa_timer_s 	timer;		/*  timer functions      */
	struct bfa_itnim_s 	*bfa_itnim;	/*  BFA itnim struct     */
	u32                	prli_retries;   /*  max prli retry attempts */
	bfa_boolean_t	 	seq_rec;	/*  seq recovery support */
	bfa_boolean_t	 	rec_support;	/*  REC supported        */
	bfa_boolean_t	 	conf_comp;	/*  FCP_CONF     support */
+1 −3
Original line number Diff line number Diff line
@@ -36,8 +36,6 @@

BFA_TRC_FILE(FCS, RPORT);

#define BFA_FCS_RPORT_MAX_RETRIES		(5)

/* In millisecs */
static u32 bfa_fcs_rport_del_timeout =
			BFA_FCS_RPORT_DEF_DEL_TIMEOUT * 1000;
@@ -356,8 +354,8 @@ bfa_fcs_rport_sm_plogi_retry(struct bfa_fcs_rport_s *rport,
		 */

	case RPSM_EVENT_TIMEOUT:
		rport->plogi_retries++;
		if (rport->plogi_retries < BFA_FCS_RPORT_MAX_RETRIES) {
			rport->plogi_retries++;
			bfa_sm_set_state(rport, bfa_fcs_rport_sm_plogi_sending);
			bfa_fcs_rport_send_plogi(rport, NULL);
		} else {