aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/slab.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/mm/slab.c b/mm/slab.c
index 75127a6f1fd9..a9ff4f7f9860 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3076,20 +3076,24 @@ ssize_t slabinfo_write(struct file *file, const char __user *buffer,
3076} 3076}
3077#endif 3077#endif
3078 3078
3079/**
3080 * ksize - get the actual amount of memory allocated for a given object
3081 * @objp: Pointer to the object
3082 *
3083 * kmalloc may internally round up allocations and return more memory
3084 * than requested. ksize() can be used to determine the actual amount of
3085 * memory allocated. The caller may use this additional memory, even though
3086 * a smaller amount of memory was initially specified with the kmalloc call.
3087 * The caller must guarantee that objp points to a valid object previously
3088 * allocated with either kmalloc() or kmem_cache_alloc(). The object
3089 * must not be freed during the duration of the call.
3090 */
3079unsigned int ksize(const void *objp) 3091unsigned int ksize(const void *objp)
3080{ 3092{
3081 kmem_cache_t *c; 3093 if (unlikely(objp == NULL))
3082 unsigned long flags; 3094 return 0;
3083 unsigned int size = 0;
3084
3085 if (likely(objp != NULL)) {
3086 local_irq_save(flags);
3087 c = GET_PAGE_CACHE(virt_to_page(objp));
3088 size = kmem_cache_size(c);
3089 local_irq_restore(flags);
3090 }
3091 3095
3092 return size; 3096 return obj_reallen(GET_PAGE_CACHE(virt_to_page(objp)));
3093} 3097}
3094 3098
3095 3099