Some flags are used internally by the allocators for management purposes. One example of that is the CFLGS_OFF_SLAB flag that slab uses to mark that the metadata for that cache is stored outside of the slab.
No cache should ever pass those as a creation flags. We can just ignore this bit if it happens to be passed (such as when duplicating a cache in the kmem memcg patches) Signed-off-by: Glauber Costa <glom...@parallels.com> CC: Christoph Lameter <c...@linux.com> CC: Pekka Enberg <penb...@cs.helsinki.fi> CC: David Rientjes <rient...@google.com> --- include/linux/slab.h | 4 ++++ mm/slab_common.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/include/linux/slab.h b/include/linux/slab.h index 0dd2dfa..437c07e 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -79,6 +79,10 @@ /* The following flags affect the page allocator grouping pages by mobility */ #define SLAB_RECLAIM_ACCOUNT 0x00020000UL /* Objects are reclaimable */ #define SLAB_TEMPORARY SLAB_RECLAIM_ACCOUNT /* Objects are short-lived */ + +/* The last flags are reserved for specific internal flags of the allocators */ +#define SLAB_INTERNAL 0xF0000000UL + /* * ZERO_SIZE_PTR will be returned for zero sized kmalloc requests. * diff --git a/mm/slab_common.c b/mm/slab_common.c index 9c21725..359ef36 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -107,6 +107,11 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size, size_t align if (!kmem_cache_sanity_check(name, size) == 0) goto out_locked; + /* + * Clean any possible internal flags the caller may have passed. + * We'll make those decisions ourselves. + */ + flags &= ~SLAB_INTERNAL; s = __kmem_cache_alias(name, size, align, flags, ctor); if (s) -- 1.7.11.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/