summaryrefslogtreecommitdiffstats
path: root/fs/isofs/inode.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-05-07 13:57:05 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-07 13:57:05 -0400
commit168e153d5ebbdd6a3fa85db1cc4879ed4b7030e0 (patch)
tree73d8583ff7a53a05f95e331ac6468e3741f20d10 /fs/isofs/inode.c
parent8ff468c29e9a9c3afe9152c10c7b141343270bf3 (diff)
parentf276ae0dd6d0b5bfbcb51178a63f06dc035f4cc4 (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.c10
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
75static void isofs_i_callback(struct rcu_head *head) 75static 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
81static void isofs_destroy_inode(struct inode *inode)
82{
83 call_rcu(&inode->i_rcu, isofs_i_callback);
84}
85
86static void init_once(void *foo) 80static 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
123static const struct super_operations isofs_sops = { 117static 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,