diff options
Diffstat (limited to 'fs/sysv')
-rw-r--r-- | fs/sysv/inode.c | 9 | ||||
-rw-r--r-- | fs/sysv/namei.c | 5 | ||||
-rw-r--r-- | fs/sysv/super.c | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c index de44d067b9e6..0630eb969a28 100644 --- a/fs/sysv/inode.c +++ b/fs/sysv/inode.c | |||
@@ -333,11 +333,18 @@ static struct inode *sysv_alloc_inode(struct super_block *sb) | |||
333 | return &si->vfs_inode; | 333 | return &si->vfs_inode; |
334 | } | 334 | } |
335 | 335 | ||
336 | static void sysv_destroy_inode(struct inode *inode) | 336 | static void sysv_i_callback(struct rcu_head *head) |
337 | { | 337 | { |
338 | struct inode *inode = container_of(head, struct inode, i_rcu); | ||
339 | INIT_LIST_HEAD(&inode->i_dentry); | ||
338 | kmem_cache_free(sysv_inode_cachep, SYSV_I(inode)); | 340 | kmem_cache_free(sysv_inode_cachep, SYSV_I(inode)); |
339 | } | 341 | } |
340 | 342 | ||
343 | static void sysv_destroy_inode(struct inode *inode) | ||
344 | { | ||
345 | call_rcu(&inode->i_rcu, sysv_i_callback); | ||
346 | } | ||
347 | |||
341 | static void init_once(void *p) | 348 | static void init_once(void *p) |
342 | { | 349 | { |
343 | struct sysv_inode_info *si = (struct sysv_inode_info *)p; | 350 | struct sysv_inode_info *si = (struct sysv_inode_info *)p; |
diff --git a/fs/sysv/namei.c b/fs/sysv/namei.c index 11e7f7d11cd0..b5e68da2db32 100644 --- a/fs/sysv/namei.c +++ b/fs/sysv/namei.c | |||
@@ -27,7 +27,8 @@ static int add_nondir(struct dentry *dentry, struct inode *inode) | |||
27 | return err; | 27 | return err; |
28 | } | 28 | } |
29 | 29 | ||
30 | static int sysv_hash(struct dentry *dentry, struct qstr *qstr) | 30 | static int sysv_hash(const struct dentry *dentry, const struct inode *inode, |
31 | struct qstr *qstr) | ||
31 | { | 32 | { |
32 | /* Truncate the name in place, avoids having to define a compare | 33 | /* Truncate the name in place, avoids having to define a compare |
33 | function. */ | 34 | function. */ |
@@ -47,7 +48,7 @@ static struct dentry *sysv_lookup(struct inode * dir, struct dentry * dentry, st | |||
47 | struct inode * inode = NULL; | 48 | struct inode * inode = NULL; |
48 | ino_t ino; | 49 | ino_t ino; |
49 | 50 | ||
50 | dentry->d_op = dir->i_sb->s_root->d_op; | 51 | d_set_d_op(dentry, dir->i_sb->s_root->d_op); |
51 | if (dentry->d_name.len > SYSV_NAMELEN) | 52 | if (dentry->d_name.len > SYSV_NAMELEN) |
52 | return ERR_PTR(-ENAMETOOLONG); | 53 | return ERR_PTR(-ENAMETOOLONG); |
53 | ino = sysv_inode_by_name(dentry); | 54 | ino = sysv_inode_by_name(dentry); |
diff --git a/fs/sysv/super.c b/fs/sysv/super.c index 3d9c62be0c10..76712aefc4ab 100644 --- a/fs/sysv/super.c +++ b/fs/sysv/super.c | |||
@@ -346,7 +346,7 @@ static int complete_read_super(struct super_block *sb, int silent, int size) | |||
346 | if (sbi->s_forced_ro) | 346 | if (sbi->s_forced_ro) |
347 | sb->s_flags |= MS_RDONLY; | 347 | sb->s_flags |= MS_RDONLY; |
348 | if (sbi->s_truncate) | 348 | if (sbi->s_truncate) |
349 | sb->s_root->d_op = &sysv_dentry_operations; | 349 | d_set_d_op(sb->s_root, &sysv_dentry_operations); |
350 | return 1; | 350 | return 1; |
351 | } | 351 | } |
352 | 352 | ||