Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com>
---
 include/erofs/config.h   |  1 -
 include/erofs/importer.h |  1 +
 lib/config.c             |  1 -
 lib/inode.c              | 18 +++++++++++-------
 mkfs/main.c              |  6 +++---
 5 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/include/erofs/config.h b/include/erofs/config.h
index 6554ad2..67f5aa3 100644
--- a/include/erofs/config.h
+++ b/include/erofs/config.h
@@ -53,7 +53,6 @@ struct erofs_configure {
        bool c_all_fragments;
        bool c_dedupe;
        char c_fragdedupe;
-       bool c_ignore_mtime;
        bool c_showprogress;
        bool c_extra_ea_name_prefixes;
        bool c_xattr_name_filter;
diff --git a/include/erofs/importer.h b/include/erofs/importer.h
index 85e3a50..a5a4c8c 100644
--- a/include/erofs/importer.h
+++ b/include/erofs/importer.h
@@ -26,6 +26,7 @@ struct erofs_importer_params {
        u32 gid_offset;
        u32 fsalignblks;
        char force_inodeversion;
+       bool ignore_mtime;
        bool no_datainline;
        bool hard_dereference;
        bool ovlfs_strip;
diff --git a/lib/config.c b/lib/config.c
index 28bfc2f..b1d076d 100644
--- a/lib/config.c
+++ b/lib/config.c
@@ -29,7 +29,6 @@ void erofs_init_configure(void)
        cfg.c_dbg_lvl  = EROFS_WARN;
        cfg.c_version  = PACKAGE_VERSION;
        cfg.c_dry_run  = false;
-       cfg.c_ignore_mtime = false;
        cfg.c_inline_xattr_tolerance = 2;
        cfg.c_unix_timestamp = -1;
        cfg.c_max_decompressed_extent_bytes = -1;
diff --git a/lib/inode.c b/lib/inode.c
index 0bb82f8..75a0b4d 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -717,7 +717,7 @@ int erofs_iflush(struct erofs_inode *inode)
            inode->u.i_blocks > UINT32_MAX) {
                nb.blocks_hi = cpu_to_le16(inode->u.i_blocks >> 32);
        } else if (inode->datalayout != EROFS_INODE_CHUNK_BASED &&
-                inode->u.i_blkaddr > UINT32_MAX) {
+                  inode->u.i_blkaddr > UINT32_MAX) {
                nb.startblk_hi = cpu_to_le16(inode->u.i_blkaddr >> 32);
                if (inode->u.i_blkaddr == EROFS_NULL_ADDR) {
                        nlink_1 = false;
@@ -744,8 +744,7 @@ int erofs_iflush(struct erofs_inode *inode)
 
                u.dic.i_uid = cpu_to_le16((u16)inode->i_uid);
                u.dic.i_gid = cpu_to_le16((u16)inode->i_gid);
-               if (!cfg.c_ignore_mtime)
-                       u.dic.i_mtime = cpu_to_le64(inode->i_mtime - 
sbi->epoch);
+               u.dic.i_mtime = cpu_to_le64(inode->i_mtime - sbi->epoch);
                u.dic.i_u = u1;
 
                if (nlink_1) {
@@ -1076,7 +1075,9 @@ out:
 static bool erofs_should_use_inode_extended(struct erofs_importer *im,
                                struct erofs_inode *inode, const char *path)
 {
-       if (im->params->force_inodeversion == EROFS_FORCE_INODE_EXTENDED)
+       const struct erofs_importer_params *params = im->params;
+
+       if (params->force_inodeversion == EROFS_FORCE_INODE_EXTENDED)
                return true;
        if (inode->i_size > UINT_MAX)
                return true;
@@ -1088,10 +1089,13 @@ static bool erofs_should_use_inode_extended(struct 
erofs_importer *im,
                return true;
        if (inode->i_nlink > USHRT_MAX)
                return true;
-       if (!erofs_is_special_identifier(path) && !cfg.c_ignore_mtime &&
+       if (!erofs_is_special_identifier(path) &&
            !erofs_sb_has_48bit(inode->sbi) &&
-           inode->i_mtime != inode->sbi->epoch)
-               return true;
+           inode->i_mtime != inode->sbi->epoch) {
+               if (!params->ignore_mtime)
+                       return true;
+               inode->i_mtime = inode->sbi->epoch;
+       }
        return false;
 }
 
diff --git a/mkfs/main.c b/mkfs/main.c
index 4f52656..1b5cb2b 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -463,7 +463,7 @@ static int parse_extended_opts(struct erofs_importer_params 
*params,
                        if (vallen)
                                return -EINVAL;
                        params->force_inodeversion = EROFS_FORCE_INODE_COMPACT;
-                       cfg.c_ignore_mtime = true;
+                       params->ignore_mtime = true;
                } else if (MATCH_EXTENTED_OPT("force-inode-extended", token, 
keylen)) {
                        if (vallen)
                                return -EINVAL;
@@ -1170,10 +1170,10 @@ static int mkfs_parse_options_cfg(struct 
erofs_importer_params *params,
                        cfg.c_blobdev_path = optarg;
                        break;
                case 14:
-                       cfg.c_ignore_mtime = true;
+                       params->ignore_mtime = true;
                        break;
                case 15:
-                       cfg.c_ignore_mtime = false;
+                       params->ignore_mtime = false;
                        break;
                case 16:
                        errno = 0;
-- 
2.43.5


Reply via email to