diff options
Diffstat (limited to 'fs/btrfs/qgroup.c')
| -rw-r--r-- | fs/btrfs/qgroup.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index bc424ae5a81..38b42e7bc91 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1364,13 +1364,17 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,  	spin_lock(&fs_info->qgroup_lock);  	dstgroup = add_qgroup_rb(fs_info, objectid); -	if (!dstgroup) +	if (IS_ERR(dstgroup)) { +		ret = PTR_ERR(dstgroup);  		goto unlock; +	}  	if (srcid) {  		srcgroup = find_qgroup_rb(fs_info, srcid); -		if (!srcgroup) +		if (!srcgroup) { +			ret = -EINVAL;  			goto unlock; +		}  		dstgroup->rfer = srcgroup->rfer - level_size;  		dstgroup->rfer_cmpr = srcgroup->rfer_cmpr - level_size;  		srcgroup->excl = level_size; @@ -1379,8 +1383,10 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,  		qgroup_dirty(fs_info, srcgroup);  	} -	if (!inherit) +	if (!inherit) { +		ret = -EINVAL;  		goto unlock; +	}  	i_qgroups = (u64 *)(inherit + 1);  	for (i = 0; i < inherit->num_qgroups; ++i) {  |