On Thu, Dec 27, 2007 at 04:02:56PM -0800, Christoph Lameter wrote:
Oh, lovely. So we can have module A do kmem_cache_create(), calling
cache "foo". Then module B does (without any knowlegde about A)
completely unrelated kmem_cache_create(), calling the sucker "bar".
mm/slub decides that they are mergable. Then we get rmmod A... and
no way to find out if that's foo or bar going away - kmem_cache_destroy()
doesn't have enough information to figure that out. So we have to keep
both slab/foo and slab/bar around until both are gone or until somebody
kind enough creates a cache called foo. Better yet, on some systems you
get things like slab/nfsd4_delegations sticking around long after nfsd is
gone just because slub.c decides that it's sharable, but in the next
kernel version the thing it's shared with gets different object size and
behaviour suddenly changes - now it's gone as soon as nfsd is gone.
Brilliant interface, that...
--