Lines Matching refs:qgroup

39 static u64 qgroup_rsv_total(const struct btrfs_qgroup *qgroup)  in qgroup_rsv_total()  argument
45 ret += qgroup->rsv.values[i]; in qgroup_rsv_total()
64 struct btrfs_qgroup *qgroup, u64 num_bytes, in qgroup_rsv_add() argument
67 trace_qgroup_update_reserve(fs_info, qgroup, num_bytes, type); in qgroup_rsv_add()
68 qgroup->rsv.values[type] += num_bytes; in qgroup_rsv_add()
72 struct btrfs_qgroup *qgroup, u64 num_bytes, in qgroup_rsv_release() argument
75 trace_qgroup_update_reserve(fs_info, qgroup, -(s64)num_bytes, type); in qgroup_rsv_release()
76 if (qgroup->rsv.values[type] >= num_bytes) { in qgroup_rsv_release()
77 qgroup->rsv.values[type] -= num_bytes; in qgroup_rsv_release()
83 qgroup->qgroupid, qgroup_rsv_type_str(type), in qgroup_rsv_release()
84 qgroup->rsv.values[type], num_bytes); in qgroup_rsv_release()
86 qgroup->rsv.values[type] = 0; in qgroup_rsv_release()
169 struct btrfs_qgroup *qgroup; in find_qgroup_rb() local
172 qgroup = rb_entry(n, struct btrfs_qgroup, node); in find_qgroup_rb()
173 if (qgroup->qgroupid < qgroupid) in find_qgroup_rb()
175 else if (qgroup->qgroupid > qgroupid) in find_qgroup_rb()
178 return qgroup; in find_qgroup_rb()
189 struct btrfs_qgroup *qgroup; in add_qgroup_rb() local
193 qgroup = rb_entry(parent, struct btrfs_qgroup, node); in add_qgroup_rb()
195 if (qgroup->qgroupid < qgroupid) in add_qgroup_rb()
197 else if (qgroup->qgroupid > qgroupid) in add_qgroup_rb()
200 return qgroup; in add_qgroup_rb()
203 qgroup = kzalloc(sizeof(*qgroup), GFP_ATOMIC); in add_qgroup_rb()
204 if (!qgroup) in add_qgroup_rb()
207 qgroup->qgroupid = qgroupid; in add_qgroup_rb()
208 INIT_LIST_HEAD(&qgroup->groups); in add_qgroup_rb()
209 INIT_LIST_HEAD(&qgroup->members); in add_qgroup_rb()
210 INIT_LIST_HEAD(&qgroup->dirty); in add_qgroup_rb()
212 rb_link_node(&qgroup->node, parent, p); in add_qgroup_rb()
213 rb_insert_color(&qgroup->node, &fs_info->qgroup_tree); in add_qgroup_rb()
215 return qgroup; in add_qgroup_rb()
219 struct btrfs_qgroup *qgroup) in __del_qgroup_rb() argument
223 list_del(&qgroup->dirty); in __del_qgroup_rb()
224 while (!list_empty(&qgroup->groups)) { in __del_qgroup_rb()
225 list = list_first_entry(&qgroup->groups, in __del_qgroup_rb()
232 while (!list_empty(&qgroup->members)) { in __del_qgroup_rb()
233 list = list_first_entry(&qgroup->members, in __del_qgroup_rb()
244 struct btrfs_qgroup *qgroup = find_qgroup_rb(fs_info, qgroupid); in del_qgroup_rb() local
246 if (!qgroup) in del_qgroup_rb()
249 rb_erase(&qgroup->node, &fs_info->qgroup_tree); in del_qgroup_rb()
250 __del_qgroup_rb(fs_info, qgroup); in del_qgroup_rb()
330 struct btrfs_qgroup *qgroup; in btrfs_verify_qgroup_counts() local
332 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_verify_qgroup_counts()
333 if (!qgroup) in btrfs_verify_qgroup_counts()
335 if (qgroup->rfer != rfer || qgroup->excl != excl) in btrfs_verify_qgroup_counts()
396 struct btrfs_qgroup *qgroup; in btrfs_read_qgroup_config() local
430 qgroup = find_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
431 if ((qgroup && found_key.type == BTRFS_QGROUP_INFO_KEY) || in btrfs_read_qgroup_config()
432 (!qgroup && found_key.type == BTRFS_QGROUP_LIMIT_KEY)) { in btrfs_read_qgroup_config()
436 if (!qgroup) { in btrfs_read_qgroup_config()
437 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
438 if (IS_ERR(qgroup)) { in btrfs_read_qgroup_config()
439 ret = PTR_ERR(qgroup); in btrfs_read_qgroup_config()
443 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_read_qgroup_config()
453 qgroup->rfer = btrfs_qgroup_info_rfer(l, ptr); in btrfs_read_qgroup_config()
454 qgroup->rfer_cmpr = btrfs_qgroup_info_rfer_cmpr(l, ptr); in btrfs_read_qgroup_config()
455 qgroup->excl = btrfs_qgroup_info_excl(l, ptr); in btrfs_read_qgroup_config()
456 qgroup->excl_cmpr = btrfs_qgroup_info_excl_cmpr(l, ptr); in btrfs_read_qgroup_config()
465 qgroup->lim_flags = btrfs_qgroup_limit_flags(l, ptr); in btrfs_read_qgroup_config()
466 qgroup->max_rfer = btrfs_qgroup_limit_max_rfer(l, ptr); in btrfs_read_qgroup_config()
467 qgroup->max_excl = btrfs_qgroup_limit_max_excl(l, ptr); in btrfs_read_qgroup_config()
468 qgroup->rsv_rfer = btrfs_qgroup_limit_rsv_rfer(l, ptr); in btrfs_read_qgroup_config()
469 qgroup->rsv_excl = btrfs_qgroup_limit_rsv_excl(l, ptr); in btrfs_read_qgroup_config()
561 struct btrfs_qgroup *qgroup; in btrfs_check_quota_leak() local
564 qgroup = rb_entry(node, struct btrfs_qgroup, node); in btrfs_check_quota_leak()
566 if (qgroup->rsv.values[i]) { in btrfs_check_quota_leak()
570 btrfs_qgroup_level(qgroup->qgroupid), in btrfs_check_quota_leak()
571 btrfs_qgroup_subvolid(qgroup->qgroupid), in btrfs_check_quota_leak()
572 i, qgroup->rsv.values[i]); in btrfs_check_quota_leak()
588 struct btrfs_qgroup *qgroup; in btrfs_free_qgroup_config() local
591 qgroup = rb_entry(n, struct btrfs_qgroup, node); in btrfs_free_qgroup_config()
593 __del_qgroup_rb(fs_info, qgroup); in btrfs_free_qgroup_config()
594 btrfs_sysfs_del_one_qgroup(fs_info, qgroup); in btrfs_free_qgroup_config()
595 kfree(qgroup); in btrfs_free_qgroup_config()
777 struct btrfs_qgroup *qgroup) in update_qgroup_limit_item() argument
789 key.offset = qgroup->qgroupid; in update_qgroup_limit_item()
805 btrfs_set_qgroup_limit_flags(l, qgroup_limit, qgroup->lim_flags); in update_qgroup_limit_item()
806 btrfs_set_qgroup_limit_max_rfer(l, qgroup_limit, qgroup->max_rfer); in update_qgroup_limit_item()
807 btrfs_set_qgroup_limit_max_excl(l, qgroup_limit, qgroup->max_excl); in update_qgroup_limit_item()
808 btrfs_set_qgroup_limit_rsv_rfer(l, qgroup_limit, qgroup->rsv_rfer); in update_qgroup_limit_item()
809 btrfs_set_qgroup_limit_rsv_excl(l, qgroup_limit, qgroup->rsv_excl); in update_qgroup_limit_item()
819 struct btrfs_qgroup *qgroup) in update_qgroup_info_item() argument
835 key.offset = qgroup->qgroupid; in update_qgroup_info_item()
852 btrfs_set_qgroup_info_rfer(l, qgroup_info, qgroup->rfer); in update_qgroup_info_item()
853 btrfs_set_qgroup_info_rfer_cmpr(l, qgroup_info, qgroup->rfer_cmpr); in update_qgroup_info_item()
854 btrfs_set_qgroup_info_excl(l, qgroup_info, qgroup->excl); in update_qgroup_info_item()
855 btrfs_set_qgroup_info_excl_cmpr(l, qgroup_info, qgroup->excl_cmpr); in update_qgroup_info_item()
961 struct btrfs_qgroup *qgroup = NULL; in btrfs_quota_enable() local
1104 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_quota_enable()
1105 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
1106 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
1110 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_quota_enable()
1147 qgroup = add_qgroup_rb(fs_info, BTRFS_FS_TREE_OBJECTID); in btrfs_quota_enable()
1148 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
1149 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
1153 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_quota_enable()
1325 struct btrfs_qgroup *qgroup) in qgroup_dirty() argument
1327 if (list_empty(&qgroup->dirty)) in qgroup_dirty()
1328 list_add(&qgroup->dirty, &fs_info->dirty_qgroups); in qgroup_dirty()
1349 struct btrfs_qgroup *qgroup; in __qgroup_excl_accounting() local
1356 qgroup = find_qgroup_rb(fs_info, ref_root); in __qgroup_excl_accounting()
1357 if (!qgroup) in __qgroup_excl_accounting()
1360 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1361 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1363 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1364 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1365 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1368 qgroup_rsv_add_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1370 qgroup_rsv_release_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1372 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1375 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1385 qgroup = unode_aux_to_qgroup(unode); in __qgroup_excl_accounting()
1386 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1387 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1388 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1389 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1391 qgroup_rsv_add_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1393 qgroup_rsv_release_by_qgroup(fs_info, qgroup, src); in __qgroup_excl_accounting()
1394 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1395 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1398 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1426 struct btrfs_qgroup *qgroup; in quick_update_accounting() local
1430 qgroup = find_qgroup_rb(fs_info, src); in quick_update_accounting()
1431 if (!qgroup) in quick_update_accounting()
1433 if (qgroup->excl == qgroup->rfer) { in quick_update_accounting()
1436 qgroup, sign); in quick_update_accounting()
1596 struct btrfs_qgroup *qgroup; in btrfs_create_qgroup() local
1605 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1606 if (qgroup) { in btrfs_create_qgroup()
1616 qgroup = add_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1619 if (IS_ERR(qgroup)) { in btrfs_create_qgroup()
1620 ret = PTR_ERR(qgroup); in btrfs_create_qgroup()
1623 ret = btrfs_sysfs_add_one_qgroup(fs_info, qgroup); in btrfs_create_qgroup()
1632 struct btrfs_qgroup *qgroup; in btrfs_remove_qgroup() local
1642 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_remove_qgroup()
1643 if (!qgroup) { in btrfs_remove_qgroup()
1649 if (!list_empty(&qgroup->members)) { in btrfs_remove_qgroup()
1658 while (!list_empty(&qgroup->groups)) { in btrfs_remove_qgroup()
1659 list = list_first_entry(&qgroup->groups, in btrfs_remove_qgroup()
1676 btrfs_sysfs_del_one_qgroup(fs_info, qgroup); in btrfs_remove_qgroup()
1677 kfree(qgroup); in btrfs_remove_qgroup()
1687 struct btrfs_qgroup *qgroup; in btrfs_limit_qgroup() local
1701 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_limit_qgroup()
1702 if (!qgroup) { in btrfs_limit_qgroup()
1710 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_MAX_RFER; in btrfs_limit_qgroup()
1712 qgroup->max_rfer = 0; in btrfs_limit_qgroup()
1714 qgroup->max_rfer = limit->max_rfer; in btrfs_limit_qgroup()
1719 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_MAX_EXCL; in btrfs_limit_qgroup()
1721 qgroup->max_excl = 0; in btrfs_limit_qgroup()
1723 qgroup->max_excl = limit->max_excl; in btrfs_limit_qgroup()
1728 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_RSV_RFER; in btrfs_limit_qgroup()
1730 qgroup->rsv_rfer = 0; in btrfs_limit_qgroup()
1732 qgroup->rsv_rfer = limit->rsv_rfer; in btrfs_limit_qgroup()
1737 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_RSV_EXCL; in btrfs_limit_qgroup()
1739 qgroup->rsv_excl = 0; in btrfs_limit_qgroup()
1741 qgroup->rsv_excl = limit->rsv_excl; in btrfs_limit_qgroup()
1744 qgroup->lim_flags |= limit->flags; in btrfs_limit_qgroup()
1748 ret = update_qgroup_limit_item(trans, qgroup); in btrfs_limit_qgroup()
2843 struct btrfs_qgroup *qgroup; in btrfs_run_qgroups() local
2844 qgroup = list_first_entry(&fs_info->dirty_qgroups, in btrfs_run_qgroups()
2846 list_del_init(&qgroup->dirty); in btrfs_run_qgroups()
2848 ret = update_qgroup_info_item(trans, qgroup); in btrfs_run_qgroups()
2851 ret = update_qgroup_limit_item(trans, qgroup); in btrfs_run_qgroups()
3101 struct btrfs_qgroup *qgroup; in qgroup_reserve() local
3122 qgroup = find_qgroup_rb(fs_info, ref_root); in qgroup_reserve()
3123 if (!qgroup) in qgroup_reserve()
3131 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in qgroup_reserve()
3132 qgroup_to_aux(qgroup), GFP_ATOMIC); in qgroup_reserve()
3186 struct btrfs_qgroup *qgroup; in btrfs_qgroup_free_refroot() local
3206 qgroup = find_qgroup_rb(fs_info, ref_root); in btrfs_qgroup_free_refroot()
3207 if (!qgroup) in btrfs_qgroup_free_refroot()
3215 num_bytes = qgroup->rsv.values[type]; in btrfs_qgroup_free_refroot()
3218 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in btrfs_qgroup_free_refroot()
3219 qgroup_to_aux(qgroup), GFP_ATOMIC); in btrfs_qgroup_free_refroot()
3534 struct btrfs_qgroup *qgroup; in qgroup_rescan_zero_tracking() local
3539 qgroup = rb_entry(n, struct btrfs_qgroup, node); in qgroup_rescan_zero_tracking()
3540 qgroup->rfer = 0; in qgroup_rescan_zero_tracking()
3541 qgroup->rfer_cmpr = 0; in qgroup_rescan_zero_tracking()
3542 qgroup->excl = 0; in qgroup_rescan_zero_tracking()
3543 qgroup->excl_cmpr = 0; in qgroup_rescan_zero_tracking()
3544 qgroup_dirty(fs_info, qgroup); in qgroup_rescan_zero_tracking()
4080 struct btrfs_qgroup *qgroup; in qgroup_convert_meta() local
4091 qgroup = find_qgroup_rb(fs_info, ref_root); in qgroup_convert_meta()
4092 if (!qgroup) in qgroup_convert_meta()
4095 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in qgroup_convert_meta()
4096 qgroup_to_aux(qgroup), GFP_ATOMIC); in qgroup_convert_meta()