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.
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html