dump.erofs show compression algorithms and sb_extslots, and update feature information.
The proposed super block info is shown as below: Filesystem magic number: 0xE0F5E1E2 Filesystem blocks: 4624 Filesystem inode metadata start block: 0 Filesystem shared xattr metadata start block: 0 Filesystem root nid: 37 Filesystem compr_algs: lz4, lz4hc, lzma Filesystem sb_extslots: 0 Filesystem inode count: 6131 Filesystem created: Wed Jun 7 17:15:44 2023 Filesystem features: sb_csum mtime 0padding compr_cfgs big_pcluster Filesystem UUID: not available Signed-off-by: Guo Xuenan <guoxue...@huawei.com> --- dump/main.c | 11 +++++++++++ include/erofs/internal.h | 1 + lib/super.c | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/dump/main.c b/dump/main.c index 758e14a..bb8d9ef 100644 --- a/dump/main.c +++ b/dump/main.c @@ -94,12 +94,14 @@ static struct erofsdump_feature feature_lists[] = { { true, EROFS_FEATURE_COMPAT_SB_CHKSUM, "sb_csum" }, { true, EROFS_FEATURE_COMPAT_MTIME, "mtime" }, { false, EROFS_FEATURE_INCOMPAT_ZERO_PADDING, "0padding" }, + { false, EROFS_FEATURE_INCOMPAT_COMPR_CFGS, "compr_cfgs" }, { false, EROFS_FEATURE_INCOMPAT_BIG_PCLUSTER, "big_pcluster" }, { false, EROFS_FEATURE_INCOMPAT_CHUNKED_FILE, "chunked_file" }, { false, EROFS_FEATURE_INCOMPAT_DEVICE_TABLE, "device_table" }, { false, EROFS_FEATURE_INCOMPAT_ZTAILPACKING, "ztailpacking" }, { false, EROFS_FEATURE_INCOMPAT_FRAGMENTS, "fragments" }, { false, EROFS_FEATURE_INCOMPAT_DEDUPE, "dedupe" }, + { false, EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES, "xattr_prefixes" }, }; static int erofsdump_readdir(struct erofs_dir_context *ctx); @@ -609,6 +611,15 @@ static void erofsdump_show_superblock(void) if (erofs_sb_has_fragments() && sbi.packed_nid > 0) fprintf(stdout, "Filesystem packed nid: %llu\n", sbi.packed_nid | 0ULL); + if (erofs_sb_has_compr_cfgs()) { + fprintf(stdout, "Filesystem compr_algs: "); + erofs_print_supported_compressors(stdout, sbi.available_compr_algs); + } else { + fprintf(stdout, "Filesystem lz4_max_distance: %u\n", + sbi.lz4_max_distance | 0U); + } + fprintf(stdout, "Filesystem sb_extslots: %u\n", + sbi.extslots | 0U); fprintf(stdout, "Filesystem inode count: %llu\n", sbi.inos | 0ULL); fprintf(stdout, "Filesystem created: %s", diff --git a/include/erofs/internal.h b/include/erofs/internal.h index ab964d4..95e49aa 100644 --- a/include/erofs/internal.h +++ b/include/erofs/internal.h @@ -74,6 +74,7 @@ struct erofs_sb_info { u32 feature_incompat; u64 build_time; u32 build_time_nsec; + u8 extslots; unsigned char islotbits; unsigned char blkszbits; diff --git a/lib/super.c b/lib/super.c index 820c883..102a527 100644 --- a/lib/super.c +++ b/lib/super.c @@ -105,11 +105,16 @@ int erofs_read_superblock(void) sbi.packed_nid = le64_to_cpu(dsb->packed_nid); sbi.inos = le64_to_cpu(dsb->inos); sbi.checksum = le32_to_cpu(dsb->checksum); + sbi.extslots = dsb->sb_extslots; sbi.build_time = le64_to_cpu(dsb->build_time); sbi.build_time_nsec = le32_to_cpu(dsb->build_time_nsec); memcpy(&sbi.uuid, dsb->uuid, sizeof(dsb->uuid)); + if (erofs_sb_has_compr_cfgs()) + sbi.available_compr_algs = le16_to_cpu(dsb->u1.available_compr_algs); + else + sbi.lz4_max_distance = le16_to_cpu(dsb->u1.lz4_max_distance); return erofs_init_devices(&sbi, dsb); } -- 2.31.1