Lines Matching refs:fs_info
138 qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,
140 static void qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_info);
143 static struct btrfs_qgroup *find_qgroup_rb(struct btrfs_fs_info *fs_info, in find_qgroup_rb() argument
146 struct rb_node *n = fs_info->qgroup_tree.rb_node; in find_qgroup_rb()
162 static struct btrfs_qgroup *add_qgroup_rb(struct btrfs_fs_info *fs_info, in add_qgroup_rb() argument
165 struct rb_node **p = &fs_info->qgroup_tree.rb_node; in add_qgroup_rb()
191 rb_insert_color(&qgroup->node, &fs_info->qgroup_tree); in add_qgroup_rb()
220 static int del_qgroup_rb(struct btrfs_fs_info *fs_info, u64 qgroupid) in del_qgroup_rb() argument
222 struct btrfs_qgroup *qgroup = find_qgroup_rb(fs_info, qgroupid); in del_qgroup_rb()
227 rb_erase(&qgroup->node, &fs_info->qgroup_tree); in del_qgroup_rb()
233 static int add_relation_rb(struct btrfs_fs_info *fs_info, in add_relation_rb() argument
240 member = find_qgroup_rb(fs_info, memberid); in add_relation_rb()
241 parent = find_qgroup_rb(fs_info, parentid); in add_relation_rb()
258 static int del_relation_rb(struct btrfs_fs_info *fs_info, in del_relation_rb() argument
265 member = find_qgroup_rb(fs_info, memberid); in del_relation_rb()
266 parent = find_qgroup_rb(fs_info, parentid); in del_relation_rb()
282 int btrfs_verify_qgroup_counts(struct btrfs_fs_info *fs_info, u64 qgroupid, in btrfs_verify_qgroup_counts() argument
287 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_verify_qgroup_counts()
300 int btrfs_read_qgroup_config(struct btrfs_fs_info *fs_info) in btrfs_read_qgroup_config() argument
304 struct btrfs_root *quota_root = fs_info->quota_root; in btrfs_read_qgroup_config()
312 if (!fs_info->quota_enabled) in btrfs_read_qgroup_config()
315 fs_info->qgroup_ulist = ulist_alloc(GFP_NOFS); in btrfs_read_qgroup_config()
316 if (!fs_info->qgroup_ulist) { in btrfs_read_qgroup_config()
328 fs_info->qgroup_flags = 0; in btrfs_read_qgroup_config()
355 btrfs_err(fs_info, in btrfs_read_qgroup_config()
360 fs_info->generation) { in btrfs_read_qgroup_config()
362 btrfs_err(fs_info, in btrfs_read_qgroup_config()
366 fs_info->qgroup_flags = btrfs_qgroup_status_flags(l, in btrfs_read_qgroup_config()
376 qgroup = find_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
379 btrfs_err(fs_info, "inconsistent qgroup config"); in btrfs_read_qgroup_config()
383 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_read_qgroup_config()
447 ret = add_relation_rb(fs_info, found_key.objectid, in btrfs_read_qgroup_config()
450 btrfs_warn(fs_info, in btrfs_read_qgroup_config()
465 fs_info->qgroup_flags |= flags; in btrfs_read_qgroup_config()
466 if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON)) { in btrfs_read_qgroup_config()
467 fs_info->quota_enabled = 0; in btrfs_read_qgroup_config()
468 fs_info->pending_quota_state = 0; in btrfs_read_qgroup_config()
469 } else if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN && in btrfs_read_qgroup_config()
471 ret = qgroup_rescan_init(fs_info, rescan_progress, 0); in btrfs_read_qgroup_config()
476 ulist_free(fs_info->qgroup_ulist); in btrfs_read_qgroup_config()
477 fs_info->qgroup_ulist = NULL; in btrfs_read_qgroup_config()
478 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN; in btrfs_read_qgroup_config()
490 void btrfs_free_qgroup_config(struct btrfs_fs_info *fs_info) in btrfs_free_qgroup_config() argument
495 while ((n = rb_first(&fs_info->qgroup_tree))) { in btrfs_free_qgroup_config()
497 rb_erase(n, &fs_info->qgroup_tree); in btrfs_free_qgroup_config()
505 ulist_free(fs_info->qgroup_ulist); in btrfs_free_qgroup_config()
506 fs_info->qgroup_ulist = NULL; in btrfs_free_qgroup_config()
766 struct btrfs_fs_info *fs_info, in update_qgroup_status_item() argument
794 btrfs_set_qgroup_status_flags(l, ptr, fs_info->qgroup_flags); in update_qgroup_status_item()
797 fs_info->qgroup_rescan_progress.objectid); in update_qgroup_status_item()
850 root->fs_info->pending_quota_state = 0; in btrfs_clean_quota_tree()
856 struct btrfs_fs_info *fs_info) in btrfs_quota_enable() argument
859 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_quota_enable()
869 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_quota_enable()
870 if (fs_info->quota_root) { in btrfs_quota_enable()
871 fs_info->pending_quota_state = 1; in btrfs_quota_enable()
875 fs_info->qgroup_ulist = ulist_alloc(GFP_NOFS); in btrfs_quota_enable()
876 if (!fs_info->qgroup_ulist) { in btrfs_quota_enable()
884 quota_root = btrfs_create_tree(trans, fs_info, in btrfs_quota_enable()
911 fs_info->qgroup_flags = BTRFS_QGROUP_STATUS_FLAG_ON | in btrfs_quota_enable()
913 btrfs_set_qgroup_status_flags(leaf, ptr, fs_info->qgroup_flags); in btrfs_quota_enable()
941 qgroup = add_qgroup_rb(fs_info, found_key.offset); in btrfs_quota_enable()
960 qgroup = add_qgroup_rb(fs_info, BTRFS_FS_TREE_OBJECTID); in btrfs_quota_enable()
965 spin_lock(&fs_info->qgroup_lock); in btrfs_quota_enable()
966 fs_info->quota_root = quota_root; in btrfs_quota_enable()
967 fs_info->pending_quota_state = 1; in btrfs_quota_enable()
968 spin_unlock(&fs_info->qgroup_lock); in btrfs_quota_enable()
979 ulist_free(fs_info->qgroup_ulist); in btrfs_quota_enable()
980 fs_info->qgroup_ulist = NULL; in btrfs_quota_enable()
982 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_quota_enable()
987 struct btrfs_fs_info *fs_info) in btrfs_quota_disable() argument
989 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_quota_disable()
993 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_quota_disable()
994 if (!fs_info->quota_root) in btrfs_quota_disable()
996 fs_info->quota_enabled = 0; in btrfs_quota_disable()
997 fs_info->pending_quota_state = 0; in btrfs_quota_disable()
998 btrfs_qgroup_wait_for_completion(fs_info); in btrfs_quota_disable()
999 spin_lock(&fs_info->qgroup_lock); in btrfs_quota_disable()
1000 quota_root = fs_info->quota_root; in btrfs_quota_disable()
1001 fs_info->quota_root = NULL; in btrfs_quota_disable()
1002 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_ON; in btrfs_quota_disable()
1003 spin_unlock(&fs_info->qgroup_lock); in btrfs_quota_disable()
1005 btrfs_free_qgroup_config(fs_info); in btrfs_quota_disable()
1018 clean_tree_block(trans, tree_root->fs_info, quota_root->node); in btrfs_quota_disable()
1026 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_quota_disable()
1030 static void qgroup_dirty(struct btrfs_fs_info *fs_info, in qgroup_dirty() argument
1034 list_add(&qgroup->dirty, &fs_info->dirty_qgroups); in qgroup_dirty()
1044 static int __qgroup_excl_accounting(struct btrfs_fs_info *fs_info, in __qgroup_excl_accounting() argument
1054 qgroup = find_qgroup_rb(fs_info, ref_root); in __qgroup_excl_accounting()
1067 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1088 qgroup_dirty(fs_info, qgroup); in __qgroup_excl_accounting()
1115 static int quick_update_accounting(struct btrfs_fs_info *fs_info, in quick_update_accounting() argument
1123 qgroup = find_qgroup_rb(fs_info, src); in quick_update_accounting()
1128 err = __qgroup_excl_accounting(fs_info, tmp, dst, in quick_update_accounting()
1137 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; in quick_update_accounting()
1142 struct btrfs_fs_info *fs_info, u64 src, u64 dst) in btrfs_add_qgroup_relation() argument
1159 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_add_qgroup_relation()
1160 quota_root = fs_info->quota_root; in btrfs_add_qgroup_relation()
1165 member = find_qgroup_rb(fs_info, src); in btrfs_add_qgroup_relation()
1166 parent = find_qgroup_rb(fs_info, dst); in btrfs_add_qgroup_relation()
1190 spin_lock(&fs_info->qgroup_lock); in btrfs_add_qgroup_relation()
1191 ret = add_relation_rb(quota_root->fs_info, src, dst); in btrfs_add_qgroup_relation()
1193 spin_unlock(&fs_info->qgroup_lock); in btrfs_add_qgroup_relation()
1196 ret = quick_update_accounting(fs_info, tmp, src, dst, 1); in btrfs_add_qgroup_relation()
1197 spin_unlock(&fs_info->qgroup_lock); in btrfs_add_qgroup_relation()
1199 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_add_qgroup_relation()
1205 struct btrfs_fs_info *fs_info, u64 src, u64 dst) in __del_qgroup_relation() argument
1219 quota_root = fs_info->quota_root; in __del_qgroup_relation()
1225 member = find_qgroup_rb(fs_info, src); in __del_qgroup_relation()
1226 parent = find_qgroup_rb(fs_info, dst); in __del_qgroup_relation()
1245 spin_lock(&fs_info->qgroup_lock); in __del_qgroup_relation()
1246 del_relation_rb(fs_info, src, dst); in __del_qgroup_relation()
1247 ret = quick_update_accounting(fs_info, tmp, src, dst, -1); in __del_qgroup_relation()
1248 spin_unlock(&fs_info->qgroup_lock); in __del_qgroup_relation()
1255 struct btrfs_fs_info *fs_info, u64 src, u64 dst) in btrfs_del_qgroup_relation() argument
1259 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_del_qgroup_relation()
1260 ret = __del_qgroup_relation(trans, fs_info, src, dst); in btrfs_del_qgroup_relation()
1261 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_del_qgroup_relation()
1267 struct btrfs_fs_info *fs_info, u64 qgroupid) in btrfs_create_qgroup() argument
1273 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_create_qgroup()
1274 quota_root = fs_info->quota_root; in btrfs_create_qgroup()
1279 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1289 spin_lock(&fs_info->qgroup_lock); in btrfs_create_qgroup()
1290 qgroup = add_qgroup_rb(fs_info, qgroupid); in btrfs_create_qgroup()
1291 spin_unlock(&fs_info->qgroup_lock); in btrfs_create_qgroup()
1296 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_create_qgroup()
1301 struct btrfs_fs_info *fs_info, u64 qgroupid) in btrfs_remove_qgroup() argument
1308 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_remove_qgroup()
1309 quota_root = fs_info->quota_root; in btrfs_remove_qgroup()
1315 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_remove_qgroup()
1331 ret = __del_qgroup_relation(trans, fs_info, in btrfs_remove_qgroup()
1338 spin_lock(&fs_info->qgroup_lock); in btrfs_remove_qgroup()
1339 del_qgroup_rb(quota_root->fs_info, qgroupid); in btrfs_remove_qgroup()
1340 spin_unlock(&fs_info->qgroup_lock); in btrfs_remove_qgroup()
1342 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_remove_qgroup()
1347 struct btrfs_fs_info *fs_info, u64 qgroupid, in btrfs_limit_qgroup() argument
1359 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_limit_qgroup()
1360 quota_root = fs_info->quota_root; in btrfs_limit_qgroup()
1366 qgroup = find_qgroup_rb(fs_info, qgroupid); in btrfs_limit_qgroup()
1372 spin_lock(&fs_info->qgroup_lock); in btrfs_limit_qgroup()
1411 spin_unlock(&fs_info->qgroup_lock); in btrfs_limit_qgroup()
1415 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; in btrfs_limit_qgroup()
1416 btrfs_info(fs_info, "unable to update quota limit for %llu", in btrfs_limit_qgroup()
1421 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_limit_qgroup()
1426 struct btrfs_fs_info *fs_info) in btrfs_qgroup_prepare_account_extents() argument
1445 ret = btrfs_find_all_roots(NULL, fs_info, record->bytenr, 0, in btrfs_qgroup_prepare_account_extents()
1489 static int qgroup_update_refcnt(struct btrfs_fs_info *fs_info, in qgroup_update_refcnt() argument
1504 qg = find_qgroup_rb(fs_info, unode->val); in qgroup_update_refcnt()
1578 static int qgroup_update_counters(struct btrfs_fs_info *fs_info, in qgroup_update_counters() argument
1659 qgroup_dirty(fs_info, qg); in qgroup_update_counters()
1666 struct btrfs_fs_info *fs_info, in btrfs_qgroup_account_extent() argument
1682 if (!fs_info->quota_enabled) in btrfs_qgroup_account_extent()
1684 BUG_ON(!fs_info->quota_root); in btrfs_qgroup_account_extent()
1697 mutex_lock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_account_extent()
1698 if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) { in btrfs_qgroup_account_extent()
1699 if (fs_info->qgroup_rescan_progress.objectid <= bytenr) { in btrfs_qgroup_account_extent()
1700 mutex_unlock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_account_extent()
1705 mutex_unlock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_account_extent()
1707 spin_lock(&fs_info->qgroup_lock); in btrfs_qgroup_account_extent()
1708 seq = fs_info->qgroup_seq; in btrfs_qgroup_account_extent()
1711 ret = qgroup_update_refcnt(fs_info, old_roots, tmp, qgroups, seq, in btrfs_qgroup_account_extent()
1717 ret = qgroup_update_refcnt(fs_info, new_roots, tmp, qgroups, seq, in btrfs_qgroup_account_extent()
1722 qgroup_update_counters(fs_info, qgroups, nr_old_roots, nr_new_roots, in btrfs_qgroup_account_extent()
1728 fs_info->qgroup_seq += max(nr_old_roots, nr_new_roots) + 1; in btrfs_qgroup_account_extent()
1730 spin_unlock(&fs_info->qgroup_lock); in btrfs_qgroup_account_extent()
1740 struct btrfs_fs_info *fs_info) in btrfs_qgroup_account_extents() argument
1761 ret = btrfs_find_all_roots(trans, fs_info, in btrfs_qgroup_account_extents()
1767 ret = btrfs_qgroup_account_extent(trans, fs_info, in btrfs_qgroup_account_extents()
1788 struct btrfs_fs_info *fs_info) in btrfs_run_qgroups() argument
1790 struct btrfs_root *quota_root = fs_info->quota_root; in btrfs_run_qgroups()
1797 if (!fs_info->quota_enabled && fs_info->pending_quota_state) in btrfs_run_qgroups()
1800 fs_info->quota_enabled = fs_info->pending_quota_state; in btrfs_run_qgroups()
1802 spin_lock(&fs_info->qgroup_lock); in btrfs_run_qgroups()
1803 while (!list_empty(&fs_info->dirty_qgroups)) { in btrfs_run_qgroups()
1805 qgroup = list_first_entry(&fs_info->dirty_qgroups, in btrfs_run_qgroups()
1808 spin_unlock(&fs_info->qgroup_lock); in btrfs_run_qgroups()
1811 fs_info->qgroup_flags |= in btrfs_run_qgroups()
1815 fs_info->qgroup_flags |= in btrfs_run_qgroups()
1817 spin_lock(&fs_info->qgroup_lock); in btrfs_run_qgroups()
1819 if (fs_info->quota_enabled) in btrfs_run_qgroups()
1820 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_ON; in btrfs_run_qgroups()
1822 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_ON; in btrfs_run_qgroups()
1823 spin_unlock(&fs_info->qgroup_lock); in btrfs_run_qgroups()
1825 ret = update_qgroup_status_item(trans, fs_info, quota_root); in btrfs_run_qgroups()
1827 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; in btrfs_run_qgroups()
1830 ret = qgroup_rescan_init(fs_info, 0, 1); in btrfs_run_qgroups()
1832 qgroup_rescan_zero_tracking(fs_info); in btrfs_run_qgroups()
1833 btrfs_queue_work(fs_info->qgroup_rescan_workers, in btrfs_run_qgroups()
1834 &fs_info->qgroup_rescan_work); in btrfs_run_qgroups()
1849 struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid, in btrfs_qgroup_inherit() argument
1855 struct btrfs_root *quota_root = fs_info->quota_root; in btrfs_qgroup_inherit()
1861 mutex_lock(&fs_info->qgroup_ioctl_lock); in btrfs_qgroup_inherit()
1862 if (!fs_info->quota_enabled) in btrfs_qgroup_inherit()
1875 srcgroup = find_qgroup_rb(fs_info, *i_qgroups); in btrfs_qgroup_inherit()
1903 srcroot = btrfs_read_fs_root_no_name(fs_info, &srckey); in btrfs_qgroup_inherit()
1933 spin_lock(&fs_info->qgroup_lock); in btrfs_qgroup_inherit()
1935 dstgroup = add_qgroup_rb(fs_info, objectid); in btrfs_qgroup_inherit()
1950 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; in btrfs_qgroup_inherit()
1951 btrfs_info(fs_info, "unable to update quota limit for %llu", in btrfs_qgroup_inherit()
1958 srcgroup = find_qgroup_rb(fs_info, srcid); in btrfs_qgroup_inherit()
1981 qgroup_dirty(fs_info, dstgroup); in btrfs_qgroup_inherit()
1982 qgroup_dirty(fs_info, srcgroup); in btrfs_qgroup_inherit()
1990 ret = add_relation_rb(quota_root->fs_info, objectid, in btrfs_qgroup_inherit()
2001 src = find_qgroup_rb(fs_info, i_qgroups[0]); in btrfs_qgroup_inherit()
2002 dst = find_qgroup_rb(fs_info, i_qgroups[1]); in btrfs_qgroup_inherit()
2017 src = find_qgroup_rb(fs_info, i_qgroups[0]); in btrfs_qgroup_inherit()
2018 dst = find_qgroup_rb(fs_info, i_qgroups[1]); in btrfs_qgroup_inherit()
2031 spin_unlock(&fs_info->qgroup_lock); in btrfs_qgroup_inherit()
2033 mutex_unlock(&fs_info->qgroup_ioctl_lock); in btrfs_qgroup_inherit()
2041 struct btrfs_fs_info *fs_info = root->fs_info; in qgroup_reserve() local
2053 spin_lock(&fs_info->qgroup_lock); in qgroup_reserve()
2054 quota_root = fs_info->quota_root; in qgroup_reserve()
2058 qgroup = find_qgroup_rb(fs_info, ref_root); in qgroup_reserve()
2066 ulist_reinit(fs_info->qgroup_ulist); in qgroup_reserve()
2067 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in qgroup_reserve()
2072 while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) { in qgroup_reserve()
2093 ret = ulist_add(fs_info->qgroup_ulist, in qgroup_reserve()
2105 while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) { in qgroup_reserve()
2114 spin_unlock(&fs_info->qgroup_lock); in qgroup_reserve()
2118 void btrfs_qgroup_free_refroot(struct btrfs_fs_info *fs_info, in btrfs_qgroup_free_refroot() argument
2133 spin_lock(&fs_info->qgroup_lock); in btrfs_qgroup_free_refroot()
2135 quota_root = fs_info->quota_root; in btrfs_qgroup_free_refroot()
2139 qgroup = find_qgroup_rb(fs_info, ref_root); in btrfs_qgroup_free_refroot()
2143 ulist_reinit(fs_info->qgroup_ulist); in btrfs_qgroup_free_refroot()
2144 ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid, in btrfs_qgroup_free_refroot()
2149 while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) { in btrfs_qgroup_free_refroot()
2158 ret = ulist_add(fs_info->qgroup_ulist, in btrfs_qgroup_free_refroot()
2167 spin_unlock(&fs_info->qgroup_lock); in btrfs_qgroup_free_refroot()
2172 return btrfs_qgroup_free_refroot(root->fs_info, root->objectid, in qgroup_free()
2179 btrfs_err(trans->root->fs_info, in assert_qgroups_uptodate()
2193 qgroup_rescan_leaf(struct btrfs_fs_info *fs_info, struct btrfs_path *path, in qgroup_rescan_leaf() argument
2204 mutex_lock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_leaf()
2205 ret = btrfs_search_slot_for_read(fs_info->extent_root, in qgroup_rescan_leaf()
2206 &fs_info->qgroup_rescan_progress, in qgroup_rescan_leaf()
2210 fs_info->qgroup_rescan_progress.objectid, in qgroup_rescan_leaf()
2211 fs_info->qgroup_rescan_progress.type, in qgroup_rescan_leaf()
2212 fs_info->qgroup_rescan_progress.offset, ret); in qgroup_rescan_leaf()
2223 fs_info->qgroup_rescan_progress.objectid = (u64)-1; in qgroup_rescan_leaf()
2225 mutex_unlock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_leaf()
2231 fs_info->qgroup_rescan_progress.objectid = found.objectid + 1; in qgroup_rescan_leaf()
2233 btrfs_get_tree_mod_seq(fs_info, &tree_mod_seq_elem); in qgroup_rescan_leaf()
2237 mutex_unlock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_leaf()
2245 mutex_unlock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_leaf()
2253 num_bytes = fs_info->extent_root->nodesize; in qgroup_rescan_leaf()
2257 ret = btrfs_find_all_roots(NULL, fs_info, found.objectid, 0, in qgroup_rescan_leaf()
2262 ret = btrfs_qgroup_account_extent(trans, fs_info, in qgroup_rescan_leaf()
2272 btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem); in qgroup_rescan_leaf()
2279 struct btrfs_fs_info *fs_info = container_of(work, struct btrfs_fs_info, in btrfs_qgroup_rescan_worker() local
2291 while (!err && !btrfs_fs_closing(fs_info)) { in btrfs_qgroup_rescan_worker()
2292 trans = btrfs_start_transaction(fs_info->fs_root, 0); in btrfs_qgroup_rescan_worker()
2297 if (!fs_info->quota_enabled) { in btrfs_qgroup_rescan_worker()
2300 err = qgroup_rescan_leaf(fs_info, path, trans); in btrfs_qgroup_rescan_worker()
2303 btrfs_commit_transaction(trans, fs_info->fs_root); in btrfs_qgroup_rescan_worker()
2305 btrfs_end_transaction(trans, fs_info->fs_root); in btrfs_qgroup_rescan_worker()
2311 mutex_lock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_rescan_worker()
2312 if (!btrfs_fs_closing(fs_info)) in btrfs_qgroup_rescan_worker()
2313 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN; in btrfs_qgroup_rescan_worker()
2316 fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT) { in btrfs_qgroup_rescan_worker()
2317 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; in btrfs_qgroup_rescan_worker()
2319 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; in btrfs_qgroup_rescan_worker()
2321 mutex_unlock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_rescan_worker()
2327 trans = btrfs_start_transaction(fs_info->quota_root, 1); in btrfs_qgroup_rescan_worker()
2330 btrfs_err(fs_info, in btrfs_qgroup_rescan_worker()
2335 ret = update_qgroup_status_item(trans, fs_info, fs_info->quota_root); in btrfs_qgroup_rescan_worker()
2338 btrfs_err(fs_info, "fail to update qgroup status: %d\n", err); in btrfs_qgroup_rescan_worker()
2340 btrfs_end_transaction(trans, fs_info->quota_root); in btrfs_qgroup_rescan_worker()
2342 if (btrfs_fs_closing(fs_info)) { in btrfs_qgroup_rescan_worker()
2343 btrfs_info(fs_info, "qgroup scan paused"); in btrfs_qgroup_rescan_worker()
2345 btrfs_info(fs_info, "qgroup scan completed%s", in btrfs_qgroup_rescan_worker()
2348 btrfs_err(fs_info, "qgroup scan failed with %d", err); in btrfs_qgroup_rescan_worker()
2352 complete_all(&fs_info->qgroup_rescan_completion); in btrfs_qgroup_rescan_worker()
2360 qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid, in qgroup_rescan_init() argument
2366 (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) || in qgroup_rescan_init()
2367 !(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))) { in qgroup_rescan_init()
2372 mutex_lock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_init()
2373 spin_lock(&fs_info->qgroup_lock); in qgroup_rescan_init()
2376 if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) in qgroup_rescan_init()
2378 else if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON)) in qgroup_rescan_init()
2382 spin_unlock(&fs_info->qgroup_lock); in qgroup_rescan_init()
2383 mutex_unlock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_init()
2386 fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_RESCAN; in qgroup_rescan_init()
2389 memset(&fs_info->qgroup_rescan_progress, 0, in qgroup_rescan_init()
2390 sizeof(fs_info->qgroup_rescan_progress)); in qgroup_rescan_init()
2391 fs_info->qgroup_rescan_progress.objectid = progress_objectid; in qgroup_rescan_init()
2392 init_completion(&fs_info->qgroup_rescan_completion); in qgroup_rescan_init()
2394 spin_unlock(&fs_info->qgroup_lock); in qgroup_rescan_init()
2395 mutex_unlock(&fs_info->qgroup_rescan_lock); in qgroup_rescan_init()
2397 memset(&fs_info->qgroup_rescan_work, 0, in qgroup_rescan_init()
2398 sizeof(fs_info->qgroup_rescan_work)); in qgroup_rescan_init()
2399 btrfs_init_work(&fs_info->qgroup_rescan_work, in qgroup_rescan_init()
2405 btrfs_info(fs_info, "qgroup_rescan_init failed with %d", ret); in qgroup_rescan_init()
2413 qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_info) in qgroup_rescan_zero_tracking() argument
2418 spin_lock(&fs_info->qgroup_lock); in qgroup_rescan_zero_tracking()
2420 for (n = rb_first(&fs_info->qgroup_tree); n; n = rb_next(n)) { in qgroup_rescan_zero_tracking()
2427 spin_unlock(&fs_info->qgroup_lock); in qgroup_rescan_zero_tracking()
2431 btrfs_qgroup_rescan(struct btrfs_fs_info *fs_info) in btrfs_qgroup_rescan() argument
2436 ret = qgroup_rescan_init(fs_info, 0, 1); in btrfs_qgroup_rescan()
2451 trans = btrfs_join_transaction(fs_info->fs_root); in btrfs_qgroup_rescan()
2453 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN; in btrfs_qgroup_rescan()
2456 ret = btrfs_commit_transaction(trans, fs_info->fs_root); in btrfs_qgroup_rescan()
2458 fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN; in btrfs_qgroup_rescan()
2462 qgroup_rescan_zero_tracking(fs_info); in btrfs_qgroup_rescan()
2464 btrfs_queue_work(fs_info->qgroup_rescan_workers, in btrfs_qgroup_rescan()
2465 &fs_info->qgroup_rescan_work); in btrfs_qgroup_rescan()
2470 int btrfs_qgroup_wait_for_completion(struct btrfs_fs_info *fs_info) in btrfs_qgroup_wait_for_completion() argument
2475 mutex_lock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_wait_for_completion()
2476 spin_lock(&fs_info->qgroup_lock); in btrfs_qgroup_wait_for_completion()
2477 running = fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN; in btrfs_qgroup_wait_for_completion()
2478 spin_unlock(&fs_info->qgroup_lock); in btrfs_qgroup_wait_for_completion()
2479 mutex_unlock(&fs_info->qgroup_rescan_lock); in btrfs_qgroup_wait_for_completion()
2483 &fs_info->qgroup_rescan_completion); in btrfs_qgroup_wait_for_completion()
2493 btrfs_qgroup_rescan_resume(struct btrfs_fs_info *fs_info) in btrfs_qgroup_rescan_resume() argument
2495 if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) in btrfs_qgroup_rescan_resume()
2496 btrfs_queue_work(fs_info->qgroup_rescan_workers, in btrfs_qgroup_rescan_resume()
2497 &fs_info->qgroup_rescan_work); in btrfs_qgroup_rescan_resume()
2519 if (!root->fs_info->quota_enabled || !is_fstree(root->objectid) || in btrfs_qgroup_reserve_data()
2619 if (!root->fs_info->quota_enabled || !is_fstree(root->objectid) || in btrfs_qgroup_reserve_meta()
2635 if (!root->fs_info->quota_enabled || !is_fstree(root->objectid)) in btrfs_qgroup_free_meta_all()
2646 if (!root->fs_info->quota_enabled || !is_fstree(root->objectid)) in btrfs_qgroup_free_meta()
2678 btrfs_warn(BTRFS_I(inode)->root->fs_info, in btrfs_qgroup_check_reserved_leak()