diff options
author | Gao Xiang <gaoxiang25@huawei.com> | 2019-12-31 16:22:00 +0800 |
---|---|---|
committer | Gao Xiang <gaoxiang25@huawei.com> | 2020-01-02 23:18:44 +0800 |
commit | 622be103825c406226c7aa38e76b7b02268075f9 (patch) | |
tree | a236add627d381884bda130b0cb60647a5c4fe05 | |
parent | 2d34da865a52c6d3c16668d11c009e84e4e2191b (diff) |
erofs-utils: wrap up sb feature operations
Add some helpers for shorter lines. No logic change.
Link: https://lore.kernel.org/r/20191231082200.152744-1-gaoxiang25@huawei.com
Reviewed-by: Li Guifu <blucer.lee@foxmail.com>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
-rw-r--r-- | include/erofs/internal.h | 17 | ||||
-rw-r--r-- | lib/compress.c | 18 | ||||
-rw-r--r-- | mkfs/main.c | 7 |
3 files changed, 28 insertions, 14 deletions
diff --git a/include/erofs/internal.h b/include/erofs/internal.h index e13adda..e7d5a64 100644 --- a/include/erofs/internal.h +++ b/include/erofs/internal.h @@ -62,6 +62,23 @@ struct erofs_sb_info { /* global sbi */ extern struct erofs_sb_info sbi; +#define EROFS_FEATURE_FUNCS(name, compat, feature) \ +static inline bool erofs_sb_has_##name(void) \ +{ \ + return sbi.feature_##compat & EROFS_FEATURE_##feature; \ +} \ +static inline void erofs_sb_set_##name(void) \ +{ \ + sbi.feature_##compat |= EROFS_FEATURE_##feature; \ +} \ +static inline void erofs_sb_clear_##name(void) \ +{ \ + sbi.feature_##compat &= ~EROFS_FEATURE_##feature; \ +} + +EROFS_FEATURE_FUNCS(lz4_0padding, incompat, INCOMPAT_LZ4_0PADDING) +EROFS_FEATURE_FUNCS(sb_chksum, compat, COMPAT_SB_CHKSUM) + struct erofs_inode { struct list_head i_hash, i_subdirs, i_xattrs; diff --git a/lib/compress.c b/lib/compress.c index 99fd527..8337487 100644 --- a/lib/compress.c +++ b/lib/compress.c @@ -120,13 +120,12 @@ static int write_uncompressed_block(struct z_erofs_vle_compress_ctx *ctx, int ret; unsigned int count; - if (!(sbi.feature_incompat & EROFS_FEATURE_INCOMPAT_LZ4_0PADDING)) { - /* fix up clusterofs to 0 if possable */ - if (ctx->head >= ctx->clusterofs) { - ctx->head -= ctx->clusterofs; - *len += ctx->clusterofs; - ctx->clusterofs = 0; - } + /* reset clusterofs to 0 if permitted */ + if (!erofs_sb_has_lz4_0padding() && + ctx->head >= ctx->clusterofs) { + ctx->head -= ctx->clusterofs; + *len += ctx->clusterofs; + ctx->clusterofs = 0; } /* write uncompressed data */ @@ -184,8 +183,7 @@ nocompression: erofs_dbg("Writing %u compressed data to block %u", count, ctx->blkaddr); - if (sbi.feature_incompat & - EROFS_FEATURE_INCOMPAT_LZ4_0PADDING) + if (erofs_sb_has_lz4_0padding()) ret = blk_write(dst - (EROFS_BLKSIZ - ret), ctx->blkaddr, 1); else @@ -514,7 +512,7 @@ int z_erofs_compress_init(void) */ if (!cfg.c_compr_alg_master || strncmp(cfg.c_compr_alg_master, "lz4", 3)) - sbi.feature_incompat &= ~EROFS_FEATURE_INCOMPAT_LZ4_0PADDING; + erofs_sb_clear_lz4_0padding(); if (!cfg.c_compr_alg_master) return 0; diff --git a/mkfs/main.c b/mkfs/main.c index 7493a48..817a6c1 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -98,8 +98,7 @@ static int parse_extended_opts(const char *opts) return -EINVAL; /* disable compacted indexes and 0padding */ cfg.c_legacy_compress = true; - sbi.feature_incompat &= - ~EROFS_FEATURE_INCOMPAT_LZ4_0PADDING; + erofs_sb_clear_lz4_0padding(); } if (MATCH_EXTENTED_OPT("force-inode-compact", token, keylen)) { @@ -117,7 +116,7 @@ static int parse_extended_opts(const char *opts) if (MATCH_EXTENTED_OPT("nosbcrc", token, keylen)) { if (vallen) return -EINVAL; - sbi.feature_compat &= ~EROFS_FEATURE_COMPAT_SB_CHKSUM; + erofs_sb_clear_sb_chksum(); } } return 0; @@ -424,7 +423,7 @@ int main(int argc, char **argv) else err = dev_resize(nblocks); - if (!err && (sbi.feature_compat & EROFS_FEATURE_COMPAT_SB_CHKSUM)) + if (!err && erofs_sb_has_sb_chksum()) err = erofs_mkfs_superblock_csum_set(); exit: z_erofs_compress_exit(); |