NVMe: Use a retryable error code on reset
authorKeith Busch <keith.busch@intel.com>
Mon, 4 Jan 2016 16:10:56 +0000 (09:10 -0700)
committerJens Axboe <axboe@fb.com>
Tue, 12 Jan 2016 20:33:35 +0000 (13:33 -0700)
A negative status has the "do not retry" bit set, which makes it not
retryable.  Use a fake status that can potentially be retried on reset.

An aborted command's status is overridden by the timeout handler so
that it won't be retried, which is necessary to keep initialization from
getting into a reset loop.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/nvme/host/pci.c

index 30ed2ab2cadb4731c69084fe5f165a2e209054f6..ac6c7afb2a6ed03ab1ccd27d3f3964f0a751fbf1 100644 (file)
@@ -1017,7 +1017,7 @@ static void nvme_cancel_queue_ios(struct request *req, void *data, bool reserved
        dev_warn(nvmeq->q_dmadev,
                 "Cancelling I/O %d QID %d\n", req->tag, nvmeq->qid);
 
-       status = NVME_SC_CANCELLED;
+       status = NVME_SC_ABORT_REQ;
        if (blk_queue_dying(req->q))
                status |= NVME_SC_DNR;
        blk_mq_complete_request(req, status);