diff options
-rw-r--r-- | mm/slab.c | 26 |
1 files changed, 15 insertions, 11 deletions
@@ -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 | */ | ||
3079 | unsigned int ksize(const void *objp) | 3091 | unsigned 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 | ||