Messages in this thread | | | Subject | Re: [PATCH v2 10/11] blk-mq: Use shared tags for shared sbitmap support | From | John Garry <> | Date | Mon, 23 Aug 2021 09:55:44 +0100 |
| |
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
| |