|
@@ -2125,6 +2125,17 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
|
|
|
else
|
|
|
size += BYTES_PER_WORD;
|
|
|
}
|
|
|
+#endif
|
|
|
+
|
|
|
+ size = ALIGN(size, cachep->align);
|
|
|
+ /*
|
|
|
+ * We should restrict the number of objects in a slab to implement
|
|
|
+ * byte sized index. Refer comment on SLAB_OBJ_MIN_SIZE definition.
|
|
|
+ */
|
|
|
+ if (FREELIST_BYTE_INDEX && size < SLAB_OBJ_MIN_SIZE)
|
|
|
+ size = ALIGN(SLAB_OBJ_MIN_SIZE, cachep->align);
|
|
|
+
|
|
|
+#if DEBUG
|
|
|
/*
|
|
|
* To activate debug pagealloc, off-slab management is necessary
|
|
|
* requirement. In early phase of initialization, small sized slab
|
|
@@ -2135,8 +2146,8 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
|
|
|
if (debug_pagealloc_enabled() && (flags & SLAB_POISON) &&
|
|
|
!slab_early_init && size >= kmalloc_size(INDEX_NODE) &&
|
|
|
size >= 256 && cachep->object_size > cache_line_size() &&
|
|
|
- ALIGN(size, cachep->align) < PAGE_SIZE) {
|
|
|
- cachep->obj_offset += PAGE_SIZE - ALIGN(size, cachep->align);
|
|
|
+ size < PAGE_SIZE) {
|
|
|
+ cachep->obj_offset += PAGE_SIZE - size;
|
|
|
size = PAGE_SIZE;
|
|
|
}
|
|
|
#endif
|
|
@@ -2148,20 +2159,13 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
|
|
|
* SLAB_NOLEAKTRACE to avoid recursive calls into kmemleak)
|
|
|
*/
|
|
|
if (size >= OFF_SLAB_MIN_SIZE && !slab_early_init &&
|
|
|
- !(flags & SLAB_NOLEAKTRACE))
|
|
|
+ !(flags & SLAB_NOLEAKTRACE)) {
|
|
|
/*
|
|
|
* Size is large, assume best to place the slab management obj
|
|
|
* off-slab (should allow better packing of objs).
|
|
|
*/
|
|
|
flags |= CFLGS_OFF_SLAB;
|
|
|
-
|
|
|
- size = ALIGN(size, cachep->align);
|
|
|
- /*
|
|
|
- * We should restrict the number of objects in a slab to implement
|
|
|
- * byte sized index. Refer comment on SLAB_OBJ_MIN_SIZE definition.
|
|
|
- */
|
|
|
- if (FREELIST_BYTE_INDEX && size < SLAB_OBJ_MIN_SIZE)
|
|
|
- size = ALIGN(SLAB_OBJ_MIN_SIZE, cachep->align);
|
|
|
+ }
|
|
|
|
|
|
left_over = calculate_slab_order(cachep, size, flags);
|
|
|
|