xfs
[Top] [All Lists]

Re: TAKE 981521 - Return actual name for CI match for dentry cache

To: "Christoph Hellwig" <hch@xxxxxxxxxxxxx>
Subject: Re: TAKE 981521 - Return actual name for CI match for dentry cache
From: "Barry Naujok" <bnaujok@xxxxxxx>
Date: Wed, 21 May 2008 17:40:56 +1000
Cc: sgi.bugs.xfs@xxxxxxxxxxxx, xfs@xxxxxxxxxxx
In-reply-to: <20080521073625.GA26580@infradead.org>
Organization: SGI
References: <20080521034449.67F4758C4C29@chook.melbourne.sgi.com> <20080521073625.GA26580@infradead.org>
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Opera Mail/9.24 (Win32)
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.



<Prev in Thread] Current Thread [Next in Thread>