Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de65d2d2 authored by Matias Bjørling's avatar Matias Bjørling Committed by Jens Axboe
Browse files

null_blk: fix memory leak on cleanup



Driver was not freeing the memory allocated for internal nullb queues.
This patch frees the memory during driver unload.

Signed-off-by: default avatarMatias Bjørling <mb@lightnvm.io>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 5014c311
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -406,6 +406,22 @@ static struct blk_mq_ops null_mq_ops = {
	.complete	= null_softirq_done_fn,
};

static void cleanup_queue(struct nullb_queue *nq)
{
	kfree(nq->tag_map);
	kfree(nq->cmds);
}

static void cleanup_queues(struct nullb *nullb)
{
	int i;

	for (i = 0; i < nullb->nr_queues; i++)
		cleanup_queue(&nullb->queues[i]);

	kfree(nullb->queues);
}

static void null_del_dev(struct nullb *nullb)
{
	list_del_init(&nullb->list);
@@ -415,6 +431,7 @@ static void null_del_dev(struct nullb *nullb)
	if (queue_mode == NULL_Q_MQ)
		blk_mq_free_tag_set(&nullb->tag_set);
	put_disk(nullb->disk);
	cleanup_queues(nullb);
	kfree(nullb);
}

@@ -459,22 +476,6 @@ static int setup_commands(struct nullb_queue *nq)
	return 0;
}

static void cleanup_queue(struct nullb_queue *nq)
{
	kfree(nq->tag_map);
	kfree(nq->cmds);
}

static void cleanup_queues(struct nullb *nullb)
{
	int i;

	for (i = 0; i < nullb->nr_queues; i++)
		cleanup_queue(&nullb->queues[i]);

	kfree(nullb->queues);
}

static int setup_queues(struct nullb *nullb)
{
	nullb->queues = kzalloc(submit_queues * sizeof(struct nullb_queue),