linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/4] kmemleak: free internal objects only if there're no leaks to be reported
@ 2014-03-28  8:52 Li Zefan
  2014-03-28  8:53 ` [PATCH v3 2/4] kmemleak: allow freeing internal objects after kmemleak was disabled Li Zefan
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Li Zefan @ 2014-03-28  8:52 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Catalin Marinas, LKML, linux-mm@kvack.org

Currently if you disabling kmemleak after stopping kmemleak thread,
kmemleak objects will be freed and so you won't be able to check
previously reported leaks.

With this patch, kmemleak objects won't be freed if there're leaks
that can be reported.

Signed-off-by: Li Zefan <lizefan@huawei.com>
---
 mm/kmemleak.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 31f01c5..be7ecc0 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -218,7 +218,8 @@ static int kmemleak_stack_scan = 1;
 static DEFINE_MUTEX(scan_mutex);
 /* setting kmemleak=on, will set this var, skipping the disable */
 static int kmemleak_skip_disable;
-
+/* If there're leaks that can be reported */
+static bool kmemleak_has_leaks;
 
 /*
  * Early object allocation/freeing logging. Kmemleak is initialized after the
@@ -1382,9 +1383,12 @@ static void kmemleak_scan(void)
 	}
 	rcu_read_unlock();
 
-	if (new_leaks)
+	if (new_leaks) {
+		kmemleak_has_leaks = true;
+
 		pr_info("%d new suspected memory leaks (see "
 			"/sys/kernel/debug/kmemleak)\n", new_leaks);
+	}
 
 }
 
@@ -1592,6 +1596,8 @@ static void kmemleak_clear(void)
 		spin_unlock_irqrestore(&object->lock, flags);
 	}
 	rcu_read_unlock();
+
+	kmemleak_has_leaks = false;
 }
 
 /*
@@ -1685,12 +1691,11 @@ static const struct file_operations kmemleak_fops = {
 static void kmemleak_do_cleanup(struct work_struct *work)
 {
 	struct kmemleak_object *object;
-	bool cleanup = scan_thread == NULL;
 
 	mutex_lock(&scan_mutex);
 	stop_scan_thread();
 
-	if (cleanup) {
+	if (!kmemleak_has_leaks) {
 		rcu_read_lock();
 		list_for_each_entry_rcu(object, &object_list, object_list)
 			delete_object_full(object->pointer);
-- 
1.8.0.2

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-03-28 10:33 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-28  8:52 [PATCH v3 1/4] kmemleak: free internal objects only if there're no leaks to be reported Li Zefan
2014-03-28  8:53 ` [PATCH v3 2/4] kmemleak: allow freeing internal objects after kmemleak was disabled Li Zefan
2014-03-28 10:13   ` Catalin Marinas
2014-03-28 10:22     ` Li Zefan
2014-03-28  8:53 ` [PATCH v3 3/4] kmemleak: remove redundant code Li Zefan
2014-03-28  8:53 ` [PATCH v3 4/4] kmemleak: change some global variables to int Li Zefan
2014-03-28 10:04 ` [PATCH v3 1/4] kmemleak: free internal objects only if there're no leaks to be reported Catalin Marinas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).