diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-12-12 15:51:45 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-03 22:52:40 -0500 |
commit | 6b520e0565422966cdf1c3759bd73df77b0f248c (patch) | |
tree | f63a26afa7342eb59b125271b16e30a219b59094 /fs/inode.c | |
parent | 2a79f17e4a641a2f463cb512cb0ec349844a147b (diff) |
vfs: fix the stupidity with i_dentry in inode destructors
Seeing that just about every destructor got that INIT_LIST_HEAD() copied into
it, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once();
the cost of taking it into inode_init_always() will be negligible for pipes
and sockets and negative for everything else. Not to mention the removal of
boilerplate code from ->destroy_inode() instances...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/inode.c')
-rw-r--r-- | fs/inode.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/inode.c b/fs/inode.c index 4fda5ee85518..24d02907e196 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -191,6 +191,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) | |||
191 | } | 191 | } |
192 | inode->i_private = NULL; | 192 | inode->i_private = NULL; |
193 | inode->i_mapping = mapping; | 193 | inode->i_mapping = mapping; |
194 | INIT_LIST_HEAD(&inode->i_dentry); /* buggered by rcu freeing */ | ||
194 | #ifdef CONFIG_FS_POSIX_ACL | 195 | #ifdef CONFIG_FS_POSIX_ACL |
195 | inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED; | 196 | inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED; |
196 | #endif | 197 | #endif |
@@ -254,7 +255,6 @@ EXPORT_SYMBOL(__destroy_inode); | |||
254 | static void i_callback(struct rcu_head *head) | 255 | static void i_callback(struct rcu_head *head) |
255 | { | 256 | { |
256 | struct inode *inode = container_of(head, struct inode, i_rcu); | 257 | struct inode *inode = container_of(head, struct inode, i_rcu); |
257 | INIT_LIST_HEAD(&inode->i_dentry); | ||
258 | kmem_cache_free(inode_cachep, inode); | 258 | kmem_cache_free(inode_cachep, inode); |
259 | } | 259 | } |
260 | 260 | ||
@@ -290,7 +290,6 @@ void inode_init_once(struct inode *inode) | |||
290 | { | 290 | { |
291 | memset(inode, 0, sizeof(*inode)); | 291 | memset(inode, 0, sizeof(*inode)); |
292 | INIT_HLIST_NODE(&inode->i_hash); | 292 | INIT_HLIST_NODE(&inode->i_hash); |
293 | INIT_LIST_HEAD(&inode->i_dentry); | ||
294 | INIT_LIST_HEAD(&inode->i_devices); | 293 | INIT_LIST_HEAD(&inode->i_devices); |
295 | INIT_LIST_HEAD(&inode->i_wb_list); | 294 | INIT_LIST_HEAD(&inode->i_wb_list); |
296 | INIT_LIST_HEAD(&inode->i_lru); | 295 | INIT_LIST_HEAD(&inode->i_lru); |