aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/delayed-inode.c2
-rw-r--r--fs/btrfs/disk-io.c2
-rw-r--r--fs/btrfs/extent-tree.c3
-rw-r--r--fs/btrfs/file.c2
-rw-r--r--fs/btrfs/inode.c4
-rw-r--r--fs/btrfs/super.c38
-rw-r--r--fs/btrfs/tree-log.c2
-rw-r--r--fs/btrfs/xattr.c50
8 files changed, 39 insertions, 64 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index 6a1a6800776c..5b163572e0ca 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -1719,7 +1719,7 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev)
1719 inode->i_gid = btrfs_stack_inode_gid(inode_item); 1719 inode->i_gid = btrfs_stack_inode_gid(inode_item);
1720 btrfs_i_size_write(inode, btrfs_stack_inode_size(inode_item)); 1720 btrfs_i_size_write(inode, btrfs_stack_inode_size(inode_item));
1721 inode->i_mode = btrfs_stack_inode_mode(inode_item); 1721 inode->i_mode = btrfs_stack_inode_mode(inode_item);
1722 inode->i_nlink = btrfs_stack_inode_nlink(inode_item); 1722 set_nlink(inode, btrfs_stack_inode_nlink(inode_item));
1723 inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item)); 1723 inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item));
1724 BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item); 1724 BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item);
1725 BTRFS_I(inode)->sequence = btrfs_stack_inode_sequence(inode_item); 1725 BTRFS_I(inode)->sequence = btrfs_stack_inode_sequence(inode_item);
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 94abc25392f6..632f8f3cc9db 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2007,7 +2007,7 @@ struct btrfs_root *open_ctree(struct super_block *sb,
2007 sb->s_bdi = &fs_info->bdi; 2007 sb->s_bdi = &fs_info->bdi;
2008 2008
2009 fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID; 2009 fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID;
2010 fs_info->btree_inode->i_nlink = 1; 2010 set_nlink(fs_info->btree_inode, 1);
2011 /* 2011 /*
2012 * we set the i_size on the btree inode to the max possible int. 2012 * we set the i_size on the btree inode to the max possible int.
2013 * the real end of the address space is determined by all of 2013 * the real end of the address space is determined by all of
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 813c6bb96c9a..f0d5718d2587 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3416,7 +3416,8 @@ static int shrink_delalloc(struct btrfs_root *root, u64 to_reclaim,
3416 smp_mb(); 3416 smp_mb();
3417 nr_pages = min_t(unsigned long, nr_pages, 3417 nr_pages = min_t(unsigned long, nr_pages,
3418 root->fs_info->delalloc_bytes >> PAGE_CACHE_SHIFT); 3418 root->fs_info->delalloc_bytes >> PAGE_CACHE_SHIFT);
3419 writeback_inodes_sb_nr_if_idle(root->fs_info->sb, nr_pages); 3419 writeback_inodes_sb_nr_if_idle(root->fs_info->sb, nr_pages,
3420 WB_REASON_FS_FREE_SPACE);
3420 3421
3421 spin_lock(&space_info->lock); 3422 spin_lock(&space_info->lock);
3422 if (reserved > space_info->bytes_may_use) 3423 if (reserved > space_info->bytes_may_use)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index f2e928289600..dafdfa059bf6 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1832,7 +1832,7 @@ static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int origin)
1832 switch (origin) { 1832 switch (origin) {
1833 case SEEK_END: 1833 case SEEK_END:
1834 case SEEK_CUR: 1834 case SEEK_CUR:
1835 offset = generic_file_llseek_unlocked(file, offset, origin); 1835 offset = generic_file_llseek(file, offset, origin);
1836 goto out; 1836 goto out;
1837 case SEEK_DATA: 1837 case SEEK_DATA:
1838 case SEEK_HOLE: 1838 case SEEK_HOLE:
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index c5ccec23984c..2c984f7d4c2a 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2318,7 +2318,7 @@ static void btrfs_read_locked_inode(struct inode *inode)
2318 inode_item = btrfs_item_ptr(leaf, path->slots[0], 2318 inode_item = btrfs_item_ptr(leaf, path->slots[0],
2319 struct btrfs_inode_item); 2319 struct btrfs_inode_item);
2320 inode->i_mode = btrfs_inode_mode(leaf, inode_item); 2320 inode->i_mode = btrfs_inode_mode(leaf, inode_item);
2321 inode->i_nlink = btrfs_inode_nlink(leaf, inode_item); 2321 set_nlink(inode, btrfs_inode_nlink(leaf, inode_item));
2322 inode->i_uid = btrfs_inode_uid(leaf, inode_item); 2322 inode->i_uid = btrfs_inode_uid(leaf, inode_item);
2323 inode->i_gid = btrfs_inode_gid(leaf, inode_item); 2323 inode->i_gid = btrfs_inode_gid(leaf, inode_item);
2324 btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); 2324 btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item));
@@ -6593,7 +6593,7 @@ int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
6593 inode->i_op = &btrfs_dir_inode_operations; 6593 inode->i_op = &btrfs_dir_inode_operations;
6594 inode->i_fop = &btrfs_dir_file_operations; 6594 inode->i_fop = &btrfs_dir_file_operations;
6595 6595
6596 inode->i_nlink = 1; 6596 set_nlink(inode, 1);
6597 btrfs_i_size_write(inode, 0); 6597 btrfs_i_size_write(inode, 0);
6598 6598
6599 err = btrfs_update_inode(trans, new_root, inode); 6599 err = btrfs_update_inode(trans, new_root, inode);
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 1a3ce9e0b495..e28ad4baf483 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -825,13 +825,9 @@ static char *setup_root_args(char *args)
825static struct dentry *mount_subvol(const char *subvol_name, int flags, 825static struct dentry *mount_subvol(const char *subvol_name, int flags,
826 const char *device_name, char *data) 826 const char *device_name, char *data)
827{ 827{
828 struct super_block *s;
829 struct dentry *root; 828 struct dentry *root;
830 struct vfsmount *mnt; 829 struct vfsmount *mnt;
831 struct mnt_namespace *ns_private;
832 char *newargs; 830 char *newargs;
833 struct path path;
834 int error;
835 831
836 newargs = setup_root_args(data); 832 newargs = setup_root_args(data);
837 if (!newargs) 833 if (!newargs)
@@ -842,39 +838,17 @@ static struct dentry *mount_subvol(const char *subvol_name, int flags,
842 if (IS_ERR(mnt)) 838 if (IS_ERR(mnt))
843 return ERR_CAST(mnt); 839 return ERR_CAST(mnt);
844 840
845 ns_private = create_mnt_ns(mnt); 841 root = mount_subtree(mnt, subvol_name);
846 if (IS_ERR(ns_private)) {
847 mntput(mnt);
848 return ERR_CAST(ns_private);
849 }
850 842
851 /* 843 if (!IS_ERR(root) && !is_subvolume_inode(root->d_inode)) {
852 * This will trigger the automount of the subvol so we can just 844 struct super_block *s = root->d_sb;
853 * drop the mnt we have here and return the dentry that we 845 dput(root);
854 * found. 846 root = ERR_PTR(-EINVAL);
855 */ 847 deactivate_locked_super(s);
856 error = vfs_path_lookup(mnt->mnt_root, mnt, subvol_name,
857 LOOKUP_FOLLOW, &path);
858 put_mnt_ns(ns_private);
859 if (error)
860 return ERR_PTR(error);
861
862 if (!is_subvolume_inode(path.dentry->d_inode)) {
863 path_put(&path);
864 mntput(mnt);
865 error = -EINVAL;
866 printk(KERN_ERR "btrfs: '%s' is not a valid subvolume\n", 848 printk(KERN_ERR "btrfs: '%s' is not a valid subvolume\n",
867 subvol_name); 849 subvol_name);
868 return ERR_PTR(-EINVAL);
869 } 850 }
870 851
871 /* Get a ref to the sb and the dentry we found and return it */
872 s = path.mnt->mnt_sb;
873 atomic_inc(&s->s_active);
874 root = dget(path.dentry);
875 path_put(&path);
876 down_write(&s->s_umount);
877
878 return root; 852 return root;
879} 853}
880 854
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index f4d81c06d48f..3568374d419d 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -1031,7 +1031,7 @@ static noinline int fixup_inode_link_count(struct btrfs_trans_handle *trans,
1031 } 1031 }
1032 btrfs_release_path(path); 1032 btrfs_release_path(path);
1033 if (nlink != inode->i_nlink) { 1033 if (nlink != inode->i_nlink) {
1034 inode->i_nlink = nlink; 1034 set_nlink(inode, nlink);
1035 btrfs_update_inode(trans, root, inode); 1035 btrfs_update_inode(trans, root, inode);
1036 } 1036 }
1037 BTRFS_I(inode)->index_cnt = (u64)-1; 1037 BTRFS_I(inode)->index_cnt = (u64)-1;
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
index a76e41c04b71..3848b04e310e 100644
--- a/fs/btrfs/xattr.c
+++ b/fs/btrfs/xattr.c
@@ -394,36 +394,36 @@ int btrfs_removexattr(struct dentry *dentry, const char *name)
394 XATTR_REPLACE); 394 XATTR_REPLACE);
395} 395}
396 396
397int btrfs_xattr_security_init(struct btrfs_trans_handle *trans, 397int btrfs_initxattrs(struct inode *inode, const struct xattr *xattr_array,
398 struct inode *inode, struct inode *dir, 398 void *fs_info)
399 const struct qstr *qstr)
400{ 399{
401 int err; 400 const struct xattr *xattr;
402 size_t len; 401 struct btrfs_trans_handle *trans = fs_info;
403 void *value;
404 char *suffix;
405 char *name; 402 char *name;
403 int err = 0;
406 404
407 err = security_inode_init_security(inode, dir, qstr, &suffix, &value, 405 for (xattr = xattr_array; xattr->name != NULL; xattr++) {
408 &len); 406 name = kmalloc(XATTR_SECURITY_PREFIX_LEN +
409 if (err) { 407 strlen(xattr->name) + 1, GFP_NOFS);
410 if (err == -EOPNOTSUPP) 408 if (!name) {
411 return 0; 409 err = -ENOMEM;
412 return err; 410 break;
413 } 411 }
414
415 name = kmalloc(XATTR_SECURITY_PREFIX_LEN + strlen(suffix) + 1,
416 GFP_NOFS);
417 if (!name) {
418 err = -ENOMEM;
419 } else {
420 strcpy(name, XATTR_SECURITY_PREFIX); 412 strcpy(name, XATTR_SECURITY_PREFIX);
421 strcpy(name + XATTR_SECURITY_PREFIX_LEN, suffix); 413 strcpy(name + XATTR_SECURITY_PREFIX_LEN, xattr->name);
422 err = __btrfs_setxattr(trans, inode, name, value, len, 0); 414 err = __btrfs_setxattr(trans, inode, name,
415 xattr->value, xattr->value_len, 0);
423 kfree(name); 416 kfree(name);
417 if (err < 0)
418 break;
424 } 419 }
425
426 kfree(suffix);
427 kfree(value);
428 return err; 420 return err;
429} 421}
422
423int btrfs_xattr_security_init(struct btrfs_trans_handle *trans,
424 struct inode *inode, struct inode *dir,
425 const struct qstr *qstr)
426{
427 return security_inode_init_security(inode, dir, qstr,
428 &btrfs_initxattrs, trans);
429}