blk-mq: immediately dispatch big size request
This is corresponding part for blk-mq. Disk with multiple hardware queues doesn't need this as we only hold 1 request at most. Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: Jens Axboe <axboe@fb.com>hifive-unleashed-5.1
parent
50d24c3440
commit
600271d900
|
@ -1453,13 +1453,18 @@ static blk_qc_t blk_sq_make_request(struct request_queue *q, struct bio *bio)
|
||||||
*/
|
*/
|
||||||
plug = current->plug;
|
plug = current->plug;
|
||||||
if (plug) {
|
if (plug) {
|
||||||
|
struct request *last = NULL;
|
||||||
|
|
||||||
blk_mq_bio_to_request(rq, bio);
|
blk_mq_bio_to_request(rq, bio);
|
||||||
if (!request_count)
|
if (!request_count)
|
||||||
trace_block_plug(q);
|
trace_block_plug(q);
|
||||||
|
else
|
||||||
|
last = list_entry_rq(plug->mq_list.prev);
|
||||||
|
|
||||||
blk_mq_put_ctx(data.ctx);
|
blk_mq_put_ctx(data.ctx);
|
||||||
|
|
||||||
if (request_count >= BLK_MAX_REQUEST_COUNT) {
|
if (request_count >= BLK_MAX_REQUEST_COUNT || (last &&
|
||||||
|
blk_rq_bytes(last) >= BLK_PLUG_FLUSH_SIZE)) {
|
||||||
blk_flush_plug_list(plug, false);
|
blk_flush_plug_list(plug, false);
|
||||||
trace_block_plug(q);
|
trace_block_plug(q);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue