|
@@ -3685,6 +3685,9 @@ static int slab_unmergeable(struct kmem_cache *s)
|
|
|
if (slub_nomerge || (s->flags & SLUB_NEVER_MERGE))
|
|
|
return 1;
|
|
|
|
|
|
+ if (!is_root_cache(s))
|
|
|
+ return 1;
|
|
|
+
|
|
|
if (s->ctor)
|
|
|
return 1;
|
|
|
|
|
@@ -3697,9 +3700,8 @@ static int slab_unmergeable(struct kmem_cache *s)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size,
|
|
|
- size_t align, unsigned long flags, const char *name,
|
|
|
- void (*ctor)(void *))
|
|
|
+static struct kmem_cache *find_mergeable(size_t size, size_t align,
|
|
|
+ unsigned long flags, const char *name, void (*ctor)(void *))
|
|
|
{
|
|
|
struct kmem_cache *s;
|
|
|
|
|
@@ -3722,7 +3724,7 @@ static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size,
|
|
|
continue;
|
|
|
|
|
|
if ((flags & SLUB_MERGE_SAME) != (s->flags & SLUB_MERGE_SAME))
|
|
|
- continue;
|
|
|
+ continue;
|
|
|
/*
|
|
|
* Check if alignment is compatible.
|
|
|
* Courtesy of Adrian Drzewiecki
|
|
@@ -3733,21 +3735,18 @@ static struct kmem_cache *find_mergeable(struct mem_cgroup *memcg, size_t size,
|
|
|
if (s->size - size >= sizeof(void *))
|
|
|
continue;
|
|
|
|
|
|
- if (!cache_match_memcg(s, memcg))
|
|
|
- continue;
|
|
|
-
|
|
|
return s;
|
|
|
}
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
struct kmem_cache *
|
|
|
-__kmem_cache_alias(struct mem_cgroup *memcg, const char *name, size_t size,
|
|
|
- size_t align, unsigned long flags, void (*ctor)(void *))
|
|
|
+__kmem_cache_alias(const char *name, size_t size, size_t align,
|
|
|
+ unsigned long flags, void (*ctor)(void *))
|
|
|
{
|
|
|
struct kmem_cache *s;
|
|
|
|
|
|
- s = find_mergeable(memcg, size, align, flags, name, ctor);
|
|
|
+ s = find_mergeable(size, align, flags, name, ctor);
|
|
|
if (s) {
|
|
|
s->refcount++;
|
|
|
/*
|