]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: leak output shows filename and line
authorYehuda Sadeh <yehuda@hq.newdream.net>
Mon, 20 Oct 2008 17:19:17 +0000 (10:19 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Mon, 20 Oct 2008 22:46:13 +0000 (15:46 -0700)
src/kernel/ceph_tools.c
src/kernel/ceph_tools.h
src/kernel/osd_client.c

index 967103e19a650f084b6346815b1e7f7e1264341f..689d43ed0d47ca5ea81f825d5fa931f6f0aa17f3 100644 (file)
@@ -27,6 +27,8 @@ struct alloc_data {
        struct list_head node;
        size_t size;
        void *addr;
+       char *fname;
+       int line;
 };
 
 struct stack_frame {
@@ -34,7 +36,7 @@ struct stack_frame {
        unsigned long return_address;
 };
 
-void *ceph_kmalloc(size_t size, gfp_t flags)
+void *ceph_kmalloc(char *fname, int line, size_t size, gfp_t flags)
 {
        struct alloc_data *p=kmalloc(size+sizeof(struct alloc_data), flags);
 
@@ -43,6 +45,8 @@ void *ceph_kmalloc(size_t size, gfp_t flags)
 
        p->magic = CEPH_BK_MAGIC;
        p->size = size;
+       p->fname = fname;
+       p->line = line;
 
        spin_lock(&_bk_lock);
        _total_alloc += size;
@@ -102,9 +106,9 @@ void ceph_bookkeeper_finalize(void)
 
        list_for_each(p, &_bk_allocs) {
                entry = list_entry(p, struct alloc_data, node);
-               printk("[%p]", entry->addr);
+               printk("[%p] %s(%d): ", entry->addr, entry->fname, entry->line);
                print_symbol(" %s: ", (unsigned long)entry->addr);
-               printk("p=%p (%zu bytes)\n", entry, entry->size);
+               printk("p=%p (%zu bytes)\n", ((void *)entry)+sizeof(struct alloc_data), entry->size);
        }
 
 }
index f49017f9bd78804895bc63ea6ba1475544b91de5..1984a5bc557f736134aefc3683211db141043aa0 100644 (file)
@@ -6,11 +6,11 @@
 #ifdef CEPH_BOOKKEEPER
 extern void ceph_bookkeeper_init(void);
 extern void ceph_bookkeeper_finalize(void);
-extern void *ceph_kmalloc(size_t size, gfp_t flags);
+extern void *ceph_kmalloc(char *fname, int line, size_t size, gfp_t flags);
 extern void ceph_kfree(void *ptr);
 
 #ifndef CEPH_OVERRIDE_BOOKKEEPER
-#define kmalloc        ceph_kmalloc
+#define kmalloc(size,flags)    ceph_kmalloc(__FILE__, __LINE__, size, flags)
 #define kfree  ceph_kfree
 #endif
 
index fe924320688eedcf67d1cdea683e5a1636e9739a..22c85fe8c54eeb15457cadb8a9b14e0fba2eb3d4 100644 (file)
@@ -97,6 +97,7 @@ static struct ceph_msg *new_request_msg(struct ceph_osd_client *osdc, int op,
        if (snapc)
                size += sizeof(u64) * snapc->num_snaps;
        req = ceph_msg_new(CEPH_MSG_OSD_OP, size, 0, 0, NULL);
+       dout(1, "new_request_msg %p\n", req);
        if (IS_ERR(req))
                return req;
        memset(req->front.iov_base, 0, req->front.iov_len);