- Remove redundant logic; - In preparation for incremental builds on local paths.
Signed-off-by: Gao Xiang <[email protected]> --- lib/inode.c | 107 +++++++++++++++++++++------------------------------- 1 file changed, 42 insertions(+), 65 deletions(-) diff --git a/lib/inode.c b/lib/inode.c index 2918791..6148b86 100644 --- a/lib/inode.c +++ b/lib/inode.c @@ -1323,6 +1323,7 @@ static struct erofs_inode *erofs_iget_from_local(struct erofs_importer *im, erofs_iput(inode); return ERR_PTR(ret); } + inode->datasource = EROFS_INODE_DATA_SOURCE_LOCALPATH; return inode; } @@ -1773,58 +1774,48 @@ static int erofs_mkfs_handle_directory(struct erofs_importer *im, return erofs_mkfs_go(im, EROFS_MKFS_JOB_DIR, &dir, sizeof(dir)); } -static int erofs_mkfs_handle_inode(struct erofs_importer *im, - struct erofs_inode *inode) +static int erofs_mkfs_begin_nondirectory(struct erofs_importer *im, + struct erofs_inode *inode) { - const char *relpath = erofs_fspath(inode->i_srcpath); - char *trimmed; - int ret; - - trimmed = erofs_trim_for_progressinfo(relpath[0] ? relpath : "/", - sizeof("Processing ...") - 1); - erofs_update_progressinfo("Processing %s ...", trimmed); - free(trimmed); - - ret = erofs_scan_file_xattrs(inode); - if (ret < 0) - return ret; + struct erofs_mkfs_job_ndir_ctx ctx = + { .inode = inode, .fd = -1 }; - ret = erofs_prepare_xattr_ibody(inode, false); - if (ret < 0) - return ret; - - if (!S_ISDIR(inode->i_mode)) { - struct erofs_mkfs_job_ndir_ctx ctx = { .inode = inode, .fd = -1 }; - - if (!S_ISLNK(inode->i_mode) && inode->i_size) { + if (S_ISREG(inode->i_mode) && inode->i_size) { + switch (inode->datasource) { + case EROFS_INODE_DATA_SOURCE_DISKBUF: + ctx.fd = erofs_diskbuf_getfd(inode->i_diskbuf, &ctx.fpos); + if (ctx.fd < 0) + return ctx.fd; + break; + case EROFS_INODE_DATA_SOURCE_LOCALPATH: ctx.fd = open(inode->i_srcpath, O_RDONLY | O_BINARY); if (ctx.fd < 0) return -errno; - - if (cfg.c_compr_opts[0].alg && - erofs_file_is_compressible(im, inode)) { - ctx.ictx = erofs_begin_compressed_file(im, - inode, ctx.fd, 0); - if (IS_ERR(ctx.ictx)) - return PTR_ERR(ctx.ictx); - } + __erofs_fallthrough; + default: + break; + } + if (cfg.c_compr_opts[0].alg && + erofs_file_is_compressible(im, inode)) { + ctx.ictx = erofs_begin_compressed_file(im, inode, + ctx.fd, ctx.fpos); + if (IS_ERR(ctx.ictx)) + return PTR_ERR(ctx.ictx); } - ret = erofs_mkfs_go(im, EROFS_MKFS_JOB_NDIR, &ctx, sizeof(ctx)); - } else { - ret = erofs_mkfs_handle_directory(im, inode, false, false); } - erofs_info("file /%s dumped (mode %05o)", relpath, inode->i_mode); - return ret; + return erofs_mkfs_go(im, EROFS_MKFS_JOB_NDIR, &ctx, sizeof(ctx)); } -static int erofs_rebuild_handle_inode(struct erofs_importer *im, - struct erofs_inode *inode, bool incremental) +static int erofs_mkfs_handle_inode(struct erofs_importer *im, + struct erofs_inode *inode, + bool rebuild, bool incremental) { + const char *relpath = erofs_fspath(inode->i_srcpath); const struct erofs_importer_params *params = im->params; char *trimmed; int ret; - trimmed = erofs_trim_for_progressinfo(erofs_fspath(inode->i_srcpath), + trimmed = erofs_trim_for_progressinfo(*relpath ? relpath : "/", sizeof("Processing ...") - 1); erofs_update_progressinfo("Processing %s ...", trimmed); free(trimmed); @@ -1847,6 +1838,12 @@ static int erofs_rebuild_handle_inode(struct erofs_importer *im, return ret; } + if (!rebuild) { + ret = erofs_scan_file_xattrs(inode); + if (ret < 0) + return ret; + } + /* strip all unnecessary overlayfs xattrs when ovlfs_strip is enabled */ if (params->ovlfs_strip) erofs_clear_opaque_xattr(inode); @@ -1858,28 +1855,12 @@ static int erofs_rebuild_handle_inode(struct erofs_importer *im, return ret; if (!S_ISDIR(inode->i_mode)) { - struct erofs_mkfs_job_ndir_ctx ctx = - { .inode = inode, .fd = -1 }; - - if (S_ISREG(inode->i_mode) && inode->i_size && - inode->datasource == EROFS_INODE_DATA_SOURCE_DISKBUF) { - ctx.fd = erofs_diskbuf_getfd(inode->i_diskbuf, &ctx.fpos); - if (ctx.fd < 0) - return ret; - - if (cfg.c_compr_opts[0].alg && - erofs_file_is_compressible(im, inode)) { - ctx.ictx = erofs_begin_compressed_file(im, inode, - ctx.fd, ctx.fpos); - if (IS_ERR(ctx.ictx)) - return PTR_ERR(ctx.ictx); - } - } - ret = erofs_mkfs_go(im, EROFS_MKFS_JOB_NDIR, &ctx, sizeof(ctx)); + ret = erofs_mkfs_begin_nondirectory(im, inode); } else { - ret = erofs_mkfs_handle_directory(im, inode, true, incremental); + ret = erofs_mkfs_handle_directory(im, inode, + rebuild, incremental); } - erofs_info("file %s dumped (mode %05o)", erofs_fspath(inode->i_srcpath), + erofs_info("file %s dumped (mode %05o)", *relpath ? relpath : "/", inode->i_mode); return ret; } @@ -1921,8 +1902,7 @@ static int erofs_mkfs_dump_tree(struct erofs_importer *im, bool rebuild, root->xattr_isize = cfg.c_root_xattr_isize; } - err = !rebuild ? erofs_mkfs_handle_inode(im, root) : - erofs_rebuild_handle_inode(im, root, incremental); + err = erofs_mkfs_handle_inode(im, root, rebuild, incremental); if (err) return err; @@ -1952,11 +1932,8 @@ static int erofs_mkfs_dump_tree(struct erofs_importer *im, bool rebuild, erofs_parent_inode(inode) != dir); erofs_mark_parent_inode(inode, dir); - if (!rebuild) - err = erofs_mkfs_handle_inode(im, inode); - else - err = erofs_rebuild_handle_inode(im, - inode, incremental); + err = erofs_mkfs_handle_inode(im, inode, + rebuild, incremental); if (err) break; if (S_ISDIR(inode->i_mode)) { -- 2.43.5
