lizefan童鞋在今天(2014/3/13)提交了一個關於mem leak的patch,比較有意思。
在kmemleak scan thread運行的情況下,無法釋放kmemleak objects。
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
1200264 1197433 99% 0.30K 46164 26 369312K kmemleak_object
lizefan童鞋寫的patch可以在執行如下命令後,釋放objects:
# echo scan=off > /sys/kernel/debug/kmemleak # echo off > /sys/kernel/debug/kmemleak代碼實現如下:
if (strncmp(buf, "clear", 5) == 0) { if (atomic_read(&kmemleak_enabled)) kmemleak_clear(); else __kmemleak_do_cleanup(); goto out; }__kmemleak_do_cleanup()定義如下:
static void __kmemleak_do_cleanup(void) { struct kmemleak_object *object; rcu_read_lock(); list_for_each_entry_rcu(object, &object_list, object_list) delete_object_full(object->pointer); rcu_read_unlock(); }