Lines Matching refs:qgroup
45 static u64 qgroup_rsv_total(const struct btrfs_qgroup *qgroup) in qgroup_rsv_total() argument
51 ret += qgroup->rsv.values[i]; in qgroup_rsv_total()
70 struct btrfs_qgroup *qgroup, u64 num_bytes, in qgroup_rsv_add() argument
73 trace_qgroup_update_reserve(fs_info, qgroup, num_bytes, type); in qgroup_rsv_add()
74 qgroup->rsv.values[type] += num_bytes; in qgroup_rsv_add()
78 struct btrfs_qgroup *qgroup, u64 num_bytes, in qgroup_rsv_release() argument
81 trace_qgroup_update_reserve(fs_info, qgroup, -(s64)num_bytes, type); in qgroup_rsv_release()
82 if (qgroup->rsv.values[type] >= num_bytes) { in qgroup_rsv_release()
83 qgroup->rsv.values[type] -= num_bytes; in qgroup_rsv_release()
89 qgroup->qgroupid, qgroup_rsv_type_str(type), in qgroup_rsv_release()
90 qgroup->rsv.values[type], num_bytes); in qgroup_rsv_release()
92 qgroup->rsv.values[type] = 0; in qgroup_rsv_release()
175 struct btrfs_qgroup *qgroup; in find_qgroup_rb() local
178 qgroup = rb_entry(n, struct btrfs_qgroup, node); in find_qgroup_rb()
179 if (qgroup->qgroupid < qgroupid) in find_qgroup_rb()
181 else if (qgroup->qgroupid > qgroupid) in find_qgroup_rb()
184 return qgroup; in find_qgroup_rb()
195 struct btrfs_qgroup *qgroup; in add_qgroup_rb() local
199 qgroup = rb_entry(parent, struct btrfs_qgroup, node); in add_qgroup_rb()
201 if (qgroup->qgroupid < qgroupid) in add_qgroup_rb()
203 else if (qgroup->qgroupid > qgroupid) in add_qgroup_rb()
206 return qgroup; in add_qgroup_rb()
209 qgroup = kzalloc(sizeof(*qgroup), GFP_ATOMIC); in add_qgroup_rb()
210 if (!qgroup) in add_qgroup_rb()
213 qgroup->qgroupid = qgroupid; in add_qgroup_rb()
214 INIT_LIST_HEAD(&qgroup->groups); in add_qgroup_rb()
215 INIT_LIST_HEAD(&qgroup->members); in add_qgroup_rb()
216 INIT_LIST_HEAD(&qgroup->dirty); in add_qgroup_rb()
218 rb_link_node(&qgroup->node, parent, p); in add_qgroup_rb()
219 rb_insert_color(&qgroup->node, &fs_info->qgroup_tree); in add_qgroup_rb()
221 return qgroup; in add_qgroup_rb()
225 struct btrfs_qgroup *qgroup) in __del_qgroup_rb() argument
229 list_del(&qgroup->dirty); in __del_qgroup_rb()
230 while (!list_empty(&qgroup->groups)) { in __del_qgroup_rb()
231 list = list_first_entry(&qgroup->groups, in __del_qgroup_rb()
238 while (!list_empty(&qgroup->members)) { in __del_qgroup_rb()
239 list = list_first_entry(&qgroup->members, in __del_qgroup_rb()
250 struct btrfs_qgroup *qgroup = find_qgroup_rb(fs_info, qgroupid); in del_qgroup_rb() local
252 if (!qgroup) in del_qgroup_rb()
255 rb_erase(&qgroup->node, &fs_info->qgroup_tree); in del_qgroup_rb()
256 __del_qgroup_rb(fs_info, qgroup); in del_qgroup_rb()
313 struct btrfs_qgroup *qgroup; in btrfs_verify_qgroup_counts() local
315 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_verify_qgroup_counts()
316 if (!qgroup) in btrfs_verify_qgroup_counts()
318 if (qgroup->rfer != rfer || qgroup->excl != excl) in btrfs_verify_qgroup_counts()
372 struct btrfs_qgroup *qgroup; in btrfs_read_qgroup_config() local
406 qgroup = find_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
407 if ((qgroup && found_key.type == BTRFS_QGROUP_INFO_KEY) || in btrfs_read_qgroup_config()
408 (!qgroup && found_key.type == BTRFS_QGROUP_LIMIT_KEY)) { in btrfs_read_qgroup_config()
412 if (!qgroup) { in btrfs_read_qgroup_config()
413 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
414 if (IS_ERR(qgroup)) { in btrfs_read_qgroup_config()
415 ret = PTR_ERR(qgroup); in btrfs_read_qgroup_config()
419 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_read_qgroup_config()
429 qgroup->rfer = btrfs_qgroup_info_rfer(l, ptr); in btrfs_read_qgroup_config()
430 qgroup->rfer_cmpr = btrfs_qgroup_info_rfer_cmpr(l, ptr); in btrfs_read_qgroup_config()
431 qgroup->excl = btrfs_qgroup_info_excl(l, ptr); in btrfs_read_qgroup_config()
432 qgroup->excl_cmpr = btrfs_qgroup_info_excl_cmpr(l, ptr); in btrfs_read_qgroup_config()
441 qgroup->lim_flags = btrfs_qgroup_limit_flags(l, ptr); in btrfs_read_qgroup_config()
442 qgroup->max_rfer = btrfs_qgroup_limit_max_rfer(l, ptr); in btrfs_read_qgroup_config()
443 qgroup->max_excl = btrfs_qgroup_limit_max_excl(l, ptr); in btrfs_read_qgroup_config()
444 qgroup->rsv_rfer = btrfs_qgroup_limit_rsv_rfer(l, ptr); in btrfs_read_qgroup_config()
445 qgroup->rsv_excl = btrfs_qgroup_limit_rsv_excl(l, ptr); in btrfs_read_qgroup_config()
537 struct btrfs_qgroup *qgroup; in btrfs_check_quota_leak() local
540 qgroup = rb_entry(node, struct btrfs_qgroup, node); in btrfs_check_quota_leak()
542 if (qgroup->rsv.values[i]) { in btrfs_check_quota_leak()
546 btrfs_qgroup_level(qgroup->qgroupid), in btrfs_check_quota_leak()
547 btrfs_qgroup_subvolid(qgroup->qgroupid), in btrfs_check_quota_leak()
548 i, qgroup->rsv.values[i]); in btrfs_check_quota_leak()
564 struct btrfs_qgroup *qgroup; in btrfs_free_qgroup_config() local
567 qgroup = rb_entry(n, struct btrfs_qgroup, node); in btrfs_free_qgroup_config()
569 __del_qgroup_rb(fs_info, qgroup); in btrfs_free_qgroup_config()
570 btrfs_sysfs_del_one_qgroup(fs_info, qgroup); in btrfs_free_qgroup_config()
571 kfree(qgroup); in btrfs_free_qgroup_config()
753 struct btrfs_qgroup *qgroup) in update_qgroup_limit_item() argument
765 key.offset = qgroup->qgroupid; in update_qgroup_limit_item()
781 btrfs_set_qgroup_limit_flags(l, qgroup_limit, qgroup->lim_flags); in update_qgroup_limit_item()
782 btrfs_set_qgroup_limit_max_rfer(l, qgroup_limit, qgroup->max_rfer); in update_qgroup_limit_item()
783 btrfs_set_qgroup_limit_max_excl(l, qgroup_limit, qgroup->max_excl); in update_qgroup_limit_item()
784 btrfs_set_qgroup_limit_rsv_rfer(l, qgroup_limit, qgroup->rsv_rfer); in update_qgroup_limit_item()
785 btrfs_set_qgroup_limit_rsv_excl(l, qgroup_limit, qgroup->rsv_excl); in update_qgroup_limit_item()
795 struct btrfs_qgroup *qgroup) in update_qgroup_info_item() argument
811 key.offset = qgroup->qgroupid; in update_qgroup_info_item()
828 btrfs_set_qgroup_info_rfer(l, qgroup_info, qgroup->rfer); in update_qgroup_info_item()
829 btrfs_set_qgroup_info_rfer_cmpr(l, qgroup_info, qgroup->rfer_cmpr); in update_qgroup_info_item()
830 btrfs_set_qgroup_info_excl(l, qgroup_info, qgroup->excl); in update_qgroup_info_item()
831 btrfs_set_qgroup_info_excl_cmpr(l, qgroup_info, qgroup->excl_cmpr); in update_qgroup_info_item()
938 struct btrfs_qgroup *qgroup = NULL; in btrfs_quota_enable() local
1074 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_quota_enable()
1075 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
1076 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
1080 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_quota_enable()
1117 qgroup = add_qgroup_rb(fs_info, BTRFS_FS_TREE_OBJECTID); in btrfs_quota_enable()
1118 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
1119 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
1123 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_quota_enable()
1293 struct btrfs_qgroup *qgroup) in qgroup_dirty() argument
1295 if (list_empty(&qgroup->dirty)) in qgroup_dirty()
1296 list_add(&qgroup->dirty, &fs_info->dirty_qgroups); in qgroup_dirty()
1317 struct btrfs_qgroup *qgroup; in __qgroup_excl_accounting() local
1324 qgroup = find_qgroup_rb(fs_info, ref_root); in __qgroup_excl_accounting()
1325 if (!qgroup) in __qgroup_excl_accounting()
1328 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1329 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1331 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1332 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1333 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1336 qgroup_rsv_add_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1338 qgroup_rsv_release_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1340 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1343 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1353 qgroup = unode_aux_to_qgroup(unode); in __qgroup_excl_accounting()
1354 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1355 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1356 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1357 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1359 qgroup_rsv_add_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1361 qgroup_rsv_release_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1362 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1363 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1366 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1394 struct btrfs_qgroup *qgroup; in quick_update_accounting() local
1398 qgroup = find_qgroup_rb(fs_info, src); in quick_update_accounting()
1399 if (!qgroup) in quick_update_accounting()
1401 if (qgroup->excl == qgroup->rfer) { in quick_update_accounting()
1404 qgroup, sign); in quick_update_accounting()
1564 struct btrfs_qgroup *qgroup; in btrfs_create_qgroup() local
1573 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1574 if (qgroup) { in btrfs_create_qgroup()
1584 qgroup = add_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1587 if (IS_ERR(qgroup)) { in btrfs_create_qgroup()
1588 ret = PTR_ERR(qgroup); in btrfs_create_qgroup()
1591 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_create_qgroup()
1600 struct btrfs_qgroup *qgroup; in btrfs_remove_qgroup() local
1610 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_remove_qgroup()
1611 if (!qgroup) { in btrfs_remove_qgroup()
1617 if (!list_empty(&qgroup->members)) { in btrfs_remove_qgroup()
1626 while (!list_empty(&qgroup->groups)) { in btrfs_remove_qgroup()
1627 list = list_first_entry(&qgroup->groups, in btrfs_remove_qgroup()
1644 btrfs_sysfs_del_one_qgroup(fs_info, qgroup); in btrfs_remove_qgroup()
1645 kfree(qgroup); in btrfs_remove_qgroup()
1655 struct btrfs_qgroup *qgroup; in btrfs_limit_qgroup() local
1669 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_limit_qgroup()
1670 if (!qgroup) { in btrfs_limit_qgroup()
1678 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_MAX_RFER; in btrfs_limit_qgroup()
1680 qgroup->max_rfer = 0; in btrfs_limit_qgroup()
1682 qgroup->max_rfer = limit->max_rfer; in btrfs_limit_qgroup()
1687 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_MAX_EXCL; in btrfs_limit_qgroup()
1689 qgroup->max_excl = 0; in btrfs_limit_qgroup()
1691 qgroup->max_excl = limit->max_excl; in btrfs_limit_qgroup()
1696 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_RSV_RFER; in btrfs_limit_qgroup()
1698 qgroup->rsv_rfer = 0; in btrfs_limit_qgroup()
1700 qgroup->rsv_rfer = limit->rsv_rfer; in btrfs_limit_qgroup()
1705 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_RSV_EXCL; in btrfs_limit_qgroup()
1707 qgroup->rsv_excl = 0; in btrfs_limit_qgroup()
1709 qgroup->rsv_excl = limit->rsv_excl; in btrfs_limit_qgroup()
1712 qgroup->lim_flags |= limit->flags; in btrfs_limit_qgroup()
1716 ret = update_qgroup_limit_item(trans, qgroup); in btrfs_limit_qgroup()
2777 struct btrfs_qgroup *qgroup; in btrfs_run_qgroups() local
2778 qgroup = list_first_entry(&fs_info->dirty_qgroups, in btrfs_run_qgroups()
2780 list_del_init(&qgroup->dirty); in btrfs_run_qgroups()
2782 ret = update_qgroup_info_item(trans, qgroup); in btrfs_run_qgroups()
2786 ret = update_qgroup_limit_item(trans, qgroup); in btrfs_run_qgroups()
3037 struct btrfs_qgroup *qgroup; in qgroup_reserve() local
3058 qgroup = find_qgroup_rb(fs_info, ref_root); in qgroup_reserve()
3059 if (!qgroup) in qgroup_reserve()
3067 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in qgroup_reserve()
3068 qgroup_to_aux(qgroup), GFP_ATOMIC); in qgroup_reserve()
3122 struct btrfs_qgroup *qgroup; in btrfs_qgroup_free_refroot() local
3142 qgroup = find_qgroup_rb(fs_info, ref_root); in btrfs_qgroup_free_refroot()
3143 if (!qgroup) in btrfs_qgroup_free_refroot()
3151 num_bytes = qgroup->rsv.values[type]; in btrfs_qgroup_free_refroot()
3154 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in btrfs_qgroup_free_refroot()
3155 qgroup_to_aux(qgroup), GFP_ATOMIC); in btrfs_qgroup_free_refroot()
3448 struct btrfs_qgroup *qgroup; in qgroup_rescan_zero_tracking() local
3453 qgroup = rb_entry(n, struct btrfs_qgroup, node); in qgroup_rescan_zero_tracking()
3454 qgroup->rfer = 0; in qgroup_rescan_zero_tracking()
3455 qgroup->rfer_cmpr = 0; in qgroup_rescan_zero_tracking()
3456 qgroup->excl = 0; in qgroup_rescan_zero_tracking()
3457 qgroup->excl_cmpr = 0; in qgroup_rescan_zero_tracking()
3458 qgroup_dirty(fs_info, qgroup); in qgroup_rescan_zero_tracking()
4017 struct btrfs_qgroup *qgroup; in qgroup_convert_meta() local
4028 qgroup = find_qgroup_rb(fs_info, ref_root); in qgroup_convert_meta()
4029 if (!qgroup) in qgroup_convert_meta()
4032 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in qgroup_convert_meta()
4033 qgroup_to_aux(qgroup), GFP_ATOMIC); in qgroup_convert_meta()