From 14ad46c9d9f1d2fd3721288f2a5fbb867fbda3bc Mon Sep 17 00:00:00 2001 From: Catalin Marinas Date: Thu, 27 Jan 2011 10:30:26 +0000 Subject: [PATCH] --- yaml --- r: 232565 b: refs/heads/master c: 6ae4bd1f0bc479984f30061b5e5116060c24a267 h: refs/heads/master i: 232563: 103c6b8bdccdb58e93852fe36abbb2b86fc4cba3 v: v3 --- [refs] | 2 +- trunk/mm/kmemleak.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 6b782c5745f5..5064db27569a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0a08739e81671de2cb690774937fe510c000b27f +refs/heads/master: 6ae4bd1f0bc479984f30061b5e5116060c24a267 diff --git a/trunk/mm/kmemleak.c b/trunk/mm/kmemleak.c index bd9bc214091b..84225f3b7190 100644 --- a/trunk/mm/kmemleak.c +++ b/trunk/mm/kmemleak.c @@ -113,7 +113,9 @@ #define BYTES_PER_POINTER sizeof(void *) /* GFP bitmask for kmemleak internal allocations */ -#define GFP_KMEMLEAK_MASK (GFP_KERNEL | GFP_ATOMIC) +#define gfp_kmemleak_mask(gfp) (((gfp) & (GFP_KERNEL | GFP_ATOMIC)) | \ + __GFP_NORETRY | __GFP_NOMEMALLOC | \ + __GFP_NOWARN) /* scanning area inside a memory block */ struct kmemleak_scan_area { @@ -511,9 +513,10 @@ static struct kmemleak_object *create_object(unsigned long ptr, size_t size, struct kmemleak_object *object; struct prio_tree_node *node; - object = kmem_cache_alloc(object_cache, gfp & GFP_KMEMLEAK_MASK); + object = kmem_cache_alloc(object_cache, gfp_kmemleak_mask(gfp)); if (!object) { - kmemleak_stop("Cannot allocate a kmemleak_object structure\n"); + pr_warning("Cannot allocate a kmemleak_object structure\n"); + kmemleak_disable(); return NULL; } @@ -734,9 +737,9 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp) return; } - area = kmem_cache_alloc(scan_area_cache, gfp & GFP_KMEMLEAK_MASK); + area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp)); if (!area) { - kmemleak_warn("Cannot allocate a scan area\n"); + pr_warning("Cannot allocate a scan area\n"); goto out; }