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