On Tue 04-12-12 12:17:21, Michal Hocko wrote: > On Tue 04-12-12 16:36:11, Jeff Liu wrote: [...] > > + * arrive here multiple times. But we only allocate pages for swap > > + * cgroup when the first child memcg was created. > > + */ > > +int swap_cgroup_init(void) > > +{ > > + int type; > > + > > + if (!do_swap_account) > > + return 0; > > + > > + if (atomic_add_return(1, &swap_cgroup_initialized) != 1) > > + return 0; > > + > > + mutex_lock(&swap_cgroup_mutex); > > + for (type = 0; type < MAX_SWAPFILES; type++) { > > + if (swap_cgroup_alloc_pages(type) < 0) { > > Why do you initialize MAX_SWAPFILES rather than nr_swapfiles? > > Besides that swap_cgroup_alloc_pages is not sufficient because it > doesn't allocate ctrl->map but it tries to put pages in it. Sorry, I have missed that you have kept ctrl->map initialization in swap_cgroup_swapon so this is not an issue. I think you can do better if swap_cgroup_swapon only initialized ctrl->length and deferred all the rest to swap_cgroup_alloc_pages (or its original name as it suits better) including the map allocation which is currently done in swap_cgroup_swapon. -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html