Rename the global `sbi` to `g_sbi` to prepare for the upcoming per-sbi buffer.
It is checked by enabling multi-threadding option. Signed-off-by: Hongzhen Luo <hongz...@linux.alibaba.com> --- v2: The same as v1. v1: https://lore.kernel.org/all/20240703121247.3797289-2-hongz...@linux.alibaba.com/ --- dump/main.c | 58 +++++++++---------- fsck/main.c | 34 +++++------ fuse/main.c | 40 ++++++------- include/erofs/cache.h | 6 +- include/erofs/internal.h | 2 +- lib/cache.c | 22 +++---- lib/config.c | 2 +- lib/diskbuf.c | 6 +- lib/rebuild.c | 4 +- mkfs/main.c | 122 +++++++++++++++++++-------------------- 10 files changed, 148 insertions(+), 148 deletions(-) diff --git a/dump/main.c b/dump/main.c index 7c77c92..06ca4d3 100644 --- a/dump/main.c +++ b/dump/main.c @@ -166,10 +166,10 @@ static int erofsdump_parse_options_cfg(int argc, char **argv) usage(argc, argv); exit(0); case 3: - err = erofs_blob_open_ro(&sbi, optarg); + err = erofs_blob_open_ro(&g_sbi, optarg); if (err) return err; - ++sbi.extra_devices; + ++g_sbi.extra_devices; break; case 4: dumpcfg.inode_path = optarg; @@ -180,7 +180,7 @@ static int erofsdump_parse_options_cfg(int argc, char **argv) dumpcfg.show_subdirectories = true; break; case 6: - sbi.bdev.offset = strtoull(optarg, &endptr, 0); + g_sbi.bdev.offset = strtoull(optarg, &endptr, 0); if (*endptr != '\0') { erofs_err("invalid disk offset %s", optarg); return -EINVAL; @@ -289,9 +289,9 @@ static int erofsdump_read_packed_inode(void) { int err; erofs_off_t occupied_size = 0; - struct erofs_inode vi = { .sbi = &sbi, .nid = sbi.packed_nid }; + struct erofs_inode vi = { .sbi = &g_sbi, .nid = g_sbi.packed_nid }; - if (!(erofs_sb_has_fragments(&sbi) && sbi.packed_nid > 0)) + if (!(erofs_sb_has_fragments(&g_sbi) && g_sbi.packed_nid > 0)) return 0; err = erofs_read_inode_from_disk(&vi); @@ -315,7 +315,7 @@ static int erofsdump_readdir(struct erofs_dir_context *ctx) { int err; erofs_off_t occupied_size = 0; - struct erofs_inode vi = { .sbi = &sbi, .nid = ctx->de_nid }; + struct erofs_inode vi = { .sbi = &g_sbi, .nid = ctx->de_nid }; err = erofs_read_inode_from_disk(&vi); if (err) { @@ -370,7 +370,7 @@ static void erofsdump_show_fileinfo(bool show_extent) int err, i; erofs_off_t size; u16 access_mode; - struct erofs_inode inode = { .sbi = &sbi, .nid = dumpcfg.nid }; + struct erofs_inode inode = { .sbi = &g_sbi, .nid = dumpcfg.nid }; char path[PATH_MAX]; char access_mode_str[] = "rwxrwxrwx"; char timebuf[128] = {0}; @@ -582,7 +582,7 @@ static void erofsdump_print_statistic(void) .pnid = 0, .dir = NULL, .cb = erofsdump_dirent_iter, - .de_nid = sbi.root_nid, + .de_nid = g_sbi.root_nid, .dname = "", .de_namelen = 0, }; @@ -626,48 +626,48 @@ static void erofsdump_print_supported_compressors(FILE *f, unsigned int mask) static void erofsdump_show_superblock(void) { - time_t time = sbi.build_time; + time_t time = g_sbi.build_time; char uuid_str[37]; int i = 0; fprintf(stdout, "Filesystem magic number: 0x%04X\n", EROFS_SUPER_MAGIC_V1); fprintf(stdout, "Filesystem blocksize: %u\n", - erofs_blksiz(&sbi)); + erofs_blksiz(&g_sbi)); fprintf(stdout, "Filesystem blocks: %llu\n", - sbi.total_blocks | 0ULL); + g_sbi.total_blocks | 0ULL); fprintf(stdout, "Filesystem inode metadata start block: %u\n", - sbi.meta_blkaddr); + g_sbi.meta_blkaddr); fprintf(stdout, "Filesystem shared xattr metadata start block: %u\n", - sbi.xattr_blkaddr); + g_sbi.xattr_blkaddr); fprintf(stdout, "Filesystem root nid: %llu\n", - sbi.root_nid | 0ULL); - if (erofs_sb_has_fragments(&sbi) && sbi.packed_nid > 0) + g_sbi.root_nid | 0ULL); + if (erofs_sb_has_fragments(&g_sbi) && g_sbi.packed_nid > 0) fprintf(stdout, "Filesystem packed nid: %llu\n", - sbi.packed_nid | 0ULL); - if (erofs_sb_has_compr_cfgs(&sbi)) { + g_sbi.packed_nid | 0ULL); + if (erofs_sb_has_compr_cfgs(&g_sbi)) { fprintf(stdout, "Filesystem compr_algs: "); erofsdump_print_supported_compressors(stdout, - sbi.available_compr_algs); + g_sbi.available_compr_algs); } else { fprintf(stdout, "Filesystem lz4_max_distance: %u\n", - sbi.lz4_max_distance | 0U); + g_sbi.lz4_max_distance | 0U); } fprintf(stdout, "Filesystem sb_size: %u\n", - sbi.sb_size | 0U); + g_sbi.sb_size | 0U); fprintf(stdout, "Filesystem inode count: %llu\n", - sbi.inos | 0ULL); + g_sbi.inos | 0ULL); fprintf(stdout, "Filesystem created: %s", ctime(&time)); fprintf(stdout, "Filesystem features: "); for (; i < ARRAY_SIZE(feature_lists); i++) { u32 feat = le32_to_cpu(feature_lists[i].compat ? - sbi.feature_compat : - sbi.feature_incompat); + g_sbi.feature_compat : + g_sbi.feature_incompat); if (feat & feature_lists[i].flag) fprintf(stdout, "%s ", feature_lists[i].name); } - erofs_uuid_unparse_lower(sbi.uuid, uuid_str); + erofs_uuid_unparse_lower(g_sbi.uuid, uuid_str); fprintf(stdout, "\nFilesystem UUID: %s\n", uuid_str); } @@ -684,13 +684,13 @@ int main(int argc, char **argv) goto exit; } - err = erofs_dev_open(&sbi, cfg.c_img_path, O_RDONLY | O_TRUNC); + err = erofs_dev_open(&g_sbi, cfg.c_img_path, O_RDONLY | O_TRUNC); if (err) { erofs_err("failed to open image file"); goto exit; } - err = erofs_read_superblock(&sbi); + err = erofs_read_superblock(&g_sbi); if (err) { erofs_err("failed to read superblock"); goto exit_dev_close; @@ -715,11 +715,11 @@ int main(int argc, char **argv) erofsdump_show_fileinfo(dumpcfg.show_extent); exit_put_super: - erofs_put_super(&sbi); + erofs_put_super(&g_sbi); exit_dev_close: - erofs_dev_close(&sbi); + erofs_dev_close(&g_sbi); exit: - erofs_blob_closeall(&sbi); + erofs_blob_closeall(&g_sbi); erofs_exit_configure(); return err; } diff --git a/fsck/main.c b/fsck/main.c index a505e99..8ec9486 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -183,10 +183,10 @@ static int erofsfsck_parse_options_cfg(int argc, char **argv) } break; case 3: - ret = erofs_blob_open_ro(&sbi, optarg); + ret = erofs_blob_open_ro(&g_sbi, optarg); if (ret) return ret; - ++sbi.extra_devices; + ++g_sbi.extra_devices; break; case 4: fsckcfg.force = true; @@ -219,7 +219,7 @@ static int erofsfsck_parse_options_cfg(int argc, char **argv) has_opt_preserve = true; break; case 12: - sbi.bdev.offset = strtoull(optarg, &endptr, 0); + g_sbi.bdev.offset = strtoull(optarg, &endptr, 0); if (*endptr != '\0') { erofs_err("invalid disk offset %s", optarg); return -EINVAL; @@ -311,7 +311,7 @@ static int erofs_check_sb_chksum(void) struct erofs_super_block *sb; int ret; - ret = erofs_blk_read(&sbi, 0, buf, 0, 1); + ret = erofs_blk_read(&g_sbi, 0, buf, 0, 1); if (ret) { erofs_err("failed to read superblock to check checksum: %d", ret); @@ -321,10 +321,10 @@ static int erofs_check_sb_chksum(void) sb = (struct erofs_super_block *)(buf + EROFS_SUPER_OFFSET); sb->checksum = 0; - crc = erofs_crc32c(~0, (u8 *)sb, erofs_blksiz(&sbi) - EROFS_SUPER_OFFSET); - if (crc != sbi.checksum) { + crc = erofs_crc32c(~0, (u8 *)sb, erofs_blksiz(&g_sbi) - EROFS_SUPER_OFFSET); + if (crc != g_sbi.checksum) { erofs_err("superblock chksum doesn't match: saved(%08xh) calculated(%08xh)", - sbi.checksum, crc); + g_sbi.checksum, crc); fsckcfg.corrupted = true; return -1; } @@ -889,7 +889,7 @@ static int erofsfsck_check_inode(erofs_nid_t pnid, erofs_nid_t nid) erofs_dbg("check inode: nid(%llu)", nid | 0ULL); inode.nid = nid; - inode.sbi = &sbi; + inode.sbi = &g_sbi; ret = erofs_read_inode_from_disk(&inode); if (ret) { if (ret == -EIO) @@ -965,19 +965,19 @@ int main(int argc, char *argv[]) cfg.c_dbg_lvl = -1; #endif - err = erofs_dev_open(&sbi, cfg.c_img_path, O_RDONLY); + err = erofs_dev_open(&g_sbi, cfg.c_img_path, O_RDONLY); if (err) { erofs_err("failed to open image file"); goto exit; } - err = erofs_read_superblock(&sbi); + err = erofs_read_superblock(&g_sbi); if (err) { erofs_err("failed to read superblock"); goto exit_dev_close; } - if (erofs_sb_has_sb_chksum(&sbi) && erofs_check_sb_chksum()) { + if (erofs_sb_has_sb_chksum(&g_sbi) && erofs_check_sb_chksum()) { erofs_err("failed to verify superblock checksum"); goto exit_put_super; } @@ -985,15 +985,15 @@ int main(int argc, char *argv[]) if (fsckcfg.extract_path) erofsfsck_hardlink_init(); - if (erofs_sb_has_fragments(&sbi) && sbi.packed_nid > 0) { - err = erofsfsck_check_inode(sbi.packed_nid, sbi.packed_nid); + if (erofs_sb_has_fragments(&g_sbi) && g_sbi.packed_nid > 0) { + err = erofsfsck_check_inode(g_sbi.packed_nid, g_sbi.packed_nid); if (err) { erofs_err("failed to verify packed file"); goto exit_hardlink; } } - err = erofsfsck_check_inode(sbi.root_nid, sbi.root_nid); + err = erofsfsck_check_inode(g_sbi.root_nid, g_sbi.root_nid); if (fsckcfg.corrupted) { if (!fsckcfg.extract_path) erofs_err("Found some filesystem corruption"); @@ -1019,11 +1019,11 @@ exit_hardlink: if (fsckcfg.extract_path) erofsfsck_hardlink_exit(); exit_put_super: - erofs_put_super(&sbi); + erofs_put_super(&g_sbi); exit_dev_close: - erofs_dev_close(&sbi); + erofs_dev_close(&g_sbi); exit: - erofs_blob_closeall(&sbi); + erofs_blob_closeall(&g_sbi); erofs_exit_configure(); return err ? 1 : 0; } diff --git a/fuse/main.c b/fuse/main.c index 70e3218..f6c04e8 100644 --- a/fuse/main.c +++ b/fuse/main.c @@ -41,13 +41,13 @@ struct erofsfuse_lookupdir_context { static inline erofs_nid_t erofsfuse_to_nid(fuse_ino_t ino) { if (ino == FUSE_ROOT_ID) - return sbi.root_nid; + return g_sbi.root_nid; return (erofs_nid_t)(ino - FUSE_ROOT_ID); } static inline fuse_ino_t erofsfuse_to_ino(erofs_nid_t nid) { - if (nid == sbi.root_nid) + if (nid == g_sbi.root_nid) return FUSE_ROOT_ID; return (nid + FUSE_ROOT_ID); } @@ -60,7 +60,7 @@ static void erofsfuse_fill_stat(struct erofs_inode *vi, struct stat *stbuf) stbuf->st_mode = vi->i_mode; stbuf->st_nlink = vi->i_nlink; stbuf->st_size = vi->i_size; - stbuf->st_blocks = roundup(vi->i_size, erofs_blksiz(&sbi)) >> 9; + stbuf->st_blocks = roundup(vi->i_size, erofs_blksiz(&g_sbi)) >> 9; stbuf->st_uid = vi->i_uid; stbuf->st_gid = vi->i_gid; stbuf->st_ctime = vi->i_mtime; @@ -94,7 +94,7 @@ static int erofsfuse_add_dentry(struct erofs_dir_context *ctx) #if FUSE_MAJOR_VERSION >= 3 int ret; struct erofs_inode vi = { - .sbi = &sbi, + .sbi = &g_sbi, .nid = ctx->de_nid }; @@ -140,7 +140,7 @@ static int erofsfuse_lookup_dentry(struct erofs_dir_context *ctx) if (!strncmp(lookup_ctx->target_name, ctx->dname, ctx->de_namelen)) { int ret; struct erofs_inode vi = { - .sbi = &sbi, + .sbi = &g_sbi, .nid = (erofs_nid_t)ctx->de_nid, }; @@ -236,7 +236,7 @@ static void erofsfuse_open(fuse_req_t req, fuse_ino_t ino, return; } - vi->sbi = &sbi; + vi->sbi = &g_sbi; vi->nid = erofsfuse_to_nid(ino); ret = erofs_read_inode_from_disk(vi); if (ret < 0) { @@ -262,7 +262,7 @@ static void erofsfuse_getattr(fuse_req_t req, fuse_ino_t ino, { int ret; struct stat stbuf = { 0 }; - struct erofs_inode vi = { .sbi = &sbi, .nid = erofsfuse_to_nid(ino) }; + struct erofs_inode vi = { .sbi = &g_sbi, .nid = erofsfuse_to_nid(ino) }; ret = erofs_read_inode_from_disk(&vi); if (ret < 0) @@ -286,7 +286,7 @@ static void erofsfuse_opendir(fuse_req_t req, fuse_ino_t ino, return; } - vi->sbi = &sbi; + vi->sbi = &g_sbi; vi->nid = erofsfuse_to_nid(ino); ret = erofs_read_inode_from_disk(vi); if (ret < 0) { @@ -329,7 +329,7 @@ static void erofsfuse_lookup(fuse_req_t req, fuse_ino_t parent, return; } - vi->sbi = &sbi; + vi->sbi = &g_sbi; vi->nid = erofsfuse_to_nid(parent); ret = erofs_read_inode_from_disk(vi); if (ret < 0) { @@ -399,7 +399,7 @@ static void erofsfuse_readlink(fuse_req_t req, fuse_ino_t ino) { int ret; char *buf = NULL; - struct erofs_inode vi = { .sbi = &sbi, .nid = erofsfuse_to_nid(ino) }; + struct erofs_inode vi = { .sbi = &g_sbi, .nid = erofsfuse_to_nid(ino) }; ret = erofs_read_inode_from_disk(&vi); if (ret < 0) { @@ -436,7 +436,7 @@ static void erofsfuse_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name, { int ret; char *buf = NULL; - struct erofs_inode vi = { .sbi = &sbi, .nid = erofsfuse_to_nid(ino) }; + struct erofs_inode vi = { .sbi = &g_sbi, .nid = erofsfuse_to_nid(ino) }; erofs_dbg("getattr(%llu): name = %s, size = %zu", ino | 0ULL, name, size); @@ -469,7 +469,7 @@ static void erofsfuse_listxattr(fuse_req_t req, fuse_ino_t ino, size_t size) { int ret; char *buf = NULL; - struct erofs_inode vi = { .sbi = &sbi, .nid = erofsfuse_to_nid(ino) }; + struct erofs_inode vi = { .sbi = &g_sbi, .nid = erofsfuse_to_nid(ino) }; erofs_dbg("listxattr(%llu): size = %zu", ino | 0ULL, size); @@ -573,10 +573,10 @@ static int optional_opt_func(void *data, const char *arg, int key, switch (key) { case 1: - ret = erofs_blob_open_ro(&sbi, arg + sizeof("--device=") - 1); + ret = erofs_blob_open_ro(&g_sbi, arg + sizeof("--device=") - 1); if (ret) return -1; - ++sbi.extra_devices; + ++g_sbi.extra_devices; return 0; case FUSE_OPT_KEY_NONOPT: if (fusecfg.mountpoint) @@ -675,14 +675,14 @@ int main(int argc, char *argv[]) if (fusecfg.odebug && cfg.c_dbg_lvl < EROFS_DBG) cfg.c_dbg_lvl = EROFS_DBG; - sbi.bdev.offset = fusecfg.offset; - ret = erofs_dev_open(&sbi, fusecfg.disk, O_RDONLY); + g_sbi.bdev.offset = fusecfg.offset; + ret = erofs_dev_open(&g_sbi, fusecfg.disk, O_RDONLY); if (ret) { fprintf(stderr, "failed to open: %s\n", fusecfg.disk); goto err_fuse_free_args; } - ret = erofs_read_superblock(&sbi); + ret = erofs_read_superblock(&g_sbi); if (ret) { fprintf(stderr, "failed to read erofs super block\n"); goto err_dev_close; @@ -744,10 +744,10 @@ int main(int argc, char *argv[]) #endif err_super_put: - erofs_put_super(&sbi); + erofs_put_super(&g_sbi); err_dev_close: - erofs_blob_closeall(&sbi); - erofs_dev_close(&sbi); + erofs_blob_closeall(&g_sbi); + erofs_dev_close(&g_sbi); err_fuse_free_args: free(opts.mountpoint); fuse_opt_free_args(&args); diff --git a/include/erofs/cache.h b/include/erofs/cache.h index f30fe9f..234185f 100644 --- a/include/erofs/cache.h +++ b/include/erofs/cache.h @@ -56,14 +56,14 @@ struct erofs_buffer_block { static inline const int get_alignsize(int type, int *type_ret) { if (type == DATA) - return erofs_blksiz(&sbi); + return erofs_blksiz(&g_sbi); if (type == INODE) { *type_ret = META; return sizeof(struct erofs_inode_compact); } else if (type == DIRA) { *type_ret = META; - return erofs_blksiz(&sbi); + return erofs_blksiz(&g_sbi); } else if (type == XATTR) { *type_ret = META; return sizeof(struct erofs_xattr_entry); @@ -87,7 +87,7 @@ static inline erofs_off_t erofs_btell(struct erofs_buffer_head *bh, bool end) if (bb->blkaddr == NULL_ADDR) return NULL_ADDR_UL; - return erofs_pos(&sbi, bb->blkaddr) + + return erofs_pos(&g_sbi, bb->blkaddr) + (end ? list_next_entry(bh, list)->off : bh->off); } diff --git a/include/erofs/internal.h b/include/erofs/internal.h index d5c5ce2..5f70570 100644 --- a/include/erofs/internal.h +++ b/include/erofs/internal.h @@ -48,7 +48,7 @@ typedef u32 erofs_blk_t; #define NULL_ADDR_UL ((unsigned long)-1) /* global sbi */ -extern struct erofs_sb_info sbi; +extern struct erofs_sb_info g_sbi; #define erofs_blksiz(sbi) (1u << (sbi)->blkszbits) #define erofs_blknr(sbi, addr) ((addr) >> (sbi)->blkszbits) diff --git a/lib/cache.c b/lib/cache.c index 328ca4a..e3dc9de 100644 --- a/lib/cache.c +++ b/lib/cache.c @@ -56,7 +56,7 @@ static void erofs_bupdate_mapped(struct erofs_buffer_block *bb) return; bkt = mapped_buckets[bb->type] + - (bb->buffers.off & (erofs_blksiz(&sbi) - 1)); + (bb->buffers.off & (erofs_blksiz(&g_sbi) - 1)); list_del(&bb->mapped_list); list_add_tail(&bb->mapped_list, bkt); } @@ -69,7 +69,7 @@ static int __erofs_battach(struct erofs_buffer_block *bb, unsigned int extrasize, bool dryrun) { - const unsigned int blksiz = erofs_blksiz(&sbi); + const unsigned int blksiz = erofs_blksiz(&g_sbi); const unsigned int blkmask = blksiz - 1; erofs_off_t boff = bb->buffers.off; const erofs_off_t alignedoffset = roundup(boff, alignsize); @@ -86,7 +86,7 @@ static int __erofs_battach(struct erofs_buffer_block *bb, blkaddr = bb->blkaddr; if (blkaddr != NULL_ADDR) { tailupdate = (tail_blkaddr == blkaddr + - BLK_ROUND_UP(&sbi, boff)); + BLK_ROUND_UP(&g_sbi, boff)); if (oob && !tailupdate) return -EINVAL; } @@ -102,7 +102,7 @@ static int __erofs_battach(struct erofs_buffer_block *bb, bb->buffers.off = boff; /* need to update the tail_blkaddr */ if (tailupdate) - tail_blkaddr = blkaddr + BLK_ROUND_UP(&sbi, boff); + tail_blkaddr = blkaddr + BLK_ROUND_UP(&g_sbi, boff); erofs_bupdate_mapped(bb); } return ((alignedoffset + incr - 1) & blkmask) + 1; @@ -125,7 +125,7 @@ static int erofs_bfind_for_attach(int type, erofs_off_t size, unsigned int alignsize, struct erofs_buffer_block **bbp) { - const unsigned int blksiz = erofs_blksiz(&sbi); + const unsigned int blksiz = erofs_blksiz(&g_sbi); struct erofs_buffer_block *cur, *bb; unsigned int used0, used_before, usedmax, used; int ret; @@ -322,7 +322,7 @@ static erofs_blk_t __erofs_mapbh(struct erofs_buffer_block *bb) erofs_bupdate_mapped(bb); } - blkaddr = bb->blkaddr + BLK_ROUND_UP(&sbi, bb->buffers.off); + blkaddr = bb->blkaddr + BLK_ROUND_UP(&g_sbi, bb->buffers.off); if (blkaddr > tail_blkaddr) tail_blkaddr = blkaddr; @@ -360,7 +360,7 @@ static void erofs_bfree(struct erofs_buffer_block *bb) int erofs_bflush(struct erofs_buffer_block *bb) { - const unsigned int blksiz = erofs_blksiz(&sbi); + const unsigned int blksiz = erofs_blksiz(&g_sbi); struct erofs_buffer_block *p, *n; erofs_blk_t blkaddr; @@ -392,11 +392,11 @@ int erofs_bflush(struct erofs_buffer_block *bb) padding = blksiz - (p->buffers.off & (blksiz - 1)); if (padding != blksiz) - erofs_dev_fillzero(&sbi, erofs_pos(&sbi, blkaddr) - padding, + erofs_dev_fillzero(&g_sbi, erofs_pos(&g_sbi, blkaddr) - padding, padding, true); if (p->type != DATA) - erofs_metablkcnt += BLK_ROUND_UP(&sbi, p->buffers.off); + erofs_metablkcnt += BLK_ROUND_UP(&g_sbi, p->buffers.off); erofs_dbg("block %u to %u flushed", p->blkaddr, blkaddr - 1); erofs_bfree(p); } @@ -411,7 +411,7 @@ void erofs_bdrop(struct erofs_buffer_head *bh, bool tryrevoke) /* tail_blkaddr could be rolled back after revoking all bhs */ if (tryrevoke && blkaddr != NULL_ADDR && - tail_blkaddr == blkaddr + BLK_ROUND_UP(&sbi, bb->buffers.off)) + tail_blkaddr == blkaddr + BLK_ROUND_UP(&g_sbi, bb->buffers.off)) rollback = true; bh->op = &erofs_drop_directly_bhops; @@ -421,7 +421,7 @@ void erofs_bdrop(struct erofs_buffer_head *bh, bool tryrevoke) return; if (!rollback && bb->type != DATA) - erofs_metablkcnt += BLK_ROUND_UP(&sbi, bb->buffers.off); + erofs_metablkcnt += BLK_ROUND_UP(&g_sbi, bb->buffers.off); erofs_bfree(bb); if (rollback) tail_blkaddr = blkaddr; diff --git a/lib/config.c b/lib/config.c index 44f0606..848bc59 100644 --- a/lib/config.c +++ b/lib/config.c @@ -19,7 +19,7 @@ #endif struct erofs_configure cfg; -struct erofs_sb_info sbi; +struct erofs_sb_info g_sbi; bool erofs_stdout_tty; void erofs_init_configure(void) diff --git a/lib/diskbuf.c b/lib/diskbuf.c index e5f1f0c..3789654 100644 --- a/lib/diskbuf.c +++ b/lib/diskbuf.c @@ -104,10 +104,10 @@ int erofs_diskbuf_init(unsigned int nstrms) struct stat st; /* try to use the devfd for regfiles on stream 0 */ - if (strm == dbufstrm && !sbi.bdev.ops) { + if (strm == dbufstrm && !g_sbi.bdev.ops) { strm->devpos = 1ULL << 40; - if (!ftruncate(sbi.bdev.fd, strm->devpos << 1)) { - strm->fd = dup(sbi.bdev.fd); + if (!ftruncate(g_sbi.bdev.fd, strm->devpos << 1)) { + strm->fd = dup(g_sbi.bdev.fd); if (lseek(strm->fd, strm->devpos, SEEK_SET) != strm->devpos) return -EIO; diff --git a/lib/rebuild.c b/lib/rebuild.c index 0b1a6c6..9e8bf8f 100644 --- a/lib/rebuild.c +++ b/lib/rebuild.c @@ -360,7 +360,7 @@ static int erofs_rebuild_dirent_iter(struct erofs_dir_context *ctx) inode->i_ino[1] = inode->nid; inode->i_nlink = 1; - ret = erofs_rebuild_update_inode(&sbi, inode, + ret = erofs_rebuild_update_inode(&g_sbi, inode, rctx->datamode); if (ret) { erofs_iput(inode); @@ -386,7 +386,7 @@ static int erofs_rebuild_dirent_iter(struct erofs_dir_context *ctx) } /* reset sbi, nid after subdirs are all loaded for the final dump */ - inode->sbi = &sbi; + inode->sbi = &g_sbi; inode->nid = 0; out: free(path); diff --git a/mkfs/main.c b/mkfs/main.c index bfd6d60..37f250b 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -357,7 +357,7 @@ static int parse_extended_opts(const char *opts) } else if (MATCH_EXTENTED_OPT("nosbcrc", token, keylen)) { if (vallen) return -EINVAL; - erofs_sb_clear_sb_chksum(&sbi); + erofs_sb_clear_sb_chksum(&g_sbi); } else if (MATCH_EXTENTED_OPT("noinline_data", token, keylen)) { if (vallen) return -EINVAL; @@ -560,7 +560,7 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) erofs_err("invalid block size %s", optarg); return -EINVAL; } - sbi.blkszbits = ilog2(i); + g_sbi.blkszbits = ilog2(i); break; case 'd': @@ -589,12 +589,12 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) case 'L': if (optarg == NULL || - strlen(optarg) > sizeof(sbi.volume_name)) { + strlen(optarg) > sizeof(g_sbi.volume_name)) { erofs_err("invalid volume label"); return -EINVAL; } - strncpy(sbi.volume_name, optarg, - sizeof(sbi.volume_name)); + strncpy(g_sbi.volume_name, optarg, + sizeof(g_sbi.volume_name)); break; case 'T': @@ -606,7 +606,7 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) cfg.c_timeinherit = TIMESTAMP_FIXED; break; case 'U': - if (erofs_uuid_parse(optarg, sbi.uuid)) { + if (erofs_uuid_parse(optarg, g_sbi.uuid)) { erofs_err("invalid UUID %s", optarg); return -EINVAL; } @@ -709,7 +709,7 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) optarg); return -EINVAL; } - erofs_sb_set_chunked_file(&sbi); + erofs_sb_set_chunked_file(&g_sbi); break; case 12: quiet = true; @@ -762,7 +762,7 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) cfg.c_ovlfs_strip = false; break; case 517: - sbi.bdev.offset = strtoull(optarg, &endptr, 0); + g_sbi.bdev.offset = strtoull(optarg, &endptr, 0); if (*endptr != '\0') { erofs_err("invalid disk offset %s", optarg); return -EINVAL; @@ -829,7 +829,7 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) } } - if (cfg.c_blobdev_path && cfg.c_chunkbits < sbi.blkszbits) { + if (cfg.c_blobdev_path && cfg.c_chunkbits < g_sbi.blkszbits) { erofs_err("--blobdev must be used together with --chunksize"); return -EINVAL; } @@ -942,14 +942,14 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) cfg.c_showprogress = false; } - if (cfg.c_compr_opts[0].alg && erofs_blksiz(&sbi) != getpagesize()) + if (cfg.c_compr_opts[0].alg && erofs_blksiz(&g_sbi) != getpagesize()) erofs_warn("Please note that subpage blocksize with compression isn't yet supported in kernel. " "This compressed image will only work with bs = ps = %u bytes", - erofs_blksiz(&sbi)); + erofs_blksiz(&g_sbi)); if (pclustersize_max) { - if (pclustersize_max < erofs_blksiz(&sbi) || - pclustersize_max % erofs_blksiz(&sbi)) { + if (pclustersize_max < erofs_blksiz(&g_sbi) || + pclustersize_max % erofs_blksiz(&g_sbi)) { erofs_err("invalid physical clustersize %u", pclustersize_max); return -EINVAL; @@ -957,15 +957,15 @@ static int mkfs_parse_options_cfg(int argc, char *argv[]) cfg.c_mkfs_pclustersize_max = pclustersize_max; cfg.c_mkfs_pclustersize_def = cfg.c_mkfs_pclustersize_max; } - if (cfg.c_chunkbits && cfg.c_chunkbits < sbi.blkszbits) { + if (cfg.c_chunkbits && cfg.c_chunkbits < g_sbi.blkszbits) { erofs_err("chunksize %u must be larger than block size", 1u << cfg.c_chunkbits); return -EINVAL; } if (pclustersize_packed) { - if (pclustersize_packed < erofs_blksiz(&sbi) || - pclustersize_packed % erofs_blksiz(&sbi)) { + if (pclustersize_packed < erofs_blksiz(&g_sbi) || + pclustersize_packed % erofs_blksiz(&g_sbi)) { erofs_err("invalid pcluster size for the packed file %u", pclustersize_packed); return -EINVAL; @@ -985,11 +985,11 @@ static void erofs_mkfs_default_options(void) cfg.c_mt_workers = erofs_get_available_processors(); cfg.c_mkfs_segment_size = 16ULL * 1024 * 1024; #endif - sbi.blkszbits = ilog2(min_t(u32, getpagesize(), EROFS_MAX_BLOCK_SIZE)); - cfg.c_mkfs_pclustersize_max = erofs_blksiz(&sbi); + g_sbi.blkszbits = ilog2(min_t(u32, getpagesize(), EROFS_MAX_BLOCK_SIZE)); + cfg.c_mkfs_pclustersize_max = erofs_blksiz(&g_sbi); cfg.c_mkfs_pclustersize_def = cfg.c_mkfs_pclustersize_max; - sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_ZERO_PADDING; - sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM | + g_sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_ZERO_PADDING; + g_sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM | EROFS_FEATURE_COMPAT_MTIME; } @@ -1071,7 +1071,7 @@ static int erofs_mkfs_rebuild_load_trees(struct erofs_inode *root) return -EOPNOTSUPP; } - ret = erofs_mkfs_init_devices(&sbi, rebuild_src_count); + ret = erofs_mkfs_init_devices(&g_sbi, rebuild_src_count); if (ret) return ret; @@ -1086,12 +1086,12 @@ static int erofs_mkfs_rebuild_load_trees(struct erofs_inode *root) } DBG_BUGON(src->dev < 1); idx = src->dev - 1; - sbi.devs[idx].blocks = nblocks; + g_sbi.devs[idx].blocks = nblocks; if (tag && *tag) - memcpy(sbi.devs[idx].tag, tag, sizeof(sbi.devs[0].tag)); + memcpy(g_sbi.devs[idx].tag, tag, sizeof(g_sbi.devs[0].tag)); else /* convert UUID of the source image to a hex string */ - sprintf((char *)sbi.devs[idx].tag, + sprintf((char *)g_sbi.devs[idx].tag, "%04x%04x%04x%04x%04x%04x%04x%04x", (src->uuid[0] << 8) | src->uuid[1], (src->uuid[2] << 8) | src->uuid[3], @@ -1113,16 +1113,16 @@ static void erofs_mkfs_showsummaries(erofs_blk_t nblocks) if (!(cfg.c_dbg_lvl > EROFS_ERR && cfg.c_showprogress)) return; - erofs_uuid_unparse_lower(sbi.uuid, uuid_str); + erofs_uuid_unparse_lower(g_sbi.uuid, uuid_str); fprintf(stdout, "------\nFilesystem UUID: %s\n" "Filesystem total blocks: %u (of %u-byte blocks)\n" "Filesystem total inodes: %llu\n" "Filesystem %s metadata blocks: %u\n" "Filesystem %s deduplicated bytes (of source files): %llu\n", - uuid_str, nblocks, 1U << sbi.blkszbits, sbi.inos | 0ULL, + uuid_str, nblocks, 1U << g_sbi.blkszbits, g_sbi.inos | 0ULL, incr, erofs_total_metablocks(), - incr, sbi.saved_by_deduplication | 0ULL); + incr, g_sbi.saved_by_deduplication | 0ULL); } int main(int argc, char **argv) @@ -1154,14 +1154,14 @@ int main(int argc, char **argv) } if (cfg.c_unix_timestamp != -1) { - sbi.build_time = cfg.c_unix_timestamp; - sbi.build_time_nsec = 0; + g_sbi.build_time = cfg.c_unix_timestamp; + g_sbi.build_time_nsec = 0; } else if (!gettimeofday(&t, NULL)) { - sbi.build_time = t.tv_sec; - sbi.build_time_nsec = t.tv_usec; + g_sbi.build_time = t.tv_sec; + g_sbi.build_time_nsec = t.tv_usec; } - err = erofs_dev_open(&sbi, cfg.c_img_path, O_RDWR | + err = erofs_dev_open(&g_sbi, cfg.c_img_path, O_RDWR | (incremental_mode ? 0 : O_TRUNC)); if (err) { fprintf(stderr, "Try '%s --help' for more information.\n", argv[0]); @@ -1224,7 +1224,7 @@ int main(int argc, char **argv) * If mapfile is unspecified for tarfs index mode, * 512-byte block size is enforced here. */ - sbi.blkszbits = 9; + g_sbi.blkszbits = 9; } } @@ -1241,7 +1241,7 @@ int main(int argc, char **argv) erofs_err("failed to read superblock of %s", src->devname); goto exit; } - sbi.blkszbits = src->blkszbits; + g_sbi.blkszbits = src->blkszbits; } if (!incremental_mode) { @@ -1251,7 +1251,7 @@ int main(int argc, char **argv) goto exit; } /* generate new UUIDs for clean builds */ - erofs_uuid_generate(sbi.uuid); + erofs_uuid_generate(g_sbi.uuid); } else { union { struct stat st; @@ -1259,17 +1259,17 @@ int main(int argc, char **argv) } u; erofs_warn("EXPERIMENTAL incremental build in use. Use at your own risk!"); - err = erofs_read_superblock(&sbi); + err = erofs_read_superblock(&g_sbi); if (err) { - erofs_err("failed to read superblock of %s", sbi.devname); + erofs_err("failed to read superblock of %s", g_sbi.devname); goto exit; } - err = erofs_io_fstat(&sbi.bdev, &u.st); + err = erofs_io_fstat(&g_sbi.bdev, &u.st); if (!err && S_ISREG(u.st.st_mode)) - u.startblk = DIV_ROUND_UP(u.st.st_size, erofs_blksiz(&sbi)); + u.startblk = DIV_ROUND_UP(u.st.st_size, erofs_blksiz(&g_sbi)); else - u.startblk = sbi.primarydevice_blocks; + u.startblk = g_sbi.primarydevice_blocks; erofs_buffer_init(u.startblk); sb_bh = NULL; } @@ -1283,14 +1283,14 @@ int main(int argc, char **argv) } } - err = erofs_load_compress_hints(&sbi); + err = erofs_load_compress_hints(&g_sbi); if (err) { erofs_err("failed to load compress hints %s", cfg.c_compress_hints_file); goto exit; } - err = z_erofs_compress_init(&sbi, sb_bh); + err = z_erofs_compress_init(&g_sbi, sb_bh); if (err) { erofs_err("failed to initialize compressor: %s", erofs_strerror(err)); @@ -1300,9 +1300,9 @@ int main(int argc, char **argv) if (cfg.c_dedupe) { if (!cfg.c_compr_opts[0].alg) { erofs_err("Compression is not enabled. Turn on chunk-based data deduplication instead."); - cfg.c_chunkbits = sbi.blkszbits; + cfg.c_chunkbits = g_sbi.blkszbits; } else { - err = z_erofs_dedupe_init(erofs_blksiz(&sbi)); + err = z_erofs_dedupe_init(erofs_blksiz(&g_sbi)); if (err) { erofs_err("failed to initialize deduplication: %s", erofs_strerror(err)); @@ -1319,7 +1319,7 @@ int main(int argc, char **argv) if (((erofstar.index_mode && !erofstar.headeronly_mode) && !erofstar.mapfile) || cfg.c_blobdev_path) { - err = erofs_mkfs_init_devices(&sbi, 1); + err = erofs_mkfs_init_devices(&g_sbi, 1); if (err) { erofs_err("failed to generate device table: %s", erofs_strerror(err)); @@ -1330,7 +1330,7 @@ int main(int argc, char **argv) erofs_inode_manager_init(); if (tar_mode) { - root = erofs_rebuild_make_root(&sbi); + root = erofs_rebuild_make_root(&g_sbi); if (IS_ERR(root)) { err = PTR_ERR(root); goto exit; @@ -1345,7 +1345,7 @@ int main(int argc, char **argv) if (err < 0) goto exit; } else if (rebuild_mode) { - root = erofs_rebuild_make_root(&sbi); + root = erofs_rebuild_make_root(&g_sbi); if (IS_ERR(root)) { err = PTR_ERR(root); goto exit; @@ -1358,7 +1358,7 @@ int main(int argc, char **argv) if (err) goto exit; } else { - err = erofs_build_shared_xattrs_from_path(&sbi, cfg.c_src_path); + err = erofs_build_shared_xattrs_from_path(&g_sbi, cfg.c_src_path); if (err) { erofs_err("failed to build shared xattrs: %s", erofs_strerror(err)); @@ -1366,27 +1366,27 @@ int main(int argc, char **argv) } if (cfg.c_extra_ea_name_prefixes) - erofs_xattr_write_name_prefixes(&sbi, packedfile); + erofs_xattr_write_name_prefixes(&g_sbi, packedfile); - root = erofs_mkfs_build_tree_from_path(&sbi, cfg.c_src_path); + root = erofs_mkfs_build_tree_from_path(&g_sbi, cfg.c_src_path); if (IS_ERR(root)) { err = PTR_ERR(root); goto exit; } } - if (erofstar.index_mode && sbi.extra_devices && !erofstar.mapfile) - sbi.devs[0].blocks = BLK_ROUND_UP(&sbi, erofstar.offset); + if (erofstar.index_mode && g_sbi.extra_devices && !erofstar.mapfile) + g_sbi.devs[0].blocks = BLK_ROUND_UP(&g_sbi, erofstar.offset); - if (erofs_sb_has_fragments(&sbi)) { + if (erofs_sb_has_fragments(&g_sbi)) { erofs_update_progressinfo("Handling packed data ..."); - err = erofs_flush_packed_inode(&sbi); + err = erofs_flush_packed_inode(&g_sbi); if (err) goto exit; } - if (erofstar.index_mode || cfg.c_chunkbits || sbi.extra_devices) { - err = erofs_mkfs_dump_blobs(&sbi); + if (erofstar.index_mode || cfg.c_chunkbits || g_sbi.extra_devices) { + err = erofs_mkfs_dump_blobs(&g_sbi); if (err) goto exit; } @@ -1400,7 +1400,7 @@ int main(int argc, char **argv) erofs_iput(root); root = NULL; - err = erofs_writesb(&sbi, sb_bh, &nblocks); + err = erofs_writesb(&g_sbi, sb_bh, &nblocks); if (err) goto exit; @@ -1409,10 +1409,10 @@ int main(int argc, char **argv) if (err) goto exit; - err = erofs_dev_resize(&sbi, nblocks); + err = erofs_dev_resize(&g_sbi, nblocks); - if (!err && erofs_sb_has_sb_chksum(&sbi)) { - err = erofs_enable_sb_chksum(&sbi, &crc); + if (!err && erofs_sb_has_sb_chksum(&g_sbi)) { + err = erofs_enable_sb_chksum(&g_sbi, &crc); if (!err) erofs_info("superblock checksum 0x%08x written", crc); } @@ -1424,7 +1424,7 @@ exit: blklst = erofs_blocklist_close(); if (blklst) fclose(blklst); - erofs_dev_close(&sbi); + erofs_dev_close(&g_sbi); erofs_cleanup_compress_hints(); erofs_cleanup_exclude_rules(); if (cfg.c_chunkbits) -- 2.39.3