]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
unify fs/inode.c callers of clear_inode()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 4 Jun 2010 23:33:20 +0000 (19:33 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 9 Aug 2010 20:47:45 +0000 (16:47 -0400)
For now, just a straightforward merge

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

index 71fe079ca32aca167f46a01893578e52e99489ab..60cb2596976279fce695f8c561f9c9ec6844cb2f 100644 (file)
@@ -321,6 +321,19 @@ void clear_inode(struct inode *inode)
 }
 EXPORT_SYMBOL(clear_inode);
 
+static void evict(struct inode *inode, int delete)
+{
+       const struct super_operations *op = inode->i_sb->s_op;
+
+       if (delete && op->delete_inode) {
+               op->delete_inode(inode);
+       } else {
+               if (inode->i_data.nrpages)
+                       truncate_inode_pages(&inode->i_data, 0);
+               clear_inode(inode);
+       }
+}
+
 /*
  * dispose_list - dispose of the contents of a local list
  * @head: the head of the list to free
@@ -338,9 +351,7 @@ static void dispose_list(struct list_head *head)
                inode = list_first_entry(head, struct inode, i_list);
                list_del(&inode->i_list);
 
-               if (inode->i_data.nrpages)
-                       truncate_inode_pages(&inode->i_data, 0);
-               clear_inode(inode);
+               evict(inode, 0);
 
                spin_lock(&inode_lock);
                hlist_del_init(&inode->i_hash);
@@ -1194,8 +1205,6 @@ EXPORT_SYMBOL(remove_inode_hash);
  */
 void generic_delete_inode(struct inode *inode)
 {
-       const struct super_operations *op = inode->i_sb->s_op;
-
        list_del_init(&inode->i_list);
        list_del_init(&inode->i_sb_list);
        WARN_ON(inode->i_state & I_NEW);
@@ -1203,17 +1212,8 @@ void generic_delete_inode(struct inode *inode)
        inodes_stat.nr_inodes--;
        spin_unlock(&inode_lock);
 
-       if (op->delete_inode) {
-               void (*delete)(struct inode *) = op->delete_inode;
-               /* Filesystems implementing their own
-                * s_op->delete_inode are required to call
-                * truncate_inode_pages and clear_inode()
-                * internally */
-               delete(inode);
-       } else {
-               truncate_inode_pages(&inode->i_data, 0);
-               clear_inode(inode);
-       }
+       evict(inode, 1);
+
        spin_lock(&inode_lock);
        hlist_del_init(&inode->i_hash);
        spin_unlock(&inode_lock);
@@ -1268,9 +1268,7 @@ static void generic_forget_inode(struct inode *inode)
 {
        if (!generic_detach_inode(inode))
                return;
-       if (inode->i_data.nrpages)
-               truncate_inode_pages(&inode->i_data, 0);
-       clear_inode(inode);
+       evict(inode, 0);
        wake_up_inode(inode);
        destroy_inode(inode);
 }