Currently there is a small gap between fetching pointer, calling kvfree and assign its value to nil. In current callgraph it is not a problem (since memcg_free_shrinker_maps is running from memcg_alloc_shrinker_maps and mem_cgroup_css_free only) still this looks suspicious and we can easily eliminate the gap at all.
Cc: Johannes Weiner <han...@cmpxchg.org> Cc: Michal Hocko <mho...@kernel.org> Cc: Vladimir Davydov <vdavydov....@gmail.com> Cc: Kirill Tkhai <ktk...@virtuozzo.com> Signed-off-by: Cyrill Gorcunov <gorcu...@gmail.com> --- mm/memcontrol.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: linux-tip.git/mm/memcontrol.c =================================================================== --- linux-tip.git.orig/mm/memcontrol.c +++ linux-tip.git/mm/memcontrol.c @@ -364,9 +364,9 @@ static void memcg_free_shrinker_maps(str for_each_node(nid) { pn = mem_cgroup_nodeinfo(memcg, nid); map = rcu_dereference_protected(pn->shrinker_map, true); + rcu_assign_pointer(pn->shrinker_map, NULL); if (map) kvfree(map); - rcu_assign_pointer(pn->shrinker_map, NULL); } }