• Jingbo Xu's avatar
    erofs: introduce on-disk format for long xattr name prefixes · b3bfcb9d
    Jingbo Xu authored
    Besides the predefined xattr name prefixes, introduces long xattr name
    prefixes, which work similarly as the predefined name prefixes, except
    that they are user specified.
    
    It is especially useful for use cases together with overlayfs like
    Composefs model, which introduces diverse xattr values with only a few
    common xattr names (trusted.overlay.redirect, trusted.overlay.digest,
    and maybe more in the future).  That makes the existing predefined
    prefixes ineffective in both image size and runtime performance.
    
    When a user specified long xattr name prefix is used, only the trailing
    part of the xattr name apart from the long xattr name prefix will be
    stored in erofs_xattr_entry.e_name.  e_name is empty if the xattr name
    matches exactly as the long xattr name prefix.  All long xattr prefixes
    are stored in the packed or meta inode, which depends if fragments
    feature is enabled or not.
    
    For each long xattr name prefix, the on-disk format is kept as the same
    as the unique metadata format: ALIGN({__le16 len, data}, 4), where len
    represents the total size of struct erofs_xattr_long_prefix, followed
    by data of struct erofs_xattr_long_prefix itself.
    
    Each erofs_xattr_long_prefix keeps predefined prefixes (base_index)
    and the remaining prefix string without the trailing '\0'.
    
    Two fields are introduced to the on-disk superblock, where
    xattr_prefix_count represents the total number of the long xattr name
    prefixes recorded, and xattr_prefix_start represents the start offset of
    recorded name prefixes in the packed/meta inode divided by 4.
    
    When referring to a long xattr name prefix, the highest bit (bit 7) of
    erofs_xattr_entry.e_name_index is set, while the lower bits (bit 0-6)
    as a whole represents the index of the referred long name prefix among
    all long xattr name prefixes.
    Signed-off-by: default avatarJingbo Xu <jefflexu@linux.alibaba.com>
    Reviewed-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    Acked-by: default avatarChao Yu <chao@kernel.org>
    Link: https://lore.kernel.org/r/20230407141710.113882-5-jefflexu@linux.alibaba.comSigned-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    b3bfcb9d
erofs_fs.h 14.1 KB