aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2018-06-20 10:31:40 -0400
committerJan Kara <jack@suse.cz>2018-06-27 07:59:18 -0400
commitfe2c32545bfc281122cb8b66572949a366ad747e (patch)
tree2b339d9911e3d103f19075c1210acb16db5b1707
parentc3b9cecd89b806e14544af596396e18abd00f145 (diff)
ext2: use ktime_get_real_seconds for timestamps
get_seconds() is deprecated because of the y2038 overflow, so users should migrate to 64-bit timestamps using ktime_get_real_seconds(). In ext2, the timestamps in the superblock and in the inode are all limited to 32-bit, and this won't get fixed, so let's just stop using the deprecated interface and keep truncating. All users of ext2 should migrate to ext4 before 2038 to prevent this from causing problems. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r--fs/ext2/inode.c2
-rw-r--r--fs/ext2/super.c7
2 files changed, 5 insertions, 4 deletions
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index 71635909df3b..7f7ee18fe179 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -86,7 +86,7 @@ void ext2_evict_inode(struct inode * inode)
86 if (want_delete) { 86 if (want_delete) {
87 sb_start_intwrite(inode->i_sb); 87 sb_start_intwrite(inode->i_sb);
88 /* set dtime */ 88 /* set dtime */
89 EXT2_I(inode)->i_dtime = get_seconds(); 89 EXT2_I(inode)->i_dtime = ktime_get_real_seconds();
90 mark_inode_dirty(inode); 90 mark_inode_dirty(inode);
91 __ext2_write_inode(inode, inode_needs_sync(inode)); 91 __ext2_write_inode(inode, inode_needs_sync(inode));
92 /* truncate to 0 */ 92 /* truncate to 0 */
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index 8ff53f8da3bc..73bd58fa13de 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -682,7 +682,8 @@ static int ext2_setup_super (struct super_block * sb,
682 "running e2fsck is recommended"); 682 "running e2fsck is recommended");
683 else if (le32_to_cpu(es->s_checkinterval) && 683 else if (le32_to_cpu(es->s_checkinterval) &&
684 (le32_to_cpu(es->s_lastcheck) + 684 (le32_to_cpu(es->s_lastcheck) +
685 le32_to_cpu(es->s_checkinterval) <= get_seconds())) 685 le32_to_cpu(es->s_checkinterval) <=
686 ktime_get_real_seconds()))
686 ext2_msg(sb, KERN_WARNING, 687 ext2_msg(sb, KERN_WARNING,
687 "warning: checktime reached, " 688 "warning: checktime reached, "
688 "running e2fsck is recommended"); 689 "running e2fsck is recommended");
@@ -1248,7 +1249,7 @@ void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es,
1248 spin_lock(&EXT2_SB(sb)->s_lock); 1249 spin_lock(&EXT2_SB(sb)->s_lock);
1249 es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb)); 1250 es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb));
1250 es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb)); 1251 es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb));
1251 es->s_wtime = cpu_to_le32(get_seconds()); 1252 es->s_wtime = cpu_to_le32(ktime_get_real_seconds());
1252 /* unlock before we do IO */ 1253 /* unlock before we do IO */
1253 spin_unlock(&EXT2_SB(sb)->s_lock); 1254 spin_unlock(&EXT2_SB(sb)->s_lock);
1254 mark_buffer_dirty(EXT2_SB(sb)->s_sbh); 1255 mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
@@ -1360,7 +1361,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
1360 * the rdonly flag and then mark the partition as valid again. 1361 * the rdonly flag and then mark the partition as valid again.
1361 */ 1362 */
1362 es->s_state = cpu_to_le16(sbi->s_mount_state); 1363 es->s_state = cpu_to_le16(sbi->s_mount_state);
1363 es->s_mtime = cpu_to_le32(get_seconds()); 1364 es->s_mtime = cpu_to_le32(ktime_get_real_seconds());
1364 spin_unlock(&sbi->s_lock); 1365 spin_unlock(&sbi->s_lock);
1365 1366
1366 err = dquot_suspend(sb, -1); 1367 err = dquot_suspend(sb, -1);