[PATCH 1/2] nvme-rdma: Fix race between queue timeout and error recovery

Sagi Grimberg sagi at grimberg.me
Wed Apr 4 05:32:07 PDT 2018


> When returning BLK_EH_HANDLED from nvme_rdma_timeout() the block layer
> complete the request.
> Error recovery may also complete the request when aborting the requests.
> 
> Signed-off-by: Israel Rukshin <israelr at mellanox.com>
> Reviewed-by: Max Gurtovoy <maxg at mellanox.com>
> ---
>   drivers/nvme/host/rdma.c | 5 +----
>   1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
> index 758537e..c1abfc8 100644
> --- a/drivers/nvme/host/rdma.c
> +++ b/drivers/nvme/host/rdma.c
> @@ -1595,10 +1595,7 @@ static int nvme_rdma_cm_handler(struct rdma_cm_id *cm_id,
>   	/* queue error recovery */
>   	nvme_rdma_error_recovery(req->queue->ctrl);
>   
> -	/* fail with DNR on cmd timeout */
> -	nvme_req(rq)->status = NVME_SC_ABORT_REQ | NVME_SC_DNR;
> -
> -	return BLK_EH_HANDLED;
> +	return BLK_EH_RESET_TIMER;
>   }

These look awfully familiar...



More information about the Linux-nvme mailing list