Patch "scsi: lpfc: Fix discovery failures when target device connectivity bounces" has been added to the 5.4-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    scsi: lpfc: Fix discovery failures when target device connectivity bounces

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     scsi-lpfc-fix-discovery-failures-when-target-device-.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b1d2438f88d9a41610ec024ddb02a8c84446e41e
Author: James Smart <jsmart2021@xxxxxxxxx>
Date:   Sat Sep 21 20:58:55 2019 -0700

    scsi: lpfc: Fix discovery failures when target device connectivity bounces
    
    [ Upstream commit 3f97aed6117c7677eb16756c4ec8b86000fd5822 ]
    
    An issue was seen discovering all SCSI Luns when a target device undergoes
    link bounce.
    
    The driver currently does not qualify the FC4 support on the target.
    Therefore it will send a SCSI PRLI and an NVMe PRLI. The expectation is
    that the target will reject the PRLI if it is not supported. If a PRLI
    times out, the driver will retry. The driver will not proceed with the
    device until both SCSI and NVMe PRLIs are resolved.  In the failure case,
    the device is FCP only and does not respond to the NVMe PRLI, thus
    initiating the wait/retry loop in the driver.  During that time, a RSCN is
    received (device bounced) causing the driver to issue a GID_FT.  The GID_FT
    response comes back before the PRLI mess is resolved and it prematurely
    cancels the PRLI retry logic and leaves the device in a STE_PRLI_ISSUE
    state. Discovery with the target never completes or resets.
    
    Fix by resetting the node state back to STE_NPR_NODE when GID_FT completes,
    thereby restarting the discovery process for the node.
    
    Link: https://lore.kernel.org/r/20190922035906.10977-10-jsmart2021@xxxxxxxxx
    Signed-off-by: Dick Kennedy <dick.kennedy@xxxxxxxxxxxx>
    Signed-off-by: James Smart <jsmart2021@xxxxxxxxx>
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 749286acdc17..f7c205e1da48 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -5405,9 +5405,14 @@ lpfc_setup_disc_node(struct lpfc_vport *vport, uint32_t did)
 			/* If we've already received a PLOGI from this NPort
 			 * we don't need to try to discover it again.
 			 */
-			if (ndlp->nlp_flag & NLP_RCV_PLOGI)
+			if (ndlp->nlp_flag & NLP_RCV_PLOGI &&
+			    !(ndlp->nlp_type &
+			     (NLP_FCP_TARGET | NLP_NVME_TARGET)))
 				return NULL;
 
+			ndlp->nlp_prev_state = ndlp->nlp_state;
+			lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
+
 			spin_lock_irq(shost->host_lock);
 			ndlp->nlp_flag |= NLP_NPR_2B_DISC;
 			spin_unlock_irq(shost->host_lock);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux