erofs: enable long extended attribute name prefixes
Let's enable long xattr name prefix feature. Old kernels will just ignore / skip such extended attributes. In addition, in case you don't want to mount such images, add another incompatible feature as an option for this. Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com> Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com> Acked-by: Chao Yu <chao@kernel.org> Link: https://lore.kernel.org/r/20230407222808.19670-1-jefflexu@linux.alibaba.com [ Gao Xiang: minor commit message fix. ] Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
This commit is contained in:
@ -27,6 +27,7 @@
|
|||||||
#define EROFS_FEATURE_INCOMPAT_ZTAILPACKING 0x00000010
|
#define EROFS_FEATURE_INCOMPAT_ZTAILPACKING 0x00000010
|
||||||
#define EROFS_FEATURE_INCOMPAT_FRAGMENTS 0x00000020
|
#define EROFS_FEATURE_INCOMPAT_FRAGMENTS 0x00000020
|
||||||
#define EROFS_FEATURE_INCOMPAT_DEDUPE 0x00000020
|
#define EROFS_FEATURE_INCOMPAT_DEDUPE 0x00000020
|
||||||
|
#define EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES 0x00000040
|
||||||
#define EROFS_ALL_FEATURE_INCOMPAT \
|
#define EROFS_ALL_FEATURE_INCOMPAT \
|
||||||
(EROFS_FEATURE_INCOMPAT_ZERO_PADDING | \
|
(EROFS_FEATURE_INCOMPAT_ZERO_PADDING | \
|
||||||
EROFS_FEATURE_INCOMPAT_COMPR_CFGS | \
|
EROFS_FEATURE_INCOMPAT_COMPR_CFGS | \
|
||||||
@ -36,7 +37,8 @@
|
|||||||
EROFS_FEATURE_INCOMPAT_COMPR_HEAD2 | \
|
EROFS_FEATURE_INCOMPAT_COMPR_HEAD2 | \
|
||||||
EROFS_FEATURE_INCOMPAT_ZTAILPACKING | \
|
EROFS_FEATURE_INCOMPAT_ZTAILPACKING | \
|
||||||
EROFS_FEATURE_INCOMPAT_FRAGMENTS | \
|
EROFS_FEATURE_INCOMPAT_FRAGMENTS | \
|
||||||
EROFS_FEATURE_INCOMPAT_DEDUPE)
|
EROFS_FEATURE_INCOMPAT_DEDUPE | \
|
||||||
|
EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES)
|
||||||
|
|
||||||
#define EROFS_SB_EXTSLOT_SIZE 16
|
#define EROFS_SB_EXTSLOT_SIZE 16
|
||||||
|
|
||||||
|
@ -285,6 +285,7 @@ EROFS_FEATURE_FUNCS(compr_head2, incompat, INCOMPAT_COMPR_HEAD2)
|
|||||||
EROFS_FEATURE_FUNCS(ztailpacking, incompat, INCOMPAT_ZTAILPACKING)
|
EROFS_FEATURE_FUNCS(ztailpacking, incompat, INCOMPAT_ZTAILPACKING)
|
||||||
EROFS_FEATURE_FUNCS(fragments, incompat, INCOMPAT_FRAGMENTS)
|
EROFS_FEATURE_FUNCS(fragments, incompat, INCOMPAT_FRAGMENTS)
|
||||||
EROFS_FEATURE_FUNCS(dedupe, incompat, INCOMPAT_DEDUPE)
|
EROFS_FEATURE_FUNCS(dedupe, incompat, INCOMPAT_DEDUPE)
|
||||||
|
EROFS_FEATURE_FUNCS(xattr_prefixes, incompat, INCOMPAT_XATTR_PREFIXES)
|
||||||
EROFS_FEATURE_FUNCS(sb_chksum, compat, COMPAT_SB_CHKSUM)
|
EROFS_FEATURE_FUNCS(sb_chksum, compat, COMPAT_SB_CHKSUM)
|
||||||
|
|
||||||
/* atomic flag definitions */
|
/* atomic flag definitions */
|
||||||
|
@ -385,6 +385,8 @@ static int erofs_read_superblock(struct super_block *sb)
|
|||||||
sbi->meta_blkaddr = le32_to_cpu(dsb->meta_blkaddr);
|
sbi->meta_blkaddr = le32_to_cpu(dsb->meta_blkaddr);
|
||||||
#ifdef CONFIG_EROFS_FS_XATTR
|
#ifdef CONFIG_EROFS_FS_XATTR
|
||||||
sbi->xattr_blkaddr = le32_to_cpu(dsb->xattr_blkaddr);
|
sbi->xattr_blkaddr = le32_to_cpu(dsb->xattr_blkaddr);
|
||||||
|
sbi->xattr_prefix_start = le32_to_cpu(dsb->xattr_prefix_start);
|
||||||
|
sbi->xattr_prefix_count = dsb->xattr_prefix_count;
|
||||||
#endif
|
#endif
|
||||||
sbi->islotbits = ilog2(sizeof(struct erofs_inode_compact));
|
sbi->islotbits = ilog2(sizeof(struct erofs_inode_compact));
|
||||||
sbi->root_nid = le16_to_cpu(dsb->root_nid);
|
sbi->root_nid = le16_to_cpu(dsb->root_nid);
|
||||||
@ -820,6 +822,10 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
err = erofs_xattr_prefixes_init(sb);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
err = erofs_register_sysfs(sb);
|
err = erofs_register_sysfs(sb);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -979,6 +985,7 @@ static void erofs_put_super(struct super_block *sb)
|
|||||||
|
|
||||||
erofs_unregister_sysfs(sb);
|
erofs_unregister_sysfs(sb);
|
||||||
erofs_shrinker_unregister(sb);
|
erofs_shrinker_unregister(sb);
|
||||||
|
erofs_xattr_prefixes_cleanup(sb);
|
||||||
#ifdef CONFIG_EROFS_FS_ZIP
|
#ifdef CONFIG_EROFS_FS_ZIP
|
||||||
iput(sbi->managed_cache);
|
iput(sbi->managed_cache);
|
||||||
sbi->managed_cache = NULL;
|
sbi->managed_cache = NULL;
|
||||||
|
Reference in New Issue
Block a user