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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>