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>
This commit is contained in:
@@ -191,6 +191,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode)
|
||||
}
|
||||
inode->i_private = NULL;
|
||||
inode->i_mapping = mapping;
|
||||
INIT_LIST_HEAD(&inode->i_dentry); /* buggered by rcu freeing */
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
|
||||
#endif
|
||||
@@ -254,7 +255,6 @@ EXPORT_SYMBOL(__destroy_inode);
|
||||
static void i_callback(struct rcu_head *head)
|
||||
{
|
||||
struct inode *inode = container_of(head, struct inode, i_rcu);
|
||||
INIT_LIST_HEAD(&inode->i_dentry);
|
||||
kmem_cache_free(inode_cachep, inode);
|
||||
}
|
||||
|
||||
@@ -290,7 +290,6 @@ void inode_init_once(struct inode *inode)
|
||||
{
|
||||
memset(inode, 0, sizeof(*inode));
|
||||
INIT_HLIST_NODE(&inode->i_hash);
|
||||
INIT_LIST_HEAD(&inode->i_dentry);
|
||||
INIT_LIST_HEAD(&inode->i_devices);
|
||||
INIT_LIST_HEAD(&inode->i_wb_list);
|
||||
INIT_LIST_HEAD(&inode->i_lru);
|
||||
|
||||
Reference in New Issue
Block a user