diff options
author | Shaohua Li <shli@fusionio.com> | 2013-10-29 19:01:03 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2013-10-29 19:01:03 +0100 |
commit | 92f399c72af2d8cbb9d4f60e11d0d67ca738147f (patch) | |
tree | 808309a8706de6bda501441b78127f6b1233ce0a /block | |
parent | blk-mq: fix for flush deadlock (diff) | |
download | linux-92f399c72af2d8cbb9d4f60e11d0d67ca738147f.tar.xz linux-92f399c72af2d8cbb9d4f60e11d0d67ca738147f.zip |
blk-mq: mq plug list breakage
We switched to plug mq_list for mq, but some code are still using old list.
Signed-off-by: Shaohua Li <shli@fusionio.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-core.c | 8 | ||||
-rw-r--r-- | block/blk-mq.c | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 9677c6525ed8..936876ab662d 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -1401,13 +1401,19 @@ bool blk_attempt_plug_merge(struct request_queue *q, struct bio *bio, struct blk_plug *plug; struct request *rq; bool ret = false; + struct list_head *plug_list; plug = current->plug; if (!plug) goto out; *request_count = 0; - list_for_each_entry_reverse(rq, &plug->list, queuelist) { + if (q->mq_ops) + plug_list = &plug->mq_list; + else + plug_list = &plug->list; + + list_for_each_entry_reverse(rq, plug_list, queuelist) { int el_ret; if (rq->q == q) diff --git a/block/blk-mq.c b/block/blk-mq.c index 2dc8de86d0d2..88d4e864d4c0 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -950,7 +950,7 @@ static void blk_mq_make_request(struct request_queue *q, struct bio *bio) if (plug) { blk_mq_bio_to_request(rq, bio); - if (list_empty(&plug->list)) + if (list_empty(&plug->mq_list)) trace_block_plug(q); else if (request_count >= BLK_MAX_REQUEST_COUNT) { blk_flush_plug_list(plug, false); |