Skip to content

Commit d3938ee

Browse files
author
Gao Xiang
committed
erofs: derive atime instead of leaving it empty
EROFS has _only one_ ondisk timestamp (ctime is currently documented and recorded, we might also record mtime instead with a new compat feature if needed) for each extended inode since EROFS isn't mainly for archival purposes so no need to keep all timestamps on disk especially for Android scenarios due to security concerns. Also, romfs/cramfs don't have their own on-disk timestamp, and squashfs only records mtime instead. Let's also derive access time from ondisk timestamp rather than leaving it empty, and if mtime/atime for each file are really needed for specific scenarios as well, we can also use xattrs to record them then. Link: https://lore.kernel.org/r/20201031195102.21221-1-hsiangkao@aol.com [ Gao Xiang: It'd be better to backport for user-friendly concern. ] Fixes: 431339b ("staging: erofs: add inode operations") Cc: stable <stable@vger.kernel.org> # 4.19+ Reported-by: nl6720 <nl6720@gmail.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
1 parent 3cea11c commit d3938ee

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

fs/erofs/inode.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,9 @@ static struct page *erofs_read_inode(struct inode *inode,
107107
i_gid_write(inode, le32_to_cpu(die->i_gid));
108108
set_nlink(inode, le32_to_cpu(die->i_nlink));
109109

110-
/* ns timestamp */
111-
inode->i_mtime.tv_sec = inode->i_ctime.tv_sec =
112-
le64_to_cpu(die->i_ctime);
113-
inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec =
114-
le32_to_cpu(die->i_ctime_nsec);
110+
/* extended inode has its own timestamp */
111+
inode->i_ctime.tv_sec = le64_to_cpu(die->i_ctime);
112+
inode->i_ctime.tv_nsec = le32_to_cpu(die->i_ctime_nsec);
115113

116114
inode->i_size = le64_to_cpu(die->i_size);
117115

@@ -149,11 +147,9 @@ static struct page *erofs_read_inode(struct inode *inode,
149147
i_gid_write(inode, le16_to_cpu(dic->i_gid));
150148
set_nlink(inode, le16_to_cpu(dic->i_nlink));
151149

152-
/* use build time to derive all file time */
153-
inode->i_mtime.tv_sec = inode->i_ctime.tv_sec =
154-
sbi->build_time;
155-
inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec =
156-
sbi->build_time_nsec;
150+
/* use build time for compact inodes */
151+
inode->i_ctime.tv_sec = sbi->build_time;
152+
inode->i_ctime.tv_nsec = sbi->build_time_nsec;
157153

158154
inode->i_size = le32_to_cpu(dic->i_size);
159155
if (erofs_inode_is_data_compressed(vi->datalayout))
@@ -167,6 +163,11 @@ static struct page *erofs_read_inode(struct inode *inode,
167163
goto err_out;
168164
}
169165

166+
inode->i_mtime.tv_sec = inode->i_ctime.tv_sec;
167+
inode->i_atime.tv_sec = inode->i_ctime.tv_sec;
168+
inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec;
169+
inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec;
170+
170171
if (!nblks)
171172
/* measure inode.i_blocks as generic filesystems */
172173
inode->i_blocks = roundup(inode->i_size, EROFS_BLKSIZ) >> 9;

0 commit comments

Comments
 (0)