Before enabling sheaves for all caches (with automatically determined capacity), their enablement should no longer prevent merging of caches. Limit this merge prevention only to caches that were created with a specific sheaf capacity, by adding the SLAB_NO_MERGE flag to them. Signed-off-by: Vlastimil Babka --- mm/slab_common.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mm/slab_common.c b/mm/slab_common.c index 52591d9c04f3..54c17dc6d5ec 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -163,9 +163,6 @@ int slab_unmergeable(struct kmem_cache *s) return 1; #endif - if (s->cpu_sheaves) - return 1; - /* * We may have set a slab to be unmergeable during bootstrap. */ @@ -190,9 +187,6 @@ static struct kmem_cache *find_mergeable(unsigned int size, slab_flags_t flags, if (IS_ENABLED(CONFIG_HARDENED_USERCOPY) && args->usersize) return NULL; - if (args->sheaf_capacity) - return NULL; - flags = kmem_cache_flags(flags, name); if (flags & SLAB_NEVER_MERGE) @@ -337,6 +331,13 @@ struct kmem_cache *__kmem_cache_create_args(const char *name, flags &= ~SLAB_DEBUG_FLAGS; #endif + /* + * Caches with specific capacity are special enough. It's simpler to + * make them unmergeable. + */ + if (args->sheaf_capacity) + flags |= SLAB_NO_MERGE; + mutex_lock(&slab_mutex); err = kmem_cache_sanity_check(name, object_size); -- 2.52.0