diff options
author | Jingbo Xu <jefflexu@linux.alibaba.com> | 2023-04-07 22:09:00 +0800 |
---|---|---|
committer | Gao Xiang <hsiangkao@linux.alibaba.com> | 2023-04-20 17:40:58 +0800 |
commit | 43d72920c9fdb761284c4b014235ea14ef2af8c0 (patch) | |
tree | da57cb2af8bba6441f3c4155e03834a3429ef458 | |
parent | 2f4e32fb2cc15578085ad7750f4aa09edecbf4f2 (diff) | |
download | erofs-utils-43d72920c9fdb761284c4b014235ea14ef2af8c0.tar.gz |
erofs-utils: lib: export packedfile APIs
Later packed_inode will be used in other scenarios other than
compressed fragments. Let's separate packedfile APIs for future use.
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230407140902.97275-1-jefflexu@linux.alibaba.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
-rw-r--r-- | include/erofs/fragments.h | 13 | ||||
-rw-r--r-- | lib/fragments.c | 24 | ||||
-rw-r--r-- | mkfs/main.c | 14 |
3 files changed, 29 insertions, 22 deletions
diff --git a/include/erofs/fragments.h b/include/erofs/fragments.h index 21753ec..4c6f755 100644 --- a/include/erofs/fragments.h +++ b/include/erofs/fragments.h @@ -12,17 +12,20 @@ extern "C" #include "erofs/internal.h" -extern const char *frags_packedname; -#define EROFS_PACKED_INODE frags_packedname +extern const char *erofs_frags_packedname; +#define EROFS_PACKED_INODE erofs_frags_packedname + +FILE *erofs_packedfile_init(void); +void erofs_packedfile_exit(void); +struct erofs_inode *erofs_mkfs_build_packedfile(void); int z_erofs_fragments_dedupe(struct erofs_inode *inode, int fd, u32 *tofcrc); int z_erofs_pack_file_from_fd(struct erofs_inode *inode, int fd, u32 tofcrc); int z_erofs_pack_fragments(struct erofs_inode *inode, void *data, unsigned int len, u32 tofcrc); void z_erofs_fragments_commit(struct erofs_inode *inode); -struct erofs_inode *erofs_mkfs_build_fragments(void); -int erofs_fragments_init(void); -void erofs_fragments_exit(void); +int z_erofs_fragments_init(void); +void z_erofs_fragments_exit(void); #ifdef __cplusplus } diff --git a/lib/fragments.c b/lib/fragments.c index 0366c82..bf4dc19 100644 --- a/lib/fragments.c +++ b/lib/fragments.c @@ -38,9 +38,8 @@ struct erofs_fragment_dedupe_item { #define FRAGMENT_HASH(c) ((c) & (FRAGMENT_HASHSIZE - 1)) static struct list_head dupli_frags[FRAGMENT_HASHSIZE]; - static FILE *packedfile; -const char *frags_packedname = "packed_file"; +const char *erofs_frags_packedname = "packed_file"; #ifndef HAVE_LSEEK64 #define erofs_lseek64 lseek @@ -195,15 +194,16 @@ static int z_erofs_fragments_dedupe_insert(void *data, unsigned int len, return 0; } -static void z_erofs_fragments_dedupe_init(void) +int z_erofs_fragments_init(void) { unsigned int i; for (i = 0; i < FRAGMENT_HASHSIZE; ++i) init_list_head(&dupli_frags[i]); + return 0; } -static void z_erofs_fragments_dedupe_exit(void) +void z_erofs_fragments_exit(void) { struct erofs_fragment_dedupe_item *di, *n; struct list_head *head; @@ -324,23 +324,21 @@ int z_erofs_pack_fragments(struct erofs_inode *inode, void *data, return len; } -struct erofs_inode *erofs_mkfs_build_fragments(void) +struct erofs_inode *erofs_mkfs_build_packedfile(void) { fflush(packedfile); return erofs_mkfs_build_special_from_fd(fileno(packedfile), - frags_packedname); + EROFS_PACKED_INODE); } -void erofs_fragments_exit(void) +void erofs_packedfile_exit(void) { if (packedfile) fclose(packedfile); - - z_erofs_fragments_dedupe_exit(); } -int erofs_fragments_init(void) +FILE *erofs_packedfile_init(void) { #ifdef HAVE_TMPFILE64 packedfile = tmpfile64(); @@ -348,8 +346,6 @@ int erofs_fragments_init(void) packedfile = tmpfile(); #endif if (!packedfile) - return -ENOMEM; - - z_erofs_fragments_dedupe_init(); - return 0; + return ERR_PTR(-ENOMEM); + return packedfile; } diff --git a/mkfs/main.c b/mkfs/main.c index b2d02b2..bd127c2 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -712,6 +712,7 @@ int main(int argc, char **argv) erofs_blk_t nblocks; struct timeval t; char uuid_str[37] = "not available"; + FILE *packedfile = NULL; erofs_init_configure(); erofs_mkfs_default_options(); @@ -771,7 +772,13 @@ int main(int argc, char **argv) if (!cfg.c_pclusterblks_packed) cfg.c_pclusterblks_packed = cfg.c_pclusterblks_def; - err = erofs_fragments_init(); + packedfile = erofs_packedfile_init(); + if (IS_ERR(packedfile)) { + erofs_err("failed to initialize packedfile"); + return 1; + } + + err = z_erofs_fragments_init(); if (err) { erofs_err("failed to initialize fragments"); return 1; @@ -879,7 +886,7 @@ int main(int argc, char **argv) packed_nid = 0; if (cfg.c_fragments && erofs_sb_has_fragments()) { erofs_update_progressinfo("Handling packed_file ..."); - packed_inode = erofs_mkfs_build_fragments(); + packed_inode = erofs_mkfs_build_packedfile(); if (IS_ERR(packed_inode)) { err = PTR_ERR(packed_inode); goto exit; @@ -913,7 +920,8 @@ exit: if (cfg.c_chunkbits) erofs_blob_exit(); if (cfg.c_fragments) - erofs_fragments_exit(); + z_erofs_fragments_exit(); + erofs_packedfile_exit(); erofs_exit_configure(); if (err) { |