Skip to content

Commit

Permalink
slab: use __GFP_COMP flag for allocating slab pages
Browse files Browse the repository at this point in the history
If we use 'struct page' of first page as 'struct slab', there is no
advantage not to use __GFP_COMP. So use __GFP_COMP flag for all the cases.

Acked-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Pekka Enberg <penberg@iki.fi>
  • Loading branch information
Joonsoo Kim authored and Pekka Enberg committed Oct 24, 2013
1 parent 56f295e commit a57a498
Showing 1 changed file with 9 additions and 34 deletions.
43 changes: 9 additions & 34 deletions mm/slab.c
Original file line number Diff line number Diff line change
Expand Up @@ -1718,15 +1718,6 @@ static struct page *kmem_getpages(struct kmem_cache *cachep, gfp_t flags,
{
struct page *page;
int nr_pages;
int i;

#ifndef CONFIG_MMU
/*
* Nommu uses slab's for process anonymous memory allocations, and thus
* requires __GFP_COMP to properly refcount higher order allocations
*/
flags |= __GFP_COMP;
#endif

flags |= cachep->allocflags;
if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
Expand All @@ -1750,12 +1741,9 @@ static struct page *kmem_getpages(struct kmem_cache *cachep, gfp_t flags,
else
add_zone_page_state(page_zone(page),
NR_SLAB_UNRECLAIMABLE, nr_pages);
for (i = 0; i < nr_pages; i++) {
__SetPageSlab(page + i);

if (page->pfmemalloc)
SetPageSlabPfmemalloc(page);
}
__SetPageSlab(page);
if (page->pfmemalloc)
SetPageSlabPfmemalloc(page);
memcg_bind_pages(cachep, cachep->gfporder);

if (kmemcheck_enabled && !(cachep->flags & SLAB_NOTRACK)) {
Expand All @@ -1775,8 +1763,7 @@ static struct page *kmem_getpages(struct kmem_cache *cachep, gfp_t flags,
*/
static void kmem_freepages(struct kmem_cache *cachep, struct page *page)
{
unsigned long i = (1 << cachep->gfporder);
const unsigned long nr_freed = i;
const unsigned long nr_freed = (1 << cachep->gfporder);

kmemcheck_free_shadow(page, cachep->gfporder);

Expand All @@ -1787,12 +1774,9 @@ static void kmem_freepages(struct kmem_cache *cachep, struct page *page)
sub_zone_page_state(page_zone(page),
NR_SLAB_UNRECLAIMABLE, nr_freed);

BUG_ON(!PageSlab(page));
__ClearPageSlabPfmemalloc(page);
while (i--) {
BUG_ON(!PageSlab(page));
__ClearPageSlab(page);
page++;
}
__ClearPageSlab(page);

memcg_release_pages(cachep, cachep->gfporder);
if (current->reclaim_state)
Expand Down Expand Up @@ -2362,7 +2346,7 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
cachep->colour = left_over / cachep->colour_off;
cachep->slab_size = slab_size;
cachep->flags = flags;
cachep->allocflags = 0;
cachep->allocflags = __GFP_COMP;
if (CONFIG_ZONE_DMA_FLAG && (flags & SLAB_CACHE_DMA))
cachep->allocflags |= GFP_DMA;
cachep->size = size;
Expand Down Expand Up @@ -2729,17 +2713,8 @@ static void slab_put_obj(struct kmem_cache *cachep, struct slab *slabp,
static void slab_map_pages(struct kmem_cache *cache, struct slab *slab,
struct page *page)
{
int nr_pages;

nr_pages = 1;
if (likely(!PageCompound(page)))
nr_pages <<= cache->gfporder;

do {
page->slab_cache = cache;
page->slab_page = slab;
page++;
} while (--nr_pages);
page->slab_cache = cache;
page->slab_page = slab;
}

/*
Expand Down

0 comments on commit a57a498

Please sign in to comment.