blk-mq: avoid to account active request repeatedly
diff mbox series

Message ID
State New
Headers show
  • blk-mq: avoid to account active request repeatedly
Related show

Commit Message

Ming Lei July 2, 2020, 1:58 p.m. UTC
One request may get driver tag several times, and active request is only
de-accounted in blk_mq_put_driver_tag() in case of io scheduler, and it
won't be done for none, so repeated accounting of active request may

Fix this issue by only accounting active request in case that RQF_MQ_INFLIGHT
isn't set.

Cc: Qian Cai <>
Tested-by: Sachin Sant <>
Fixes: 37f4a24c2469 ("blk-mq: centralise related handling into blk_mq_get_driver_tag")
Signed-off-by: Ming Lei <>
 block/blk-mq.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff mbox series

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 6b36969220c1..656d92de9814 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1149,7 +1149,8 @@  static bool blk_mq_get_driver_tag(struct request *rq)
 	if (rq->tag == BLK_MQ_NO_TAG && !__blk_mq_get_driver_tag(rq))
 		return false;
-	if (hctx->flags & BLK_MQ_F_TAG_SHARED) {
+	if ((hctx->flags & BLK_MQ_F_TAG_SHARED) &&
+			!(rq->rq_flags & RQF_MQ_INFLIGHT)) {
 		rq->rq_flags |= RQF_MQ_INFLIGHT;