]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
blk-cgroup: fix disk reference leak in blkcg_maybe_throttle_current()
authorJackie Liu <liuyun01@kylinos.cn>
Tue, 31 Mar 2026 08:50:54 +0000 (16:50 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 31 Mar 2026 19:55:41 +0000 (13:55 -0600)
Add the missing put_disk() on the error path in
blkcg_maybe_throttle_current(). When blkcg lookup, blkg lookup, or
blkg_tryget() fails, the function jumps to the out label which only
calls rcu_read_unlock() but does not release the disk reference acquired
by blkcg_schedule_throttle() via get_device(). Since current->throttle_disk
is already set to NULL before the lookup, blkcg_exit() cannot release
this reference either, causing the disk to never be freed.

Restore the reference release that was present as blk_put_queue() in the
original code but was inadvertently dropped during the conversion from
request_queue to gendisk.

Fixes: f05837ed73d0 ("blk-cgroup: store a gendisk to throttle in struct task_struct")
Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
Acked-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20260331085054.46857-1-liu.yun@linux.dev
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup.c

index 2d7b18eb729155eec0dec42f0fd9f9958bd0d37e..554c87bb4a8651daae006cc039006a0539d6894b 100644 (file)
@@ -2037,6 +2037,7 @@ void blkcg_maybe_throttle_current(void)
        return;
 out:
        rcu_read_unlock();
+       put_disk(disk);
 }
 
 /**