projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fs: icache RCU free inodes
[firefly-linux-kernel-4.4.55.git]
/
fs
/
btrfs
/
inode.c
diff --git
a/fs/btrfs/inode.c
b/fs/btrfs/inode.c
index 7ce9f89327890a385c792108c2ad6ac905311091..f9d2994a42a26dc198512277bc214753a9c563cc 100644
(file)
--- a/
fs/btrfs/inode.c
+++ b/
fs/btrfs/inode.c
@@
-6495,6
+6495,13
@@
struct inode *btrfs_alloc_inode(struct super_block *sb)
return inode;
}
return inode;
}
+static void btrfs_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(btrfs_inode_cachep, BTRFS_I(inode));
+}
+
void btrfs_destroy_inode(struct inode *inode)
{
struct btrfs_ordered_extent *ordered;
void btrfs_destroy_inode(struct inode *inode)
{
struct btrfs_ordered_extent *ordered;
@@
-6564,7
+6571,7
@@
void btrfs_destroy_inode(struct inode *inode)
inode_tree_del(inode);
btrfs_drop_extent_cache(inode, 0, (u64)-1, 0);
free:
inode_tree_del(inode);
btrfs_drop_extent_cache(inode, 0, (u64)-1, 0);
free:
-
kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)
);
+
call_rcu(&inode->i_rcu, btrfs_i_callback
);
}
int btrfs_drop_inode(struct inode *inode)
}
int btrfs_drop_inode(struct inode *inode)