• Tejun Heo's avatar
    blkcg: make blkcg_print_stat() print stats only for online blkgs · 52212812
    Tejun Heo authored
    [ Upstream commit b0814361 ]
    
    blkcg_print_stat() iterates blkgs under RCU and doesn't test whether
    the blkg is online.  This can call into pd_stat_fn() on a pd which is
    still being initialized leading to an oops.
    
    The heaviest operation - recursively summing up rwstat counters - is
    already done while holding the queue_lock.  Expand queue_lock to cover
    the other operations and skip the blkg if it isn't online yet.  The
    online state is protected by both blkcg and queue locks, so this
    guarantees that only online blkgs are processed.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarRoman Gushchin <guro@fb.com>
    Cc: Josef Bacik <jbacik@fb.com>
    Fixes: 903d23f0 ("blk-cgroup: allow controllers to output their own stats")
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    52212812
blk-cgroup.c 47.6 KB