nvme-tcp: kernel NULL pointer dereference, address: 0000000000000034

Sagi Grimberg sagi at grimberg.me
Wed Mar 22 00:12:59 PDT 2023


>> I just attempted with the below patch and it seems to work.
>> The only change I did was to pass to blk_poll the cookie as well,
>> from bio_poll that is bi_cookie, and from blk_rq_poll it is computed
>> from the hctx directly.
> 
> I think we can can really simplify this path a lot knowing that we are dealing
> with a live request from a polling queue. Then we can poll for requests without
> bios too.
> 
> ---
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index d60ef2f0fa50b..b64c7d491306b 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -1323,8 +1323,6 @@ bool blk_rq_is_poll(struct request *rq)
>   		return false;
>   	if (rq->mq_hctx->type != HCTX_TYPE_POLL)
>   		return false;
> -	if (WARN_ON_ONCE(!rq->bio))
> -		return false;
>   	return true;
>   }
>   EXPORT_SYMBOL_GPL(blk_rq_is_poll);
> @@ -1332,7 +1330,7 @@ EXPORT_SYMBOL_GPL(blk_rq_is_poll);
>   static void blk_rq_poll_completion(struct request *rq, struct completion *wait)
>   {
>   	do {
> -		bio_poll(rq->bio, NULL, 0);
> +		blk_mq_poll(rq->q, blk_rq_to_qc(rq), NULL, 0);
>   		cond_resched();
>   	} while (!completion_done(wait));
>   }
> --

Much simpler! Like



More information about the Linux-nvme mailing list