• James Smart's avatar
    scsi: lpfc: Fix driver not recovering NVME rports during target link faults · b04744ce
    James Smart authored
    During target-side port faults, the driver would not recover all target
    port logins. This resulted in a loss of nvme device discovery.
    
    The driver is coded to wait for all GID_FT requests to complete before
    restarting discovery. A fault is seen where the outstanding GIT_FT
    counts are not properly decremented, thus discovery would never
    start. Another fault was found in the clearing of the gidft_inp counter
    that would be skipped in this condition. And a third fault found with
    lpfc_nvme_register_port that would remove a reverence on the ndlp which
    then allows a node swap on a port address change to prematurely remove
    the reference and release the ndlp.
    
    The following changes are made:
    
     - Correct the decrementing of the outstanding GID_FT counters.
    
     - In RSCN handling, no longer zero the counter before calling to issue
       another GID_FT.
    
     - No longer remove the reference on the dlp when the ndlp->nrport value
       is not yet null.
    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>
    b04744ce
lpfc_nvme.c 89.1 KB