mm: Remove slab from struct page
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 4 Oct 2021 13:46:50 +0000 (14:46 +0100)
committerVlastimil Babka <vbabka@suse.cz>
Thu, 6 Jan 2022 17:06:58 +0000 (18:06 +0100)
All members of struct slab can now be removed from struct page.
This shrinks the definition of struct page by 30 LOC, making
it easier to understand.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
include/linux/mm_types.h
include/linux/page-flags.h
mm/slab.h

index 1ae3537c792072deecba06b445367fb3773d696f..646f3ed4f6df038a219fcfa29107790010439918 100644 (file)
@@ -118,31 +118,6 @@ struct page {
                                atomic_long_t pp_frag_count;
                        };
                };
-               struct {        /* slab, slob and slub */
-                       union {
-                               struct list_head slab_list;
-                               struct {        /* Partial pages */
-                                       struct page *next;
-#ifdef CONFIG_64BIT
-                                       int pages;      /* Nr of pages left */
-#else
-                                       short int pages;
-#endif
-                               };
-                       };
-                       struct kmem_cache *slab_cache; /* not slob */
-                       /* Double-word boundary */
-                       void *freelist;         /* first free object */
-                       union {
-                               void *s_mem;    /* slab: first object */
-                               unsigned long counters;         /* SLUB */
-                               struct {                        /* SLUB */
-                                       unsigned inuse:16;
-                                       unsigned objects:15;
-                                       unsigned frozen:1;
-                               };
-                       };
-               };
                struct {        /* Tail pages of compound page */
                        unsigned long compound_head;    /* Bit zero is set */
 
@@ -206,9 +181,6 @@ struct page {
                 * which are currently stored here.
                 */
                unsigned int page_type;
-
-               unsigned int active;            /* SLAB */
-               int units;                      /* SLOB */
        };
 
        /* Usage count. *DO NOT USE DIRECTLY*. See page_ref.h */
index b5f14d5811135fc24c50ccf37234885fd0bed6f6..1b08e33265fa8b8e63772e9b50a92a1043481fbe 100644 (file)
@@ -909,43 +909,6 @@ extern bool is_free_buddy_page(struct page *page);
 
 __PAGEFLAG(Isolated, isolated, PF_ANY);
 
-/*
- * If network-based swap is enabled, sl*b must keep track of whether pages
- * were allocated from pfmemalloc reserves.
- */
-static inline int PageSlabPfmemalloc(struct page *page)
-{
-       VM_BUG_ON_PAGE(!PageSlab(page), page);
-       return PageActive(page);
-}
-
-/*
- * A version of PageSlabPfmemalloc() for opportunistic checks where the page
- * might have been freed under us and not be a PageSlab anymore.
- */
-static inline int __PageSlabPfmemalloc(struct page *page)
-{
-       return PageActive(page);
-}
-
-static inline void SetPageSlabPfmemalloc(struct page *page)
-{
-       VM_BUG_ON_PAGE(!PageSlab(page), page);
-       SetPageActive(page);
-}
-
-static inline void __ClearPageSlabPfmemalloc(struct page *page)
-{
-       VM_BUG_ON_PAGE(!PageSlab(page), page);
-       __ClearPageActive(page);
-}
-
-static inline void ClearPageSlabPfmemalloc(struct page *page)
-{
-       VM_BUG_ON_PAGE(!PageSlab(page), page);
-       ClearPageActive(page);
-}
-
 #ifdef CONFIG_MMU
 #define __PG_MLOCKED           (1UL << PG_mlocked)
 #else
index 95b9a74a2d515fd83091253b786886be9cc08476..207658b200ef10663338229d28d7472dfe5a42a9 100644 (file)
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -67,14 +67,8 @@ struct slab {
        static_assert(offsetof(struct page, pg) == offsetof(struct slab, sl))
 SLAB_MATCH(flags, __page_flags);
 SLAB_MATCH(compound_head, slab_list);  /* Ensure bit 0 is clear */
-SLAB_MATCH(slab_list, slab_list);
 #ifndef CONFIG_SLOB
 SLAB_MATCH(rcu_head, rcu_head);
-SLAB_MATCH(slab_cache, slab_cache);
-#endif
-#ifdef CONFIG_SLAB
-SLAB_MATCH(s_mem, s_mem);
-SLAB_MATCH(active, active);
 #endif
 SLAB_MATCH(_refcount, __page_refcount);
 #ifdef CONFIG_MEMCG