summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChao Leng <lengchao@huawei.com>2021-02-01 06:49:40 +0300
committerChristoph Hellwig <hch@lst.de>2021-02-10 18:38:03 +0300
commit62eca39722fd997e3621fc903229917b9f0fb271 (patch)
treea0257d8e1f05bcd0017b39e040a1faf740baeb58
parentea5e5f42cd2c80d19862dd63a2f3a4e7a99c6a20 (diff)
downloadlinux-62eca39722fd997e3621fc903229917b9f0fb271.tar.xz
nvme-rdma: handle nvme_rdma_post_send failures better
nvme_rdma_post_send failing is a path related error and should bounce to another path when using nvme-multipath. Call nvme_host_path_error when nvme_rdma_post_send returns -EIO to ensure nvme_complete_rq gets invoked to fail over to another path if there is one. Signed-off-by: Chao Leng <lengchao@huawei.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r--drivers/nvme/host/rdma.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index 6700d8bab68a..53ac4d7442ba 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -2098,7 +2098,9 @@ static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx,
err_unmap:
nvme_rdma_unmap_data(queue, rq);
err:
- if (err == -ENOMEM || err == -EAGAIN)
+ if (err == -EIO)
+ ret = nvme_host_path_error(rq);
+ else if (err == -ENOMEM || err == -EAGAIN)
ret = BLK_STS_RESOURCE;
else
ret = BLK_STS_IOERR;