On Wed, Jul 16, 2014 at 10:14:47AM -0400, Johannes Weiner wrote: ... > > > free_hot_cold_page(page, false); > > > } > > > > > > @@ -75,7 +75,10 @@ static void __put_compound_page(struct page *page) > > > { > > > compound_page_dtor *dtor; > > > > > > - __page_cache_release(page); > > > + if (!PageHuge(page)) { > > > + __page_cache_release(page); > > > + mem_cgroup_uncharge_page(page); > > I reverted all these mm/swap.c changes again as well. Instead, > mem_cgroup_uncharge() now does a preliminary check if the page is > charged before it touches page->lru. > > That should be much more robust: now the vetting whether a page is > valid for memcg happens at charge time only, all other operations > check first if a page is charged before doing anything else to it. > > These two places should be the only ones that need fixing then: This change also passed my testing, so the problem should be fixed. Thanks, Naoya Horiguchi -- 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