blkcg: let blkcg core manage per-queue blkg list and counter
With the previous patch to move blkg list heads and counters to request_queue and blkg, logic to manage them in both policies are almost identical and can be moved to blkcg core. This patch moves blkg link logic into blkg_lookup_create(), implements common blkg unlink code in blkg_destroy(), and updates blkg_destory_all() so that it's policy specific and can skip root group. The updated blkg_destroy_all() is now used to both clear queue for bypassing and elv switching, and release all blkgs on q exit. This patch introduces a race window where policy [de]registration may race against queue blkg clearing. This can only be a problem on cfq unload and shouldn't be a real problem in practice (and we have many other places where this race already exists). Future patches will remove these unlikely races. Signed-off-by:Tejun Heo <tj@kernel.org> Cc: Vivek Goyal <vgoyal@redhat.com> Signed-off-by:
Jens Axboe <axboe@kernel.dk>
Showing
- block/blk-cgroup.c 56 additions, 16 deletionsblock/blk-cgroup.c
- block/blk-cgroup.h 5 additions, 10 deletionsblock/blk-cgroup.h
- block/blk-throttle.c 2 additions, 97 deletionsblock/blk-throttle.c
- block/cfq-iosched.c 6 additions, 94 deletionsblock/cfq-iosched.c
- block/elevator.c 3 additions, 2 deletionsblock/elevator.c
- include/linux/blkdev.h 2 additions, 2 deletionsinclude/linux/blkdev.h
Please register or sign in to comment