On Thu, 19 Jun 2008 18:32:43 +1000, Christoph Hellwig <hch@xxxxxxxxxxxxx>
On Wed, Jun 18, 2008 at 07:07:59PM +1000, Barry Naujok wrote:
xfs_dir2_node_lookup() calls xfs_da_node_lookup_int() which iterates
through leaf blocks containing the matching hash value for the name
being looked up. Inside xfs_da_node_lookup_int(), it calls the
xfs_dir2_leafn_lookup_for_entry() for each leaf block.
xfs_dir2_leafn_lookup_for_entry() iterates through each matching
hash/offset pair doing a name comparison to find the matching
For CI mode, the state->extrablk retains the details of the block
that has the CI match so xfs_dir2_node_lookup() can return the
The original implementation didn't retain the xfs_da_buf_t properly,
so the lookup was returning a bogus name to be stored in the dentry.
In the case of unlink, the bad name was passed and in debug mode,
ASSERTed when it can't find the entry.
Looks good to me, although I don't really like how much of a mess
xfs_dir2_leafn_lookup_for_entry has become. No idea for a nice why
to write it, though.
Yeah, bit of a problem with that. I can un-optimise the original code
by not keeping the current block between calls to
xfs_dir2_leafn_lookup_for_entry() and always freeing it. That will
clean it up a lot.
Btw, any chance we could get some CI tests in xfsqa? Looks like you
have quite a few testcases that found issues so far.
Yes, they are coming.