On 04/18/2018 08:49 PM, Matthew Wilcox wrote: > From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> More rationale? Such as "This will allow us to ... later in the series"? > slub now needs to set page->mapping to NULL as it frees the page, just > like slab does. I wonder if they should be touching the mapping field, and rather not the slab_cache field, with a comment why it has to be NULLed? > Signed-off-by: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > --- > include/linux/mm_types.h | 4 ++-- > mm/slub.c | 1 + > 2 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > index 41828fb34860..e97a310a6abe 100644 > --- a/include/linux/mm_types.h > +++ b/include/linux/mm_types.h > @@ -83,7 +83,7 @@ struct page { > /* See page-flags.h for the definition of PAGE_MAPPING_FLAGS */ > struct address_space *mapping; > > - void *s_mem; /* slab first object */ > + struct kmem_cache *slab_cache; /* SL[AU]B: Pointer to slab */ > atomic_t compound_mapcount; /* first tail page */ > /* page_deferred_list().next -- second tail page */ > }; > @@ -194,7 +194,7 @@ struct page { > spinlock_t ptl; > #endif > #endif > - struct kmem_cache *slab_cache; /* SL[AU]B: Pointer to slab */ > + void *s_mem; /* slab first object */ > }; > > #ifdef CONFIG_MEMCG > diff --git a/mm/slub.c b/mm/slub.c > index 099925cf456a..27b6ba1c116a 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -1690,6 +1690,7 @@ static void __free_slab(struct kmem_cache *s, struct page *page) > __ClearPageSlab(page); > > page_mapcount_reset(page); > + page->mapping = NULL; > if (current->reclaim_state) > current->reclaim_state->reclaimed_slab += pages; > memcg_uncharge_slab(page, order, s); >