• Tejun Heo's avatar
    blkcg: always create the blkcg_gq for the root blkcg · f9fac98f
    Tejun Heo authored
    [ Upstream commit ec13b1d6 ]
    
    Currently, blkcg does a minor optimization where the root blkcg is
    created when the first blkcg policy is activated on a queue and
    destroyed on the deactivation of the last.  On systems where blkcg is
    configured but not used, this saves one blkcg_gq struct per queue.  On
    systems where blkcg is actually used, there's no difference.  The only
    case where this can lead to any meaninful, albeit still minute, save
    in memory consumption is when all blkcg policies are deactivated after
    being widely used in the system, which is a hihgly unlikely scenario.
    
    The conditional existence of root blkcg_gq has already created several
    bugs in blkcg and became an issue once again for the new per-cgroup
    wb_congested mechanism for cgroup writeback support leading to a NULL
    dereference when no blkcg policy is active.  This is really not worth
    bothering with.  This patch makes blkcg always allocate and link the
    root blkcg_gq and release it only on queue destruction.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
    f9fac98f
blk-cgroup.c 29.3 KB