• Barry Naujok's avatar
    [XFS] Return case-insensitive match for dentry cache · 384f3ced
    Barry Naujok authored
    This implements the code to store the actual filename found during a
    lookup in the dentry cache and to avoid multiple entries in the dcache
    pointing to the same inode.
    
    To avoid polluting the dcache, we implement a new directory inode
    operations for lookup. xfs_vn_ci_lookup() stores the correct case name in
    the dcache.
    
    The "actual name" is only allocated and returned for a case- insensitive
    match and not an actual match.
    
    Another unusual interaction with the dcache is not storing negative
    dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT
    is returned. During the VFS lookup, if a dentry returned has no inode,
    dput is called and ENOENT is returned. By not doing a d_add, this actually
    removes it completely from the dcache to be reused. create/rename have to
    be modified to support unhashed dentries being passed in.
    
    SGI-PV: 981521
    SGI-Modid: xfs-linux-melb:xfs-kern:31208a
    Signed-off-by: default avatarBarry Naujok <bnaujok@sgi.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
    384f3ced
xfs_dir2_sf.c 36.8 KB