diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-07 13:57:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-07 13:57:05 -0400 |
commit | 168e153d5ebbdd6a3fa85db1cc4879ed4b7030e0 (patch) | |
tree | 73d8583ff7a53a05f95e331ac6468e3741f20d10 /fs/isofs/inode.c | |
parent | 8ff468c29e9a9c3afe9152c10c7b141343270bf3 (diff) | |
parent | f276ae0dd6d0b5bfbcb51178a63f06dc035f4cc4 (diff) |
Merge branch 'work.icache' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs inode freeing updates from Al Viro:
"Introduction of separate method for RCU-delayed part of
->destroy_inode() (if any).
Pretty much as posted, except that destroy_inode() stashes
->free_inode into the victim (anon-unioned with ->i_fops) before
scheduling i_callback() and the last two patches (sockfs conversion
and folding struct socket_wq into struct socket) are excluded - that
pair should go through netdev once davem reopens his tree"
* 'work.icache' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (58 commits)
orangefs: make use of ->free_inode()
shmem: make use of ->free_inode()
hugetlb: make use of ->free_inode()
overlayfs: make use of ->free_inode()
jfs: switch to ->free_inode()
fuse: switch to ->free_inode()
ext4: make use of ->free_inode()
ecryptfs: make use of ->free_inode()
ceph: use ->free_inode()
btrfs: use ->free_inode()
afs: switch to use of ->free_inode()
dax: make use of ->free_inode()
ntfs: switch to ->free_inode()
securityfs: switch to ->free_inode()
apparmor: switch to ->free_inode()
rpcpipe: switch to ->free_inode()
bpf: switch to ->free_inode()
mqueue: switch to ->free_inode()
ufs: switch to ->free_inode()
coda: switch to ->free_inode()
...
Diffstat (limited to 'fs/isofs/inode.c')
-rw-r--r-- | fs/isofs/inode.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 488a9e7f8f66..603b052a3c94 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c | |||
@@ -72,17 +72,11 @@ static struct inode *isofs_alloc_inode(struct super_block *sb) | |||
72 | return &ei->vfs_inode; | 72 | return &ei->vfs_inode; |
73 | } | 73 | } |
74 | 74 | ||
75 | static void isofs_i_callback(struct rcu_head *head) | 75 | static void isofs_free_inode(struct inode *inode) |
76 | { | 76 | { |
77 | struct inode *inode = container_of(head, struct inode, i_rcu); | ||
78 | kmem_cache_free(isofs_inode_cachep, ISOFS_I(inode)); | 77 | kmem_cache_free(isofs_inode_cachep, ISOFS_I(inode)); |
79 | } | 78 | } |
80 | 79 | ||
81 | static void isofs_destroy_inode(struct inode *inode) | ||
82 | { | ||
83 | call_rcu(&inode->i_rcu, isofs_i_callback); | ||
84 | } | ||
85 | |||
86 | static void init_once(void *foo) | 80 | static void init_once(void *foo) |
87 | { | 81 | { |
88 | struct iso_inode_info *ei = foo; | 82 | struct iso_inode_info *ei = foo; |
@@ -122,7 +116,7 @@ static int isofs_remount(struct super_block *sb, int *flags, char *data) | |||
122 | 116 | ||
123 | static const struct super_operations isofs_sops = { | 117 | static const struct super_operations isofs_sops = { |
124 | .alloc_inode = isofs_alloc_inode, | 118 | .alloc_inode = isofs_alloc_inode, |
125 | .destroy_inode = isofs_destroy_inode, | 119 | .free_inode = isofs_free_inode, |
126 | .put_super = isofs_put_super, | 120 | .put_super = isofs_put_super, |
127 | .statfs = isofs_statfs, | 121 | .statfs = isofs_statfs, |
128 | .remount_fs = isofs_remount, | 122 | .remount_fs = isofs_remount, |