Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/slab: factor out slab_args_unmergeable()

slab_mergeable() determines whether a slab cache can be merged, but it
should not be used when the cache is not fully created yet.

Extract the pre-cache-creation mergeability checks into
slab_args_unmergeable(), which evaluates kmem_cache_args, slab flags,
and slab_nomerge to determine if a cache will be mergeable before it is
created.

Signed-off-by: Harry Yoo <harry.yoo@oracle.com>
Link: https://patch.msgid.link/20260127103151.21883-2-harry.yoo@oracle.com
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>

authored by

Harry Yoo and committed by
Vlastimil Babka
d907bf43 aff85185

+19 -11
+19 -11
mm/slab_common.c
··· 171 171 return 0; 172 172 } 173 173 174 + static bool slab_args_unmergeable(struct kmem_cache_args *args, 175 + slab_flags_t flags) 176 + { 177 + if (slab_nomerge) 178 + return true; 179 + 180 + if (args->ctor) 181 + return true; 182 + 183 + if (IS_ENABLED(CONFIG_HARDENED_USERCOPY) && args->usersize) 184 + return true; 185 + 186 + if (flags & SLAB_NEVER_MERGE) 187 + return true; 188 + 189 + return false; 190 + } 191 + 174 192 static struct kmem_cache *find_mergeable(unsigned int size, slab_flags_t flags, 175 193 const char *name, struct kmem_cache_args *args) 176 194 { 177 195 struct kmem_cache *s; 178 196 unsigned int align; 179 197 180 - if (slab_nomerge) 181 - return NULL; 182 - 183 - if (args->ctor) 184 - return NULL; 185 - 186 - if (IS_ENABLED(CONFIG_HARDENED_USERCOPY) && args->usersize) 187 - return NULL; 188 - 189 198 flags = kmem_cache_flags(flags, name); 190 - 191 - if (flags & SLAB_NEVER_MERGE) 199 + if (slab_args_unmergeable(args, flags)) 192 200 return NULL; 193 201 194 202 size = ALIGN(size, sizeof(void *));