From cd78a7d11690f3c2e5b6430a41d0e7661ae7029e Mon Sep 17 00:00:00 2001
From: Ricardo M. Correia <ricardo.correia@oracle.com>
Date: Mon, 24 May 2010 11:13:28 +0000
Subject: [PATCH] (local) Make Lustre use debug_vmalloc APIs.

---
 libcfs/include/libcfs/linux/linux-mem.h |    2 +-
 libcfs/libcfs/linux/linux-mem.c         |   13 +++++++------
 libcfs/libcfs/lwt.c                     |    6 +++---
 lustre/dmu-osd/osd_handler.c            |    6 +++---
 lustre/obdclass/lprocfs_status.c        |    5 +++--
 5 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/libcfs/include/libcfs/linux/linux-mem.h b/libcfs/include/libcfs/linux/linux-mem.h
index 1769927..f6111f4 100644
--- a/libcfs/include/libcfs/linux/linux-mem.h
+++ b/libcfs/include/libcfs/linux/linux-mem.h
@@ -113,7 +113,7 @@ extern void __cfs_free_pages(cfs_page_t *page, unsigned int order);
 
 #define cfs_alloc_page(flags)  cfs_alloc_pages(flags, 0)
 #define __cfs_free_page(page)  __cfs_free_pages(page, 0)
-#define cfs_free_page(p)       __free_pages(p, 0)
+#define cfs_free_page(p)       __debug_free_pages(p, 0)
 
 #define libcfs_memory_pressure_get() (current->flags & PF_MEMALLOC)
 #define libcfs_memory_pressure_set() do { current->flags |= PF_MEMALLOC; } while (0)
diff --git a/libcfs/libcfs/linux/linux-mem.c b/libcfs/libcfs/linux/linux-mem.c
index b5a6129..5bd5bcb 100644
--- a/libcfs/libcfs/linux/linux-mem.c
+++ b/libcfs/libcfs/linux/linux-mem.c
@@ -37,6 +37,7 @@
 
 #include <linux/mm.h>
 #include <linux/vmalloc.h>
+#include <linux/debug_vmalloc.h>
 #include <linux/slab.h>
 #include <linux/highmem.h>
 #include <libcfs/libcfs.h>
@@ -76,7 +77,7 @@ cfs_alloc(size_t nr_bytes, u_int32_t flags)
 {
 	void *ptr = NULL;
 
-	ptr = kmalloc(nr_bytes, cfs_alloc_flags_to_gfp(flags));
+	ptr = debug_vmalloc(nr_bytes, cfs_alloc_flags_to_gfp(flags));
 	if (ptr != NULL && (flags & CFS_ALLOC_ZERO))
 		memset(ptr, 0, nr_bytes);
 	return ptr;
@@ -85,19 +86,19 @@ cfs_alloc(size_t nr_bytes, u_int32_t flags)
 void
 cfs_free(void *addr)
 {
-	kfree(addr);
+	debug_vfree(addr);
 }
 
 void *
 cfs_alloc_large(size_t nr_bytes)
 {
-	return vmalloc(nr_bytes);
+	return debug_vmalloc(nr_bytes, GFP_KERNEL);
 }
 
 void
 cfs_free_large(void *addr)
 {
-	vfree(addr);
+	debug_vfree(addr);
 }
 
 cfs_page_t *cfs_alloc_pages(unsigned int flags, unsigned int order)
@@ -106,12 +107,12 @@ cfs_page_t *cfs_alloc_pages(unsigned int flags, unsigned int order)
          * XXX nikita: do NOT call portals_debug_msg() (CDEBUG/ENTRY/EXIT)
          * from here: this will lead to infinite recursion.
          */
-        return alloc_pages(cfs_alloc_flags_to_gfp(flags), order);
+        return debug_alloc_pages(cfs_alloc_flags_to_gfp(flags), order);
 }
 
 void __cfs_free_pages(cfs_page_t *page, unsigned int order)
 {
-        __free_pages(page, order);
+        __debug_free_pages(page, order);
 }
 
 cfs_mem_cache_t *
