aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJingbo Xu <jefflexu@linux.alibaba.com>2023-04-07 22:09:00 +0800
committerGao Xiang <hsiangkao@linux.alibaba.com>2023-04-20 17:40:58 +0800
commit43d72920c9fdb761284c4b014235ea14ef2af8c0 (patch)
treeda57cb2af8bba6441f3c4155e03834a3429ef458
parent2f4e32fb2cc15578085ad7750f4aa09edecbf4f2 (diff)
downloaderofs-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.h13
-rw-r--r--lib/fragments.c24
-rw-r--r--mkfs/main.c14
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) {