Re: [PATCH RESEND] mm: Restructure kmem_cache_create() to move debug cache integrity checks into a new function
From: JoonSoo Kim <hidden>
Date: 2012-08-06 16:49:06
Also in:
lkml
quoted hunk ↗ jump to hunk
diff --git a/mm/slab_common.c b/mm/slab_common.c index 12637ce..08bc2a4 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c@@ -23,6 +23,41 @@ enum slab_state slab_state; LIST_HEAD(slab_caches); DEFINE_MUTEX(slab_mutex); +static int kmem_cache_sanity_check(const char *name, size_t size) +{ +#ifdef CONFIG_DEBUG_VM + struct kmem_cache *s = NULL; + + list_for_each_entry(s, &slab_caches, list) { + char tmp; + int res; + + /* + * This happens when the module gets unloaded and doesn't + * destroy its slab cache and no-one else reuses the vmalloc + * area of the module. Print a warning. + */ + res = probe_kernel_address(s->name, tmp); + if (res) { + pr_err("Slab cache with size %d has lost its name\n", + s->object_size); + continue; + } + + if (!strcmp(s->name, name)) { + pr_err("%s (%s): Cache name already exists.\n", + __func__, name); + dump_stack(); + s = NULL; + return -EINVAL; + } + } + + WARN_ON(strchr(name, ' ')); /* It confuses parsers */ +#endif + return 0; +}
As I know, following is more preferable than above.
#ifdef CONFIG_DEBUG_VM
static int kmem_cache_sanity_check(const char *name, size_t size);
#else
static inline int kmem_cache_sanity_check(const char *name, size_t size)
{
return 0;
}
#endif
Is there any reason to do like that?
Thanks.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>