Skip to content
  • Tejun Heo's avatar
    blkcg: restructure blkg_policy_data allocation in blkcg_activate_policy() · 4c55f4f9
    Tejun Heo authored
    
    
    When a policy gets activated, it needs to allocate and install its
    policy data on all existing blkg's (blkcg_gq's).  Because blkg
    iteration is protected by a spinlock, it currently counts the total
    number of blkg's in the system, allocates the matching number of
    policy data on a list and installs them during a single iteration.
    
    This can be simplified by using speculative GFP_NOWAIT allocations
    while iterating and falling back to a preallocated policy data on
    failure.  If the preallocated one has already been consumed, it
    releases the lock, preallocate with GFP_KERNEL and then restarts the
    iteration.  This can be a bit more expensive than before but policy
    activation is a very cold path and shouldn't matter.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    4c55f4f9