[PATCH v5 3/3] nvme-rdma: avoid IO error for nvme native multipath
Chao Leng
lengchao at huawei.com
Sun Jan 31 22:49:40 EST 2021
Work with nvme native multipath, if a path related error occurs when
queue_rq call HBA drive to send request, queue_rq will return
BLK_STS_IOERR to blk-mq. The request is completed with BLK_STS_IOERR
instead of fail over to retry.
queue_rq need complete the request with NVME_SC_HOST_PATH_ERROR and set
the state of request to MQ_RQ_COMPLETE, the request will fail over to
retry if needed.
Signed-off-by: Chao Leng <lengchao at huawei.com>
---
drivers/nvme/host/rdma.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index b7ce4f221d99..5fc113dd3302 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -2084,8 +2084,19 @@ static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx,
err = nvme_rdma_post_send(queue, sqe, req->sge, req->num_sge,
req->mr ? &req->reg_wr.wr : NULL);
- if (unlikely(err))
+ if (unlikely(err)) {
+ if (err == -EIO) {
+ /*
+ * Fail the reqest so upper layer can failover I/O
+ * if another path is available
+ */
+ req->status = NVME_SC_HOST_PATH_ERROR;
+ blk_mq_set_request_complete(rq);
+ nvme_rdma_complete_rq(rq);
+ return BLK_STS_OK;
+ }
goto err_unmap;
+ }
return BLK_STS_OK;
--
2.16.4
More information about the Linux-nvme
mailing list