• James Smart's avatar
    scsi: lpfc: Fix port relogin failure due to GID_FT interaction · 57178b92
    James Smart authored
    In cases of remote-port-side cable pull/replug, there happens to be a
    target that upon replug will send the port a PLOGI, a PRLI, and a LOGO.
    When this sequence is received by the driver, the PLOGI accepted and a
    GFT_ID is issued to find the protocol support for the remote port. While
    the GFT_ID is outstanding, a LOGO is received. The driver logs the remote
    port out and unregisters the RPI and schedules a new PLOGI transmission.
    However, the GFT_ID was not terminated. When it completed, the driver
    attempted to transition the remote port to PRLI transmission, which cancels
    the PLOGI scheduling. The PRLI transmit attempt is rejected by the adapter
    as the remote port is not logged in. No retry is attempted as it's expected
    the logout is noted and the supposedly scheduled PLOGI should address the
    state. As there is no PLOGI, the remote port does not get re-discovered.
    
    Fix by aborting the outstanding GFT_ID if the related remote port is logged
    out.
    
    Ensure a PRLI transmit attempt only occurs if the remote port is logging
    in. This avoids the incorrect attempt while logged out.
    Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    57178b92
lpfc_nportdisc.c 87.8 KB