• Shaohua Li's avatar
    blk-mq: don't lose requests if a stopped queue restarts · 9ba52e58
    Shaohua Li authored
    Normally if driver is busy to dispatch a request the logic is like below:
    block layer:					driver:
    	__blk_mq_run_hw_queue
    a.						blk_mq_stop_hw_queue
    b.	rq add to ctx->dispatch
    
    later:
    1.						blk_mq_start_hw_queue
    2.	__blk_mq_run_hw_queue
    
    But it's possible step 1-2 runs between a and b. And since rq isn't in
    ctx->dispatch yet, step 2 will not run rq. The rq might get lost if
    there are no subsequent requests kick in.
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    9ba52e58
blk-mq.c 52.4 KB