On 18/08/2021 09:16, Ming Lei wrote:
ret = blk_mq_alloc_rqs(set, tags, 0, set->queue_depth);
+ if (ret) {
+ blk_mq_exit_sched_shared_sbitmap(queue);
+ return ret;
There are two such patterns for allocate rq map and request pool
together, please put them into one helper(such as blk_mq_alloc_map_and_rqs)
which can return the allocated tags and handle failure inline. Also we may
convert current users into this helper.
}
Hi Ming,
Do you have a preference for the API:
int blk_mq_alloc_map_and_rqs(struct blk_mq_tag_set *set, struct
blk_mq_tags **tags, unsigned int hctx_idx, unsigned int depth);
void blk_mq_free_map_and_requests(struct blk_mq_tag_set *set,
struct blk_mq_tags **tags, unsigned int hctx_idx);
or
struct blk_mq_tags *blk_mq_alloc_map_and_rqs(struct blk_mq_tag_set *set,
unsigned int hctx_idx, unsigned int depth);
void blk_mq_free_map_and_requests(struct blk_mq_tag_set *set,
struct blk_mq_tags *tags, unsigned int hctx_idx);
The advantage of the first is that we don't need the pattern:
blk_mq_free_map_and_requests(tags)
tags = NULL;
But then passing struct blk_mq_tags ** is a bit overly complicated.
Thanks,
John