From: Gao Xiang <hsiang...@linux.alibaba.com>

The timestamp of the packed inode should be fixed to the build time.

Fixes: 9fa9b017f773 ("erofs-utils: mkfs: support fragments")
Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com>
[hongbo: minor adjust]
Signed-off-by: Hongbo Li <lihongb...@huawei.com>
---
change since v2:
 - compare path with strcmp;

change since v1:
 - fix time assignment (assign `i_mtime_nsec` too) [Hongbo];
---
 lib/inode.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/inode.c b/lib/inode.c
index 108aa9e..46eb686 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -929,7 +929,8 @@ static bool erofs_should_use_inode_extended(struct 
erofs_inode *inode)
                return true;
        if (inode->i_nlink > USHRT_MAX)
                return true;
-       if ((inode->i_mtime != inode->sbi->build_time ||
+       if (strcmp(inode->i_srcpath, EROFS_PACKED_INODE) &&
+           (inode->i_mtime != inode->sbi->build_time ||
             inode->i_mtime_nsec != inode->sbi->build_time_nsec) &&
            !cfg.c_ignore_mtime)
                return true;
@@ -1021,6 +1022,11 @@ int __erofs_fill_inode(struct erofs_inode *inode, struct 
stat *st,
                erofs_err("gid overflow @ %s", path);
        inode->i_gid += cfg.c_gid_offset;
 
+       if (path == EROFS_PACKED_INODE) {
+               inode->i_mtime = sbi->build_time;
+               inode->i_mtime_nsec = sbi->build_time_nsec;
+               return 0;
+       }
        inode->i_mtime = st->st_mtime;
        inode->i_mtime_nsec = ST_MTIM_NSEC(st);
 
@@ -1034,7 +1040,6 @@ int __erofs_fill_inode(struct erofs_inode *inode, struct 
stat *st,
        default:
                break;
        }
-
        return 0;
 }
 
-- 
2.22.0


Reply via email to