projects
/
linux-2.6-block.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-david' of git://git.open-mesh.org/ecsv/linux-merge
[linux-2.6-block.git]
/
fs
/
sysv
/
inode.c
diff --git
a/fs/sysv/inode.c
b/fs/sysv/inode.c
index de44d067b9e680b5b7b3ac488fc7f6b7927d43c4..0630eb969a280885550f67b896bcbe759d756533 100644
(file)
--- a/
fs/sysv/inode.c
+++ b/
fs/sysv/inode.c
@@
-333,11
+333,18
@@
static struct inode *sysv_alloc_inode(struct super_block *sb)
return &si->vfs_inode;
}
return &si->vfs_inode;
}
-static void sysv_
destroy_inode(struct inode *inode
)
+static void sysv_
i_callback(struct rcu_head *head
)
{
{
+ struct inode *inode = container_of(head, struct inode, i_rcu);
+ INIT_LIST_HEAD(&inode->i_dentry);
kmem_cache_free(sysv_inode_cachep, SYSV_I(inode));
}
kmem_cache_free(sysv_inode_cachep, SYSV_I(inode));
}
+static void sysv_destroy_inode(struct inode *inode)
+{
+ call_rcu(&inode->i_rcu, sysv_i_callback);
+}
+
static void init_once(void *p)
{
struct sysv_inode_info *si = (struct sysv_inode_info *)p;
static void init_once(void *p)
{
struct sysv_inode_info *si = (struct sysv_inode_info *)p;