]> www.infradead.org Git - users/jedix/linux-maple.git/commit
nvme: allow timed-out ios to retry
authorJames Smart <james.smart@broadcom.com>
Thu, 7 Mar 2019 01:08:12 +0000 (09:08 +0800)
committerBrian Maly <brian.maly@oracle.com>
Tue, 21 May 2019 22:21:30 +0000 (18:21 -0400)
commit39a6752b486c535a4e1b00cb6b9d3297a43a5dd7
tree4d03cc84587f68d4a844590d3763d4dc02cd9dcc
parent4a7cd8c103e216e3186505202e812b79e905c4ff
nvme: allow timed-out ios to retry

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: James Smart <james.smart@broadcom.com>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
(backport from upstream commit 0951338d9677f546e230685d68631dfd3f81cca5)

There are two changes in this nvme_req_needs_retry before this commit,
and there is no functional dependence on our issue. For simpler work,
we don't backport them.

Orabug: 29301607

Reviewed-by: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/nvme/host/nvme.h