• Keith Busch's avatar
    NVMe: Retry failed commands with non-fatal errors · edd10d33
    Keith Busch authored
    For commands returned with failed status, queue these for resubmission
    and continue retrying them until success or for a limited amount of
    time. The final timeout was arbitrarily chosen so requests can't be
    retried indefinitely.
    
    Since these are requeued on the nvmeq that submitted the command, the
    callbacks have to take an nvmeq instead of an nvme_dev as a parameter
    so that we can use the locked queue to append the iod to retry later.
    
    The nvme_iod conviently can be used to track how long we've been trying
    to successfully complete an iod request. The nvme_iod also provides the
    nvme prp dma mappings, so I had to move a few things around so we can
    keep those mappings.
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    [fixed checkpatch issue with long line]
    Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
    edd10d33
nvme-core.c 72 KB