aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 5b05e4fe9a1a..7d81afb27048 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -3685,6 +3685,9 @@ static int slab_unmergeable(struct kmem_cache *s)
3685 if (slub_nomerge || (s->flags & SLUB_NEVER_MERGE)) 3685 if (slub_nomerge || (s->flags & SLUB_NEVER_MERGE))
3686 return 1; 3686 return 1;
3687 3687
3688 if (!is_root_cache(s))
3689 return 1;
3690
3688 if (s->ctor) 3691 if (s->ctor)
3689 return 1; 3692 return 1;
3690 3693
@@ -3697,9 +3700,8 @@ static int slab_unmergeable(struct kmem_cache *s)
3697 return 0; 3700 return 0;
3698} 3701}
3699 3702
3700static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size, 3703static struct kmem_cache *find_mergeable(size_t size, size_t align,
3701 size_t align, unsigned long flags, const char *name, 3704 unsigned long flags, const char *name, void (*ctor)(void *))
3702 void (*ctor)(void *))
3703{ 3705{
3704 struct kmem_cache *s; 3706 struct kmem_cache *s;
3705 3707
@@ -3722,7 +3724,7 @@ static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size,
3722 continue; 3724 continue;
3723 3725
3724 if ((flags & SLUB_MERGE_SAME) != (s->flags & SLUB_MERGE_SAME)) 3726 if ((flags & SLUB_MERGE_SAME) != (s->flags & SLUB_MERGE_SAME))
3725 continue; 3727 continue;
3726 /* 3728 /*
3727 * Check if alignment is compatible. 3729 * Check if alignment is compatible.
3728 * Courtesy of Adrian Drzewiecki 3730 * Courtesy of Adrian Drzewiecki
@@ -3733,21 +3735,18 @@ static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size,
3733 if (s->size - size >= sizeof(void *)) 3735 if (s->size - size >= sizeof(void *))
3734 continue; 3736 continue;
3735 3737
3736 if (!cache_match_memcg(s, memcg))
3737 continue;
3738
3739 return s; 3738 return s;
3740 } 3739 }
3741 return NULL; 3740 return NULL;
3742} 3741}
3743 3742
3744struct kmem_cache * 3743struct kmem_cache *
3745__kmem_cache_alias(struct mem_cgroup *memcg, const char *name, size_t size, 3744__kmem_cache_alias(const char *name, size_t size, size_t align,
3746 size_t align, unsigned long flags, void (*ctor)(void *)) 3745 unsigned long flags, void (*ctor)(void *))
3747{ 3746{
3748 struct kmem_cache *s; 3747 struct kmem_cache *s;
3749 3748
3750 s = find_mergeable(memcg, size, align, flags, name, ctor); 3749 s = find_mergeable(size, align, flags, name, ctor);
3751 if (s) { 3750 if (s) {
3752 s->refcount++; 3751 s->refcount++;
3753 /* 3752 /*