Commit 1f679caf authored by James.Smart@Emulex.Com's avatar James.Smart@Emulex.Com Committed by James Bottomley

[SCSI] lpfc: Fix LS_RJT never sent by lpfc_els_unsol_event()

lpfc_els_unsol_event() checks rjt_err to determine is LS_RJT should be
sent.  However, rjt_err was set to LSEXP_NOTHING_ELSE (which is 0) in
cases where an LS_RJT should be sent, so rjt_err was never true.
Change lpfc_els_unsol_event() to set rjt_err to 1 when LS_RJT should
be sent.
Signed-off-by: default avatarJames Smart <James.Smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 06325e74
...@@ -3139,7 +3139,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3139,7 +3139,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
case ELS_CMD_PLOGI: case ELS_CMD_PLOGI:
phba->fc_stat.elsRcvPLOGI++; phba->fc_stat.elsRcvPLOGI++;
if (phba->hba_state < LPFC_DISC_AUTH) { if (phba->hba_state < LPFC_DISC_AUTH) {
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
break; break;
} }
lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PLOGI); lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PLOGI);
...@@ -3154,7 +3154,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3154,7 +3154,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
case ELS_CMD_LOGO: case ELS_CMD_LOGO:
phba->fc_stat.elsRcvLOGO++; phba->fc_stat.elsRcvLOGO++;
if (phba->hba_state < LPFC_DISC_AUTH) { if (phba->hba_state < LPFC_DISC_AUTH) {
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
break; break;
} }
lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_LOGO); lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_LOGO);
...@@ -3162,7 +3162,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3162,7 +3162,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
case ELS_CMD_PRLO: case ELS_CMD_PRLO:
phba->fc_stat.elsRcvPRLO++; phba->fc_stat.elsRcvPRLO++;
if (phba->hba_state < LPFC_DISC_AUTH) { if (phba->hba_state < LPFC_DISC_AUTH) {
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
break; break;
} }
lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PRLO); lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PRLO);
...@@ -3177,7 +3177,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3177,7 +3177,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
case ELS_CMD_ADISC: case ELS_CMD_ADISC:
phba->fc_stat.elsRcvADISC++; phba->fc_stat.elsRcvADISC++;
if (phba->hba_state < LPFC_DISC_AUTH) { if (phba->hba_state < LPFC_DISC_AUTH) {
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
break; break;
} }
lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_ADISC); lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_ADISC);
...@@ -3185,7 +3185,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3185,7 +3185,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
case ELS_CMD_PDISC: case ELS_CMD_PDISC:
phba->fc_stat.elsRcvPDISC++; phba->fc_stat.elsRcvPDISC++;
if (phba->hba_state < LPFC_DISC_AUTH) { if (phba->hba_state < LPFC_DISC_AUTH) {
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
break; break;
} }
lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PDISC); lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PDISC);
...@@ -3209,7 +3209,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3209,7 +3209,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
case ELS_CMD_PRLI: case ELS_CMD_PRLI:
phba->fc_stat.elsRcvPRLI++; phba->fc_stat.elsRcvPRLI++;
if (phba->hba_state < LPFC_DISC_AUTH) { if (phba->hba_state < LPFC_DISC_AUTH) {
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
break; break;
} }
lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PRLI); lpfc_disc_state_machine(phba, ndlp, elsiocb, NLP_EVT_RCV_PRLI);
...@@ -3220,7 +3220,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3220,7 +3220,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
break; break;
default: default:
/* Unsupported ELS command, reject */ /* Unsupported ELS command, reject */
rjt_err = LSEXP_NOTHING_MORE; rjt_err = 1;
/* Unknown ELS command <elsCmd> received from NPORT <did> */ /* Unknown ELS command <elsCmd> received from NPORT <did> */
lpfc_printf_log(phba, KERN_ERR, LOG_ELS, lpfc_printf_log(phba, KERN_ERR, LOG_ELS,
...@@ -3236,7 +3236,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba, ...@@ -3236,7 +3236,7 @@ lpfc_els_unsol_event(struct lpfc_hba * phba,
if (rjt_err) { if (rjt_err) {
stat.un.b.lsRjtRsvd0 = 0; stat.un.b.lsRjtRsvd0 = 0;
stat.un.b.lsRjtRsnCode = LSRJT_UNABLE_TPC; stat.un.b.lsRjtRsnCode = LSRJT_UNABLE_TPC;
stat.un.b.lsRjtRsnCodeExp = rjt_err; stat.un.b.lsRjtRsnCodeExp = LSEXP_NOTHING_MORE;
stat.un.b.vendorUnique = 0; stat.un.b.vendorUnique = 0;
lpfc_els_rsp_reject(phba, stat.un.lsRjtError, elsiocb, ndlp); lpfc_els_rsp_reject(phba, stat.un.lsRjtError, elsiocb, ndlp);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment