diff options
Diffstat (limited to 'fs/ubifs/super.c')
-rw-r--r-- | fs/ubifs/super.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 91fac54c70e3..6e11c2975dcf 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -272,12 +272,20 @@ static struct inode *ubifs_alloc_inode(struct super_block *sb) | |||
272 | return &ui->vfs_inode; | 272 | return &ui->vfs_inode; |
273 | }; | 273 | }; |
274 | 274 | ||
275 | static void ubifs_i_callback(struct rcu_head *head) | ||
276 | { | ||
277 | struct inode *inode = container_of(head, struct inode, i_rcu); | ||
278 | struct ubifs_inode *ui = ubifs_inode(inode); | ||
279 | INIT_LIST_HEAD(&inode->i_dentry); | ||
280 | kmem_cache_free(ubifs_inode_slab, ui); | ||
281 | } | ||
282 | |||
275 | static void ubifs_destroy_inode(struct inode *inode) | 283 | static void ubifs_destroy_inode(struct inode *inode) |
276 | { | 284 | { |
277 | struct ubifs_inode *ui = ubifs_inode(inode); | 285 | struct ubifs_inode *ui = ubifs_inode(inode); |
278 | 286 | ||
279 | kfree(ui->data); | 287 | kfree(ui->data); |
280 | kmem_cache_free(ubifs_inode_slab, inode); | 288 | call_rcu(&inode->i_rcu, ubifs_i_callback); |
281 | } | 289 | } |
282 | 290 | ||
283 | /* | 291 | /* |