• James Smart's avatar
    scsi: lpfc: Fix device recovery errors after PLOGI failures · 0f154226
    James Smart authored
    When target-side fault injections are made, the driver isn't reconnecting
    to the remote port. The driver is logging "2753" error messages which
    state:
    
    "PLOGI failure DID:1B2400 Status:x3/xf0240008"
    
    The failures status is indicating a Illegal field error, which points to
    the Temporary RPI field being used for the ELS. This error typically means
    the driver used an RPI that was already registered (shouldn't be registered
    if using it in this context).
    
    Study has found that if the driver were in discovery attempts and
    encountered an error, it wouldn't flag the temporary rpi in error.  Yet the
    rpi was released for reallocation in these error paths and another ELS
    could allocate the rpi. In the failure situation a retry was done on an ELS
    that had encountered an error, and as the rpi wasn't marked in error, the
    ELS reused the rpi it originally allocated. But that rpi had been allocated
    by a different ELS issued after the original error and before the retry
    attempt. The different ELS had succeeded and the RPI was registered.
    
    Fix by marking the rpi state for the node to be in error, aka as needing
    reallocation, upon an error in the els processing.  Error state marking is
    always done prior to release back to the internal rpi free list, which the
    driver wasn't doing in cases prior.
    
    Also enhanced some of the logging to help in the next case of problem
    troubleshooting.
    
    Link: https://lore.kernel.org/r/20190922035906.10977-7-jsmart2021@gmail.comSigned-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>
    0f154226
lpfc_sli.c 624 KB