diff options
| -rw-r--r-- | mm/kmemleak.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 58ec86c9e58a..25e203474d1b 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c | |||
| @@ -109,6 +109,9 @@ | |||
| 109 | 109 | ||
| 110 | #define BYTES_PER_POINTER sizeof(void *) | 110 | #define BYTES_PER_POINTER sizeof(void *) |
| 111 | 111 | ||
| 112 | /* GFP bitmask for kmemleak internal allocations */ | ||
| 113 | #define GFP_KMEMLEAK_MASK (GFP_KERNEL | GFP_ATOMIC) | ||
| 114 | |||
| 112 | /* scanning area inside a memory block */ | 115 | /* scanning area inside a memory block */ |
| 113 | struct kmemleak_scan_area { | 116 | struct kmemleak_scan_area { |
| 114 | struct hlist_node node; | 117 | struct hlist_node node; |
| @@ -462,7 +465,7 @@ static void create_object(unsigned long ptr, size_t size, int min_count, | |||
| 462 | struct prio_tree_node *node; | 465 | struct prio_tree_node *node; |
| 463 | struct stack_trace trace; | 466 | struct stack_trace trace; |
| 464 | 467 | ||
| 465 | object = kmem_cache_alloc(object_cache, gfp & ~GFP_SLAB_BUG_MASK); | 468 | object = kmem_cache_alloc(object_cache, gfp & GFP_KMEMLEAK_MASK); |
| 466 | if (!object) { | 469 | if (!object) { |
| 467 | kmemleak_panic("kmemleak: Cannot allocate a kmemleak_object " | 470 | kmemleak_panic("kmemleak: Cannot allocate a kmemleak_object " |
| 468 | "structure\n"); | 471 | "structure\n"); |
| @@ -636,7 +639,7 @@ static void add_scan_area(unsigned long ptr, unsigned long offset, | |||
| 636 | return; | 639 | return; |
| 637 | } | 640 | } |
| 638 | 641 | ||
| 639 | area = kmem_cache_alloc(scan_area_cache, gfp & ~GFP_SLAB_BUG_MASK); | 642 | area = kmem_cache_alloc(scan_area_cache, gfp & GFP_KMEMLEAK_MASK); |
| 640 | if (!area) { | 643 | if (!area) { |
| 641 | kmemleak_warn("kmemleak: Cannot allocate a scan area\n"); | 644 | kmemleak_warn("kmemleak: Cannot allocate a scan area\n"); |
| 642 | goto out; | 645 | goto out; |
