• James Smart's avatar
    scsi: lpfc: rport port swap discovery issue. · 92ea83a8
    James Smart authored
    Two initiator ports were cable swapped and after swap both went down.  The
    driver internally swaps the nlp nodes based on matching node wwn's but not
    the same nport id as before. After detecting a change in the nodes RPI, the
    driver sends an UNREG_RPI command and clears the NLP_RPI_REGISTERED flag,
    then swaps the node information with the other node. But the other node's
    NLP_RPI_REGISTERED flag is also cleared, but it is done so without an
    UNREG_RPI being sent, which causes the later REG_RPI for that other node to
    fail as the hardware believes its still registered.
    
    Additionally, if the node swap occurred while the two nodes had PLOGI's in
    flight, the fc4_types weren't properly getting swapped such that when the
    PLOGIs commpleted and PRLI's were then sent, the PRLI's acted on bad
    protocol types so the PRLI was for the wrong protocol. NVME devices saw
    SCSI FCP PRLIs and vice versa.
    
    Clean up the node swap so that the NLP_RPI_REGISTERED flag is handled
    properly.
    
    Fix the handling of the fc4_types when the nodes are swapped as well
    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>
    92ea83a8
lpfc_els.c 306 KB