diff --git a/libcfs/libcfs/lwt.c b/libcfs/libcfs/lwt.c
index 3bc1118..0350441 100644
--- a/libcfs/libcfs/lwt.c
+++ b/libcfs/libcfs/lwt.c
@@ -197,7 +197,7 @@ lwt_init ()
 
 	for (i = 0; i < cfs_num_online_cpus(); i++)
 		for (j = 0; j < lwt_pages_per_cpu; j++) {
-			struct page *page = alloc_page (GFP_KERNEL);
+			struct page *page = debug_alloc_page (GFP_KERNEL);
 			lwt_page_t  *lwtp;
 
 			if (page == NULL) {
@@ -209,7 +209,7 @@ lwt_init ()
                         LIBCFS_ALLOC(lwtp, sizeof (*lwtp));
 			if (lwtp == NULL) {
 				CERROR ("Can't allocate lwtp\n");
-                                __free_page(page);
+                                __debug_free_page(page);
 				lwt_fini ();
 				return (-ENOMEM);
 			}
@@ -256,7 +256,7 @@ lwt_fini ()
                                 cfs_list_del (&lwtp->lwtp_list);
                         }
                         
-                        __free_page (lwtp->lwtp_page);
+                        __debug_free_page (lwtp->lwtp_page);
                         LIBCFS_FREE (lwtp, sizeof (*lwtp));
                 }
 }
diff --git a/lustre/dmu-osd/osd_handler.c b/lustre/dmu-osd/osd_handler.c
index 86028bb..87eb00f 100644
--- a/lustre/dmu-osd/osd_handler.c
+++ b/lustre/dmu-osd/osd_handler.c
@@ -2421,7 +2421,7 @@ static int osd_get_bufs(const struct lu_env *env, struct dt_object *dt,
         }
 
         for (i = 0, lb = _lb; i< npages; i++, lb++) {
-                lb->page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
+                lb->page = debug_alloc_page(GFP_NOFS | __GFP_HIGHMEM);
                 if (lb->page == NULL)
                         goto out_err;
                 lu_object_get(&dt->do_lu);
@@ -2448,7 +2448,7 @@ out_err:
         while (--i >= 0) {
                 LASSERT(lb->page);
                 lu_object_put(env, &dt->do_lu);
-                __free_page(lb->page);
+                __debug_free_page(lb->page);
                 lb->page = NULL;
         }
         return -ENOMEM;
@@ -2468,7 +2468,7 @@ static int osd_put_bufs(const struct lu_env *env, struct dt_object *dt,
                 if (lb->page == NULL)
                         continue;
                 lu_object_put(env, &dt->do_lu);
-                __free_page(lb->page);
+                __debug_free_page(lb->page);
                 lb->page = NULL;
         }
 
diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
index da3410f..66a0ea6 100644
--- a/lustre/obdclass/lprocfs_status.c
+++ b/lustre/obdclass/lprocfs_status.c
@@ -52,6 +52,7 @@
 #include <lustre_fsfilt.h>
 #include <lustre_log.h>
 #include <lustre/lustre_idl.h>
+#include <linux/debug_vmalloc.h>
 
 #if defined(LPROCFS)
 
@@ -181,7 +182,7 @@ static ssize_t lprocfs_fops_read(struct file *f, char __user *buf,
         if (*ppos >= CFS_PAGE_SIZE)
                 return 0;
 
-        page = (char *)__get_free_page(GFP_KERNEL);
+        page = (char *)__debug_get_free_page(GFP_KERNEL);
         if (page == NULL)
                 return -ENOMEM;
 
@@ -218,7 +219,7 @@ static ssize_t lprocfs_fops_read(struct file *f, char __user *buf,
         *ppos += count;
 
 out:
-        free_page((unsigned long)page);
+        debug_free_page((unsigned long)page);
         return rc;
 }
 
-- 
1.6.2.2