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 call nvme_complete_rq to complete the request with NVME_SC_HOST_PATH_ERROR, the request will fail over to retry if needed. Signed-off-by: Chao Leng <lengchao@xxxxxxxxxx> --- drivers/nvme/host/fc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index 5f36cfa8136c..ebc9911f9528 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -2791,7 +2791,12 @@ nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx, } - return nvme_fc_start_fcp_op(ctrl, queue, op, data_len, io_dir); + ret = nvme_fc_start_fcp_op(ctrl, queue, op, data_len, io_dir); + if (ret == BLK_STS_IOERR) { + nvme_complete_failed_req(rq); + ret = BLK_STS_OK; + } + return ret; } static void -- 2.16.4