• D
    VFS: Add owner-filesystem positive/negative dentry checks · 525d27b2
    David Howells 提交于
    Supply two functions to test whether a filesystem's own dentries are positive
    or negative (d_really_is_positive() and d_really_is_negative()).
    
    The problem is that the DCACHE_ENTRY_TYPE field of dentry->d_flags may be
    overridden by the union part of a layered filesystem and isn't thus
    necessarily indicative of the type of dentry.
    
    Normally, this would involve a negative dentry (ie. ->d_inode == NULL) having
    ->d_layer.lower pointed to a lower layer dentry, DCACHE_PINNING_LOWER set and
    the DCACHE_ENTRY_TYPE field set to something other than DCACHE_MISS_TYPE - but
    it could also involve, say, a DCACHE_SPECIAL_TYPE being overridden to
    DCACHE_WHITEOUT_TYPE if a 0,0 chardev is detected in the top layer.
    
    However, inside a filesystem, when that fs is looking at its own dentries, it
    probably wants to know if they are really negative or not - and doesn't care
    about the fallthrough bits used by the union.
    
    To this end, a filesystem should normally use d_really_is_positive/negative()
    when looking at its own dentries rather than d_is_positive/negative() and
    should use d_inode() to get at the inode.
    
    Anyone looking at someone else's dentries (this includes pathwalk) should use
    d_is_xxx() and d_backing_inode().
    Signed-off-by: NDavid Howells <dhowells@redhat.com>
    Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
    525d27b2
dcache.h 17.9 KB