|
@@ -3076,20 +3076,24 @@ ssize_t slabinfo_write(struct file *file, const char __user *buffer,
|
|
}
|
|
}
|
|
#endif
|
|
#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)
|
|
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)));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|