aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/kmemleak.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index e83987c55a08..46c2290a08f1 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -1657,8 +1657,7 @@ static void start_scan_thread(void)
1657} 1657}
1658 1658
1659/* 1659/*
1660 * Stop the automatic memory scanning thread. This function must be called 1660 * Stop the automatic memory scanning thread.
1661 * with the scan_mutex held.
1662 */ 1661 */
1663static void stop_scan_thread(void) 1662static void stop_scan_thread(void)
1664{ 1663{
@@ -1921,12 +1920,15 @@ static void kmemleak_do_cleanup(struct work_struct *work)
1921{ 1920{
1922 stop_scan_thread(); 1921 stop_scan_thread();
1923 1922
1923 mutex_lock(&scan_mutex);
1924 /* 1924 /*
1925 * Once the scan thread has stopped, it is safe to no longer track 1925 * Once it is made sure that kmemleak_scan has stopped, it is safe to no
1926 * object freeing. Ordering of the scan thread stopping and the memory 1926 * longer track object freeing. Ordering of the scan thread stopping and
1927 * accesses below is guaranteed by the kthread_stop() function. 1927 * the memory accesses below is guaranteed by the kthread_stop()
1928 * function.
1928 */ 1929 */
1929 kmemleak_free_enabled = 0; 1930 kmemleak_free_enabled = 0;
1931 mutex_unlock(&scan_mutex);
1930 1932
1931 if (!kmemleak_found_leaks) 1933 if (!kmemleak_found_leaks)
1932 __kmemleak_do_cleanup(); 1934 __kmemleak_do_cleanup();