On Fri, Aug 3, 2018 at 12:40 AM, Bart Van Assche <Bart.VanAssche@xxxxxxx> wrote: > On Fri, 2018-08-03 at 00:27 +0800, Ming Lei wrote: >> This issue can be fixed by reverting d250bf4e776ff09d5 ("blk-mq: only iterate over >> inflight requests in blk_mq_tagset_busy_iter"). >> >> This patch looks wrong, because 'blk_mq_rq_state(rq) == MQ_RQ_IN_FLIGHT' >> isn't completely same with 'blk_mq_request_started(req)'. > > Please test the following change instead of reverting the commit mentioned > above: > > diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c > index 09b2ee6694fb..25a0583d8b4c 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_rq_state(rq) != MQ_RQ_IDLE) > iter_data->fn(rq, iter_data->data, reserved); > > return true; > I just sent out a similar patch on list, but use blk_mq_request_started() instead. https://marc.info/?l=linux-scsi&m=153322823307754&w=2 Thanks, Ming Lei