On 12/16/18 11:14 PM, Damien Le Moal wrote:
> For a zoned block device using mq-deadline, if a write request for a
> zone is received while another write was already dispatched for the same
> zone, dd_dispatch_request() will return NULL and the newly inserted
> write request is kept in the scheduler queue waiting for the ongoing
> zone write to complete. With this behavior, when no other request has
> been dispatched, rq_list in blk_mq_sched_dispatch_requests() is empty
> and blk_mq_sched_mark_restart_hctx() not called. This in turn leads to
> __blk_mq_free_request() call of blk_mq_sched_restart() to not run the
> queue when the already dispatched write request completes. The newly
> dispatched request stays stuck in the scheduler queue until eventually
> another request is submitted.
> 
> This problem does not affect SCSI disk as the SCSI stack handles queue
> restart on request completion. However, this problem is can be triggered
> the nullblk driver with zoned mode enabled.
> 
> Fix this by always requesting a queue restart in dd_dispatch_request()
> if no request was dispatched while WRITE requests are queued.

Applied, thanks.

-- 
Jens Axboe

Reply via email to