diff options
| author | Ming Lei <[email protected]> | 2018-08-03 01:49:37 +0800 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2018-08-02 14:47:20 -0600 |
| commit | 2d5ba0e2de24ec87636244a01d4e78d095cc1b20 (patch) | |
| tree | 8970694dec156944a15ade4c7862fe1ad641d719 | |
| parent | 5151842b9d8732d4cbfa8400b40bff894f501b2f (diff) | |
blk-mq: fix blk_mq_tagset_busy_iter
Commit d250bf4e776ff09d5("blk-mq: only iterate over inflight requests
in blk_mq_tagset_busy_iter") uses 'blk_mq_rq_state(rq) == MQ_RQ_IN_FLIGHT'
to replace 'blk_mq_request_started(req)', this way is wrong, and causes
lots of test system hang during booting.
Fix the issue by using blk_mq_request_started(req) inside bt_tags_iter().
Fixes: d250bf4e776ff09d5 ("blk-mq: only iterate over inflight requests in blk_mq_tagset_busy_iter")
Cc: Josef Bacik <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: Guenter Roeck <[email protected]>
Cc: Mark Brown <[email protected]>
Cc: Matt Hart <[email protected]>
Cc: Johannes Thumshirn <[email protected]>
Cc: John Garry <[email protected]>
Cc: Hannes Reinecke <[email protected]>,
Cc: "Martin K. Petersen" <[email protected]>,
Cc: James Bottomley <[email protected]>
Cc: [email protected]
Cc: [email protected]
Reviewed-by: Bart Van Assche <[email protected]>
Tested-by: Guenter Roeck <[email protected]>
Reported-by: Mark Brown <[email protected]>
Reported-by: Guenter Roeck <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
| -rw-r--r-- | block/blk-mq-tag.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c index 09b2ee6694fb..3de0836163c2 100644 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@ -271,7 +271,7 @@ static bool bt_tags_iter(struct sbitmap *bitmap, unsigned int bitnr, void *data) * test and set the bit before assining ->rqs[]. */ rq = tags->rqs[bitnr]; - if (rq && blk_mq_rq_state(rq) == MQ_RQ_IN_FLIGHT) + if (rq && blk_mq_request_started(rq)) iter_data->fn(rq, iter_data->data, reserved); return true; |