kmemleak: Scan all thread stacks
authorCatalin Marinas <catalin.marinas@arm.com>
Tue, 1 Sep 2009 10:12:44 +0000 (11:12 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 4 Sep 2009 15:05:55 +0000 (16:05 +0100)
This patch changes the for_each_process() loop with the
do_each_thread()/while_each_thread() pair.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
mm/kmemleak.c

index c494fee7a2b57d15a608f7c4f3bf1c164b3f4d6a..74d4089d7588f6264e22e9c97af7f675fe2fbafa 100644 (file)
@@ -1074,7 +1074,6 @@ static void kmemleak_scan(void)
 {
        unsigned long flags;
        struct kmemleak_object *object, *tmp;
-       struct task_struct *task;
        int i;
        int new_leaks = 0;
        int gray_list_pass = 0;
@@ -1141,15 +1140,16 @@ static void kmemleak_scan(void)
        }
 
        /*
-        * Scanning the task stacks may introduce false negatives and it is
-        * not enabled by default.
+        * Scanning the task stacks (may introduce false negatives).
         */
        if (kmemleak_stack_scan) {
+               struct task_struct *p, *g;
+
                read_lock(&tasklist_lock);
-               for_each_process(task)
-                       scan_block(task_stack_page(task),
-                                  task_stack_page(task) + THREAD_SIZE,
-                                  NULL, 0);
+               do_each_thread(g, p) {
+                       scan_block(task_stack_page(p), task_stack_page(p) +
+                                  THREAD_SIZE, NULL, 0);
+               } while_each_thread(g, p);
                read_unlock(&tasklist_lock);
        }