From 7743af327db8320e4d4279894fb2c8f3f4cead62 Mon Sep 17 00:00:00 2001 From: Manfred Spraul Date: Sat, 3 Sep 2005 15:55:07 -0700 Subject: [PATCH] --- yaml --- r: 6882 b: refs/heads/master c: 00e145b6d59a16dd7740197a18f7abdb3af004a9 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/slab.c | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index c54ac8de8fb2..a78cc3b32523 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 34342e863c3143640c031760140d640a06c6a5f8 +refs/heads/master: 00e145b6d59a16dd7740197a18f7abdb3af004a9 diff --git a/trunk/mm/slab.c b/trunk/mm/slab.c index 75127a6f1fd9..a9ff4f7f9860 100644 --- a/trunk/mm/slab.c +++ b/trunk/mm/slab.c @@ -3076,20 +3076,24 @@ ssize_t slabinfo_write(struct file *file, const char __user *buffer, } #endif +/** + * ksize - get the actual amount of memory allocated for a given object + * @objp: Pointer to the object + * + * kmalloc may internally round up allocations and return more memory + * than requested. ksize() can be used to determine the actual amount of + * memory allocated. The caller may use this additional memory, even though + * a smaller amount of memory was initially specified with the kmalloc call. + * The caller must guarantee that objp points to a valid object previously + * allocated with either kmalloc() or kmem_cache_alloc(). The object + * must not be freed during the duration of the call. + */ unsigned int ksize(const void *objp) { - kmem_cache_t *c; - unsigned long flags; - unsigned int size = 0; - - if (likely(objp != NULL)) { - local_irq_save(flags); - c = GET_PAGE_CACHE(virt_to_page(objp)); - size = kmem_cache_size(c); - local_irq_restore(flags); - } + if (unlikely(objp == NULL)) + return 0; - return size; + return obj_reallen(GET_PAGE_CACHE(virt_to_page(objp))); }