[PATCH v2 4/4] erofs-utils: dump: add some superblock fields
Guo Xuenan
guoxuenan at huawei.com
Sun Jul 23 01:04:34 AEST 2023
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 <guoxuenan at huawei.com>
---
dump/main.c | 11 +++++++++++
include/erofs/internal.h | 1 +
lib/super.c | 6 +++++-
3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/dump/main.c b/dump/main.c
index 0bbb57d..c4eefd3 100644
--- a/dump/main.c
+++ b/dump/main.c
@@ -92,12 +92,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);
@@ -607,6 +609,15 @@ static void erofsdump_show_superblock(void)
if (erofs_sb_has_fragments(&sbi) && sbi.packed_nid > 0)
fprintf(stdout, "Filesystem packed nid: %llu\n",
sbi.packed_nid | 0ULL);
+ if (erofs_sb_has_compr_cfgs(&sbi)) {
+ 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 04a9a69..a1bf55e 100644
--- a/include/erofs/internal.h
+++ b/include/erofs/internal.h
@@ -73,6 +73,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 16a1d62..3acf30b 100644
--- a/lib/super.c
+++ b/lib/super.c
@@ -106,11 +106,15 @@ int erofs_read_superblock(struct erofs_sb_info *sbi)
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))
+ 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.34.3
More information about the Linux-erofs
mailing list