quoted
The iterator internally takes rcu_read_lock() to avoid any side-effects
of cgroups added/removed. I suspect you are also suggesting using get_online_mems()
around each call to for_each_online_node
My understanding so far is
1. invalidate_reclaim_iterators should be safe (no bad side-effects)
2. mem_cgroup_free - should be safe as well
3. mem_cgroup_alloc - needs protection
4. mem_cgroup_init - needs protection
5. mem_cgroup_remove_from_tress - should be safe
I'm not into the memory hotplug code, but my understanding is that if
memcg offline happens to race with node unplug, it's possible that
- mem_cgroup_free() doesn't free the node's data, because it sees the
node as already offline
- memcg hotplug code doesn't free the node's data either, because it
sees the cgroup as offline
May be, we should surround all the loops over online nodes with
get/put_online_mems() to be sure that nothing wrong can happen.
They are slow path, anyway.
Makes sense, agreed
Balbir