Re: [PATCH 3/9] lpfc: Account for fabric domain ctlr device loss recovery

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2023-05-23 at 11:32 -0700, Justin Tee wrote:
> Pre-existing device loss recovery logic via the
> NLP_IN_RECOV_POST_DEV_LOSS
> flag only handled Fabric Port Login, Fabric Controller, Management,
> and
> Name Server addresses.
> 
> Fabric domain controllers fall under the same category for usage of
> the
> NLP_IN_RECOV_POST_DEV_LOSS flag.  Add a default case statement to
> mark
> an ndlp for device loss recovery.
> 
> Signed-off-by: Justin Tee <justin.tee@xxxxxxxxxxxx>

This patch fixed a customer issue for us.

Acked-by: Martin Wilck <mwilck@xxxxxxxx>


> ---
>  drivers/scsi/lpfc/lpfc_hbadisc.c | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c
> b/drivers/scsi/lpfc/lpfc_hbadisc.c
> index f99b5c206cdb..a5c69d4bf2e0 100644
> --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
> +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
> @@ -458,11 +458,9 @@ lpfc_dev_loss_tmo_handler(struct lpfc_nodelist
> *ndlp)
>         if (ndlp->nlp_type & NLP_FABRIC) {
>                 spin_lock_irqsave(&ndlp->lock, iflags);
>  
> -               /* In massive vport configuration settings or when
> the FLOGI
> -                * completes with a sequence timeout, it's possible
> -                * dev_loss_tmo fired during node recovery.  The
> driver has to
> -                * account for this race to allow for recovery and
> keepThis patch fixed a customer issue for us.

Acked-by: Martin Wilck <mwilck@xxxxxxxx>

> -                * the reference counting correct.
> +               /* The driver has to account for a race between any
> fabric
> +                * node that's in recovery when dev_loss_tmo expires.
> When this
> +                * happens, the driver has to allow node recovery.
>                  */
>                 switch (ndlp->nlp_DID) {
>                 case Fabric_DID:
> @@ -489,6 +487,17 @@ lpfc_dev_loss_tmo_handler(struct lpfc_nodelist
> *ndlp)
>                             ndlp->nlp_state <=
> NLP_STE_REG_LOGIN_ISSUE)
>                                 recovering = true;
>                         break;
> +               default:
> +                       /* Ensure the nlp_DID at least has the
> correct prefix.
> +                        * The fabric domain controller's last three
> nibbles
> +                        * vary so we handle it in the default case.
> +                        */
> +                       if (ndlp->nlp_DID & Fabric_DID_MASK) {
> +                               if (ndlp->nlp_state >=
> NLP_STE_PLOGI_ISSUE &&
> +                                   ndlp->nlp_state <=
> NLP_STE_REG_LOGIN_ISSUE)
> +                                       recovering = true;
> +                       }
> +                       break;
>                 }
>                 spin_unlock_irqrestore(&ndlp->lock, iflags);
>  





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux