[PATCH 3/3] blk-mq: fix wait condition for tagset wait completed check

Daniel Wagner
2025-01-28T16:42:11Z

blk_mq_tagset_count_completed_reqs returns the number of completed
requests. The only user of this function is
blk_mq_tagset_wait_completed_request which wants to know how many
request are not yet completed. Thus return the number of in flight
requests and terminate the wait loop when there is no inflight request.

Fixes: f9934a80f91d ("blk-mq: introduce blk_mq_tagset_wait_completed_request()")
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Daniel Wagner <wagi@kernel.org>
---
block/blk-mq-tag.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index b9f417d980b46d54b74dec8adcb5b04e6a78635c..3ce46afb65e3c3de9f11ca440bf0f335f21d0998 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -450,11 +450,11 @@ void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
}
EXPORT_SYMBOL(blk_mq_tagset_busy_iter);

-static bool blk_mq_tagset_count_completed_rqs(struct request *rq, void *data)
+static bool blk_mq_tagset_count_inflight_rqs(struct request *rq, void *data)
{
unsigned *count = data;

- if (blk_mq_request_completed(rq))
+ if (blk_mq_rq_state(rq) == MQ_RQ_IN_FLIGHT)
(*count)++;
return true;
}
@@ -472,7 +472,7 @@ void blk_mq_tagset_wait_completed_request(struct blk_mq_tag_set *tagset)
unsigned count = 0;

blk_mq_tagset_busy_iter(tagset,
- blk_mq_tagset_count_completed_rqs, &count);
+ blk_mq_tagset_count_inflight_rqs, &count);
if (!count)
break;
msleep(5);

--
2.48.1