diff options
-rw-r--r-- | fs/btrfs/inode.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 4a31493d97ac..d4a9195c7f0d 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -4596,11 +4596,18 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry, | |||
4596 | goto out_unlock; | 4596 | goto out_unlock; |
4597 | } | 4597 | } |
4598 | 4598 | ||
4599 | /* | ||
4600 | * If the active LSM wants to access the inode during | ||
4601 | * d_instantiate it needs these. Smack checks to see | ||
4602 | * if the filesystem supports xattrs by looking at the | ||
4603 | * ops vector. | ||
4604 | */ | ||
4605 | |||
4606 | inode->i_op = &btrfs_special_inode_operations; | ||
4599 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); | 4607 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); |
4600 | if (err) | 4608 | if (err) |
4601 | drop_inode = 1; | 4609 | drop_inode = 1; |
4602 | else { | 4610 | else { |
4603 | inode->i_op = &btrfs_special_inode_operations; | ||
4604 | init_special_inode(inode, inode->i_mode, rdev); | 4611 | init_special_inode(inode, inode->i_mode, rdev); |
4605 | btrfs_update_inode(trans, root, inode); | 4612 | btrfs_update_inode(trans, root, inode); |
4606 | } | 4613 | } |
@@ -4654,14 +4661,21 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
4654 | goto out_unlock; | 4661 | goto out_unlock; |
4655 | } | 4662 | } |
4656 | 4663 | ||
4664 | /* | ||
4665 | * If the active LSM wants to access the inode during | ||
4666 | * d_instantiate it needs these. Smack checks to see | ||
4667 | * if the filesystem supports xattrs by looking at the | ||
4668 | * ops vector. | ||
4669 | */ | ||
4670 | inode->i_fop = &btrfs_file_operations; | ||
4671 | inode->i_op = &btrfs_file_inode_operations; | ||
4672 | |||
4657 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); | 4673 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); |
4658 | if (err) | 4674 | if (err) |
4659 | drop_inode = 1; | 4675 | drop_inode = 1; |
4660 | else { | 4676 | else { |
4661 | inode->i_mapping->a_ops = &btrfs_aops; | 4677 | inode->i_mapping->a_ops = &btrfs_aops; |
4662 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | 4678 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; |
4663 | inode->i_fop = &btrfs_file_operations; | ||
4664 | inode->i_op = &btrfs_file_inode_operations; | ||
4665 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; | 4679 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; |
4666 | } | 4680 | } |
4667 | out_unlock: | 4681 | out_unlock: |
@@ -7117,14 +7131,21 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
7117 | goto out_unlock; | 7131 | goto out_unlock; |
7118 | } | 7132 | } |
7119 | 7133 | ||
7134 | /* | ||
7135 | * If the active LSM wants to access the inode during | ||
7136 | * d_instantiate it needs these. Smack checks to see | ||
7137 | * if the filesystem supports xattrs by looking at the | ||
7138 | * ops vector. | ||
7139 | */ | ||
7140 | inode->i_fop = &btrfs_file_operations; | ||
7141 | inode->i_op = &btrfs_file_inode_operations; | ||
7142 | |||
7120 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); | 7143 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); |
7121 | if (err) | 7144 | if (err) |
7122 | drop_inode = 1; | 7145 | drop_inode = 1; |
7123 | else { | 7146 | else { |
7124 | inode->i_mapping->a_ops = &btrfs_aops; | 7147 | inode->i_mapping->a_ops = &btrfs_aops; |
7125 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | 7148 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; |
7126 | inode->i_fop = &btrfs_file_operations; | ||
7127 | inode->i_op = &btrfs_file_inode_operations; | ||
7128 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; | 7149 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; |
7129 | } | 7150 | } |
7130 | if (drop_inode) | 7151 | if (drop_inode) |