From: Dongsheng Yang Date: Tue, 11 Nov 2014 12:18:22 +0000 (-0500) Subject: btrfs: qgroup: return EINVAL if level of parent is not higher than child's. X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=09870d2772b284d0061a5e4d1e1cdf6fb6764344;p=openwrt%2Fstaging%2Fblogic.git btrfs: qgroup: return EINVAL if level of parent is not higher than child's. When we create a subvol inheriting a qgroup, we need to check the level of them. Otherwise, there is a chance a qgroup can inherit another qgroup at the same level. Signed-off-by: Dongsheng Yang Signed-off-by: Chris Mason --- diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 17881ad8ed96..4ec86b3eee21 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -2230,6 +2230,11 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, ret = -EINVAL; goto out; } + + if ((srcgroup->qgroupid >> 48) <= (objectid >> 48)) { + ret = -EINVAL; + goto out; + } ++i_qgroups; } }