aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/qgroup.c
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2015-02-27 03:24:22 -0500
committerChris Mason <clm@fb.com>2015-04-13 10:52:53 -0400
commit8465ecec9611d60cbbc8e374ecf68453e0dd5b50 (patch)
treeeae55fdac84734729dfbfa6488ec76b6d322199c /fs/btrfs/qgroup.c
parentf5a6b1c53bdd44f79e3904c0f5e59f956b49b2c8 (diff)
btrfs: Check qgroup level in kernel qgroup assign.
Although we have qgroup level check in btrfs-progs, it's not enough since other programe may still call ioctl directly not using btrfs-progs. For example, systemd. But it's btrfs-progs to be blame since we don't provide a full-function(like subvolume create things) btrfs library with enough check, and only rely on kernel ioctl. So Add level checks in kernel too. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Reviewed-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/qgroup.c')
-rw-r--r--fs/btrfs/qgroup.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 464d1e237512..4fb9610beec7 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -1009,6 +1009,10 @@ int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans,
1009 struct btrfs_qgroup_list *list; 1009 struct btrfs_qgroup_list *list;
1010 int ret = 0; 1010 int ret = 0;
1011 1011
1012 /* Check the level of src and dst first */
1013 if (btrfs_qgroup_level(src) >= btrfs_qgroup_level(dst))
1014 return -EINVAL;
1015
1012 mutex_lock(&fs_info->qgroup_ioctl_lock); 1016 mutex_lock(&fs_info->qgroup_ioctl_lock);
1013 quota_root = fs_info->quota_root; 1017 quota_root = fs_info->quota_root;
1014 if (!quota_root) { 1018 if (!quota_root) {