Lines Matching refs:qgroup
147 struct btrfs_qgroup *qgroup; in find_qgroup_rb() local
150 qgroup = rb_entry(n, struct btrfs_qgroup, node); in find_qgroup_rb()
151 if (qgroup->qgroupid < qgroupid) in find_qgroup_rb()
153 else if (qgroup->qgroupid > qgroupid) in find_qgroup_rb()
156 return qgroup; in find_qgroup_rb()
167 struct btrfs_qgroup *qgroup; in add_qgroup_rb() local
171 qgroup = rb_entry(parent, struct btrfs_qgroup, node); in add_qgroup_rb()
173 if (qgroup->qgroupid < qgroupid) in add_qgroup_rb()
175 else if (qgroup->qgroupid > qgroupid) in add_qgroup_rb()
178 return qgroup; in add_qgroup_rb()
181 qgroup = kzalloc(sizeof(*qgroup), GFP_ATOMIC); in add_qgroup_rb()
182 if (!qgroup) in add_qgroup_rb()
185 qgroup->qgroupid = qgroupid; in add_qgroup_rb()
186 INIT_LIST_HEAD(&qgroup->groups); in add_qgroup_rb()
187 INIT_LIST_HEAD(&qgroup->members); in add_qgroup_rb()
188 INIT_LIST_HEAD(&qgroup->dirty); in add_qgroup_rb()
190 rb_link_node(&qgroup->node, parent, p); in add_qgroup_rb()
191 rb_insert_color(&qgroup->node, &fs_info->qgroup_tree); in add_qgroup_rb()
193 return qgroup; in add_qgroup_rb()
196 static void __del_qgroup_rb(struct btrfs_qgroup *qgroup) in __del_qgroup_rb() argument
200 list_del(&qgroup->dirty); in __del_qgroup_rb()
201 while (!list_empty(&qgroup->groups)) { in __del_qgroup_rb()
202 list = list_first_entry(&qgroup->groups, in __del_qgroup_rb()
209 while (!list_empty(&qgroup->members)) { in __del_qgroup_rb()
210 list = list_first_entry(&qgroup->members, in __del_qgroup_rb()
216 kfree(qgroup); in __del_qgroup_rb()
222 struct btrfs_qgroup *qgroup = find_qgroup_rb(fs_info, qgroupid); in del_qgroup_rb() local
224 if (!qgroup) in del_qgroup_rb()
227 rb_erase(&qgroup->node, &fs_info->qgroup_tree); in del_qgroup_rb()
228 __del_qgroup_rb(qgroup); in del_qgroup_rb()
285 struct btrfs_qgroup *qgroup; in btrfs_verify_qgroup_counts() local
287 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_verify_qgroup_counts()
288 if (!qgroup) in btrfs_verify_qgroup_counts()
290 if (qgroup->rfer != rfer || qgroup->excl != excl) in btrfs_verify_qgroup_counts()
341 struct btrfs_qgroup *qgroup; in btrfs_read_qgroup_config() local
376 qgroup = find_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
377 if ((qgroup && found_key.type == BTRFS_QGROUP_INFO_KEY) || in btrfs_read_qgroup_config()
378 (!qgroup && found_key.type == BTRFS_QGROUP_LIMIT_KEY)) { in btrfs_read_qgroup_config()
382 if (!qgroup) { in btrfs_read_qgroup_config()
383 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
384 if (IS_ERR(qgroup)) { in btrfs_read_qgroup_config()
385 ret = PTR_ERR(qgroup); in btrfs_read_qgroup_config()
395 qgroup->rfer = btrfs_qgroup_info_rfer(l, ptr); in btrfs_read_qgroup_config()
396 qgroup->rfer_cmpr = btrfs_qgroup_info_rfer_cmpr(l, ptr); in btrfs_read_qgroup_config()
397 qgroup->excl = btrfs_qgroup_info_excl(l, ptr); in btrfs_read_qgroup_config()
398 qgroup->excl_cmpr = btrfs_qgroup_info_excl_cmpr(l, ptr); in btrfs_read_qgroup_config()
407 qgroup->lim_flags = btrfs_qgroup_limit_flags(l, ptr); in btrfs_read_qgroup_config()
408 qgroup->max_rfer = btrfs_qgroup_limit_max_rfer(l, ptr); in btrfs_read_qgroup_config()
409 qgroup->max_excl = btrfs_qgroup_limit_max_excl(l, ptr); in btrfs_read_qgroup_config()
410 qgroup->rsv_rfer = btrfs_qgroup_limit_rsv_rfer(l, ptr); in btrfs_read_qgroup_config()
411 qgroup->rsv_excl = btrfs_qgroup_limit_rsv_excl(l, ptr); in btrfs_read_qgroup_config()
493 struct btrfs_qgroup *qgroup; in btrfs_free_qgroup_config() local
496 qgroup = rb_entry(n, struct btrfs_qgroup, node); in btrfs_free_qgroup_config()
498 __del_qgroup_rb(qgroup); in btrfs_free_qgroup_config()
680 struct btrfs_qgroup *qgroup) in update_qgroup_limit_item() argument
691 key.offset = qgroup->qgroupid; in update_qgroup_limit_item()
707 btrfs_set_qgroup_limit_flags(l, qgroup_limit, qgroup->lim_flags); in update_qgroup_limit_item()
708 btrfs_set_qgroup_limit_max_rfer(l, qgroup_limit, qgroup->max_rfer); in update_qgroup_limit_item()
709 btrfs_set_qgroup_limit_max_excl(l, qgroup_limit, qgroup->max_excl); in update_qgroup_limit_item()
710 btrfs_set_qgroup_limit_rsv_rfer(l, qgroup_limit, qgroup->rsv_rfer); in update_qgroup_limit_item()
711 btrfs_set_qgroup_limit_rsv_excl(l, qgroup_limit, qgroup->rsv_excl); in update_qgroup_limit_item()
722 struct btrfs_qgroup *qgroup) in update_qgroup_info_item() argument
736 key.offset = qgroup->qgroupid; in update_qgroup_info_item()
753 btrfs_set_qgroup_info_rfer(l, qgroup_info, qgroup->rfer); in update_qgroup_info_item()
754 btrfs_set_qgroup_info_rfer_cmpr(l, qgroup_info, qgroup->rfer_cmpr); in update_qgroup_info_item()
755 btrfs_set_qgroup_info_excl(l, qgroup_info, qgroup->excl); in update_qgroup_info_item()
756 btrfs_set_qgroup_info_excl_cmpr(l, qgroup_info, qgroup->excl_cmpr); in update_qgroup_info_item()
865 struct btrfs_qgroup *qgroup = NULL; in btrfs_quota_enable() local
941 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_quota_enable()
942 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
943 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
960 qgroup = add_qgroup_rb(fs_info, BTRFS_FS_TREE_OBJECTID); in btrfs_quota_enable()
961 if (IS_ERR(qgroup)) { in btrfs_quota_enable()
962 ret = PTR_ERR(qgroup); in btrfs_quota_enable()
1031 struct btrfs_qgroup *qgroup) in qgroup_dirty() argument
1033 if (list_empty(&qgroup->dirty)) in qgroup_dirty()
1034 list_add(&qgroup->dirty, &fs_info->dirty_qgroups); in qgroup_dirty()
1048 struct btrfs_qgroup *qgroup; in __qgroup_excl_accounting() local
1054 qgroup = find_qgroup_rb(fs_info, ref_root); in __qgroup_excl_accounting()
1055 if (!qgroup) in __qgroup_excl_accounting()
1058 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1059 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1061 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1062 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1063 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1065 qgroup->reserved -= num_bytes; in __qgroup_excl_accounting()
1067 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1070 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1080 qgroup = u64_to_ptr(unode->aux); in __qgroup_excl_accounting()
1081 qgroup->rfer += sign * num_bytes; in __qgroup_excl_accounting()
1082 qgroup->rfer_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1083 WARN_ON(sign < 0 && qgroup->excl < num_bytes); in __qgroup_excl_accounting()
1084 qgroup->excl += sign * num_bytes; in __qgroup_excl_accounting()
1086 qgroup->reserved -= num_bytes; in __qgroup_excl_accounting()
1087 qgroup->excl_cmpr += sign * num_bytes; in __qgroup_excl_accounting()
1088 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1091 list_for_each_entry(glist, &qgroup->groups, next_group) { in __qgroup_excl_accounting()
1119 struct btrfs_qgroup *qgroup; in quick_update_accounting() local
1123 qgroup = find_qgroup_rb(fs_info, src); in quick_update_accounting()
1124 if (!qgroup) in quick_update_accounting()
1126 if (qgroup->excl == qgroup->rfer) { in quick_update_accounting()
1129 qgroup->excl, sign); in quick_update_accounting()
1270 struct btrfs_qgroup *qgroup; in btrfs_create_qgroup() local
1279 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1280 if (qgroup) { in btrfs_create_qgroup()
1290 qgroup = add_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1293 if (IS_ERR(qgroup)) in btrfs_create_qgroup()
1294 ret = PTR_ERR(qgroup); in btrfs_create_qgroup()
1304 struct btrfs_qgroup *qgroup; in btrfs_remove_qgroup() local
1315 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_remove_qgroup()
1316 if (!qgroup) { in btrfs_remove_qgroup()
1321 if (!list_empty(&qgroup->members)) { in btrfs_remove_qgroup()
1328 while (!list_empty(&qgroup->groups)) { in btrfs_remove_qgroup()
1329 list = list_first_entry(&qgroup->groups, in btrfs_remove_qgroup()
1351 struct btrfs_qgroup *qgroup; in btrfs_limit_qgroup() local
1366 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_limit_qgroup()
1367 if (!qgroup) { in btrfs_limit_qgroup()
1375 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_MAX_RFER; in btrfs_limit_qgroup()
1377 qgroup->max_rfer = 0; in btrfs_limit_qgroup()
1379 qgroup->max_rfer = limit->max_rfer; in btrfs_limit_qgroup()
1384 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_MAX_EXCL; in btrfs_limit_qgroup()
1386 qgroup->max_excl = 0; in btrfs_limit_qgroup()
1388 qgroup->max_excl = limit->max_excl; in btrfs_limit_qgroup()
1393 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_RSV_RFER; in btrfs_limit_qgroup()
1395 qgroup->rsv_rfer = 0; in btrfs_limit_qgroup()
1397 qgroup->rsv_rfer = limit->rsv_rfer; in btrfs_limit_qgroup()
1402 qgroup->lim_flags &= ~BTRFS_QGROUP_LIMIT_RSV_EXCL; in btrfs_limit_qgroup()
1404 qgroup->rsv_excl = 0; in btrfs_limit_qgroup()
1406 qgroup->rsv_excl = limit->rsv_excl; in btrfs_limit_qgroup()
1409 qgroup->lim_flags |= limit->flags; in btrfs_limit_qgroup()
1413 ret = update_qgroup_limit_item(trans, quota_root, qgroup); in btrfs_limit_qgroup()
1804 struct btrfs_qgroup *qgroup; in btrfs_run_qgroups() local
1805 qgroup = list_first_entry(&fs_info->dirty_qgroups, in btrfs_run_qgroups()
1807 list_del_init(&qgroup->dirty); in btrfs_run_qgroups()
1809 ret = update_qgroup_info_item(trans, quota_root, qgroup); in btrfs_run_qgroups()
1813 ret = update_qgroup_limit_item(trans, quota_root, qgroup); in btrfs_run_qgroups()
2040 struct btrfs_qgroup *qgroup; in qgroup_reserve() local
2058 qgroup = find_qgroup_rb(fs_info, ref_root); in qgroup_reserve()
2059 if (!qgroup) in qgroup_reserve()
2067 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in qgroup_reserve()
2068 (uintptr_t)qgroup, GFP_ATOMIC); in qgroup_reserve()
2122 struct btrfs_qgroup *qgroup; in btrfs_qgroup_free_refroot() local
2139 qgroup = find_qgroup_rb(fs_info, ref_root); in btrfs_qgroup_free_refroot()
2140 if (!qgroup) in btrfs_qgroup_free_refroot()
2144 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in btrfs_qgroup_free_refroot()
2145 (uintptr_t)qgroup, GFP_ATOMIC); in btrfs_qgroup_free_refroot()
2416 struct btrfs_qgroup *qgroup; in qgroup_rescan_zero_tracking() local
2421 qgroup = rb_entry(n, struct btrfs_qgroup, node); in qgroup_rescan_zero_tracking()
2422 qgroup->rfer = 0; in qgroup_rescan_zero_tracking()
2423 qgroup->rfer_cmpr = 0; in qgroup_rescan_zero_tracking()
2424 qgroup->excl = 0; in qgroup_rescan_zero_tracking()
2425 qgroup->excl_cmpr = 0; in qgroup_rescan_zero_tracking()