kmemleak and SLAB
Hi,
When I try to use kmemleak with the SLAB allocator set I receive this message when booting 3.1-rc8:
[ 28.480569] kmemleak: Cannot allocate a kmemleak_object structure [ 28.480593] kmemleak: Kernel memory leak detector disabled [ 34.428037] CPA self-test: [ 34.435881] 4k 259968 large 0 gb 0 x 259968[b0000000-ef77f000] miss 0 [ 34.447669] 4k 259968 large 0 gb 0 x 259968[b0000000-ef77f000] miss 0 [ 34.458402] 4k 259968 large 0 gb 0 x 259968[b0000000-ef77f000] miss 0 [ 34.458407] ok. [ 38.754032] wlan0: no IPv6 routers present [ 67.666048] kmemleak: Automatic memory scanning thread ended
All is fine when using SLUB. On another run I also got an error about an ODEBUG oom so I wonder if this is indicative of another problem...
Signature · 1 line
Sitsofe | http://sucs.org/~sits/
Quoted 13 lines · Sitsofe Wheeler
When I try to use kmemleak with the SLAB allocator set I receive this message when booting 3.1-rc8:
[ 28.480569] kmemleak: Cannot allocate a
kmemleak_objectstructure [ 28.480593] kmemleak: Kernel memory leak detector disabled [ 34.428037] CPA self-test:
[ 34.435881] 4k 259968 large 0 gb 0 x 259968[b0000000-ef77f000] miss 0 [ 34.447669] 4k 259968 large 0 gb 0 x 259968[b0000000-ef77f000] miss 0 [ 34.458402] 4k 259968 large 0 gb 0 x 259968[b0000000-ef77f000] miss 0 [ 34.458407] ok.
[ 38.754032] wlan0: no IPv6 routers present
[ 67.666048] kmemleak: Automatic memory scanning thread ended
Quoted 2 lines
All is fine when using SLUB. On another run I also got an error about an ODEBUG oom so I wonder if this is indicative of another problem...
There could be another problem. The kmemleak error says that it could not allocate the memory required for its internal data keeping. This happens especially when the allocation is GFP_ATOMIC (it depends on the context kmemleak is called from).
I have this commit in my tree (not yet pushed upstream):
http://linux-arm.org/git?p=linux-2.6.git;a=commitdiff;h=bcba31f1751bf9d9d1da72dd828dee697d52924f
If you apply this, kmemleak keeps its metadata for later reporting (well, only if it was fully initialised before the error occured). This way you can inspect /proc/slabinfo and /proc/meminfo etc. to see why it ran out of memory.
Signature · 1 line
Catalin