summaryrefslogtreecommitdiffstats
path: root/mm/kmemleak.c
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2009-06-29 17:13:56 +0100
committerCatalin Marinas <catalin.marinas@arm.com>2009-06-29 17:14:13 +0100
commit17bb9e0d906b625f86e9d31740bb1c35bc0f63d7 (patch)
tree2a92b042b2e48be48bbe126ea62ee098fcebc0ee /mm/kmemleak.c
parentacf4968ec9dea49387ca8b3d36dfaa0850bdb2d5 (diff)
downloadlinux-17bb9e0d906b625f86e9d31740bb1c35bc0f63d7.tar.bz2
kmemleak: Do not report new leaked objects if the scanning was stopped
If the scanning was stopped with a signal, it is possible that some objects are left with a white colour (potential leaks) and reported. Add a check to avoid reporting such objects. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'mm/kmemleak.c')
-rw-r--r--mm/kmemleak.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index c37e8e50e4de..e094c4dbdf55 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -1030,6 +1030,12 @@ static void kmemleak_scan(void)
WARN_ON(!list_empty(&gray_list));
/*
+ * If scanning was stopped do not report any new unreferenced objects.
+ */
+ if (scan_should_stop())
+ return;
+
+ /*
* Scanning result reporting.
*/
rcu_read_lock();
@@ -1184,11 +1190,10 @@ static int kmemleak_seq_show(struct seq_file *seq, void *v)
unsigned long flags;
spin_lock_irqsave(&object->lock, flags);
- if (!unreferenced_object(object))
- goto out;
- print_unreferenced(seq, object);
- reported_leaks++;
-out:
+ if ((object->flags & OBJECT_REPORTED) && unreferenced_object(object)) {
+ print_unreferenced(seq, object);
+ reported_leaks++;
+ }
spin_unlock_irqrestore(&object->lock, flags);
return 0;
}