Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e65d24c authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds
Browse files

SLUB: Do not use page->mapping



After moving the lockless_freelist to kmem_cache_cpu we no longer need
page->lockless_freelist. Restructure the use of the struct page fields in
such a way that we never touch the mapping field.

This is turn allows us to remove the special casing of SLUB when determining
the mapping of a page (needed for corner cases of virtual caches machines that
need to flush caches of processors mapping a page).

Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent dfb4f096
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -568,10 +568,6 @@ static inline struct address_space *page_mapping(struct page *page)
	VM_BUG_ON(PageSlab(page));
	if (unlikely(PageSwapCache(page)))
		mapping = &swapper_space;
#ifdef CONFIG_SLUB
	else if (unlikely(PageSlab(page)))
		mapping = NULL;
#endif
	else if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON))
		mapping = NULL;
	return mapping;
+2 −7
Original line number Diff line number Diff line
@@ -62,13 +62,8 @@ struct page {
#if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS
	    spinlock_t ptl;
#endif
	    struct {			/* SLUB uses */
	    	void **lockless_freelist;
		struct kmem_cache *slab;	/* Pointer to slab */
	    };
	    struct {
		struct page *first_page;	/* Compound pages */
	    };
	    struct kmem_cache *slab;	/* SLUB: Pointer to slab */
	    struct page *first_page;	/* Compound tail pages */
	};
	union {
		pgoff_t index;		/* Our offset within mapping. */
+0 −2
Original line number Diff line number Diff line
@@ -1127,7 +1127,6 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node)
	set_freepointer(s, last, NULL);

	page->freelist = start;
	page->lockless_freelist = NULL;
	page->inuse = 0;
out:
	if (flags & __GFP_WAIT)
@@ -1153,7 +1152,6 @@ static void __free_slab(struct kmem_cache *s, struct page *page)
		NR_SLAB_RECLAIMABLE : NR_SLAB_UNRECLAIMABLE,
		- pages);

	page->mapping = NULL;
	__free_pages(page, s->order);
}