Skip to content
  • Carsten Otte's avatar
    slab: fix object alignment · 1ab335d8
    Carsten Otte authored
    
    
    This patch fixes alignment of slab objects in case CONFIG_DEBUG_PAGEALLOC is
    active.
    Before this spot in kmem_cache_create, we have this situation:
    - align contains the required alignment of the object
    - cachep->obj_offset is 0 or equals align in case of CONFIG_DEBUG_SLAB
    - size equals the size of the object, or object plus trailing redzone in case
      of CONFIG_DEBUG_SLAB
    
    This spot tries to fill one page per object if the object is in certain size
    limits, however setting obj_offset to PAGE_SIZE - size does break the object
    alignment since size may not be aligned with the required alignment.
    This patch simply adds an ALIGN(size, align) to the equation and fixes the
    object size detection accordingly.
    
    This code in drivers/s390/cio/qdio_setup_init has lead to incorrectly aligned
    slab objects (sizeof(struct qdio_q) equals 1792):
    	qdio_q_cache = kmem_cache_create("qdio_q", sizeof(struct qdio_q),
    					 256, 0, NULL);
    
    Acked-by: default avatarChristoph Lameter <cl@linux.com>
    Signed-off-by: default avatarCarsten Otte <cotte@de.ibm.com>
    Signed-off-by: default avatarPekka Enberg <penberg@kernel.org>
    1ab335d8