|
@@ -281,6 +281,30 @@ static inline int slab_index(void *p, struct kmem_cache *s, void *addr)
|
|
|
return (p - addr) / s->size;
|
|
|
}
|
|
|
|
|
|
+static inline size_t slab_ksize(const struct kmem_cache *s)
|
|
|
+{
|
|
|
+#ifdef CONFIG_SLUB_DEBUG
|
|
|
+ /*
|
|
|
+ * Debugging requires use of the padding between object
|
|
|
+ * and whatever may come after it.
|
|
|
+ */
|
|
|
+ if (s->flags & (SLAB_RED_ZONE | SLAB_POISON))
|
|
|
+ return s->objsize;
|
|
|
+
|
|
|
+#endif
|
|
|
+ /*
|
|
|
+ * If we have the need to store the freelist pointer
|
|
|
+ * back there or track user information then we can
|
|
|
+ * only use the space before that information.
|
|
|
+ */
|
|
|
+ if (s->flags & (SLAB_DESTROY_BY_RCU | SLAB_STORE_USER))
|
|
|
+ return s->inuse;
|
|
|
+ /*
|
|
|
+ * Else we can use all the padding etc for the allocation
|
|
|
+ */
|
|
|
+ return s->size;
|
|
|
+}
|
|
|
+
|
|
|
static inline struct kmem_cache_order_objects oo_make(int order,
|
|
|
unsigned long size)
|
|
|
{
|
|
@@ -797,30 +821,6 @@ static inline int slab_pre_alloc_hook(struct kmem_cache *s, gfp_t flags)
|
|
|
return should_failslab(s->objsize, flags, s->flags);
|
|
|
}
|
|
|
|
|
|
-static inline size_t slab_ksize(const struct kmem_cache *s)
|
|
|
-{
|
|
|
-#ifdef CONFIG_SLUB_DEBUG
|
|
|
- /*
|
|
|
- * Debugging requires use of the padding between object
|
|
|
- * and whatever may come after it.
|
|
|
- */
|
|
|
- if (s->flags & (SLAB_RED_ZONE | SLAB_POISON))
|
|
|
- return s->objsize;
|
|
|
-
|
|
|
-#endif
|
|
|
- /*
|
|
|
- * If we have the need to store the freelist pointer
|
|
|
- * back there or track user information then we can
|
|
|
- * only use the space before that information.
|
|
|
- */
|
|
|
- if (s->flags & (SLAB_DESTROY_BY_RCU | SLAB_STORE_USER))
|
|
|
- return s->inuse;
|
|
|
- /*
|
|
|
- * Else we can use all the padding etc for the allocation
|
|
|
- */
|
|
|
- return s->size;
|
|
|
-}
|
|
|
-
|
|
|
static inline void slab_post_alloc_hook(struct kmem_cache *s, gfp_t flags, void *object)
|
|
|
{
|
|
|
flags &= gfp_allowed_mask;
|