[PATCH 15/15] nvme-multipath: enable polled I/O

Sagi Grimberg sagi at grimberg.me
Wed May 12 15:10:58 PDT 2021


> Set the poll queue flag to enable polling, given that the multipath
> node just dispatches the bios to a lower queue.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>   drivers/nvme/host/multipath.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
> index 516fe977606d..e95b93655d06 100644
> --- a/drivers/nvme/host/multipath.c
> +++ b/drivers/nvme/host/multipath.c
> @@ -446,6 +446,15 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)
>   		goto out;
>   	blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
>   	blk_queue_flag_set(QUEUE_FLAG_NOWAIT, q);
> +	/*
> +	 * This assumes all controllers that refer to a namespace either
> +	 * support poll queues or not.  That is not a strict guarantee,
> +	 * but if the assumption is wrong the effect is only suboptimal
> +	 * performance but not correctness problem.
> +	 */
> +	if (ctrl->tagset->nr_maps > HCTX_TYPE_POLL &&
> +	    ctrl->tagset->map[HCTX_TYPE_POLL].nr_queues)
> +		blk_queue_flag_set(QUEUE_FLAG_POLL, q);

If one controller does not support polling and the other does, won't
the block layer fail to map a queue for REQ_POLLED requests?

Maybe clear in the else case here?



More information about the Linux-nvme mailing list