diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 72f31ecb5c90..a0ff46a47895 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -4084,7 +4084,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) | |||
4084 | int index; | 4084 | int index; |
4085 | int ret; | 4085 | int ret; |
4086 | 4086 | ||
4087 | dentry->d_op = &btrfs_dentry_operations; | 4087 | d_set_d_op(dentry, &btrfs_dentry_operations); |
4088 | 4088 | ||
4089 | if (dentry->d_name.len > BTRFS_NAME_LEN) | 4089 | if (dentry->d_name.len > BTRFS_NAME_LEN) |
4090 | return ERR_PTR(-ENAMETOOLONG); | 4090 | return ERR_PTR(-ENAMETOOLONG); |
@@ -4127,7 +4127,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) | |||
4127 | return inode; | 4127 | return inode; |
4128 | } | 4128 | } |
4129 | 4129 | ||
4130 | static int btrfs_dentry_delete(struct dentry *dentry) | 4130 | static int btrfs_dentry_delete(const struct dentry *dentry) |
4131 | { | 4131 | { |
4132 | struct btrfs_root *root; | 4132 | struct btrfs_root *root; |
4133 | 4133 | ||
@@ -6495,6 +6495,13 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) | |||
6495 | return inode; | 6495 | return inode; |
6496 | } | 6496 | } |
6497 | 6497 | ||
6498 | static void btrfs_i_callback(struct rcu_head *head) | ||
6499 | { | ||
6500 | struct inode *inode = container_of(head, struct inode, i_rcu); | ||
6501 | INIT_LIST_HEAD(&inode->i_dentry); | ||
6502 | kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); | ||
6503 | } | ||
6504 | |||
6498 | void btrfs_destroy_inode(struct inode *inode) | 6505 | void btrfs_destroy_inode(struct inode *inode) |
6499 | { | 6506 | { |
6500 | struct btrfs_ordered_extent *ordered; | 6507 | struct btrfs_ordered_extent *ordered; |
@@ -6564,7 +6571,7 @@ void btrfs_destroy_inode(struct inode *inode) | |||
6564 | inode_tree_del(inode); | 6571 | inode_tree_del(inode); |
6565 | btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); | 6572 | btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); |
6566 | free: | 6573 | free: |
6567 | kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); | 6574 | call_rcu(&inode->i_rcu, btrfs_i_callback); |
6568 | } | 6575 | } |
6569 | 6576 | ||
6570 | int btrfs_drop_inode(struct inode *inode) | 6577 | int btrfs_drop_inode(struct inode *inode) |
@@ -7204,11 +7211,11 @@ static int btrfs_set_page_dirty(struct page *page) | |||
7204 | return __set_page_dirty_nobuffers(page); | 7211 | return __set_page_dirty_nobuffers(page); |
7205 | } | 7212 | } |
7206 | 7213 | ||
7207 | static int btrfs_permission(struct inode *inode, int mask) | 7214 | static int btrfs_permission(struct inode *inode, int mask, unsigned int flags) |
7208 | { | 7215 | { |
7209 | if ((BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) && (mask & MAY_WRITE)) | 7216 | if ((BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) && (mask & MAY_WRITE)) |
7210 | return -EACCES; | 7217 | return -EACCES; |
7211 | return generic_permission(inode, mask, btrfs_check_acl); | 7218 | return generic_permission(inode, mask, flags, btrfs_check_acl); |
7212 | } | 7219 | } |
7213 | 7220 | ||
7214 | static const struct inode_operations btrfs_dir_inode_operations = { | 7221 | static const struct inode_operations btrfs_dir_inode_operations = { |