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 ae1ffa0..2cb412d 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:                        
");
+               zerofs_print_supported_compressors(stdout, 
sbi.available_compr_algs);
+       } else {
+               fprintf(stdout, "Filesystem lz4_max_dist:                      
%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

Reply via email to