On Sun, 7 Oct 2018, 1:35am, Hannes Reinecke wrote:

> External Email
> 
> From: Hannes Reinecke <[email protected]>
> 
> When we fail to analyse the payload of a PRLI response we should
> reset the state machine to retry the PRLI; eventually we will be
> getting a proper frame.
> Not doing so will result in a stuck state machine and the port
> never to be presented to the systsm.
> 
> Suggested-by: Chad Dupuis <[email protected]>
> Signed-off-by: Hannes Reinecke <[email protected]>
> ---
>  drivers/scsi/libfc/fc_rport.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
> index e400783ebb87..1e1c0f1b9e69 100644
> --- a/drivers/scsi/libfc/fc_rport.c
> +++ b/drivers/scsi/libfc/fc_rport.c
> @@ -1161,8 +1161,10 @@ static void fc_rport_prli_resp(struct fc_seq *sp, 
> struct fc_frame *fp,
>         op = fc_frame_payload_op(fp);
>         if (op == ELS_LS_ACC) {
>                 pp = fc_frame_payload_get(fp, sizeof(*pp));
> -               if (!pp)
> +               if (!pp) {
> +                       fc_rport_error_retry(rdata, -FC_EX_SEQ_ERR);
>                         goto out;
> +               }
> 
>                 resp_code = (pp->spp.spp_flags & FC_SPP_RESP_MASK);
>                 FC_RPORT_DBG(rdata, "PRLI spp_flags = 0x%x spp_type 0x%x\n",
> @@ -1175,8 +1177,10 @@ static void fc_rport_prli_resp(struct fc_seq *sp, 
> struct fc_frame *fp,
>                                 fc_rport_error_retry(rdata, -FC_EX_SEQ_ERR);
>                         goto out;
>                 }
> -               if (pp->prli.prli_spp_len < sizeof(pp->spp))
> +               if (pp->prli.prli_spp_len < sizeof(pp->spp)) {
> +                       fc_rport_error_retry(rdata, -FC_EX_SEQ_ERR);
>                         goto out;
> +               }
> 
>                 fcp_parm = ntohl(pp->spp.spp_params);
>                 if (fcp_parm & FCP_SPPF_RETRY)
> --
> 2.16.4
> 

Looks good.

Reviewed-by: Arun Easi <[email protected]>

Regards,
-Arun

Reply via email to