• James Smart's avatar
    nvme: allow timed-out ios to retry · 0951338d
    James Smart authored
    Currently the nvme_req_needs_retry() applies several checks to see if
    a retry is allowed. On of those is whether the current time has exceeded
    the start time of the io plus the timeout length. This check, if an io
    times out, means there is never a retry allowed for the io. Which means
    applications see the io failure.
    
    Remove this check and allow the io to timeout, like it does on other
    protocols, and retries to be made.
    
    On the FC transport, a frame can be lost for an individual io, and there
    may be no other errors that escalate for the connection/association.
    The io will timeout, which causes the transport to escalate into creating
    a new association, but the io that timed out, due to this retry logic, has
    already failed back to the application and things are hosed.
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Reviewed-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    0951338d
core.c 73.8 KB