fs: icache RCU free inodes
[deliverable/linux.git] / fs / ecryptfs / super.c
index 253732382d375e848edc61ca40a3eaadb60f80c7..3042fe123a3426c30dba69e35a622738977bf105 100644 (file)
@@ -28,7 +28,6 @@
 #include <linux/key.h>
 #include <linux/slab.h>
 #include <linux/seq_file.h>
-#include <linux/smp_lock.h>
 #include <linux/file.h>
 #include <linux/crypto.h>
 #include "ecryptfs_kernel.h"
@@ -63,6 +62,16 @@ out:
        return inode;
 }
 
+static void ecryptfs_i_callback(struct rcu_head *head)
+{
+       struct inode *inode = container_of(head, struct inode, i_rcu);
+       struct ecryptfs_inode_info *inode_info;
+       inode_info = ecryptfs_inode_to_private(inode);
+
+       INIT_LIST_HEAD(&inode->i_dentry);
+       kmem_cache_free(ecryptfs_inode_info_cache, inode_info);
+}
+
 /**
  * ecryptfs_destroy_inode
  * @inode: The ecryptfs inode
@@ -89,7 +98,7 @@ static void ecryptfs_destroy_inode(struct inode *inode)
                }
        }
        ecryptfs_destroy_crypt_stat(&inode_info->crypt_stat);
-       kmem_cache_free(ecryptfs_inode_info_cache, inode_info);
+       call_rcu(&inode->i_rcu, ecryptfs_i_callback);
 }
 
 /**
This page took 0.025392 seconds and 5 git commands to generate.