fix kmem_cache_size() for new slab poisoning
PATCH 1/1 fix kmem_cache_size() for new slab poisoning
The new slab poisoning code broke kmem_cache_size(), it now returns a too large size as the poisoning area after the object is includes. XFS's kmem_zone_zalloc thus overwrites exactly that area and triggers the new checks everytime such an object is freed again.
I don't recommend using XFS on BK-current without this patch applied :)
mm/slab.c +7 -2
@@ -2041,11 +2041,16 @@unsigned int kmem_cache_size (kmem_cache_t *cachep) { +unsigned int objlen = cachep->objsize; +#if DEBUG if (cachep->flags &SLAB_RED_ZONE ) -return (cachep->objsize -2 *BYTES_PER_WORD ); + objlen -=2 *BYTES_PER_WORD ; +if (cachep->flags &SLAB_STORE_USER ) + objlen -=BYTES_PER_WORD ;#endif -return cachep->objsize; + +return objlen; }kmem_cache_t *kmem_find_general_cachep (size_t size,int gfpflags)