switch ->setxattr() to passing dentry and inode separately
[deliverable/linux.git] / fs / kernfs / inode.c
index b5247226732b3cb09460c97bb8fb0b0243d3bb2a..63b925d5ba1e43c67a83dfc1c92f59325fc954ba 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:
@@ -157,10 +160,11 @@ static int kernfs_node_setsecdata(struct kernfs_node *kn, void **secdata,
        return 0;
 }
 
-int kernfs_iop_setxattr(struct dentry *dentry, const char *name,
-                       const void *value, size_t size, int flags)
+int kernfs_iop_setxattr(struct dentry *unused, struct inode *inode,
+                       const char *name, const void *value,
+                       size_t size, int flags)
 {
-       struct kernfs_node *kn = dentry->d_fsdata;
+       struct kernfs_node *kn = inode->i_private;
        struct kernfs_iattrs *attrs;
        void *secdata;
        int error;
@@ -172,11 +176,11 @@ int kernfs_iop_setxattr(struct dentry *dentry, const char *name,
 
        if (!strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN)) {
                const char *suffix = name + XATTR_SECURITY_PREFIX_LEN;
-               error = security_inode_setsecurity(d_inode(dentry), suffix,
+               error = security_inode_setsecurity(inode, suffix,
                                                value, size, flags);
                if (error)
                        return error;
-               error = security_inode_getsecctx(d_inode(dentry),
+               error = security_inode_getsecctx(inode,
                                                &secdata, &secdata_len);
                if (error)
                        return error;
@@ -236,16 +240,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)
This page took 0.025439 seconds and 5 git commands to generate.