• James Smart's avatar
    scsi: lpfc: Inhibit aborts if external loopback plug is inserted · ead76d4c
    James Smart authored
    After running a short external loopback test, when the external loopback is
    removed and a normal cable inserted that is directly connected to a target
    device, the system oops in the llpfc_set_rrq_active() routine.
    
    When the loopback was inserted an FLOGI was transmit. As we're looped back,
    we receive the FLOGI request. The FLOGI is ABTS'd as we recognize the same
    wppn thus understand it's a loopback. However, as the ABTS sends address
    information the port is not set to (fffffe), the ABTS is dropped on the
    wire. A short 1 frame loopback test is run and completes before the ABTS
    times out. The looback is unplugged and the new cable plugged in, and the
    an FLOGI to the new device occurs and completes. Due to a mixup in ref
    counting the completion of the new FLOGI releases the fabric ndlp. Then the
    original ABTS completes and references the released ndlp generating the
    oops.
    
    Correct by no-op'ing the ABTS when in loopback mode (it will be dropped
    anyway). Added a flag to track the mode to recognize when it should be
    no-op'd.
    
    Link: https://lore.kernel.org/r/20220506035519.50908-5-jsmart2021@gmail.comCo-developed-by: default avatarJustin Tee <justin.tee@broadcom.com>
    Signed-off-by: default avatarJustin Tee <justin.tee@broadcom.com>
    Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    ead76d4c
lpfc_hbadisc.c 212 KB