[PATCH v4 4/5] nvme-rdma: avoid IO error for nvme native multipath

Sagi Grimberg sagi at grimberg.me
Thu Jan 28 22:37:33 EST 2021


>>> diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
>>> index b7ce4f221d99..66b697461bd9 100644
>>> --- a/drivers/nvme/host/rdma.c
>>> +++ b/drivers/nvme/host/rdma.c
>>> @@ -2084,8 +2084,13 @@ 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) {
>>> +                       nvme_complete_failed_rq(rq, 
>>> NVME_SC_HOST_PATH_ERROR);
>>
>> I was thinking about:
>> -- 
>>          err = nvme_rdma_post_send(queue, sqe, req->sge, req->num_sge,
>>                          req->mr ? &req->reg_wr.wr : NULL);
>>          if (unlikely(err)) {
>>                  if (err == -EIO) {
>>                          /*
>>                           * Fail the reuqest so upper layer can 
>> failover I/O
>>                           * if another path is available
>>                           */
>>                          req->status = NVME_SC_HOST_PATH_ERROR;
>>                          nvme_rdma_complete_rq(rq);
>>                          return BLK_STS_OK;Need to do clean. so can 
>> not directly return.

The completion path cleans up though

>>
>>                  }
>>                  goto err_unmap;
>>          }
>> -- 
>> .
> 
> _______________________________________________
> Linux-nvme mailing list
> Linux-nvme at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-nvme



More information about the Linux-nvme mailing list