History

NVMe: Retry failed commands with non-fatal errors

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.

Keith Busch committed 12 years ago

Commit edd10d31 parent 4cc09e24 files · +154 −96Browse files

Showing the changes to include/uapi/linux (1 of 4 files). Show all

Unified · Split

include/uapi/linux/nvme.h+1−0
@@ -434,6 +434,7 @@ enum { · 433 unmodified lines
434434 NVME_SC_REFTAG_CHECK = 0x284,
435435 NVME_SC_COMPARE_FAILED = 0x285,
436436 NVME_SC_ACCESS_DENIED = 0x286,
437+ NVME_SC_DNR = 0x4000,
437438 };
438439
439440 struct nvme_completion {