diff options
Diffstat (limited to 'fs/configfs/inode.c')
-rw-r--r-- | fs/configfs/inode.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/configfs/inode.c b/fs/configfs/inode.c index cf78d44a8d6a..c83f4768eeaa 100644 --- a/fs/configfs/inode.c +++ b/fs/configfs/inode.c | |||
@@ -135,6 +135,7 @@ struct inode * configfs_new_inode(mode_t mode, struct configfs_dirent * sd) | |||
135 | { | 135 | { |
136 | struct inode * inode = new_inode(configfs_sb); | 136 | struct inode * inode = new_inode(configfs_sb); |
137 | if (inode) { | 137 | if (inode) { |
138 | inode->i_ino = get_next_ino(); | ||
138 | inode->i_mapping->a_ops = &configfs_aops; | 139 | inode->i_mapping->a_ops = &configfs_aops; |
139 | inode->i_mapping->backing_dev_info = &configfs_backing_dev_info; | 140 | inode->i_mapping->backing_dev_info = &configfs_backing_dev_info; |
140 | inode->i_op = &configfs_inode_operations; | 141 | inode->i_op = &configfs_inode_operations; |
@@ -249,18 +250,14 @@ void configfs_drop_dentry(struct configfs_dirent * sd, struct dentry * parent) | |||
249 | struct dentry * dentry = sd->s_dentry; | 250 | struct dentry * dentry = sd->s_dentry; |
250 | 251 | ||
251 | if (dentry) { | 252 | if (dentry) { |
252 | spin_lock(&dcache_lock); | ||
253 | spin_lock(&dentry->d_lock); | 253 | spin_lock(&dentry->d_lock); |
254 | if (!(d_unhashed(dentry) && dentry->d_inode)) { | 254 | if (!(d_unhashed(dentry) && dentry->d_inode)) { |
255 | dget_locked(dentry); | 255 | dget_dlock(dentry); |
256 | __d_drop(dentry); | 256 | __d_drop(dentry); |
257 | spin_unlock(&dentry->d_lock); | 257 | spin_unlock(&dentry->d_lock); |
258 | spin_unlock(&dcache_lock); | ||
259 | simple_unlink(parent->d_inode, dentry); | 258 | simple_unlink(parent->d_inode, dentry); |
260 | } else { | 259 | } else |
261 | spin_unlock(&dentry->d_lock); | 260 | spin_unlock(&dentry->d_lock); |
262 | spin_unlock(&dcache_lock); | ||
263 | } | ||
264 | } | 261 | } |
265 | } | 262 | } |
266 | 263 | ||