blk-mq: free hctx->cpumask in release handler of hctx's kobject
It is obviously that hctx->cpumask is per hctx, and both share same lifetime, so this patch moves freeing of hctx->cpumask into release handler of hctx's kobject. Signed-off-by: Ming Lei <tom.leiming@gmail.com> Tested-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
6c8b232efe
commit
01388df376
|
@ -21,6 +21,7 @@ static void blk_mq_hw_sysfs_release(struct kobject *kobj)
|
|||
{
|
||||
struct blk_mq_hw_ctx *hctx = container_of(kobj, struct blk_mq_hw_ctx,
|
||||
kobj);
|
||||
free_cpumask_var(hctx->cpumask);
|
||||
kfree(hctx->ctxs);
|
||||
kfree(hctx);
|
||||
}
|
||||
|
|
|
@ -1955,16 +1955,6 @@ static void blk_mq_exit_hw_queues(struct request_queue *q,
|
|||
}
|
||||
}
|
||||
|
||||
static void blk_mq_free_hw_queues(struct request_queue *q,
|
||||
struct blk_mq_tag_set *set)
|
||||
{
|
||||
struct blk_mq_hw_ctx *hctx;
|
||||
unsigned int i;
|
||||
|
||||
queue_for_each_hw_ctx(q, hctx, i)
|
||||
free_cpumask_var(hctx->cpumask);
|
||||
}
|
||||
|
||||
static int blk_mq_init_hctx(struct request_queue *q,
|
||||
struct blk_mq_tag_set *set,
|
||||
struct blk_mq_hw_ctx *hctx, unsigned hctx_idx)
|
||||
|
@ -2333,7 +2323,6 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
|
|||
if (hctx->tags)
|
||||
blk_mq_free_map_and_requests(set, j);
|
||||
blk_mq_exit_hctx(q, set, hctx, j);
|
||||
free_cpumask_var(hctx->cpumask);
|
||||
kobject_put(&hctx->kobj);
|
||||
hctxs[j] = NULL;
|
||||
|
||||
|
@ -2446,7 +2435,6 @@ void blk_mq_free_queue(struct request_queue *q)
|
|||
blk_mq_del_queue_tag_set(q);
|
||||
|
||||
blk_mq_exit_hw_queues(q, set, set->nr_hw_queues);
|
||||
blk_mq_free_hw_queues(q, set);
|
||||
}
|
||||
|
||||
/* Basically redo blk_mq_init_queue with queue frozen */
|
||||
|
|
Loading…
Reference in New Issue