On 4/26/21 6:45 PM, Ming Lei wrote: > diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c > index 100fa44d52a6..773aea4db90c 100644 > --- a/block/blk-mq-tag.c > +++ b/block/blk-mq-tag.c > @@ -284,8 +284,11 @@ static bool bt_tags_iter(struct sbitmap *bitmap, unsigned int bitnr, void *data) > if ((iter_data->flags & BT_TAG_ITER_STARTED) && > !blk_mq_request_started(rq)) > ret = true; > - else > + else { > + rq->rq_flags |= RQF_ITERATING; > ret = iter_data->fn(rq, iter_data->data, reserved); > + rq->rq_flags &= ~RQF_ITERATING; > + } > if (!iter_static_rqs) > blk_mq_put_rq_ref(rq); > return ret; All existing rq->rq_flags modifications are serialized. The above change adds code that may change rq_flags concurrently with regular request processing. I think that counts as a race condition. Additionally, the RQF_ITERATING flag won't be set correctly in the (unlikely) case that two concurrent bt_tags_iter() calls examine the same request at the same time. Thanks, Bart.