On Wed, Nov 13, 2019 at 05:08:29PM +0000, Roman Gushchin guro@fb.com wrote:
The thing here is that css_tryget_online() cannot pin the online state, so even if returned true, the cgroup can be offline at the return from the function.
Adding this for the record.
The actual offlining happens only from css_killed_ref_fn, which is percpu_ref_kill_and_confirm confirmation callback. That is only called after RCU grace period. So, css_tryget_online will pin the online state _inside_ rcu_read_{,un}lock section.
The fact is that many call sites pass the css reference over rcu_read_unlock boundary allowing potential offlining.
So if we rely somewhere on it, it's already broken.
Charges into offlined memcg should fine (wrt the original patch). I didn't check other callers though...
Generally speaking, it's better to reduce it's usage to the bare minimum.
...I agree as it's confusing and potentially redundant.
Michal