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(); }