]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/afs/super.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / fs / afs / super.c
index 27201cffece4946879f01482f7aa61ffdbc6b339..fb240e8766d63f7178374c40594881609201cae4 100644 (file)
@@ -336,6 +336,7 @@ static int afs_fill_super(struct super_block *sb, void *data)
        if (!root)
                goto error;
 
+       sb->s_d_op = &afs_fs_dentry_operations;
        sb->s_root = root;
 
        _leave(" = 0");
@@ -498,6 +499,14 @@ static struct inode *afs_alloc_inode(struct super_block *sb)
        return &vnode->vfs_inode;
 }
 
+static void afs_i_callback(struct rcu_head *head)
+{
+       struct inode *inode = container_of(head, struct inode, i_rcu);
+       struct afs_vnode *vnode = AFS_FS_I(inode);
+       INIT_LIST_HEAD(&inode->i_dentry);
+       kmem_cache_free(afs_inode_cachep, vnode);
+}
+
 /*
  * destroy an AFS inode struct
  */
@@ -511,7 +520,7 @@ static void afs_destroy_inode(struct inode *inode)
 
        ASSERTCMP(vnode->server, ==, NULL);
 
-       kmem_cache_free(afs_inode_cachep, vnode);
+       call_rcu(&inode->i_rcu, afs_i_callback);
        atomic_dec(&afs_count_active_inodes);
 }