]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/slob.c
signalfd: fill in ssi_int for posix timers and message queues
[karo-tx-linux.git] / mm / slob.c
index d8fbd4d1bfa7e6fee9d538929349a0efd4740ca8..ed04252cba58b83693ef172718d6b148e7a026ab 100644 (file)
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -514,12 +514,13 @@ size_t ksize(const void *block)
                return 0;
 
        sp = (struct slob_page *)virt_to_page(block);
-       if (slob_page(sp))
-               return ((slob_t *)block - 1)->units + SLOB_UNIT;
-       else
+       if (slob_page(sp)) {
+               int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
+               unsigned int *m = (unsigned int *)(block - align);
+               return SLOB_UNITS(*m) * SLOB_UNIT;
+       } else
                return sp->page.private;
 }
-EXPORT_SYMBOL(ksize);
 
 struct kmem_cache {
        unsigned int size, align;
@@ -560,6 +561,8 @@ EXPORT_SYMBOL(kmem_cache_create);
 
 void kmem_cache_destroy(struct kmem_cache *c)
 {
+       if (c->flags & SLAB_DESTROY_BY_RCU)
+               rcu_barrier();
        slob_free(c, sizeof(struct kmem_cache));
 }
 EXPORT_SYMBOL(kmem_cache_destroy);