#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__)
#define MEM_LOC_LEN 128
-struct mtrack {
+struct mem_track {
struct hlist_node m_hash;
char m_loc[MEM_LOC_LEN];
void *m_ptr;
int m_size;
};
-void lvfs_memdbg_insert(struct mtrack *mt);
-void lvfs_memdbg_remove(struct mtrack *mt);
-struct mtrack *lvfs_memdbg_find(void *ptr);
+void lvfs_memdbg_insert(struct mem_track *mt);
+void lvfs_memdbg_remove(struct mem_track *mt);
+struct mem_track *lvfs_memdbg_find(void *ptr);
-int lvfs_memdbg_check_insert(struct mtrack *mt);
-struct mtrack *lvfs_memdbg_check_remove(void *ptr);
+int lvfs_memdbg_check_insert(struct mem_track *mt);
+struct mem_track *lvfs_memdbg_check_remove(void *ptr);
-static inline struct mtrack *
-__new_mtrack(void *ptr, int size,
- char *file, int line)
+static inline struct mem_track *
+__new_mem_track(void *ptr, int size,
+ char *file, int line)
{
- struct mtrack *mt;
+ struct mem_track *mt;
mt = kmalloc(sizeof(*mt), GFP_KERNEL);
if (!mt)
}
static inline void
-__free_mtrack(struct mtrack *mt)
+__free_mem_track(struct mem_track *mt)
{
kfree(mt);
}
static inline int
-__get_mtrack(void *ptr, int size,
- char *file, int line)
+__get_mem_track(void *ptr, int size,
+ char *file, int line)
{
- struct mtrack *mt;
+ struct mem_track *mt;
- mt = __new_mtrack(ptr, size, file, line);
+ mt = __new_mem_track(ptr, size, file, line);
if (!mt) {
CWARN("can't allocate new memory track\n");
return 0;
}
if (!lvfs_memdbg_check_insert(mt))
- __free_mtrack(mt);
+ __free_mem_track(mt);
return 1;
}
static inline int
-__put_mtrack(void *ptr, int size,
- char *file, int line)
+__put_mem_track(void *ptr, int size,
+ char *file, int line)
{
- struct mtrack *mt;
+ struct mem_track *mt;
if (!(mt = lvfs_memdbg_check_remove(ptr))) {
CWARN("ptr 0x%p is not allocated. Attempt to free "
"than allocated (%d != %d) at %s:%d\n",
mt->m_size, size, file, line);
}
- __free_mtrack(mt);
+ __free_mem_track(mt);
return 1;
}
}
-#define get_mtrack(ptr, size, file, line) \
- __get_mtrack((ptr), (size), (file), (line))
+#define get_mem_track(ptr, size, file, line) \
+ __get_mem_track((ptr), (size), (file), (line))
-#define put_mtrack(ptr, size, file, line) \
- __put_mtrack((ptr), (size), (file), (line))
+#define put_mem_track(ptr, size, file, line) \
+ __put_mem_track((ptr), (size), (file), (line))
#else /* !CONFIG_DEBUG_MEMORY */
-#define get_mtrack(ptr, size, file, line) \
+#define get_mem_track(ptr, size, file, line) \
do {} while (0)
-#define put_mtrack(ptr, size, file, line) \
+#define put_mem_track(ptr, size, file, line) \
do {} while (0)
#endif /* !CONFIG_DEBUG_MEMORY */
atomic_add(size, &obd_memory); \
if (atomic_read(&obd_memory) > obd_memmax) \
obd_memmax = atomic_read(&obd_memory); \
- get_mtrack((ptr), (size), __FILE__, __LINE__); \
+ get_mem_track((ptr), (size), __FILE__, __LINE__); \
CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %d at %p (tot %d)\n", \
(int)(size), (ptr), atomic_read(&obd_memory)); \
} \
atomic_add(size, &obd_memory); \
if (atomic_read(&obd_memory) > obd_memmax) \
obd_memmax = atomic_read(&obd_memory); \
- get_mtrack((ptr), (size), __FILE__, __LINE__); \
+ get_mem_track((ptr), (size), __FILE__, __LINE__); \
CDEBUG(D_MALLOC, "vmalloced '" #ptr "': %d at %p (tot %d)\n", \
(int)(size), ptr, atomic_read(&obd_memory)); \
} \
#define OBD_FREE(ptr, size) \
do { \
LASSERT(ptr); \
- put_mtrack((ptr), (size), __FILE__, __LINE__); \
+ put_mem_track((ptr), (size), __FILE__, __LINE__); \
atomic_sub(size, &obd_memory); \
CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n", \
(int)(size), ptr, atomic_read(&obd_memory)); \
# define OBD_VFREE(ptr, size) \
do { \
LASSERT(ptr); \
- put_mtrack((ptr), (size), __FILE__, __LINE__); \
+ put_mem_track((ptr), (size), __FILE__, __LINE__); \
atomic_sub(size, &obd_memory); \
CDEBUG(D_MALLOC, "vfreed '" #ptr "': %d at %p (tot %d).\n", \
(int)(size), ptr, atomic_read(&obd_memory)); \
atomic_add(size, &obd_memory); \
if (atomic_read(&obd_memory) > obd_memmax) \
obd_memmax = atomic_read(&obd_memory); \
- get_mtrack((ptr), (size), __FILE__, __LINE__); \
+ get_mem_track((ptr), (size), __FILE__, __LINE__); \
CDEBUG(D_MALLOC, "slab-alloced '"#ptr"': %d at %p (tot %d)\n", \
(int)(size), ptr, atomic_read(&obd_memory)); \
} \
LASSERT(ptr); \
CDEBUG(D_MALLOC, "slab-freed '" #ptr "': %d at %p (tot %d).\n", \
(int)(size), ptr, atomic_read(&obd_memory)); \
- put_mtrack((ptr), (size), __FILE__, __LINE__); \
+ put_mem_track((ptr), (size), __FILE__, __LINE__); \
atomic_sub(size, &obd_memory); \
POISON(ptr, 0x5a, size); \
kmem_cache_free(slab, ptr); \
LASSERT(size > sizeof(sizeof(struct hlist_head)));
obd_memtable_size = size / sizeof(struct hlist_head);
- CWARN("Allocating %lu malloc entries...\n",
+ CWARN("allocating %lu malloc entries...\n",
(unsigned long)obd_memtable_size);
obd_memtable = kmalloc(size, GFP_KERNEL);
{
struct hlist_node *node = NULL, *tmp = NULL;
struct hlist_head *head;
- struct mtrack *mt;
+ struct mem_track *mt;
int i;
spin_lock(&obd_memlist_lock);
for (i = 0, head = obd_memtable; i < obd_memtable_size; i++, head++) {
hlist_for_each_safe(node, tmp, head) {
- mt = hlist_entry(node, struct mtrack, m_hash);
+ mt = hlist_entry(node, struct mem_track, m_hash);
hlist_del_init(&mt->m_hash);
kfree(mt);
}
(obd_memtable_size - 1);
}
-static void __lvfs_memdbg_insert(struct mtrack *mt)
+static void __lvfs_memdbg_insert(struct mem_track *mt)
{
struct hlist_head *head = obd_memtable +
hashfn(mt->m_ptr);
hlist_add_head(&mt->m_hash, head);
}
-void lvfs_memdbg_insert(struct mtrack *mt)
+void lvfs_memdbg_insert(struct mem_track *mt)
{
spin_lock(&obd_memlist_lock);
__lvfs_memdbg_insert(mt);
}
EXPORT_SYMBOL(lvfs_memdbg_insert);
-static void __lvfs_memdbg_remove(struct mtrack *mt)
+static void __lvfs_memdbg_remove(struct mem_track *mt)
{
hlist_del_init(&mt->m_hash);
}
-void lvfs_memdbg_remove(struct mtrack *mt)
+void lvfs_memdbg_remove(struct mem_track *mt)
{
spin_lock(&obd_memlist_lock);
__lvfs_memdbg_remove(mt);
}
EXPORT_SYMBOL(lvfs_memdbg_remove);
-static struct mtrack *__lvfs_memdbg_find(void *ptr)
+static struct mem_track *__lvfs_memdbg_find(void *ptr)
{
struct hlist_node *node = NULL;
- struct mtrack *mt = NULL;
+ struct mem_track *mt = NULL;
struct hlist_head *head;
head = obd_memtable + hashfn(ptr);
hlist_for_each(node, head) {
- mt = hlist_entry(node, struct mtrack, m_hash);
+ mt = hlist_entry(node, struct mem_track, m_hash);
if ((unsigned long)mt->m_ptr == (unsigned long)ptr)
break;
mt = NULL;
return mt;
}
-struct mtrack *lvfs_memdbg_find(void *ptr)
+struct mem_track *lvfs_memdbg_find(void *ptr)
{
- struct mtrack *mt;
+ struct mem_track *mt;
spin_lock(&obd_memlist_lock);
mt = __lvfs_memdbg_find(ptr);
}
EXPORT_SYMBOL(lvfs_memdbg_find);
-int lvfs_memdbg_check_insert(struct mtrack *mt)
+int lvfs_memdbg_check_insert(struct mem_track *mt)
{
spin_lock(&obd_memlist_lock);
if (!__lvfs_memdbg_find(mt->m_ptr)) {
}
EXPORT_SYMBOL(lvfs_memdbg_check_insert);
-struct mtrack *
+struct mem_track *
lvfs_memdbg_check_remove(void *ptr)
{
- struct mtrack *mt;
+ struct mem_track *mt;
spin_lock(&obd_memlist_lock);
mt = __lvfs_memdbg_find(ptr);
return NULL;
}
EXPORT_SYMBOL(lvfs_memdbg_check_remove);
+#endif
static void lvfs_memdbg_show(void)
{
+#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__)
struct hlist_node *node = NULL;
struct hlist_head *head;
- struct mtrack *mt;
- int leaked, i;
+ struct mem_track *mt;
+#endif
+ int leaked;
+
+#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__)
+ int i;
+#endif
leaked = atomic_read(&obd_memory);
if (leaked > 0) {
- CWARN("Memory leaks detected (max %d, leaked %d):\n",
+ CWARN("memory leaks detected (max %d, leaked %d)\n",
obd_memmax, leaked);
+#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__)
spin_lock(&obd_memlist_lock);
for (i = 0, head = obd_memtable; i < obd_memtable_size; i++, head++) {
hlist_for_each(node, head) {
- mt = hlist_entry(node, struct mtrack, m_hash);
+ mt = hlist_entry(node, struct mem_track, m_hash);
CWARN(" ptr: 0x%p, size: %d, src at \"%s\"\n",
mt->m_ptr, mt->m_size, mt->m_loc);
}
}
spin_unlock(&obd_memlist_lock);
+#endif
}
}
-#endif
static int __init lvfs_linux_init(void)
{
ENTRY;
lvfs_mount_list_cleanup();
+ lvfs_memdbg_show();
#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__)
- lvfs_memdbg_show();
lvfs_memdbg_cleanup();
#endif
EXIT;