On 2020-05-20 10:06, Christoph Hellwig wrote: > @@ -321,8 +324,30 @@ static void blk_mq_all_tag_busy_iter(struct blk_mq_tags *tags, > busy_tag_iter_fn *fn, void *priv) > { > if (tags->nr_reserved_tags) > - bt_tags_for_each(tags, &tags->breserved_tags, fn, priv, true); > - bt_tags_for_each(tags, &tags->bitmap_tags, fn, priv, false); > + bt_tags_for_each(tags, &tags->breserved_tags, fn, priv, true, > + false); > + bt_tags_for_each(tags, &tags->bitmap_tags, fn, priv, false, false); > +} Adding /*reserved=*/ and /*iterate_all=*/ comments in front of the boolean arguments would make this code easier to read. > +/** > + * blk_mq_all_tag_iter - iterate over all requests in a tag map > + * @tags: Tag map to iterate over. > + * @fn: Pointer to the function that will be called for each > + * request. @fn will be called as follows: @fn(rq, @priv, > + * reserved) where rq is a pointer to a request. 'reserved' > + * indicates whether or not @rq is a reserved request. Return > + * true to continue iterating tags, false to stop. > + * @priv: Will be passed as second argument to @fn. > + * > + * It is the caller's responsibility to check rq's state in @fn. ^^^^^^ @fn? Not sure how the blk_mq_all_tag_iter() caller can check the request state ... > + */ > +void blk_mq_all_tag_iter(struct blk_mq_tags *tags, busy_tag_iter_fn *fn, > + void *priv) > +{ > + if (tags->nr_reserved_tags) > + bt_tags_for_each(tags, &tags->breserved_tags, fn, priv, true, > + true); > + bt_tags_for_each(tags, &tags->bitmap_tags, fn, priv, false, true); > } Same comment here: I think that adding /*reserved=*/ and /*iterate_all=*/ comments in front of the boolean arguments would make this code easier to read. Otherwise this patch looks good to me. Thanks, Bart.