• James Smart's avatar
    scsi: lpfc: Fix IO failure during hba reset testing with nvme io. · 91455b85
    James Smart authored
    A stress test repeatedly resetting the adapter while performing io would
    eventually report I/O failures and missing nvme namespaces.
    
    The driver was setting the nvmefc_fcp_req->private pointer to NULL
    during the IO completion routine before upcalling done().  If the
    transport was also running an abort for that IO, the driver would fail
    the abort with message 6140. Failing the abort is not allowed by the
    nvme-fc transport, as it mandates that the io must be returned back to
    the transport. As that does not happen, the transport controller delete
    has an outstanding reference and can't complete teardown.
    
    The NULL-ing of the private pointer should be done only when the io is
    considered complete. It's complete when the adapter returns the exchange
    with the "exchange busy" flag clear.
    
    Move the NULL'ing of the structure to the done case. This leaves the io
    contexts set while it is busy and until the subsequent XRI_ABORTED
    completion which returns the exchange is received.
    Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    91455b85
lpfc_nvme.c 84 KB