erofs-utils: mkfs: minor cleanup & rearrangement
authorGao Xiang <hsiangkao@linux.alibaba.com>
Tue, 18 Jun 2024 08:24:07 +0000 (16:24 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Wed, 19 Jun 2024 03:11:32 +0000 (11:11 +0800)
Introduce erofs_flush_packed_inode() and more for exporting liberofs
APIs later.

Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20240618082414.47876-2-hsiangkao@linux.alibaba.com
include/erofs/fragments.h
lib/fragments.c
lib/inode.c
mkfs/main.c

index 4c6f75556a10a6a8aa2f49d038e4aeeaa566e583..65910f500fc4eec6f644fc81e331d392deff8918 100644 (file)
@@ -17,7 +17,7 @@ extern const char *erofs_frags_packedname;
 
 FILE *erofs_packedfile_init(void);
 void erofs_packedfile_exit(void);
-struct erofs_inode *erofs_mkfs_build_packedfile(void);
+int erofs_flush_packed_inode(struct erofs_sb_info *sbi);
 
 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);
index 4d5478ff2afac84d317ff67d841f55c4aea52fd1..7591718ae390ec928d4dd72479dcb77066b8a6fb 100644 (file)
@@ -326,12 +326,21 @@ int z_erofs_pack_fragments(struct erofs_inode *inode, void *data,
        return len;
 }
 
-struct erofs_inode *erofs_mkfs_build_packedfile(void)
+int erofs_flush_packed_inode(struct erofs_sb_info *sbi)
 {
+       struct erofs_inode *inode;
+
+       if (!erofs_sb_has_fragments(sbi))
+               return -EINVAL;
        fflush(packedfile);
+       if (!ftello(packedfile))
+               return 0;
 
-       return erofs_mkfs_build_special_from_fd(&sbi, fileno(packedfile),
-                                               EROFS_PACKED_INODE);
+       inode = erofs_mkfs_build_special_from_fd(sbi, fileno(packedfile),
+                                                EROFS_PACKED_INODE);
+       sbi->packed_nid = erofs_lookupnid(inode);
+       erofs_iput(inode);
+       return 0;
 }
 
 void erofs_packedfile_exit(void)
index e27399d28ce51995a927691282a600454a1415ba..0bfaa5678f506154115310de1e888704b4388f7b 100644 (file)
@@ -1533,21 +1533,22 @@ static void erofs_mark_parent_inode(struct erofs_inode *inode,
 
 static int erofs_mkfs_dump_tree(struct erofs_inode *root, bool rebuild)
 {
-       struct erofs_inode *dumpdir;
+       struct erofs_sb_info *sbi = root->sbi;
+       struct erofs_inode *dumpdir = erofs_igrab(root);
        int err;
 
        erofs_mark_parent_inode(root, root);    /* rootdir mark */
        root->next_dirwrite = NULL;
-       (void)erofs_igrab(root);
-       dumpdir = root;
 
        err = !rebuild ? erofs_mkfs_handle_inode(root) :
                        erofs_rebuild_handle_inode(root);
        if (err)
                return err;
 
-       erofs_mkfs_flushjobs(root->sbi);
+       erofs_mkfs_flushjobs(sbi);
        erofs_fixup_meta_blkaddr(root);         /* assign root NID */
+       sbi->root_nid = root->nid;
+
        do {
                int err;
                struct erofs_inode *dir = dumpdir;
@@ -1584,7 +1585,7 @@ static int erofs_mkfs_dump_tree(struct erofs_inode *root, bool rebuild)
                }
                *last = dumpdir;        /* fixup the last (or the only) one */
                dumpdir = head;
-               err = erofs_mkfs_go(dir->sbi, EROFS_MKFS_JOB_DIR_BH,
+               err = erofs_mkfs_go(sbi, EROFS_MKFS_JOB_DIR_BH,
                                    &dir, sizeof(dir));
                if (err)
                        return err;
index 1b15bc5c7c1737cefb1d9bf800d6cdd48017608f..d15b790c2f200b84805c2a2f35aa4fb3a6cd2c4c 100644 (file)
@@ -1136,7 +1136,7 @@ int main(int argc, char **argv)
 {
        int err = 0;
        struct erofs_buffer_head *sb_bh;
-       struct erofs_inode *root, *packed_inode;
+       struct erofs_inode *root;
        erofs_blk_t nblocks;
        struct timeval t;
        FILE *packedfile = NULL;
@@ -1342,29 +1342,22 @@ int main(int argc, char **argv)
                        goto exit;
                }
        }
-       sbi.root_nid = erofs_lookupnid(root);
        erofs_iput(root);
 
        if (erofstar.index_mode && sbi.extra_devices && !erofstar.mapfile)
                sbi.devs[0].blocks = BLK_ROUND_UP(&sbi, erofstar.offset);
 
-       if (erofstar.index_mode || cfg.c_chunkbits || sbi.extra_devices) {
-               err = erofs_mkfs_dump_blobs(&sbi);
+       if (erofs_sb_has_fragments(&sbi)) {
+               erofs_update_progressinfo("Handling packed data ...");
+               err = erofs_flush_packed_inode(&sbi);
                if (err)
                        goto exit;
        }
 
-       sbi.packed_nid = 0;
-       if ((cfg.c_fragments || cfg.c_extra_ea_name_prefixes) &&
-           erofs_sb_has_fragments(&sbi)) {
-               erofs_update_progressinfo("Handling packed_file ...");
-               packed_inode = erofs_mkfs_build_packedfile();
-               if (IS_ERR(packed_inode)) {
-                       err = PTR_ERR(packed_inode);
+       if (erofstar.index_mode || cfg.c_chunkbits || sbi.extra_devices) {
+               err = erofs_mkfs_dump_blobs(&sbi);
+               if (err)
                        goto exit;
-               }
-               sbi.packed_nid = erofs_lookupnid(packed_inode);
-               erofs_iput(packed_inode);
        }
 
        /* flush all buffers except for the superblock */