• Linus Torvalds's avatar
    lockref: add ability to mark lockrefs "dead" · e7d33bb5
    Linus Torvalds authored
    The only actual current lockref user (dcache) uses zero reference counts
    even for perfectly live dentries, because it's a cache: there may not be
    any users, but that doesn't mean that we want to throw away the dentry.
    
    At the same time, the dentry cache does have a notion of a truly "dead"
    dentry that we must not even increment the reference count of, because
    we have pruned it and it is not valid.
    
    Currently that distinction is not visible in the lockref itself, and the
    dentry cache validation uses "lockref_get_or_lock()" to either get a new
    reference to a dentry that already had existing references (and thus
    cannot be dead), or get the dentry lock so that we can then verify the
    dentry and increment the reference count under the lock if that
    verification was successful.
    
    That's all somewhat complicated.
    
    This adds the concept of being "dead" to the lockref itself, by simply
    using a count that is negative.  This allows a usage scenario where we
    can increment the refcount of a dentry without having to validate it,
    and pushing the special "we killed it" case into the lockref code.
    
    The dentry code itself doesn't actually use this yet, and it's probably
    too late in the merge window to do that code (the dentry_kill() code
    with its "should I decrement the count" logic really is pretty complex
    code), but let's introduce the concept at the lockref level now.
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e7d33bb5
lockref.c 3.39 KB