fs: ext4: Use current_time() for inode timestamps
PATCH RESEND 1/1 fs: ext4: Use current_time() for inode timestamps
CURRENT_TIME_SEC and CURRENT_TIME are not y2038 safe. current_time() will be transitioned to be y2038 safe along with vfs.
current_time() returns timestamps according to the granularities set in the super_block.
The granularity check in ext4_current_time() to call current_time() or CURRENT_TIME_SEC is not required. Use current_time() directly to obtain timestamps unconditionally, and remove ext4_current_time().
Quota files are assumed to be on the same filesystem. Hence, use current_time() for these files as well.
--- fs/ext4/acl.c | 2 +- fs/ext4/ext4.h | 6 ------ fs/ext4/extents.c | 10 +++++----- fs/ext4/ialloc.c | 2 +- fs/ext4/inline.c | 4 ++-- fs/ext4/inode.c | 6 +++--- fs/ext4/ioctl.c | 8 ++++---- fs/ext4/namei.c | 24 +++++++++++++----------- fs/ext4/super.c | 2 +- fs/ext4/xattr.c | 2 +- 10 files changed, 31 insertions(+), 35 deletions(-)
fs/ext4/acl.c +1 -1
@@ -196,7 +196,7 @@ __ext4_set_acl(handle_t *handle, struct inode *inode, int type, error =posix_acl_update_mode (inode, &inode->i_mode, &acl);if (error)return error; - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode); }break ;
fs/ext4/ext4.h +0 -6
@@ -1532,12 +1532,6 @@ static inline struct ext4_inode_info *EXT4_I(struct inode *inode) return container_of(inode, struct ext4_inode_info, vfs_inode); } -static inline struct timespec ext4_current_time (struct inode *inode) -{ -return (inode->i_sb->s_time_gran <NSEC_PER_SEC ) ? -current_fs_time (inode->i_sb) :CURRENT_TIME_SEC ; -} -static inline int ext4_valid_inum (struct super_block *sb,unsigned long ino) { return ino == EXT4_ROOT_INO ||
fs/ext4/extents.c +5 -5
@@ -4725,7 +4725,7 @@ static int ext4_alloc_file_blocks(struct file *file, ext4_lblk_t offset, map.m_lblk += ret; map.m_len = len = len - ret; epos = (loff_t )map.m_lblk << inode->i_blkbits; - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode);if (new_size) {if (epos > new_size) epos = new_size;
@@ -4853,7 +4853,7 @@ static long ext4_zero_range(struct file *file, loff_t offset, }/* Now release the pages and zero block aligned part of pages */ truncate_pagecache_range (inode, start, end -1 ); - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode); ret =ext4_alloc_file_blocks (file, lblk, max_blocks, new_size, flags, mode);
@@ -4878,7 +4878,7 @@ static long ext4_zero_range(struct file *file, loff_t offset, goto out_dio; } - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode);if (new_size) {ext4_update_inode_size (inode, new_size); }else {
@@ -5568,7 +5568,7 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)up_write (&EXT4_I (inode)->i_data_sem);if (IS_SYNC (inode))ext4_handle_sync (handle); - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode); out_stop:
@@ -5678,7 +5678,7 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)/* Expand file to avoid data loss if there is error while shifting */ inode->i_size += len;EXT4_I (inode)->i_disksize += len; - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode); ret =ext4_mark_inode_dirty (handle, inode);if (ret) goto out_stop;
fs/ext4/ialloc.c +1 -1
@@ -1039,7 +1039,7 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,/* This is the optimal IO size (for stat), not the fs block size */ inode->i_blocks =0 ; inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime = -ext4_current_time (inode); +current_time (inode);memset (ei->i_data,0 ,sizeof (ei->i_data)); ei->i_dir_start_lookup =0 ;
fs/ext4/inline.c +2 -2
@@ -1028,7 +1028,7 @@ static int ext4_add_dirent_to_inline(handle_t *handle,* happen is that the times are slightly out of date * and/or different from the directory change time. */ - dir->i_mtime = dir->i_ctime =ext4_current_time (dir); + dir->i_mtime = dir->i_ctime =current_time (dir);ext4_update_dx_flag (dir); dir->i_version++;ext4_mark_inode_dirty (handle, dir);
@@ -1971,7 +1971,7 @@ void ext4_inline_data_truncate(struct inode *inode, int *has_inline)if (inode->i_nlink)ext4_orphan_del (handle, inode); - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode);if (IS_SYNC (inode))ext4_handle_sync (handle);
fs/ext4/inode.c +3 -3
@@ -4029,7 +4029,7 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)if (IS_SYNC (inode))ext4_handle_sync (handle); - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode); out_stop:ext4_journal_stop (handle);
@@ -4183,7 +4183,7 @@ void ext4_truncate(struct inode *inode)if (inode->i_nlink)ext4_orphan_del (handle, inode); - inode->i_mtime = inode->i_ctime =ext4_current_time (inode); + inode->i_mtime = inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode);ext4_journal_stop (handle);
@@ -5157,7 +5157,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)* update c/mtime in shrink case below */ if (!shrink) { - inode->i_mtime =ext4_current_time (inode); + inode->i_mtime =current_time (inode); inode->i_ctime = inode->i_mtime; }down_write (&EXT4_I (inode)->i_data_sem);
fs/ext4/ioctl.c +4 -4
@@ -153,7 +153,7 @@ static long swap_inode_boot_loader(struct super_block *sb,swap_inode_data (inode, inode_bl); - inode->i_ctime = inode_bl->i_ctime =ext4_current_time (inode); + inode->i_ctime = inode_bl->i_ctime =current_time (inode);spin_lock (&sbi->s_next_gen_lock); inode->i_generation = sbi->s_next_generation++;
@@ -272,7 +272,7 @@ static int ext4_ioctl_setflags(struct inode *inode, }ext4_set_inode_flags (inode); - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode); err =ext4_mark_iloc_dirty (handle, inode, &iloc); flags_err:
@@ -368,7 +368,7 @@ static int ext4_ioctl_setproject(struct file *filp, __u32 projid) }EXT4_I (inode)->i_projid = kprojid; - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode); out_dirty: rc =ext4_mark_iloc_dirty (handle, inode, &iloc);if (!err)
@@ -500,7 +500,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) } err =ext4_reserve_inode_write (handle, inode, &iloc);if (err ==0 ) { - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode); inode->i_generation = generation; err =ext4_mark_iloc_dirty (handle, inode, &iloc); }
fs/ext4/namei.c +13 -11
@@ -1941,7 +1941,7 @@ static int add_dirent_to_buf(handle_t *handle, struct ext4_filename *fname,* happen is that the times are slightly out of date * and/or different from the directory change time. */ - dir->i_mtime = dir->i_ctime =ext4_current_time (dir); + dir->i_mtime = dir->i_ctime =current_time (dir);ext4_update_dx_flag (dir); dir->i_version++;ext4_mark_inode_dirty (handle, dir);
@@ -2987,7 +2987,7 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)* recovery. */ inode->i_size =0 ;ext4_orphan_add (handle, inode); - inode->i_ctime = dir->i_ctime = dir->i_mtime =ext4_current_time (inode); + inode->i_ctime = dir->i_ctime = dir->i_mtime =current_time (inode);ext4_mark_inode_dirty (handle, inode);ext4_dec_count (handle, dir);ext4_update_dx_flag (dir);
@@ -3050,13 +3050,13 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry) retval =ext4_delete_entry (handle, dir, de, bh);if (retval) goto end_unlink; - dir->i_ctime = dir->i_mtime =ext4_current_time (dir); + dir->i_ctime = dir->i_mtime =current_time (dir);ext4_update_dx_flag (dir);ext4_mark_inode_dirty (handle, dir);drop_nlink (inode);if (!inode->i_nlink)ext4_orphan_add (handle, inode); - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode); end_unlink:
@@ -3254,7 +3254,7 @@ static int ext4_link(struct dentry *old_dentry,if (IS_DIRSYNC (dir))ext4_handle_sync (handle); - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode);ext4_inc_count (handle, inode);ihold (inode);
@@ -3381,7 +3381,7 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent, ent->de->file_type = file_type; ent->dir->i_version++; ent->dir->i_ctime = ent->dir->i_mtime = -ext4_current_time (ent->dir); +current_time (ent->dir);ext4_mark_inode_dirty (handle, ent->dir);BUFFER_TRACE (ent->bh,"call ext4_handle_dirty_metadata" );if (!ent->inlined) {
@@ -3651,7 +3651,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,* Like most other Unix systems, set the ctime for inodes on a * rename. */ - old.inode->i_ctime =ext4_current_time (old.inode); + old.inode->i_ctime =current_time (old.inode);ext4_mark_inode_dirty (handle, old.inode);if (!whiteout) {
@@ -3663,9 +3663,9 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,if (new.inode) {ext4_dec_count (handle, new.inode); - new.inode->i_ctime =ext4_current_time (new.inode); + new.inode->i_ctime =current_time (new.inode); } - old.dir->i_ctime = old.dir->i_mtime =ext4_current_time (old.dir); + old.dir->i_ctime = old.dir->i_mtime =current_time (old.dir);ext4_update_dx_flag (old.dir);if (old.dir_bh) { retval =ext4_rename_dir_finish (handle, &old, new.dir->i_ino);
@@ -3723,6 +3723,7 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry, };u8 new_file_type;int retval; +struct timespec ctime; if ((ext4_encrypted_inode(old_dir) || ext4_encrypted_inode(new_dir)) &&
@@ -3823,8 +3824,9 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,* Like most other Unix systems, set the ctime for inodes on a * rename. */ - old.inode->i_ctime =ext4_current_time (old.inode); - new.inode->i_ctime =ext4_current_time (new.inode); + ctime =current_time (old.inode); + old.inode->i_ctime = ctime; + new.inode->i_ctime = ctime;ext4_mark_inode_dirty (handle, old.inode);ext4_mark_inode_dirty (handle, new.inode);
fs/ext4/super.c +1 -1
@@ -5351,7 +5351,7 @@ static int ext4_quota_off(struct super_block *sb, int type) handle =ext4_journal_start (inode,EXT4_HT_QUOTA ,1 );if (IS_ERR (handle)) goto out; - inode->i_mtime = inode->i_ctime =CURRENT_TIME ; + inode->i_mtime = inode->i_ctime =current_time (inode);ext4_mark_inode_dirty (handle, inode);ext4_journal_stop (handle);
fs/ext4/xattr.c +1 -1
@@ -1249,7 +1249,7 @@ ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index, }if (!error) {ext4_xattr_update_super_block (handle, inode->i_sb); - inode->i_ctime =ext4_current_time (inode); + inode->i_ctime =current_time (inode);if (!value)ext4_clear_inode_state (inode,EXT4_STATE_NO_EXPAND ); error =ext4_mark_iloc_dirty (handle, inode, &is.iloc);
Signature · 6 lines
2.7.4 _______________________________________________ Y2038 mailing list [email protected] https://lists.linaro.org/mailman/listinfo/y2038
Quoted 11 lines · Deepa Dinamani
CURRENT_TIME_SECandCURRENT_TIMEare not y2038 safe.current_time()will be transitioned to be y2038 safe along with vfs.
current_time()returns timestamps according to the granularities set in thesuper_block.
The granularity check inext4_current_time()to callcurrent_time()orCURRENT_TIME_SECis not required. Usecurrent_time()directly to obtain timestamps unconditionally, and removeext4_current_time().
Quoted 5 lines
Quota files are assumed to be on the same filesystem. Hence, use
current_time()for these files as well.Signed-off-by Deepa Dinamani <[email protected]>Reviewed-by Arnd Bergmann <[email protected]>
Thanks, applied.
- Ted
_______________________________________________
Y2038 mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/y2038