Lines Matching refs:qgroup
115 struct btrfs_qgroup *qgroup; in find_qgroup_rb() local
118 qgroup = rb_entry(n, struct btrfs_qgroup, node); in find_qgroup_rb()
119 if (qgroup->qgroupid < qgroupid) in find_qgroup_rb()
121 else if (qgroup->qgroupid > qgroupid) in find_qgroup_rb()
124 return qgroup; in find_qgroup_rb()
135 struct btrfs_qgroup *qgroup; in add_qgroup_rb() local
139 qgroup = rb_entry(parent, struct btrfs_qgroup, node); in add_qgroup_rb()
141 if (qgroup->qgroupid < qgroupid) in add_qgroup_rb()
143 else if (qgroup->qgroupid > qgroupid) in add_qgroup_rb()
146 return qgroup; in add_qgroup_rb()
149 qgroup = kzalloc(sizeof(*qgroup), GFP_ATOMIC); in add_qgroup_rb()
150 if (!qgroup) in add_qgroup_rb()
153 qgroup->qgroupid = qgroupid; in add_qgroup_rb()
154 INIT_LIST_HEAD(&qgroup->groups); in add_qgroup_rb()
155 INIT_LIST_HEAD(&qgroup->members); in add_qgroup_rb()
156 INIT_LIST_HEAD(&qgroup->dirty); in add_qgroup_rb()
158 rb_link_node(&qgroup->node, parent, p); in add_qgroup_rb()
159 rb_insert_color(&qgroup->node, &fs_info->qgroup_tree); in add_qgroup_rb()
161 return qgroup; in add_qgroup_rb()
164 static void __del_qgroup_rb(struct btrfs_qgroup *qgroup) in __del_qgroup_rb() argument
168 list_del(&qgroup->dirty); in __del_qgroup_rb()
169 while (!list_empty(&qgroup->groups)) { in __del_qgroup_rb()
170 list = list_first_entry(&qgroup->groups, in __del_qgroup_rb()
177 while (!list_empty(&qgroup->members)) { in __del_qgroup_rb()
178 list = list_first_entry(&qgroup->members, in __del_qgroup_rb()
184 kfree(qgroup); in __del_qgroup_rb()
190 struct btrfs_qgroup *qgroup = find_qgroup_rb(fs_info, qgroupid); in del_qgroup_rb() local
192 if (!qgroup) in del_qgroup_rb()
195 rb_erase(&qgroup->node, &fs_info->qgroup_tree); in del_qgroup_rb()
196 __del_qgroup_rb(qgroup); in del_qgroup_rb()
253 struct btrfs_qgroup *qgroup; in btrfs_verify_qgroup_counts() local
255 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_verify_qgroup_counts()
256 if (!qgroup) in btrfs_verify_qgroup_counts()
258 if (qgroup->rfer != rfer || qgroup->excl != excl) in btrfs_verify_qgroup_counts()
309 struct btrfs_qgroup *qgroup; in btrfs_read_qgroup_config() local
344 qgroup = find_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
345 if ((qgroup && found_key.type == BTRFS_QGROUP_INFO_KEY) || in btrfs_read_qgroup_config()
346 (!qgroup && found_key.type == BTRFS_QGROUP_LIMIT_KEY)) { in btrfs_read_qgroup_config()
350 if (!qgroup) { in btrfs_read_qgroup_config()
351 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
352 if (IS_ERR(qgroup)) { in btrfs_read_qgroup_config()
353 ret = PTR_ERR(qgroup); in btrfs_read_qgroup_config()
363 qgroup->rfer = btrfs_qgroup_info_rfer(l, ptr); in btrfs_read_qgroup_config()
364 qgroup->rfer_cmpr = btrfs_qgroup_info_rfer_cmpr(l, ptr); in btrfs_read_qgroup_config()
365 qgroup->excl = btrfs_qgroup_info_excl(l, ptr); in btrfs_read_qgroup_config()
366 qgroup->excl_cmpr = btrfs_qgroup_info_excl_cmpr(l, ptr); in btrfs_read_qgroup_config()
375 qgroup->lim_flags = btrfs_qgroup_limit_flags(l, ptr); in btrfs_read_qgroup_config()
376 qgroup->max_rfer = btrfs_qgroup_limit_max_rfer(l, ptr); in btrfs_read_qgroup_config()
377 qgroup->max_excl = btrfs_qgroup_limit_max_excl(l, ptr); in btrfs_read_qgroup_config()
378 qgroup->rsv_rfer = btrfs_qgroup_limit_rsv_rfer(l, ptr); in btrfs_read_qgroup_config()
379 qgroup->rsv_excl = btrfs_qgroup_limit_rsv_excl(l, ptr); in btrfs_read_qgroup_config()
461 struct btrfs_qgroup *qgroup; in btrfs_free_qgroup_config() local
464 qgroup = rb_entry(n, struct btrfs_qgroup, node); in btrfs_free_qgroup_config()
466 __del_qgroup_rb(qgroup); in btrfs_free_qgroup_config()
648 struct btrfs_qgroup *qgroup) in update_qgroup_limit_item() argument
659 key.offset = qgroup->qgroupid; in update_qgroup_limit_item()
675 btrfs_set_qgroup_limit_flags(l, qgroup_limit, qgroup->lim_flags); in update_qgroup_limit_item()
676 btrfs_set_qgroup_limit_max_rfer(l, qgroup_limit, qgroup->max_rfer); in update_qgroup_limit_item()
677 btrfs_set_qgroup_limit_max_excl(l, qgroup_limit, qgroup->max_excl); in update_qgroup_limit_item()
678 btrfs_set_qgroup_limit_rsv_rfer(l, qgroup_limit, qgroup->rsv_rfer); in update_qgroup_limit_item()
679 btrfs_set_qgroup_limit_rsv_excl(l, qgroup_limit, qgroup->rsv_excl); in update_qgroup_limit_item()
690 struct btrfs_qgroup *qgroup) in update_qgroup_info_item() argument
704 key.offset = qgroup->qgroupid; in update_qgroup_info_item()
721 btrfs_set_qgroup_info_rfer(l, qgroup_info, qgroup->rfer); in update_qgroup_info_item()
722 btrfs_set_qgroup_info_rfer_cmpr(l, qgroup_info, qgroup->rfer_cmpr); in update_qgroup_info_item()
723 btrfs_set_qgroup_info_excl(l, qgroup_info, qgroup->excl); in update_qgroup_info_item()
724 btrfs_set_qgroup_info_excl_cmpr(l, qgroup_info, qgroup->excl_cmpr); in update_qgroup_info_item()
833 struct btrfs_qgroup *qgroup = NULL; in btrfs_quota_enable() local
909 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_quota_enable()
910 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
911 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
928 qgroup = add_qgroup_rb(fs_info, BTRFS_FS_TREE_OBJECTID); in btrfs_quota_enable()
929 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
930 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
998 struct btrfs_qgroup *qgroup) in qgroup_dirty() argument
1000 if (list_empty(&qgroup->dirty)) in qgroup_dirty()
1001 list_add(&qgroup->dirty, &fs_info->dirty_qgroups); in qgroup_dirty()
1015 struct btrfs_qgroup *qgroup; in __qgroup_excl_accounting() local
1021 qgroup = find_qgroup_rb(fs_info, ref_root); in __qgroup_excl_accounting()
1022 if (!qgroup) in __qgroup_excl_accounting()
1025 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1026 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1028 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1029 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1030 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1032 qgroup->reserved -= num_bytes; in __qgroup_excl_accounting()
1034 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1037 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1047 qgroup = u64_to_ptr(unode->aux); in __qgroup_excl_accounting()
1048 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1049 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1050 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1051 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1053 qgroup->reserved -= num_bytes; in __qgroup_excl_accounting()
1054 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1055 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1058 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1086 struct btrfs_qgroup *qgroup; in quick_update_accounting() local
1090 qgroup = find_qgroup_rb(fs_info, src); in quick_update_accounting()
1091 if (!qgroup) in quick_update_accounting()
1093 if (qgroup->excl == qgroup->rfer) { in quick_update_accounting()
1096 qgroup->excl, sign); in quick_update_accounting()
1237 struct btrfs_qgroup *qgroup; in btrfs_create_qgroup() local
1246 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1247 if (qgroup) { in btrfs_create_qgroup()
1257 qgroup = add_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1260 if (IS_ERR(qgroup)) in btrfs_create_qgroup()
1261 ret = PTR_ERR(qgroup); in btrfs_create_qgroup()
1271 struct btrfs_qgroup *qgroup; in btrfs_remove_qgroup() local
1282 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_remove_qgroup()
1283 if (!qgroup) { in btrfs_remove_qgroup()
1288 if (!list_empty(&qgroup->members)) { in btrfs_remove_qgroup()
1295 while (!list_empty(&qgroup->groups)) { in btrfs_remove_qgroup()
1296 list = list_first_entry(&qgroup->groups, in btrfs_remove_qgroup()
1318 struct btrfs_qgroup *qgroup; in btrfs_limit_qgroup() local
1328 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_limit_qgroup()
1329 if (!qgroup) { in btrfs_limit_qgroup()
1336 qgroup->max_rfer = limit->max_rfer; in btrfs_limit_qgroup()
1338 qgroup->max_excl = limit->max_excl; in btrfs_limit_qgroup()
1340 qgroup->rsv_rfer = limit->rsv_rfer; in btrfs_limit_qgroup()
1342 qgroup->rsv_excl = limit->rsv_excl; in btrfs_limit_qgroup()
1343 qgroup->lim_flags |= limit->flags; in btrfs_limit_qgroup()
1347 ret = update_qgroup_limit_item(trans, quota_root, qgroup); in btrfs_limit_qgroup()
1747 struct btrfs_qgroup *qgroup, in qgroup_calc_new_refcnt() argument
1757 ret = ulist_add(qgroups, qgroup->qgroupid, ptr_to_u64(qgroup), in qgroup_calc_new_refcnt()
1761 ret = ulist_add(tmp, qgroup->qgroupid, ptr_to_u64(qgroup), in qgroup_calc_new_refcnt()
1951 struct btrfs_qgroup *qgroup; in qgroup_shared_accounting() local
1986 qgroup = find_qgroup_rb(fs_info, oper->ref_root); in qgroup_shared_accounting()
1987 if (!qgroup) in qgroup_shared_accounting()
2009 ret = qgroup_calc_new_refcnt(fs_info, oper, qgroup, tmp, qgroups, in qgroup_shared_accounting()
2254 struct btrfs_qgroup *qgroup; in btrfs_run_qgroups() local
2255 qgroup = list_first_entry(&fs_info->dirty_qgroups, in btrfs_run_qgroups()
2257 list_del_init(&qgroup->dirty); in btrfs_run_qgroups()
2259 ret = update_qgroup_info_item(trans, quota_root, qgroup); in btrfs_run_qgroups()
2263 ret = update_qgroup_limit_item(trans, quota_root, qgroup); in btrfs_run_qgroups()
2490 struct btrfs_qgroup *qgroup; in btrfs_qgroup_reserve() local
2508 qgroup = find_qgroup_rb(fs_info, ref_root); in btrfs_qgroup_reserve()
2509 if (!qgroup) in btrfs_qgroup_reserve()
2517 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in btrfs_qgroup_reserve()
2518 (uintptr_t)qgroup, GFP_ATOMIC); in btrfs_qgroup_reserve()
2571 struct btrfs_qgroup *qgroup; in btrfs_qgroup_free() local
2590 qgroup = find_qgroup_rb(fs_info, ref_root); in btrfs_qgroup_free()
2591 if (!qgroup) in btrfs_qgroup_free()
2595 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in btrfs_qgroup_free()
2596 (uintptr_t)qgroup, GFP_ATOMIC); in btrfs_qgroup_free()
2884 struct btrfs_qgroup *qgroup; in qgroup_rescan_zero_tracking() local
2889 qgroup = rb_entry(n, struct btrfs_qgroup, node); in qgroup_rescan_zero_tracking()
2890 qgroup->rfer = 0; in qgroup_rescan_zero_tracking()
2891 qgroup->rfer_cmpr = 0; in qgroup_rescan_zero_tracking()
2892 qgroup->excl = 0; in qgroup_rescan_zero_tracking()
2893 qgroup->excl_cmpr = 0; in qgroup_rescan_zero_tracking()