• Tejun Heo's avatar
    blkcg: make blkcg_print_stat() print stats only for online blkgs · b0814361
    Tejun Heo authored
    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>
    b0814361
blk-cgroup.c 47.9 KB