diff mbox

[v5,01/12] blk-mq: pass correct hctx to blk_mq_try_issue_directly

Message ID 20170606152210.22806-2-ming.lei@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ming Lei June 6, 2017, 3:21 p.m. UTC
When direct issue is done on request picked up from plug list,
the hctx need to be updated with the actual hw queue, otherwise
wrong hctx is used and may hurt performance, especially when
wrong SRCU readlock is acquired/released

Reported-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
 block/blk-mq.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Bart Van Assche June 6, 2017, 3:59 p.m. UTC | #1
On Tue, 2017-06-06 at 23:21 +0800, Ming Lei wrote:
> When direct issue is done on request picked up from plug list,
> the hctx need to be updated with the actual hw queue, otherwise
> wrong hctx is used and may hurt performance, especially when
> wrong SRCU readlock is acquired/released

Reviewed-by: Bart Van Assche <Bart.VanAssche@sandisk.com>
diff mbox

Patch

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 58688205c8f4..c13888922e18 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1558,9 +1558,12 @@  static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
 
 		blk_mq_put_ctx(data.ctx);
 
-		if (same_queue_rq)
+		if (same_queue_rq) {
+			data.hctx = blk_mq_map_queue(q,
+					same_queue_rq->mq_ctx->cpu);
 			blk_mq_try_issue_directly(data.hctx, same_queue_rq,
 					&cookie);
+		}
 	} else if (q->nr_hw_queues > 1 && is_sync) {
 		blk_mq_put_ctx(data.ctx);
 		blk_mq_bio_to_request(rq, bio);