• Barry Naujok's avatar
    [XFS] Name operation vector for hash and compare · 5163f95a
    Barry Naujok authored
    Adds two pieces of functionality for the basis of case-insensitive support
    in XFS:
    
    1. A comparison result enumerated type: xfs_dacmp. It represents an
    
    exact match, case-insensitive match or no match at all. This patch
    
    only implements different and exact results.
    
    2. xfs_nameops vector for specifying how to perform the hash generation
    
    of filenames and comparision methods. In this patch the hash vector
    
    points to the existing xfs_da_hashname function and the comparison
    
    method does a length compare, and if the same, does a memcmp and
    
    return the xfs_dacmp result.
    
    All filename functions that use the hash (create, lookup remove, rename,
    etc) now use the xfs_nameops.hashname function and all directory lookup
    functions also use the xfs_nameops.compname function.
    
    The lookup functions also handle case-insensitive results even though the
    default comparison function cannot return that. And important aspect of
    the lookup functions is that an exact match always has precedence over a
    case-insensitive. So while a case-insensitive match is found, we have to
    keep looking just in case there is an exact match. In the meantime, the
    info for the first case-insensitive match is retained if no exact match is
    found.
    
    SGI-PV: 981519
    SGI-Modid: xfs-linux-melb:xfs-kern:31205a
    Signed-off-by: default avatarBarry Naujok <bnaujok@sgi.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
    5163f95a
xfs_dir2_data.c 24.8 KB