[PATCH 14/16] block: switch polling to be bio based

chenxiang (M) chenxiang66 at hisilicon.com
Wed Nov 3 00:11:25 PDT 2021


Hi Christoph,


在 2021/10/12 19:12, Christoph Hellwig 写道:
> Replace the blk_poll interface that requires the caller to keep a queue
> and cookie from the submissions with polling based on the bio.
>
> Polling for the bio itself leads to a few advantages:
>
>   - the cookie construction can made entirely private in blk-mq.c
>   - the caller does not need to remember the request_queue and cookie
>     separately and thus sidesteps their lifetime issues
>   - keeping the device and the cookie inside the bio allows to trivially
>     support polling BIOs remapping by stacking drivers
>   - a lot of code to propagate the cookie back up the submission path can
>     be removed entirely.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> Tested-by: Mark Wunderlich <mark.wunderlich at intel.com>
> ---
......
>   /**
>    * blk_cloned_rq_check_limits - Helper function to check a cloned request
>    *                              for the new queue limits
> diff --git a/block/blk-exec.c b/block/blk-exec.c
> index 1fa7f25e57262..55f0cd34b37b9 100644
> --- a/block/blk-exec.c
> +++ b/block/blk-exec.c
> @@ -65,13 +65,19 @@ EXPORT_SYMBOL_GPL(blk_execute_rq_nowait);
>   
>   static bool blk_rq_is_poll(struct request *rq)
>   {
> -	return rq->mq_hctx && rq->mq_hctx->type == HCTX_TYPE_POLL;
> +	if (!rq->mq_hctx)
> +		return false;
> +	if (rq->mq_hctx->type != HCTX_TYPE_POLL)
> +		return false;
> +	if (WARN_ON_ONCE(!rq->bio))
> +		return false;
> +	return true;
>   }
>   
>   static void blk_rq_poll_completion(struct request *rq, struct completion *wait)
>   {
>   	do {
> -		blk_poll(rq->q, request_to_qc_t(rq->mq_hctx, rq), 0);
> +		bio_poll(rq->bio, 0);
>   		cond_resched();
>   	} while (!completion_done(wait));
>   }

For some scsi command sent by function __scsi_execute() without data, it 
has request but no bio (bufflen = 0),
then how to use bio_poll() for them ?

Best Regards,
Xiang Chen




More information about the Linux-nvme mailing list