• James Smart's avatar
    scsi: lpfc: Fix FLOGI/PLOGI receive race condition in pt2pt discovery · f66c7c11
    James Smart authored
    [ Upstream commit 7b08e89f ]
    
    The driver is unable to successfully login with remote device. During pt2pt
    login, the driver completes its FLOGI request with the remote device having
    WWN precedence.  The remote device issues its own (delayed) FLOGI after
    accepting the driver's and, upon transmitting the FLOGI, immediately
    recognizes it has already processed the driver's FLOGI thus it transitions
    to sending a PLOGI before waiting for an ACC to its FLOGI.
    
    In the driver, the FLOGI is received and an ACC sent, followed by the PLOGI
    being received and an ACC sent. The issue is that the PLOGI reception
    occurs before the response from the adapter from the FLOGI ACC is
    received. Processing of the PLOGI sets state flags to perform the REG_RPI
    mailbox command and proceed with the rest of discovery on the port. The
    same completion routine used by both FLOGI and PLOGI is generic in
    nature. One of the things it does is clear flags, and those flags happen to
    drive the rest of discovery.  So what happened was the PLOGI processing set
    the flags, the FLOGI ACC completion cleared them, thus when the PLOGI ACC
    completes it doesn't see the flags and stops.
    
    Fix by modifying the generic completion routine to not clear the rest of
    discovery flag (NLP_ACC_REGLOGIN) unless the completion is also associated
    with performing a mailbox command as part of its handling.  For things such
    as FLOGI ACC, there isn't a subsequent action to perform with the adapter,
    thus there is no mailbox cmd ptr. PLOGI ACC though will perform REG_RPI
    upon completion, thus there is a mailbox cmd ptr.
    
    Link: https://lore.kernel.org/r/20200828175332.130300-3-james.smart@broadcom.comCo-developed-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    f66c7c11
lpfc_els.c 290 KB