• James Smart's avatar
    scsi: lpfc: Fix SLI3 drivers attempting NVME ELS commands. · 09559e81
    James Smart authored
    In a server with an 8G adapter and a 32G adapter, running NVME and FCP,
    the server would crash with the following stack.
    
    RIP: 0010: ... lpfc_nvme_register_port+0x38/0x420 [lpfc]
     lpfc_nlp_state_cleanup+0x154/0x4f0 [lpfc]
     lpfc_nlp_set_state+0x9d/0x1a0 [lpfc]
     lpfc_cmpl_prli_prli_issue+0x35f/0x440 [lpfc]
     lpfc_disc_state_machine+0x78/0x1c0 [lpfc]
     lpfc_cmpl_els_prli+0x17c/0x1f0 [lpfc]
     lpfc_sli_sp_handle_rspiocb+0x39b/0x6b0 [lpfc]
     lpfc_sli_handle_slow_ring_event_s3+0x134/0x2d0 [lpfc]
     lpfc_work_done+0x8ac/0x13b0 [lpfc]
     lpfc_do_work+0xf1/0x1b0 [lpfc]
    
    Crash, on the 8G adapter, is due to a vport which does not have a nvme
    local port structure. It's not supposed to have one. NVME is not
    supported on the 8G adapter, so the NVME PRLI, which started this flow
    shouldn't have been sent in the first place.
    
    Correct discovery engine to recognize when on an SLI3 rport, which
    doesn't support SLI3, if the rport supports only NVME, don't send a NVME
    PRLI. Instead, as no FC4 will be used, a LOGO is sent.  If rport is FCP
    and NVME, only execute the SCSI PRLI.
    Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    09559e81
lpfc_hbadisc.c 194 KB