On Wed, 21 May 2008 17:36:25 +1000, Christoph Hellwig <hch@xxxxxxxxxxxxx>
wrote:
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.
I have pushed all patches to oss master git tree now.
I'm not sure how CVS can get updated.
Barry.
|