Hi. On Wed, Sep 30, 2020 at 05:27:10PM -0700, Roman Gushchin wrote: > @@ -369,8 +371,12 @@ enum page_memcg_data_flags { > */ > static inline struct mem_cgroup *page_memcg(struct page *page) > { > + unsigned long memcg_data = page->memcg_data; > + > VM_BUG_ON_PAGE(PageSlab(page), page); > - return (struct mem_cgroup *)page->memcg_data; > + VM_BUG_ON_PAGE(memcg_data & MEMCG_DATA_OBJCGS, page); > + > + return (struct mem_cgroup *)(memcg_data & ~MEMCG_DATA_FLAGS_MASK); > } Shouldn't this change go also into page_memcg_rcu()? (I don't think the current single user (workingset_activation() would pass a non-slab kernel page but for consistency sake.) Alternatively, I'm thinking why (in its single use) is there page_memcg_rcu() a separate function to page_memcg() (cross memcg page migration?). Regards, Michal