Messages in this thread | | | Date | Wed, 22 Oct 2008 12:54:30 -0700 (PDT) | From | Christoph Lameter <> | Subject | Re: SLUB defrag pull request? |
| |
On Wed, 22 Oct 2008, Miklos Szeredi wrote:
> Why? The kmem_cache_free() doesn't touch the contents of the object, > does it?
Because filesystem code may be running on other processors which may be freeing the dentry.
>> Because the slab starts out with a series of objects left in a slab. It >> needs to do build a list of objects etc in a way that is independent as >> possible from the user of the slab page. It does that by locking the slab >> page so that free operations stall until the reference has been >> established. If it would not be shutting off frees then the objects could >> vanish under us. > > It doesn't matter. All we care about is that the dentry is on the > lru: it's cached but unused. Every other state (being created, > active, being freed, freed) is uninteresting.
We cannot figure out that it is on the lru if we do not have a stable reference to the object.
> Sure, and all that is possible without doing this messy 2 phase thing. > Unless I'm still missing something obvious...
Obviously one cannot free or handle an object that may be concurrently freed on another processor.
| |