aboutsummaryrefslogtreecommitdiffstats
path: root/mm/shmem.c
diff options
context:
space:
mode:
authorDeepa Dinamani <deepa.kernel@gmail.com>2016-09-14 10:48:04 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2016-09-27 21:06:21 -0400
commit078cd8279e659989b103359bb22373cc79445bde (patch)
tree923e3fe84d232cc9ba31481852ea1faf46f56fb6 /mm/shmem.c
parent2554c72edb81c97ae5307613dd0aee1ef8dd13ca (diff)
fs: Replace CURRENT_TIME with current_time() for inode timestamps
CURRENT_TIME macro is not appropriate for filesystems as it doesn't use the right granularity for filesystem timestamps. Use current_time() instead. CURRENT_TIME is also not y2038 safe. This is also in preparation for the patch that transitions vfs timestamps to use 64 bit time and hence make them y2038 safe. As part of the effort current_time() will be extended to do range checks. Hence, it is necessary for all file system timestamps to use current_time(). Also, current_time() will be transitioned along with vfs to be y2038 safe. Note that whenever a single call to current_time() is used to change timestamps in different inodes, it is because they share the same time granularity. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Felipe Balbi <balbi@kernel.org> Acked-by: Steven Whitehouse <swhiteho@redhat.com> Acked-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Acked-by: David Sterba <dsterba@suse.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'mm/shmem.c')
-rw-r--r--mm/shmem.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/mm/shmem.c b/mm/shmem.c
index fd8b2b5741b1..28ae88bbeffa 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -933,7 +933,7 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
933void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend) 933void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend)
934{ 934{
935 shmem_undo_range(inode, lstart, lend, false); 935 shmem_undo_range(inode, lstart, lend, false);
936 inode->i_ctime = inode->i_mtime = CURRENT_TIME; 936 inode->i_ctime = inode->i_mtime = current_time(inode);
937} 937}
938EXPORT_SYMBOL_GPL(shmem_truncate_range); 938EXPORT_SYMBOL_GPL(shmem_truncate_range);
939 939
@@ -978,7 +978,7 @@ static int shmem_setattr(struct dentry *dentry, struct iattr *attr)
978 if (error) 978 if (error)
979 return error; 979 return error;
980 i_size_write(inode, newsize); 980 i_size_write(inode, newsize);
981 inode->i_ctime = inode->i_mtime = CURRENT_TIME; 981 inode->i_ctime = inode->i_mtime = current_time(inode);
982 } 982 }
983 if (newsize <= oldsize) { 983 if (newsize <= oldsize) {
984 loff_t holebegin = round_up(newsize, PAGE_SIZE); 984 loff_t holebegin = round_up(newsize, PAGE_SIZE);
@@ -2082,7 +2082,7 @@ static struct inode *shmem_get_inode(struct super_block *sb, const struct inode
2082 inode->i_ino = get_next_ino(); 2082 inode->i_ino = get_next_ino();
2083 inode_init_owner(inode, dir, mode); 2083 inode_init_owner(inode, dir, mode);
2084 inode->i_blocks = 0; 2084 inode->i_blocks = 0;
2085 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 2085 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
2086 inode->i_generation = get_seconds(); 2086 inode->i_generation = get_seconds();
2087 info = SHMEM_I(inode); 2087 info = SHMEM_I(inode);
2088 memset(info, 0, (char *)inode - (char *)info); 2088 memset(info, 0, (char *)inode - (char *)info);
@@ -2853,7 +2853,7 @@ static long shmem_fallocate(struct file *file, int mode, loff_t offset,
2853 2853
2854 if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > inode->i_size) 2854 if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > inode->i_size)
2855 i_size_write(inode, offset + len); 2855 i_size_write(inode, offset + len);
2856 inode->i_ctime = CURRENT_TIME; 2856 inode->i_ctime = current_time(inode);
2857undone: 2857undone:
2858 spin_lock(&inode->i_lock); 2858 spin_lock(&inode->i_lock);
2859 inode->i_private = NULL; 2859 inode->i_private = NULL;
@@ -2906,7 +2906,7 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
2906 2906
2907 error = 0; 2907 error = 0;
2908 dir->i_size += BOGO_DIRENT_SIZE; 2908 dir->i_size += BOGO_DIRENT_SIZE;
2909 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 2909 dir->i_ctime = dir->i_mtime = current_time(dir);
2910 d_instantiate(dentry, inode); 2910 d_instantiate(dentry, inode);
2911 dget(dentry); /* Extra count - pin the dentry in core */ 2911 dget(dentry); /* Extra count - pin the dentry in core */
2912 } 2912 }
@@ -2974,7 +2974,7 @@ static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentr
2974 goto out; 2974 goto out;
2975 2975
2976 dir->i_size += BOGO_DIRENT_SIZE; 2976 dir->i_size += BOGO_DIRENT_SIZE;
2977 inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; 2977 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
2978 inc_nlink(inode); 2978 inc_nlink(inode);
2979 ihold(inode); /* New dentry reference */ 2979 ihold(inode); /* New dentry reference */
2980 dget(dentry); /* Extra pinning count for the created dentry */ 2980 dget(dentry); /* Extra pinning count for the created dentry */
@@ -2991,7 +2991,7 @@ static int shmem_unlink(struct inode *dir, struct dentry *dentry)
2991 shmem_free_inode(inode->i_sb); 2991 shmem_free_inode(inode->i_sb);
2992 2992
2993 dir->i_size -= BOGO_DIRENT_SIZE; 2993 dir->i_size -= BOGO_DIRENT_SIZE;
2994 inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; 2994 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
2995 drop_nlink(inode); 2995 drop_nlink(inode);
2996 dput(dentry); /* Undo the count from "create" - this does all the work */ 2996 dput(dentry); /* Undo the count from "create" - this does all the work */
2997 return 0; 2997 return 0;
@@ -3024,7 +3024,7 @@ static int shmem_exchange(struct inode *old_dir, struct dentry *old_dentry, stru
3024 old_dir->i_ctime = old_dir->i_mtime = 3024 old_dir->i_ctime = old_dir->i_mtime =
3025 new_dir->i_ctime = new_dir->i_mtime = 3025 new_dir->i_ctime = new_dir->i_mtime =
3026 d_inode(old_dentry)->i_ctime = 3026 d_inode(old_dentry)->i_ctime =
3027 d_inode(new_dentry)->i_ctime = CURRENT_TIME; 3027 d_inode(new_dentry)->i_ctime = current_time(old_dir);
3028 3028
3029 return 0; 3029 return 0;
3030} 3030}
@@ -3098,7 +3098,7 @@ static int shmem_rename2(struct inode *old_dir, struct dentry *old_dentry, struc
3098 new_dir->i_size += BOGO_DIRENT_SIZE; 3098 new_dir->i_size += BOGO_DIRENT_SIZE;
3099 old_dir->i_ctime = old_dir->i_mtime = 3099 old_dir->i_ctime = old_dir->i_mtime =
3100 new_dir->i_ctime = new_dir->i_mtime = 3100 new_dir->i_ctime = new_dir->i_mtime =
3101 inode->i_ctime = CURRENT_TIME; 3101 inode->i_ctime = current_time(old_dir);
3102 return 0; 3102 return 0;
3103} 3103}
3104 3104
@@ -3153,7 +3153,7 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
3153 put_page(page); 3153 put_page(page);
3154 } 3154 }
3155 dir->i_size += BOGO_DIRENT_SIZE; 3155 dir->i_size += BOGO_DIRENT_SIZE;
3156 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 3156 dir->i_ctime = dir->i_mtime = current_time(dir);
3157 d_instantiate(dentry, inode); 3157 d_instantiate(dentry, inode);
3158 dget(dentry); 3158 dget(dentry);
3159 return 0; 3159 return 0;