diff options
author | Chao Leng <lengchao@huawei.com> | 2021-02-01 06:49:40 +0300 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2021-02-10 18:38:03 +0300 |
commit | 62eca39722fd997e3621fc903229917b9f0fb271 (patch) | |
tree | a0257d8e1f05bcd0017b39e040a1faf740baeb58 | |
parent | ea5e5f42cd2c80d19862dd63a2f3a4e7a99c6a20 (diff) | |
download | linux-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.c | 4 |
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; |