jfs: switch to ->free_inode()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Apr 2019 02:48:59 +0000 (22:48 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 2 May 2019 02:43:26 +0000 (22:43 -0400)
synchronous part can be moved to ->evict_inode(), the rest -
->free_inode() fodder

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/jfs/inode.c
fs/jfs/super.c

index 805ae9e8944aa113d2c293f8d4b988428ea8fe11..f2b92b292abe7470a45019cccb2729747e889bce 100644 (file)
@@ -31,6 +31,7 @@
 #include "jfs_extent.h"
 #include "jfs_unicode.h"
 #include "jfs_debug.h"
+#include "jfs_dmap.h"
 
 
 struct inode *jfs_iget(struct super_block *sb, unsigned long ino)
@@ -150,6 +151,8 @@ int jfs_write_inode(struct inode *inode, struct writeback_control *wbc)
 
 void jfs_evict_inode(struct inode *inode)
 {
+       struct jfs_inode_info *ji = JFS_IP(inode);
+
        jfs_info("In jfs_evict_inode, inode = 0x%p", inode);
 
        if (!inode->i_nlink && !is_bad_inode(inode)) {
@@ -173,6 +176,16 @@ void jfs_evict_inode(struct inode *inode)
        }
        clear_inode(inode);
        dquot_drop(inode);
+
+       BUG_ON(!list_empty(&ji->anon_inode_list));
+
+       spin_lock_irq(&ji->ag_lock);
+       if (ji->active_ag != -1) {
+               struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap;
+               atomic_dec(&bmap->db_active[ji->active_ag]);
+               ji->active_ag = -1;
+       }
+       spin_unlock_irq(&ji->ag_lock);
 }
 
 void jfs_dirty_inode(struct inode *inode, int flags)
index 65d8fc87ab1145a1ac52ff5909ecd2888b79342e..9454831bbd712adbde348522704594afdc13e853 100644 (file)
@@ -124,27 +124,9 @@ static struct inode *jfs_alloc_inode(struct super_block *sb)
        return &jfs_inode->vfs_inode;
 }
 
-static void jfs_i_callback(struct rcu_head *head)
+static void jfs_free_inode(struct inode *inode)
 {
-       struct inode *inode = container_of(head, struct inode, i_rcu);
-       struct jfs_inode_info *ji = JFS_IP(inode);
-       kmem_cache_free(jfs_inode_cachep, ji);
-}
-
-static void jfs_destroy_inode(struct inode *inode)
-{
-       struct jfs_inode_info *ji = JFS_IP(inode);
-
-       BUG_ON(!list_empty(&ji->anon_inode_list));
-
-       spin_lock_irq(&ji->ag_lock);
-       if (ji->active_ag != -1) {
-               struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap;
-               atomic_dec(&bmap->db_active[ji->active_ag]);
-               ji->active_ag = -1;
-       }
-       spin_unlock_irq(&ji->ag_lock);
-       call_rcu(&inode->i_rcu, jfs_i_callback);
+       kmem_cache_free(jfs_inode_cachep, JFS_IP(inode));
 }
 
 static int jfs_statfs(struct dentry *dentry, struct kstatfs *buf)
@@ -912,7 +894,7 @@ out:
 
 static const struct super_operations jfs_super_operations = {
        .alloc_inode    = jfs_alloc_inode,
-       .destroy_inode  = jfs_destroy_inode,
+       .free_inode     = jfs_free_inode,
        .dirty_inode    = jfs_dirty_inode,
        .write_inode    = jfs_write_inode,
        .evict_inode    = jfs_evict_inode,