From d1ed4b46a3585e434988b20d238ee7b5f0aaab0e Mon Sep 17 00:00:00 2001 From: yury <yury> Date: Wed, 23 Jul 2008 08:40:04 +0000 Subject: [PATCH] b=16436 r=adilger,shadow - removes obsolete mem tracking mechanism. --- lustre/include/obd_support.h | 113 ------------------- lustre/lvfs/lvfs_linux.c | 207 ----------------------------------- 2 files changed, 320 deletions(-) diff --git a/lustre/include/obd_support.h b/lustre/include/obd_support.h index 57d1c33d7e..dbae7c5d1a 100644 --- a/lustre/include/obd_support.h +++ b/lustre/include/obd_support.h @@ -487,129 +487,16 @@ static inline void obd_pages_sub(int order) #endif -#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__) - -#define OBD_MT_WRONG_SIZE (1 << 0) -#define OBD_MT_ALREADY_FREED (1 << 1) -#define OBD_MT_LOC_LEN 128 - -struct obd_mem_track { - struct hlist_node mt_hash; - char mt_loc[OBD_MT_LOC_LEN]; - int mt_flags; - void *mt_ptr; - int mt_size; -}; - -void lvfs_memdbg_show(void); -void lvfs_memdbg_insert(struct obd_mem_track *mt); -void lvfs_memdbg_remove(struct obd_mem_track *mt); -struct obd_mem_track *lvfs_memdbg_find(void *ptr); - -int lvfs_memdbg_check_insert(struct obd_mem_track *mt); -struct obd_mem_track *lvfs_memdbg_check_remove(void *ptr); - -static inline struct obd_mem_track * -__new_mem_track(void *ptr, int size, - char *file, int line) -{ - struct obd_mem_track *mt; - - mt = kmalloc(sizeof(*mt), GFP_KERNEL); - if (unlikely(!mt)) - return NULL; - - snprintf(mt->mt_loc, sizeof(mt->mt_loc) - 1, - "%s:%d", file, line); - - mt->mt_size = size; - mt->mt_ptr = ptr; - mt->mt_flags = 0; - return mt; -} - -static inline void -__free_mem_track(struct obd_mem_track *mt) -{ - kfree(mt); -} - -static inline int -__get_mem_track(void *ptr, int size, - char *file, int line) -{ - struct obd_mem_track *mt; - - mt = __new_mem_track(ptr, size, file, line); - if (unlikely(!mt)) { - CWARN("Can't allocate new memory track\n"); - return 0; - } - - if (!lvfs_memdbg_check_insert(mt)) - __free_mem_track(mt); - - return 1; -} - -static inline int -__put_mem_track(void *ptr, int size, - char *file, int line) -{ - struct obd_mem_track *mt; - - if (unlikely(!(mt = lvfs_memdbg_check_remove(ptr)))) { - CWARN("Ptr 0x%p is not allocated. Attempt to free " - "not allocated memory at %s:%d\n", ptr, - file, line); - LBUG(); - return 0; - } else { - if (unlikely(mt->mt_size != size)) { - if (!(mt->mt_flags & OBD_MT_ALREADY_FREED)) { - mt->mt_flags |= (OBD_MT_WRONG_SIZE | - OBD_MT_ALREADY_FREED); - - CWARN("Freeing memory chunk (at 0x%p) of " - "different size than allocated " - "(%d != %d) at %s:%d, allocated at %s\n", - ptr, mt->mt_size, size, file, line, - mt->mt_loc); - } - } else { - __free_mem_track(mt); - } - return 1; - } -} - -#define get_mem_track(ptr, size, file, line) \ - __get_mem_track((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_mem_track(ptr, size, file, line) \ - do {} while (0) - -#define put_mem_track(ptr, size, file, line) \ - do {} while (0) -#endif /* !CONFIG_DEBUG_MEMORY */ - #define OBD_DEBUG_MEMUSAGE (1) #if OBD_DEBUG_MEMUSAGE #define OBD_ALLOC_POST(ptr, size, name) \ obd_memory_add(size); \ - get_mem_track((ptr), (size), __FILE__, __LINE__); \ CDEBUG(D_MALLOC, name " '" #ptr "': %d at %p.\n", \ (int)(size), ptr) #define OBD_FREE_PRE(ptr, size, name) \ LASSERT(ptr); \ - put_mem_track((ptr), (size), __FILE__, __LINE__); \ obd_memory_sub(size); \ CDEBUG(D_MALLOC, name " '" #ptr "': %d at %p.\n", \ (int)(size), ptr); \ diff --git a/lustre/lvfs/lvfs_linux.c b/lustre/lvfs/lvfs_linux.c index 827e7477c4..bcf6385ad1 100644 --- a/lustre/lvfs/lvfs_linux.c +++ b/lustre/lvfs/lvfs_linux.c @@ -449,189 +449,6 @@ long l_readdir(struct file *file, struct list_head *dentry_list) } EXPORT_SYMBOL(l_readdir); -#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__) -static spinlock_t obd_memlist_lock = SPIN_LOCK_UNLOCKED; -static struct hlist_head *obd_memtable = NULL; -static unsigned long obd_memtable_size = 0; - -static int lvfs_memdbg_init(int size) -{ - struct hlist_head *head; - int i; - - LASSERT(size > sizeof(sizeof(struct hlist_head))); - obd_memtable_size = size / sizeof(struct hlist_head); - - CWARN("Allocating %lu memdbg entries.\n", - (unsigned long)obd_memtable_size); - - LASSERT(obd_memtable == NULL); - obd_memtable = kmalloc(size, GFP_KERNEL); - if (!obd_memtable) - return -ENOMEM; - - i = obd_memtable_size; - head = obd_memtable; - do { - INIT_HLIST_HEAD(head); - head++; - i--; - } while(i); - - return 0; -} - -static int lvfs_memdbg_cleanup(void) -{ - struct hlist_node *node = NULL, *tmp = NULL; - struct hlist_head *head; - struct obd_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 obd_mem_track, mt_hash); - hlist_del_init(&mt->mt_hash); - kfree(mt); - } - } - spin_unlock(&obd_memlist_lock); - kfree(obd_memtable); - return 0; -} - -static inline unsigned long const hashfn(void *ptr) -{ - return (unsigned long)ptr & - (obd_memtable_size - 1); -} - -static void __lvfs_memdbg_insert(struct obd_mem_track *mt) -{ - struct hlist_head *head = obd_memtable + - hashfn(mt->mt_ptr); - hlist_add_head(&mt->mt_hash, head); -} - -void lvfs_memdbg_insert(struct obd_mem_track *mt) -{ - spin_lock(&obd_memlist_lock); - __lvfs_memdbg_insert(mt); - spin_unlock(&obd_memlist_lock); -} -EXPORT_SYMBOL(lvfs_memdbg_insert); - -static void __lvfs_memdbg_remove(struct obd_mem_track *mt) -{ - hlist_del_init(&mt->mt_hash); -} - -void lvfs_memdbg_remove(struct obd_mem_track *mt) -{ - spin_lock(&obd_memlist_lock); - __lvfs_memdbg_remove(mt); - spin_unlock(&obd_memlist_lock); -} -EXPORT_SYMBOL(lvfs_memdbg_remove); - -static struct obd_mem_track *__lvfs_memdbg_find(void *ptr) -{ - struct hlist_node *node = NULL; - struct obd_mem_track *mt = NULL; - struct hlist_head *head; - - head = obd_memtable + hashfn(ptr); - - hlist_for_each(node, head) { - mt = hlist_entry(node, struct obd_mem_track, mt_hash); - if ((unsigned long)mt->mt_ptr == (unsigned long)ptr) - break; - mt = NULL; - } - return mt; -} - -struct obd_mem_track *lvfs_memdbg_find(void *ptr) -{ - struct obd_mem_track *mt; - - spin_lock(&obd_memlist_lock); - mt = __lvfs_memdbg_find(ptr); - spin_unlock(&obd_memlist_lock); - - return mt; -} -EXPORT_SYMBOL(lvfs_memdbg_find); - -int lvfs_memdbg_check_insert(struct obd_mem_track *mt) -{ - struct obd_mem_track *tmp; - - spin_lock(&obd_memlist_lock); - tmp = __lvfs_memdbg_find(mt->mt_ptr); - if (tmp == NULL) { - __lvfs_memdbg_insert(mt); - spin_unlock(&obd_memlist_lock); - return 1; - } - spin_unlock(&obd_memlist_lock); - return 0; -} -EXPORT_SYMBOL(lvfs_memdbg_check_insert); - -struct obd_mem_track * -lvfs_memdbg_check_remove(void *ptr) -{ - struct obd_mem_track *mt; - - spin_lock(&obd_memlist_lock); - mt = __lvfs_memdbg_find(ptr); - if (mt) { - __lvfs_memdbg_remove(mt); - spin_unlock(&obd_memlist_lock); - return mt; - } - spin_unlock(&obd_memlist_lock); - return NULL; -} -EXPORT_SYMBOL(lvfs_memdbg_check_remove); -#endif - -void lvfs_memdbg_show(void) -{ -#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__) - struct hlist_node *node = NULL; - struct hlist_head *head; - struct obd_mem_track *mt; - int header = 0; -#endif - -#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__) - int i; -#endif - - -#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) { - if (header == 0) { - CWARN("Abnormal memory activities:\n"); - header = 1; - } - mt = hlist_entry(node, struct obd_mem_track, mt_hash); - CWARN(" [%s] ptr: 0x%p, size: %d, src at %s\n", - ((mt->mt_flags & OBD_MT_WRONG_SIZE) ? - "wrong size" : "leaked memory"), - mt->mt_ptr, mt->mt_size, mt->mt_loc); - } - } - spin_unlock(&obd_memlist_lock); -#endif -} -EXPORT_SYMBOL(lvfs_memdbg_show); - #ifdef LUSTRE_KERNEL_VERSION #ifndef HAVE_CLEAR_RDONLY_ON_PUT #error rdonly patchset must be updated [cfs bz11248] @@ -768,30 +585,6 @@ __s64 lprocfs_read_helper(struct lprocfs_counter *lc, EXPORT_SYMBOL(lprocfs_read_helper); #endif /* LPROCFS */ -static int __init lvfs_linux_init(void) -{ - ENTRY; -#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__) - lvfs_memdbg_init(CFS_PAGE_SIZE); -#endif - RETURN(0); -} - -static void __exit lvfs_linux_exit(void) -{ - ENTRY; - - lvfs_memdbg_show(); - -#if defined (CONFIG_DEBUG_MEMORY) && defined(__KERNEL__) - lvfs_memdbg_cleanup(); -#endif - EXIT; -} - MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>"); MODULE_DESCRIPTION("Lustre VFS Filesystem Helper v0.1"); MODULE_LICENSE("GPL"); - -module_init(lvfs_linux_init); -module_exit(lvfs_linux_exit); -- GitLab