Re: kmemleak for MIPS
From: Eric Dumazet <hidden>
Date: 2011-03-30 12:22:10
Also in:
linux-mm, lkml
Le mercredi 30 mars 2011 à 14:24 +0300, Daniel Baluta a écrit :
We have:quoted
UDP hash table entries: 128 (order: 0, 4096 bytes) CONFIG_BASE_SMALL=0udp_table_init looks like: if (!CONFIG_BASE_SMALL) table->hash = alloc_large_system_hash(name, .. &table->mask); /* * Make sure hash table has the minimum size */ Since CONFIG_BASE_SMALL is 0, we are allocating the hash using alloc_large_system Then: if (CONFIG_BASE_SMALL || table->mask < UDP_HTABLE_SIZE_MIN - 1) { table->hash = kmalloc(); table->mask is 127, and UDP_HTABLE_SIZE_MIN is 256, so we are allocating again table->hash without freeing already allocated memory. We could free table->hash, before allocating the memory with kmalloc. I don't fully understand the condition table->mask < UDP_HTABLE_SIZE_MIN - 1. Eric?
There is nothing special. UDP algo needs a minimum hash table that alloc_large_system_hash() was not able to provide (???) As you spotted, there is no free_large-system_hash(), so we 'leak' the small hash table. If machine has not enough memory to provide such a small hash table, I suggest using CONFIG_BASE_SMALL, since : #define UDP_HTABLE_SIZE_MIN (CONFIG_BASE_SMALL ? 128 : 256)