On Wed, May 21, 2008 at 01:44:49PM +1000, Barry Naujok wrote:
> Return case-insensitive match for dentry cache
> 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.
This requires the d_add_ci helper which doesn't exist in the CVS on oss.