i_gid_write(inode, le32_to_cpu(die->i_gid));
                set_nlink(inode, le32_to_cpu(die->i_nlink));
 
-               /* ns timestamp */
-               inode->i_mtime.tv_sec = inode->i_ctime.tv_sec =
-                       le64_to_cpu(die->i_ctime);
-               inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec =
-                       le32_to_cpu(die->i_ctime_nsec);
+               /* extended inode has its own timestamp */
+               inode->i_ctime.tv_sec = le64_to_cpu(die->i_ctime);
+               inode->i_ctime.tv_nsec = le32_to_cpu(die->i_ctime_nsec);
 
                inode->i_size = le64_to_cpu(die->i_size);
 
                i_gid_write(inode, le16_to_cpu(dic->i_gid));
                set_nlink(inode, le16_to_cpu(dic->i_nlink));
 
-               /* use build time to derive all file time */
-               inode->i_mtime.tv_sec = inode->i_ctime.tv_sec =
-                       sbi->build_time;
-               inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec =
-                       sbi->build_time_nsec;
+               /* use build time for compact inodes */
+               inode->i_ctime.tv_sec = sbi->build_time;
+               inode->i_ctime.tv_nsec = sbi->build_time_nsec;
 
                inode->i_size = le32_to_cpu(dic->i_size);
                if (erofs_inode_is_data_compressed(vi->datalayout))
                goto err_out;
        }
 
+       inode->i_mtime.tv_sec = inode->i_ctime.tv_sec;
+       inode->i_atime.tv_sec = inode->i_ctime.tv_sec;
+       inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec;
+       inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec;
+
        if (!nblks)
                /* measure inode.i_blocks as generic filesystems */
                inode->i_blocks = roundup(inode->i_size, EROFS_BLKSIZ) >> 9;