diff options
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 19 |
1 files changed, 9 insertions, 10 deletions
@@ -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 | ||
3700 | static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size, | 3703 | static 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 | ||
3744 | struct kmem_cache * | 3743 | struct 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 | /* |