Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com>
---
 include/erofs/config.h   |  3 ---
 include/erofs/importer.h |  3 +++
 lib/inode.c              | 23 ++++++++++++-----------
 mkfs/main.c              | 17 ++++++++---------
 4 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/include/erofs/config.h b/include/erofs/config.h
index f1593a5..0312909 100644
--- a/include/erofs/config.h
+++ b/include/erofs/config.h
@@ -63,9 +63,6 @@ struct erofs_configure {
        bool c_showprogress;
        bool c_extra_ea_name_prefixes;
        bool c_xattr_name_filter;
-       bool c_ovlfs_strip;
-       bool c_hard_dereference;
-       bool c_dot_omitted;
 
 #ifdef HAVE_LIBSELINUX
        struct selabel_handle *sehnd;
diff --git a/include/erofs/importer.h b/include/erofs/importer.h
index 707da5e..e83c3e3 100644
--- a/include/erofs/importer.h
+++ b/include/erofs/importer.h
@@ -20,6 +20,9 @@ struct erofs_importer_params {
        u32 uid_offset;
        u32 gid_offset;
        bool no_datainline;
+       bool hard_dereference;
+       bool ovlfs_strip;
+       bool dot_omitted;
 };
 
 struct erofs_importer {
diff --git a/lib/inode.c b/lib/inode.c
index fe056a6..302492c 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -297,15 +297,15 @@ static void erofs_dentry_mergesort(struct list_head 
*entries, int k)
                list_add_tail(great, entries);
 }
 
-static int erofs_prepare_dir_file(struct erofs_inode *dir,
-                                 unsigned int nr_subdirs)
+static int erofs_prepare_dir_file(struct erofs_importer *im,
+                              struct erofs_inode *dir, unsigned int nr_subdirs)
 {
-       bool dot_omitted = cfg.c_dot_omitted;
+       const struct erofs_importer_params *params = im->params;
        struct erofs_sb_info *sbi = dir->sbi;
        struct erofs_dentry *d;
        unsigned int d_size = 0;
 
-       if (!dot_omitted) {
+       if (!params->dot_omitted) {
                /* dot is pointed to the current dir inode */
                d = erofs_d_alloc(dir, ".");
                if (IS_ERR(d))
@@ -313,7 +313,7 @@ static int erofs_prepare_dir_file(struct erofs_inode *dir,
                d->inode = erofs_igrab(dir);
                d->type = EROFS_FT_DIR;
        }
-       dir->dot_omitted = dot_omitted;
+       dir->dot_omitted = params->dot_omitted;
 
        /* dotdot is pointed to the parent dir */
        d = erofs_d_alloc(dir, "..");
@@ -324,7 +324,7 @@ static int erofs_prepare_dir_file(struct erofs_inode *dir,
 
        if (nr_subdirs)
                erofs_dentry_mergesort(&dir->i_subdirs, 0);
-       nr_subdirs += 1 + !dot_omitted;
+       nr_subdirs += 1 + !params->dot_omitted;
 
        /* let's calculate dir size */
        list_for_each_entry(d, &dir->i_subdirs, d_child) {
@@ -1297,7 +1297,7 @@ static struct erofs_inode *erofs_iget_from_local(struct 
erofs_importer *im,
         * hard-link, just return it. Also don't lookup for directories
         * since hard-link directory isn't allowed.
         */
-       if (!S_ISDIR(st.st_mode) && (!cfg.c_hard_dereference)) {
+       if (!S_ISDIR(st.st_mode) && !im->params->hard_dereference) {
                inode = erofs_iget(st.st_dev, st.st_ino);
                if (inode)
                        return inode;
@@ -1664,7 +1664,7 @@ static int erofs_mkfs_handle_directory(struct 
erofs_importer *im, struct erofs_i
        }
        closedir(_dir);
 
-       ret = erofs_prepare_dir_file(dir, nr_subdirs); /* sort subdirs */
+       ret = erofs_prepare_dir_file(im, dir, nr_subdirs); /* sort subdirs */
        if (ret)
                return ret;
 
@@ -1725,7 +1725,7 @@ static int erofs_rebuild_handle_directory(struct 
erofs_importer *im,
        struct erofs_sb_info *sbi = im->sbi;
        struct erofs_dentry *d, *n;
        unsigned int nr_subdirs, i_nlink;
-       bool delwht = cfg.c_ovlfs_strip && dir->whiteouts;
+       bool delwht = im->params->ovlfs_strip && dir->whiteouts;
        int ret;
 
        nr_subdirs = 0;
@@ -1746,7 +1746,7 @@ static int erofs_rebuild_handle_directory(struct 
erofs_importer *im,
                ++nr_subdirs;
        }
        DBG_BUGON(nr_subdirs + 2 < i_nlink);
-       ret = erofs_prepare_dir_file(dir, nr_subdirs);
+       ret = erofs_prepare_dir_file(im, dir, nr_subdirs);
        if (ret)
                return ret;
 
@@ -1813,6 +1813,7 @@ static int erofs_mkfs_handle_inode(struct erofs_importer 
*im,
 static int erofs_rebuild_handle_inode(struct erofs_importer *im,
                                    struct erofs_inode *inode, bool incremental)
 {
+       struct erofs_importer_params *params = im->params;
        char *trimmed;
        int ret;
 
@@ -1840,7 +1841,7 @@ static int erofs_rebuild_handle_inode(struct 
erofs_importer *im,
        }
 
        /* strip all unnecessary overlayfs xattrs when ovlfs_strip is enabled */
-       if (cfg.c_ovlfs_strip)
+       if (params->ovlfs_strip)
                erofs_clear_opaque_xattr(inode);
        else if (inode->whiteouts)
                erofs_set_origin_xattr(inode);
diff --git a/mkfs/main.c b/mkfs/main.c
index a2b905e..a11134e 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -372,13 +372,15 @@ static int erofs_mkfs_feat_set_48bit(bool en, const char 
*val,
        return 0;
 }
 
+static bool mkfs_dot_omitted;
+
 static int erofs_mkfs_feat_set_dot_omitted(bool en, const char *val,
                                           unsigned int vallen)
 {
        if (vallen)
                return -EINVAL;
 
-       cfg.c_dot_omitted = en;
+       mkfs_dot_omitted = en;
        return 0;
 }
 
@@ -1101,10 +1103,7 @@ static int mkfs_parse_options_cfg(struct 
erofs_importer_params *params,
                        erofstar.aufs = true;
                        break;
                case 516:
-                       if (!optarg || !strcmp(optarg, "1"))
-                               cfg.c_ovlfs_strip = true;
-                       else
-                               cfg.c_ovlfs_strip = false;
+                       params->ovlfs_strip = !optarg || !strcmp(optarg, "1");
                        break;
                case 517:
                        g_sbi.bdev.offset = strtoull(optarg, &endptr, 0);
@@ -1185,7 +1184,7 @@ static int mkfs_parse_options_cfg(struct 
erofs_importer_params *params,
                                erofstar.try_no_reorder = true;
                        break;
                case 528:
-                       cfg.c_hard_dereference = true;
+                       params->hard_dereference = true;
                        break;
                case 529:
                        dsunit = strtoul(optarg, &endptr, 0);
@@ -1525,9 +1524,6 @@ int main(int argc, char **argv)
                g_sbi.epoch = mkfs_time;
        }
 
-       if (cfg.c_dot_omitted)
-               erofs_sb_set_48bit(&g_sbi);
-
        err = erofs_dev_open(&g_sbi, cfg.c_img_path, O_RDWR |
                                (incremental_mode ? 0 : O_TRUNC));
        if (err) {
@@ -1546,6 +1542,9 @@ int main(int argc, char **argv)
 
        importer_params.source = cfg.c_src_path;
        importer_params.no_datainline = mkfs_no_datainline;
+       importer_params.dot_omitted = mkfs_dot_omitted;
+       if (importer_params.dot_omitted)
+               erofs_sb_set_48bit(&g_sbi);
 
        err = erofs_importer_init(&importer);
        if (err)
-- 
2.43.5


Reply via email to