radix tree test suite: Introduce kmalloc_verbose
To help track down where memory leaks may be, add the ability to turn on/off printing allocations, frees and delayed frees. Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
This commit is contained in:
parent
d3e709e63e
commit
5eeb2d23df
|
@ -13,6 +13,7 @@
|
|||
|
||||
int nr_allocated;
|
||||
int preempt_count;
|
||||
int kmalloc_verbose;
|
||||
|
||||
struct kmem_cache {
|
||||
pthread_mutex_t lock;
|
||||
|
@ -44,6 +45,8 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, int flags)
|
|||
}
|
||||
|
||||
uatomic_inc(&nr_allocated);
|
||||
if (kmalloc_verbose)
|
||||
printf("Allocating %p from slab\n", node);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
@ -51,6 +54,8 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
|
|||
{
|
||||
assert(objp);
|
||||
uatomic_dec(&nr_allocated);
|
||||
if (kmalloc_verbose)
|
||||
printf("Freeing %p to slab\n", objp);
|
||||
pthread_mutex_lock(&cachep->lock);
|
||||
if (cachep->nr_objs > 10) {
|
||||
memset(objp, POISON_FREE, cachep->size);
|
||||
|
@ -68,6 +73,8 @@ void *kmalloc(size_t size, gfp_t gfp)
|
|||
{
|
||||
void *ret = malloc(size);
|
||||
uatomic_inc(&nr_allocated);
|
||||
if (kmalloc_verbose)
|
||||
printf("Allocating %p from malloc\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -76,6 +83,8 @@ void kfree(void *p)
|
|||
if (!p)
|
||||
return;
|
||||
uatomic_dec(&nr_allocated);
|
||||
if (kmalloc_verbose)
|
||||
printf("Freeing %p to malloc\n", p);
|
||||
free(p);
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1,18 @@
|
|||
#ifndef _TEST_RADIX_TREE_H
|
||||
#define _TEST_RADIX_TREE_H
|
||||
#include "../../../../include/linux/radix-tree.h"
|
||||
|
||||
extern int kmalloc_verbose;
|
||||
|
||||
static inline void trace_call_rcu(struct rcu_head *head,
|
||||
void (*func)(struct rcu_head *head))
|
||||
{
|
||||
if (kmalloc_verbose)
|
||||
printf("Delaying free of %p to slab\n", (char *)head -
|
||||
offsetof(struct radix_tree_node, rcu_head));
|
||||
call_rcu(head, func);
|
||||
}
|
||||
#undef call_rcu
|
||||
#define call_rcu(x, y) trace_call_rcu(x, y)
|
||||
|
||||
#endif /* _TEST_RADIX_TREE_H */
|
||||
|
|
Loading…
Reference in New Issue