From: Yufen Yu yuyufen@huawei.com
[ Upstream commit 27029b4b18aa5d3b060f0bf2c26dae254132cfce ]
Normally, blkcg_iolatency_exit() will free related memory in iolatency when cleanup queue. But if blk_throtl_init() return error and queue init fail, blkcg_iolatency_exit() will not do that for us. Then it cause memory leak.
Fixes: d70675121546 ("block: introduce blk-iolatency io controller") Signed-off-by: Yufen Yu yuyufen@huawei.com Signed-off-by: Jens Axboe axboe@kernel.dk Signed-off-by: Sasha Levin sashal@kernel.org --- block/blk-cgroup.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 0ecc897b225c9..6e8f5e60b0982 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -1056,13 +1056,15 @@ int blkcg_init_queue(struct request_queue *q) if (preloaded) radix_tree_preload_end();
- ret = blk_iolatency_init(q); + ret = blk_throtl_init(q); if (ret) goto err_destroy_all;
- ret = blk_throtl_init(q); - if (ret) + ret = blk_iolatency_init(q); + if (ret) { + blk_throtl_exit(q); goto err_destroy_all; + } return 0;
err_destroy_all: