kmemleak: Remove the reported leaks number limitation
authorCatalin Marinas <catalin.marinas@arm.com>
Tue, 7 Jul 2009 09:32:57 +0000 (10:32 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 8 Jul 2009 13:25:12 +0000 (14:25 +0100)
Since the leaks are no longer printed to the syslog, there is no point
in keeping this limitation. All the suspected leaks are shown on
/sys/kernel/debug/kmemleak file.

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

index 93f1481..3c2b24c 100644 (file)
  * Kmemleak configuration and common defines.
  */
 #define MAX_TRACE              16      /* stack trace length */
-#define REPORTS_NR             50      /* maximum number of reported leaks */
 #define MSECS_MIN_AGE          5000    /* minimum object age for reporting */
 #define SECS_FIRST_SCAN                60      /* delay before the first scan */
 #define SECS_SCAN_WAIT         600     /* subsequent auto scanning delay */
@@ -196,9 +195,6 @@ static int kmemleak_stack_scan = 1;
 /* protects the memory scanning, parameters and debug/kmemleak file access */
 static DEFINE_MUTEX(scan_mutex);
 
-/* number of leaks reported (for limitation purposes) */
-static int reported_leaks;
-
 /*
  * Early object allocation/freeing logging. Kmemleak is initialized after the
  * kernel allocator. However, both the kernel allocator and kmemleak may
@@ -1106,11 +1102,6 @@ static void *kmemleak_seq_start(struct seq_file *seq, loff_t *pos)
        struct kmemleak_object *object;
        loff_t n = *pos;
 
-       if (!n)
-               reported_leaks = 0;
-       if (reported_leaks >= REPORTS_NR)
-               return NULL;
-
        rcu_read_lock();
        list_for_each_entry_rcu(object, &object_list, object_list) {
                if (n-- > 0)
@@ -1135,8 +1126,6 @@ static void *kmemleak_seq_next(struct seq_file *seq, void *v, loff_t *pos)
        struct list_head *n = &prev_obj->object_list;
 
        ++(*pos);
-       if (reported_leaks >= REPORTS_NR)
-               goto out;
 
        rcu_read_lock();
        list_for_each_continue_rcu(n, &object_list) {
@@ -1145,7 +1134,7 @@ static void *kmemleak_seq_next(struct seq_file *seq, void *v, loff_t *pos)
                        break;
        }
        rcu_read_unlock();
-out:
+
        put_object(prev_obj);
        return next_obj;
 }
@@ -1168,10 +1157,8 @@ static int kmemleak_seq_show(struct seq_file *seq, void *v)
        unsigned long flags;
 
        spin_lock_irqsave(&object->lock, flags);
-       if ((object->flags & OBJECT_REPORTED) && unreferenced_object(object)) {
+       if ((object->flags & OBJECT_REPORTED) && unreferenced_object(object))
                print_unreferenced(seq, object);
-               reported_leaks++;
-       }
        spin_unlock_irqrestore(&object->lock, flags);
        return 0;
 }