• 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
    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>
xfs_dir2_data.c 24.8 KB