fs: kernfs: Replace CURRENT_TIME by current_fs_time()
authorDeepa Dinamani <deepa.kernel@gmail.com>
Mon, 22 Feb 2016 15:17:53 +0000 (07:17 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 29 Mar 2016 17:11:44 +0000 (10:11 -0700)
This is in preparation for the series that transitions
filesystem timestamps to use 64 bit time and hence make
them y2038 safe.

CURRENT_TIME macro will be deleted before merging the
aforementioned series.

Use current_fs_time() instead of CURRENT_TIME for inode
timestamps.

struct kernfs_node is associated with a sysfs file/ directory.
Truncate the values to appropriate time granularity when
writing to inode timestamps of the files.

ktime_get_real_ts() is used to obtain times for
struct kernfs_iattrs. Since these times are later assigned to
inode times using timespec_truncate() for all filesystem based
operations, we can save the supers list traversal time here by
using ktime_get_real_ts() directly.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/kernfs/dir.c
fs/kernfs/inode.c

index 03b688d19f6964010c27c16759520315892c780d..eb2c58732bcfef41a7c23fba20694772276fab28 100644 (file)
@@ -753,7 +753,8 @@ int kernfs_add_one(struct kernfs_node *kn)
        ps_iattr = parent->iattr;
        if (ps_iattr) {
                struct iattr *ps_iattrs = &ps_iattr->ia_iattr;
-               ps_iattrs->ia_ctime = ps_iattrs->ia_mtime = CURRENT_TIME;
+               ktime_get_real_ts(&ps_iattrs->ia_ctime);
+               ps_iattrs->ia_mtime = ps_iattrs->ia_ctime;
        }
 
        mutex_unlock(&kernfs_mutex);
@@ -1279,8 +1280,9 @@ static void __kernfs_remove(struct kernfs_node *kn)
 
                        /* update timestamps on the parent */
                        if (ps_iattr) {
-                               ps_iattr->ia_iattr.ia_ctime = CURRENT_TIME;
-                               ps_iattr->ia_iattr.ia_mtime = CURRENT_TIME;
+                               ktime_get_real_ts(&ps_iattr->ia_iattr.ia_ctime);
+                               ps_iattr->ia_iattr.ia_mtime =
+                                       ps_iattr->ia_iattr.ia_ctime;
                        }
 
                        kernfs_put(pos);
index 16405ae88d2d657f278f2e5cf66f399582565eb0..1ac1dbae5aba380637a359e87b6220c6ac5c41b3 100644 (file)
@@ -54,7 +54,10 @@ static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn)
        iattrs->ia_mode = kn->mode;
        iattrs->ia_uid = GLOBAL_ROOT_UID;
        iattrs->ia_gid = GLOBAL_ROOT_GID;
-       iattrs->ia_atime = iattrs->ia_mtime = iattrs->ia_ctime = CURRENT_TIME;
+
+       ktime_get_real_ts(&iattrs->ia_atime);
+       iattrs->ia_mtime = iattrs->ia_atime;
+       iattrs->ia_ctime = iattrs->ia_atime;
 
        simple_xattrs_init(&kn->iattr->xattrs);
 out_unlock:
@@ -236,16 +239,18 @@ ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size)
 static inline void set_default_inode_attr(struct inode *inode, umode_t mode)
 {
        inode->i_mode = mode;
-       inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+       inode->i_atime = inode->i_mtime =
+               inode->i_ctime = current_fs_time(inode->i_sb);
 }
 
 static inline void set_inode_attr(struct inode *inode, struct iattr *iattr)
 {
+       struct super_block *sb = inode->i_sb;
        inode->i_uid = iattr->ia_uid;
        inode->i_gid = iattr->ia_gid;
-       inode->i_atime = iattr->ia_atime;
-       inode->i_mtime = iattr->ia_mtime;
-       inode->i_ctime = iattr->ia_ctime;
+       inode->i_atime = timespec_trunc(iattr->ia_atime, sb->s_time_gran);
+       inode->i_mtime = timespec_trunc(iattr->ia_mtime, sb->s_time_gran);
+       inode->i_ctime = timespec_trunc(iattr->ia_ctime, sb->s_time_gran);
 }
 
 static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode)