diff options
Diffstat (limited to 'fs/xfs/xfs_iget.c')
-rw-r--r-- | fs/xfs/xfs_iget.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index 0cdd26932d8e..d7de5a3f7867 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
@@ -91,6 +91,17 @@ xfs_inode_alloc( | |||
91 | return ip; | 91 | return ip; |
92 | } | 92 | } |
93 | 93 | ||
94 | STATIC void | ||
95 | xfs_inode_free_callback( | ||
96 | struct rcu_head *head) | ||
97 | { | ||
98 | struct inode *inode = container_of(head, struct inode, i_rcu); | ||
99 | struct xfs_inode *ip = XFS_I(inode); | ||
100 | |||
101 | INIT_LIST_HEAD(&inode->i_dentry); | ||
102 | kmem_zone_free(xfs_inode_zone, ip); | ||
103 | } | ||
104 | |||
94 | void | 105 | void |
95 | xfs_inode_free( | 106 | xfs_inode_free( |
96 | struct xfs_inode *ip) | 107 | struct xfs_inode *ip) |
@@ -134,7 +145,7 @@ xfs_inode_free( | |||
134 | ASSERT(!spin_is_locked(&ip->i_flags_lock)); | 145 | ASSERT(!spin_is_locked(&ip->i_flags_lock)); |
135 | ASSERT(completion_done(&ip->i_flush)); | 146 | ASSERT(completion_done(&ip->i_flush)); |
136 | 147 | ||
137 | kmem_zone_free(xfs_inode_zone, ip); | 148 | call_rcu(&ip->i_vnode.i_rcu, xfs_inode_free_callback); |
138 | } | 149 | } |
139 | 150 | ||
140 | /* | 151 | /* |