Skip to content
  • Glauber Costa's avatar
    memcg: decrement static keys at real destroy time · 3f134619
    Glauber Costa authored
    We call the destroy function when a cgroup starts to be removed, such as
    by a rmdir event.
    
    However, because of our reference counters, some objects are still
    inflight.  Right now, we are decrementing the static_keys at destroy()
    time, meaning that if we get rid of the last static_key reference, some
    objects will still have charges, but the code to properly uncharge them
    won't be run.
    
    This becomes a problem specially if it is ever enabled again, because now
    new charges will be added to the staled charges making keeping it pretty
    much impossible.
    
    We just need to be careful with the static branch activation: since there
    is no particular preferred order of their activation, we need to make sure
    that we only start using it after all call sites are active.  This is
    achieved by having a per-memcg flag that is only updated after
    static_key_slow_inc() returns.  At this time, we are sure all sites are
    active.
    
    This is made per-memcg, not global, for a reason: it ...
    3f134619