diff options
Diffstat (limited to 'fs/configfs/inode.c')
-rw-r--r-- | fs/configfs/inode.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/fs/configfs/inode.c b/fs/configfs/inode.c index cee087d8f7e0..03d124ae27d7 100644 --- a/fs/configfs/inode.c +++ b/fs/configfs/inode.c | |||
@@ -75,7 +75,8 @@ int configfs_setattr(struct dentry * dentry, struct iattr * iattr) | |||
75 | sd_iattr->ia_mode = sd->s_mode; | 75 | sd_iattr->ia_mode = sd->s_mode; |
76 | sd_iattr->ia_uid = GLOBAL_ROOT_UID; | 76 | sd_iattr->ia_uid = GLOBAL_ROOT_UID; |
77 | sd_iattr->ia_gid = GLOBAL_ROOT_GID; | 77 | sd_iattr->ia_gid = GLOBAL_ROOT_GID; |
78 | sd_iattr->ia_atime = sd_iattr->ia_mtime = sd_iattr->ia_ctime = CURRENT_TIME; | 78 | sd_iattr->ia_atime = sd_iattr->ia_mtime = |
79 | sd_iattr->ia_ctime = current_fs_time(inode->i_sb); | ||
79 | sd->s_iattr = sd_iattr; | 80 | sd->s_iattr = sd_iattr; |
80 | } | 81 | } |
81 | /* attributes were changed atleast once in past */ | 82 | /* attributes were changed atleast once in past */ |
@@ -111,7 +112,8 @@ int configfs_setattr(struct dentry * dentry, struct iattr * iattr) | |||
111 | static inline void set_default_inode_attr(struct inode * inode, umode_t mode) | 112 | static inline void set_default_inode_attr(struct inode * inode, umode_t mode) |
112 | { | 113 | { |
113 | inode->i_mode = mode; | 114 | inode->i_mode = mode; |
114 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 115 | inode->i_atime = inode->i_mtime = |
116 | inode->i_ctime = current_fs_time(inode->i_sb); | ||
115 | } | 117 | } |
116 | 118 | ||
117 | static inline void set_inode_attr(struct inode * inode, struct iattr * iattr) | 119 | static inline void set_inode_attr(struct inode * inode, struct iattr * iattr) |
@@ -195,13 +197,21 @@ int configfs_create(struct dentry * dentry, umode_t mode, void (*init)(struct in | |||
195 | return -ENOMEM; | 197 | return -ENOMEM; |
196 | 198 | ||
197 | p_inode = d_inode(dentry->d_parent); | 199 | p_inode = d_inode(dentry->d_parent); |
198 | p_inode->i_mtime = p_inode->i_ctime = CURRENT_TIME; | 200 | p_inode->i_mtime = p_inode->i_ctime = current_fs_time(p_inode->i_sb); |
199 | configfs_set_inode_lock_class(sd, inode); | 201 | configfs_set_inode_lock_class(sd, inode); |
200 | 202 | ||
201 | init(inode); | 203 | init(inode); |
202 | d_instantiate(dentry, inode); | 204 | if (S_ISDIR(mode) || S_ISLNK(mode)) { |
203 | if (S_ISDIR(mode) || S_ISLNK(mode)) | 205 | /* |
206 | * ->symlink(), ->mkdir(), configfs_register_subsystem() or | ||
207 | * create_default_group() - already hashed. | ||
208 | */ | ||
209 | d_instantiate(dentry, inode); | ||
204 | dget(dentry); /* pin link and directory dentries in core */ | 210 | dget(dentry); /* pin link and directory dentries in core */ |
211 | } else { | ||
212 | /* ->lookup() */ | ||
213 | d_add(dentry, inode); | ||
214 | } | ||
205 | return error; | 215 | return error; |
206 | } | 216 | } |
207 | 217 | ||