Commit 36a3df5a authored by Ming Lei's avatar Ming Lei Committed by Jens Axboe

blk-mq: put driver tag when this request is completed

It is natural to release driver tag when this request is completed by
LLD or device since its purpose is for LLD use.

One big benefit is that the released tag can be re-used quicker since
bio_endio() may take too long.

Meantime we don't need to release driver tag for flush request.
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a2e83ef9
...@@ -240,7 +240,6 @@ static void flush_end_io(struct request *flush_rq, blk_status_t error) ...@@ -240,7 +240,6 @@ static void flush_end_io(struct request *flush_rq, blk_status_t error)
blk_mq_tag_set_rq(hctx, flush_rq->tag, fq->orig_rq); blk_mq_tag_set_rq(hctx, flush_rq->tag, fq->orig_rq);
flush_rq->tag = -1; flush_rq->tag = -1;
} else { } else {
blk_mq_put_driver_tag(flush_rq);
flush_rq->internal_tag = -1; flush_rq->internal_tag = -1;
} }
...@@ -341,11 +340,6 @@ static void mq_flush_data_end_io(struct request *rq, blk_status_t error) ...@@ -341,11 +340,6 @@ static void mq_flush_data_end_io(struct request *rq, blk_status_t error)
unsigned long flags; unsigned long flags;
struct blk_flush_queue *fq = blk_get_flush_queue(q, ctx); struct blk_flush_queue *fq = blk_get_flush_queue(q, ctx);
if (q->elevator) {
WARN_ON(rq->tag < 0);
blk_mq_put_driver_tag(rq);
}
/* /*
* After populating an empty queue, kick it to avoid stall. Read * After populating an empty queue, kick it to avoid stall. Read
* the comment in flush_end_io(). * the comment in flush_end_io().
......
...@@ -674,6 +674,8 @@ bool blk_mq_complete_request_remote(struct request *rq) ...@@ -674,6 +674,8 @@ bool blk_mq_complete_request_remote(struct request *rq)
{ {
WRITE_ONCE(rq->state, MQ_RQ_COMPLETE); WRITE_ONCE(rq->state, MQ_RQ_COMPLETE);
blk_mq_put_driver_tag(rq);
/* /*
* For a polled request, always complete locallly, it's pointless * For a polled request, always complete locallly, it's pointless
* to redirect the completion. * to redirect the completion.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment