• Barry Naujok's avatar
    [XFS] Fix returning case-preserved name with CI node form directories · 90bb7ab0
    Barry Naujok authored
    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 dirent.
    
    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 case-preserved name.
    
    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.
    
    SGI-PV: 983284
    
    SGI-Modid: xfs-linux-melb:xfs-kern:31337a
    Signed-off-by: default avatarBarry Naujok <bnaujok@sgi.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
    Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
    90bb7ab0
xfs_dir2_node.c 59.6 KB