aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/bfa/fcpim.c
diff options
context:
space:
mode:
authorJing Huang <huangj@brocade.com>2010-07-08 22:52:00 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-07-27 13:04:11 -0400
commit41188cf5a60a24bf54df5be70142f0928f413788 (patch)
tree92a8ee6812b90188c238400c73306da14e58677c /drivers/scsi/bfa/fcpim.c
parentc507341713114e2510ad7621088b359367adf1ce (diff)
[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: Jing Huang <huangj@brocade.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/bfa/fcpim.c')
-rw-r--r--drivers/scsi/bfa/fcpim.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/scsi/bfa/fcpim.c b/drivers/scsi/bfa/fcpim.c
index 7a0207e56693..d090f7a6368a 100644
--- a/drivers/scsi/bfa/fcpim.c
+++ b/drivers/scsi/bfa/fcpim.c
@@ -110,6 +110,7 @@ bfa_fcs_itnim_sm_offline(struct bfa_fcs_itnim_s *itnim,
110 switch (event) { 110 switch (event) {
111 case BFA_FCS_ITNIM_SM_ONLINE: 111 case BFA_FCS_ITNIM_SM_ONLINE:
112 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send); 112 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
113 itnim->prli_retries = 0;
113 bfa_fcs_itnim_send_prli(itnim, NULL); 114 bfa_fcs_itnim_send_prli(itnim, NULL);
114 break; 115 break;
115 116
@@ -218,8 +219,16 @@ bfa_fcs_itnim_sm_prli_retry(struct bfa_fcs_itnim_s *itnim,
218 219
219 switch (event) { 220 switch (event) {
220 case BFA_FCS_ITNIM_SM_TIMEOUT: 221 case BFA_FCS_ITNIM_SM_TIMEOUT:
221 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send); 222 if (itnim->prli_retries < BFA_FCS_RPORT_MAX_RETRIES) {
222 bfa_fcs_itnim_send_prli(itnim, NULL); 223 itnim->prli_retries++;
224 bfa_trc(itnim->fcs, itnim->prli_retries);
225 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
226 bfa_fcs_itnim_send_prli(itnim, NULL);
227 } else {
228 /* invoke target offline */
229 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
230 bfa_fcs_rport_logo_imp(itnim->rport);
231 }
223 break; 232 break;
224 233
225 case BFA_FCS_ITNIM_SM_OFFLINE: 234 case BFA_FCS_ITNIM_SM_OFFLINE: