scsi: libfc: If PRLI rejected, move rport to PLOGI state
authorJaved Hasan <jhasan@marvell.com>
Fri, 27 Mar 2020 06:02:07 +0000 (23:02 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 29 Mar 2020 22:10:59 +0000 (18:10 -0400)
If PRLI reject code indicates "rejected status", move rport state machine
back to PLOGI state.

Link: https://lore.kernel.org/r/20200327060208.17104-2-skashyap@marvell.com
Signed-off-by: Javed Hasan <jhasan@marvell.com>
Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/libfc/fc_rport.c

index da6e97d8dc3bb862a0ad1edd6e613d6af497507a..6bb8917b99a19b7016b4336f8bb6854341988e42 100644 (file)
@@ -1208,9 +1208,15 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
                rjt = fc_frame_payload_get(fp, sizeof(*rjt));
                if (!rjt)
                        FC_RPORT_DBG(rdata, "PRLI bad response\n");
-               else
+               else {
                        FC_RPORT_DBG(rdata, "PRLI ELS rejected, reason %x expl %x\n",
                                     rjt->er_reason, rjt->er_explan);
+                       if (rjt->er_reason == ELS_RJT_UNAB &&
+                           rjt->er_explan == ELS_EXPL_PLOGI_REQD) {
+                               fc_rport_enter_plogi(rdata);
+                               goto out;
+                       }
+               }
                fc_rport_error_retry(rdata, FC_EX_ELS_RJT);
        }