Lines Matching refs:root

78 			      struct btrfs_root *root, u64 bytenr,
81 struct btrfs_root *root,
91 struct btrfs_root *root,
96 struct btrfs_root *root,
113 int btrfs_pin_extent(struct btrfs_root *root,
230 static int add_excluded_extent(struct btrfs_root *root, in add_excluded_extent() argument
234 set_extent_bits(&root->fs_info->freed_extents[0], in add_excluded_extent()
236 set_extent_bits(&root->fs_info->freed_extents[1], in add_excluded_extent()
241 static void free_excluded_extents(struct btrfs_root *root, in free_excluded_extents() argument
249 clear_extent_bits(&root->fs_info->freed_extents[0], in free_excluded_extents()
251 clear_extent_bits(&root->fs_info->freed_extents[1], in free_excluded_extents()
255 static int exclude_super_stripes(struct btrfs_root *root, in exclude_super_stripes() argument
266 ret = add_excluded_extent(root, cache->key.objectid, in exclude_super_stripes()
274 ret = btrfs_rmap_block(&root->fs_info->mapping_tree, in exclude_super_stripes()
301 ret = add_excluded_extent(root, start, len); in exclude_super_stripes()
715 int btrfs_lookup_data_extent(struct btrfs_root *root, u64 start, u64 len) in btrfs_lookup_data_extent() argument
728 ret = btrfs_search_slot(NULL, root->fs_info->extent_root, &key, path, in btrfs_lookup_data_extent()
744 struct btrfs_root *root, u64 bytenr, in btrfs_lookup_extent_info() argument
762 if (metadata && !btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) { in btrfs_lookup_extent_info()
763 offset = root->nodesize; in btrfs_lookup_extent_info()
784 ret = btrfs_search_slot(trans, root->fs_info->extent_root, in btrfs_lookup_extent_info()
796 key.offset == root->nodesize) in btrfs_lookup_extent_info()
981 struct btrfs_root *root, in convert_extent_item_v0() argument
1007 ret = btrfs_next_leaf(root, path); in convert_extent_item_v0()
1032 ret = btrfs_search_slot(trans, root, &key, path, in convert_extent_item_v0()
1038 btrfs_extend_item(root, path, new_size); in convert_extent_item_v0()
1097 struct btrfs_root *root, in lookup_extent_data_ref() argument
1122 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
1134 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
1149 ret = btrfs_next_leaf(root, path); in lookup_extent_data_ref()
1184 struct btrfs_root *root, in insert_extent_data_ref() argument
1208 ret = btrfs_insert_empty_item(trans, root, path, &key, size); in insert_extent_data_ref()
1234 ret = btrfs_insert_empty_item(trans, root, path, &key, in insert_extent_data_ref()
1263 struct btrfs_root *root, in remove_extent_data_ref() argument
1300 ret = btrfs_del_item(trans, root, path); in remove_extent_data_ref()
1320 static noinline u32 extent_data_ref_count(struct btrfs_root *root, in extent_data_ref_count() argument
1363 struct btrfs_root *root, in lookup_tree_block_ref() argument
1380 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
1387 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
1396 struct btrfs_root *root, in insert_tree_block_ref() argument
1413 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in insert_tree_block_ref()
1471 struct btrfs_root *root, in lookup_inline_extent_backref() argument
1491 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in lookup_inline_extent_backref()
1515 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1); in lookup_inline_extent_backref()
1561 ret = convert_extent_item_v0(trans, root, path, owner, in lookup_inline_extent_backref()
1633 BTRFS_MAX_EXTENT_ITEM_SIZE(root)) { in lookup_inline_extent_backref()
1663 void setup_inline_extent_backref(struct btrfs_root *root, in setup_inline_extent_backref() argument
1686 btrfs_extend_item(root, path, size); in setup_inline_extent_backref()
1724 struct btrfs_root *root, in lookup_extent_backref() argument
1732 ret = lookup_inline_extent_backref(trans, root, path, ref_ret, in lookup_extent_backref()
1742 ret = lookup_tree_block_ref(trans, root, path, bytenr, parent, in lookup_extent_backref()
1745 ret = lookup_extent_data_ref(trans, root, path, bytenr, parent, in lookup_extent_backref()
1755 void update_inline_extent_backref(struct btrfs_root *root, in update_inline_extent_backref() argument
1813 btrfs_truncate_item(root, path, item_size, 1); in update_inline_extent_backref()
1820 struct btrfs_root *root, in insert_inline_extent_backref() argument
1830 ret = lookup_inline_extent_backref(trans, root, path, &iref, in insert_inline_extent_backref()
1835 update_inline_extent_backref(root, path, iref, in insert_inline_extent_backref()
1838 setup_inline_extent_backref(root, path, iref, parent, in insert_inline_extent_backref()
1847 struct btrfs_root *root, in insert_extent_backref() argument
1855 ret = insert_tree_block_ref(trans, root, path, bytenr, in insert_extent_backref()
1858 ret = insert_extent_data_ref(trans, root, path, bytenr, in insert_extent_backref()
1866 struct btrfs_root *root, in remove_extent_backref() argument
1875 update_inline_extent_backref(root, path, iref, in remove_extent_backref()
1878 ret = remove_extent_data_ref(trans, root, path, refs_to_drop, in remove_extent_backref()
1882 ret = btrfs_del_item(trans, root, path); in remove_extent_backref()
1893 int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr, in btrfs_discard_extent() argument
1902 ret = btrfs_map_block(root->fs_info, REQ_DISCARD, in btrfs_discard_extent()
1943 struct btrfs_root *root, in btrfs_inc_extent_ref() argument
1949 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_inc_extent_ref()
1969 struct btrfs_root *root, in __btrfs_inc_extent_ref() argument
1976 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_inc_extent_ref()
1989 if (!is_fstree(root_objectid) || !root->fs_info->quota_enabled) in __btrfs_inc_extent_ref()
2006 ASSERT(root->fs_info->quota_enabled); in __btrfs_inc_extent_ref()
2048 ret = insert_extent_backref(trans, root->fs_info->extent_root, in __btrfs_inc_extent_ref()
2052 btrfs_abort_transaction(trans, root, ret); in __btrfs_inc_extent_ref()
2059 struct btrfs_root *root, in run_delayed_data_ref() argument
2080 ref_root = ref->root; in run_delayed_data_ref()
2085 ret = alloc_reserved_file_extent(trans, root, in run_delayed_data_ref()
2090 ret = __btrfs_inc_extent_ref(trans, root, node->bytenr, in run_delayed_data_ref()
2096 ret = __btrfs_free_extent(trans, root, node->bytenr, in run_delayed_data_ref()
2126 struct btrfs_root *root, in run_delayed_extent_op() argument
2142 if (metadata && !btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) in run_delayed_extent_op()
2162 ret = btrfs_search_slot(trans, root->fs_info->extent_root, &key, in run_delayed_extent_op()
2198 ret = convert_extent_item_v0(trans, root->fs_info->extent_root, in run_delayed_extent_op()
2219 struct btrfs_root *root, in run_delayed_tree_ref() argument
2229 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in run_delayed_tree_ref()
2237 ref_root = ref->root; in run_delayed_tree_ref()
2251 ret = alloc_reserved_tree_block(trans, root, in run_delayed_tree_ref()
2258 ret = __btrfs_inc_extent_ref(trans, root, node->bytenr, in run_delayed_tree_ref()
2263 ret = __btrfs_free_extent(trans, root, node->bytenr, in run_delayed_tree_ref()
2275 struct btrfs_root *root, in run_one_delayed_ref() argument
2284 btrfs_pin_extent(root, node->bytenr, in run_one_delayed_ref()
2302 btrfs_pin_extent(root, node->bytenr, in run_one_delayed_ref()
2305 ret = btrfs_del_csums(trans, root, in run_one_delayed_ref()
2315 ret = run_delayed_tree_ref(trans, root, node, extent_op, in run_one_delayed_ref()
2319 ret = run_delayed_data_ref(trans, root, node, extent_op, in run_one_delayed_ref()
2355 struct btrfs_root *root, in __btrfs_run_delayed_refs() argument
2362 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_run_delayed_refs()
2456 ret = run_delayed_extent_op(trans, root, in __btrfs_run_delayed_refs()
2522 ret = run_one_delayed_ref(trans, root, ref, extent_op, in __btrfs_run_delayed_refs()
2582 static u64 find_middle(struct rb_root *root) in find_middle() argument
2584 struct rb_node *n = root->rb_node; in find_middle()
2590 n = rb_first(root); in find_middle()
2595 n = rb_last(root); in find_middle()
2600 n = root->rb_node; in find_middle()
2619 static inline u64 heads_to_leaves(struct btrfs_root *root, u64 heads) in heads_to_leaves() argument
2625 if (!btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) in heads_to_leaves()
2632 return div_u64(num_bytes, BTRFS_LEAF_DATA_SIZE(root)); in heads_to_leaves()
2639 u64 btrfs_csum_bytes_to_leaves(struct btrfs_root *root, u64 csum_bytes) in btrfs_csum_bytes_to_leaves() argument
2645 csum_size = BTRFS_LEAF_DATA_SIZE(root) - sizeof(struct btrfs_item); in btrfs_csum_bytes_to_leaves()
2647 (u64)btrfs_super_csum_size(root->fs_info->super_copy)); in btrfs_csum_bytes_to_leaves()
2648 num_csums = div64_u64(csum_bytes, root->sectorsize); in btrfs_csum_bytes_to_leaves()
2655 struct btrfs_root *root) in btrfs_check_space_for_delayed_refs() argument
2664 num_bytes = btrfs_calc_trans_metadata_size(root, 1); in btrfs_check_space_for_delayed_refs()
2665 num_heads = heads_to_leaves(root, num_heads); in btrfs_check_space_for_delayed_refs()
2667 num_bytes += (num_heads - 1) * root->nodesize; in btrfs_check_space_for_delayed_refs()
2669 num_bytes += btrfs_csum_bytes_to_leaves(root, csum_bytes) * root->nodesize; in btrfs_check_space_for_delayed_refs()
2670 num_dirty_bgs_bytes = btrfs_calc_trans_metadata_size(root, in btrfs_check_space_for_delayed_refs()
2672 global_rsv = &root->fs_info->global_block_rsv; in btrfs_check_space_for_delayed_refs()
2691 struct btrfs_root *root) in btrfs_should_throttle_delayed_refs() argument
2693 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_should_throttle_delayed_refs()
2707 return btrfs_check_space_for_delayed_refs(trans, root); in btrfs_should_throttle_delayed_refs()
2711 struct btrfs_root *root; member
2727 trans = btrfs_join_transaction(async->root); in delayed_ref_async_start()
2738 ret = btrfs_run_delayed_refs(trans, async->root, async->count); in delayed_ref_async_start()
2742 ret = btrfs_end_transaction(trans, async->root); in delayed_ref_async_start()
2752 int btrfs_async_run_delayed_refs(struct btrfs_root *root, in btrfs_async_run_delayed_refs() argument
2762 async->root = root->fs_info->tree_root; in btrfs_async_run_delayed_refs()
2774 btrfs_queue_work(root->fs_info->extent_workers, &async->work); in btrfs_async_run_delayed_refs()
2796 struct btrfs_root *root, unsigned long count) in btrfs_run_delayed_refs() argument
2808 if (root == root->fs_info->extent_root) in btrfs_run_delayed_refs()
2809 root = root->fs_info->tree_root; in btrfs_run_delayed_refs()
2817 delayed_refs->run_delayed_start = find_middle(&delayed_refs->root); in btrfs_run_delayed_refs()
2819 ret = __btrfs_run_delayed_refs(trans, root, count); in btrfs_run_delayed_refs()
2821 btrfs_abort_transaction(trans, root, ret); in btrfs_run_delayed_refs()
2827 btrfs_create_pending_block_groups(trans, root); in btrfs_run_delayed_refs()
2867 ret = btrfs_delayed_qgroup_accounting(trans, root->fs_info); in btrfs_run_delayed_refs()
2875 struct btrfs_root *root, in btrfs_set_disk_extent_flags() argument
2892 ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr, in btrfs_set_disk_extent_flags()
2900 struct btrfs_root *root, in check_delayed_ref() argument
2954 if (data_ref->root != root->root_key.objectid || in check_delayed_ref()
2967 struct btrfs_root *root, in check_committed_ref() argument
2971 struct btrfs_root *extent_root = root->fs_info->extent_root; in check_committed_ref()
3015 btrfs_root_last_snapshot(&root->root_item)) in check_committed_ref()
3027 root->root_key.objectid || in check_committed_ref()
3038 struct btrfs_root *root, in btrfs_cross_ref_exist() argument
3050 ret = check_committed_ref(trans, root, path, objectid, in btrfs_cross_ref_exist()
3055 ret2 = check_delayed_ref(trans, root, path, objectid, in btrfs_cross_ref_exist()
3068 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID) in btrfs_cross_ref_exist()
3074 struct btrfs_root *root, in __btrfs_mod_ref() argument
3092 if (btrfs_test_is_dummy_root(root)) in __btrfs_mod_ref()
3099 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0) in __btrfs_mod_ref()
3128 ret = process_func(trans, root, bytenr, num_bytes, in __btrfs_mod_ref()
3135 num_bytes = root->nodesize; in __btrfs_mod_ref()
3136 ret = process_func(trans, root, bytenr, num_bytes, in __btrfs_mod_ref()
3148 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_inc_ref() argument
3151 return __btrfs_mod_ref(trans, root, buf, full_backref, 1); in btrfs_inc_ref()
3154 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_dec_ref() argument
3157 return __btrfs_mod_ref(trans, root, buf, full_backref, 0); in btrfs_dec_ref()
3161 struct btrfs_root *root, in write_one_cache_group() argument
3166 struct btrfs_root *extent_root = root->fs_info->extent_root; in write_one_cache_group()
3188 next_block_group(struct btrfs_root *root, in next_block_group() argument
3193 spin_lock(&root->fs_info->block_group_cache_lock); in next_block_group()
3199 spin_unlock(&root->fs_info->block_group_cache_lock); in next_block_group()
3201 cache = btrfs_lookup_first_block_group(root->fs_info, in next_block_group()
3213 spin_unlock(&root->fs_info->block_group_cache_lock); in next_block_group()
3221 struct btrfs_root *root = block_group->fs_info->tree_root; in cache_save_setup() local
3243 inode = lookup_free_space_inode(root, block_group, path); in cache_save_setup()
3257 ret = create_free_space_inode(root, trans, block_group, path); in cache_save_setup()
3276 ret = btrfs_update_inode(trans, root, inode); in cache_save_setup()
3288 btrfs_abort_transaction(trans, root, ret); in cache_save_setup()
3294 ret = btrfs_check_trunc_cache_free_space(root, in cache_save_setup()
3295 &root->fs_info->global_block_rsv); in cache_save_setup()
3299 ret = btrfs_truncate_free_space_cache(root, trans, NULL, inode); in cache_save_setup()
3306 !btrfs_test_opt(root, SPACE_CACHE)) { in cache_save_setup()
3357 struct btrfs_root *root) in btrfs_setup_space_cache() argument
3364 !btrfs_test_opt(root, SPACE_CACHE)) in btrfs_setup_space_cache()
3395 struct btrfs_root *root) in btrfs_start_dirty_block_groups() argument
3420 btrfs_create_pending_block_groups(trans, root); in btrfs_start_dirty_block_groups()
3445 btrfs_wait_cache_io(root, trans, cache, in btrfs_start_dirty_block_groups()
3470 ret = btrfs_write_out_cache(root, trans, cache, path); in btrfs_start_dirty_block_groups()
3489 ret = write_one_cache_group(trans, root, path, cache); in btrfs_start_dirty_block_groups()
3509 btrfs_abort_transaction(trans, root, ret); in btrfs_start_dirty_block_groups()
3534 ret = btrfs_run_delayed_refs(trans, root, 0); in btrfs_start_dirty_block_groups()
3555 struct btrfs_root *root) in btrfs_write_dirty_block_groups() argument
3587 btrfs_wait_cache_io(root, trans, cache, in btrfs_write_dirty_block_groups()
3603 ret = btrfs_run_delayed_refs(trans, root, (unsigned long) -1); in btrfs_write_dirty_block_groups()
3607 ret = btrfs_write_out_cache(root, trans, cache, path); in btrfs_write_dirty_block_groups()
3621 ret = write_one_cache_group(trans, root, path, cache); in btrfs_write_dirty_block_groups()
3623 btrfs_abort_transaction(trans, root, ret); in btrfs_write_dirty_block_groups()
3635 btrfs_wait_cache_io(root, trans, cache, in btrfs_write_dirty_block_groups()
3644 int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr) in btrfs_extent_readonly() argument
3649 block_group = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_extent_readonly()
3797 static u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags) in btrfs_reduce_alloc_profile() argument
3799 u64 num_devices = root->fs_info->fs_devices->rw_devices; in btrfs_reduce_alloc_profile()
3807 spin_lock(&root->fs_info->balance_lock); in btrfs_reduce_alloc_profile()
3808 target = get_restripe_target(root->fs_info, flags); in btrfs_reduce_alloc_profile()
3812 spin_unlock(&root->fs_info->balance_lock); in btrfs_reduce_alloc_profile()
3816 spin_unlock(&root->fs_info->balance_lock); in btrfs_reduce_alloc_profile()
3846 static u64 get_alloc_profile(struct btrfs_root *root, u64 orig_flags) in get_alloc_profile() argument
3853 seq = read_seqbegin(&root->fs_info->profiles_lock); in get_alloc_profile()
3856 flags |= root->fs_info->avail_data_alloc_bits; in get_alloc_profile()
3858 flags |= root->fs_info->avail_system_alloc_bits; in get_alloc_profile()
3860 flags |= root->fs_info->avail_metadata_alloc_bits; in get_alloc_profile()
3861 } while (read_seqretry(&root->fs_info->profiles_lock, seq)); in get_alloc_profile()
3863 return btrfs_reduce_alloc_profile(root, flags); in get_alloc_profile()
3866 u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data) in btrfs_get_alloc_profile() argument
3873 else if (root == root->fs_info->chunk_root) in btrfs_get_alloc_profile()
3878 ret = get_alloc_profile(root, flags); in btrfs_get_alloc_profile()
3889 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_check_data_free_space() local
3890 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_check_data_free_space()
3897 bytes = ALIGN(bytes, root->sectorsize); in btrfs_check_data_free_space()
3928 alloc_target = btrfs_get_alloc_profile(root, 1); in btrfs_check_data_free_space()
3939 trans = btrfs_join_transaction(root); in btrfs_check_data_free_space()
3943 ret = do_chunk_alloc(trans, root->fs_info->extent_root, in btrfs_check_data_free_space()
3946 btrfs_end_transaction(trans, root); in btrfs_check_data_free_space()
3975 !atomic_read(&root->fs_info->open_ioctl_trans)) { in btrfs_check_data_free_space()
3983 trans = btrfs_join_transaction(root); in btrfs_check_data_free_space()
3989 ret = btrfs_commit_transaction(trans, root); in btrfs_check_data_free_space()
3997 mutex_lock(&root->fs_info->cleaner_delayed_iput_mutex); in btrfs_check_data_free_space()
3998 mutex_unlock(&root->fs_info->cleaner_delayed_iput_mutex); in btrfs_check_data_free_space()
4001 btrfs_end_transaction(trans, root); in btrfs_check_data_free_space()
4005 trace_btrfs_space_reservation(root->fs_info, in btrfs_check_data_free_space()
4010 ret = btrfs_qgroup_reserve(root, write_bytes); in btrfs_check_data_free_space()
4014 trace_btrfs_space_reservation(root->fs_info, "space_info", in btrfs_check_data_free_space()
4027 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_free_reserved_data_space() local
4031 bytes = ALIGN(bytes, root->sectorsize); in btrfs_free_reserved_data_space()
4033 data_sinfo = root->fs_info->data_sinfo; in btrfs_free_reserved_data_space()
4037 trace_btrfs_space_reservation(root->fs_info, "space_info", in btrfs_free_reserved_data_space()
4060 static int should_alloc_chunk(struct btrfs_root *root, in should_alloc_chunk() argument
4063 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in should_alloc_chunk()
4084 thresh = btrfs_super_total_bytes(root->fs_info->super_copy); in should_alloc_chunk()
4097 static u64 get_system_chunk_thresh(struct btrfs_root *root, u64 type) in get_system_chunk_thresh() argument
4105 num_dev = root->fs_info->fs_devices->rw_devices; in get_system_chunk_thresh()
4112 return btrfs_calc_trans_metadata_size(root, num_dev + 1); in get_system_chunk_thresh()
4116 struct btrfs_root *root, u64 type) in check_system_chunk() argument
4122 info = __find_space_info(root->fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in check_system_chunk()
4128 thresh = get_system_chunk_thresh(root, type); in check_system_chunk()
4129 if (left < thresh && btrfs_test_opt(root, ENOSPC_DEBUG)) { in check_system_chunk()
4130 btrfs_info(root->fs_info, "left=%llu, need=%llu, flags=%llu", in check_system_chunk()
4138 flags = btrfs_get_alloc_profile(root->fs_info->chunk_root, 0); in check_system_chunk()
4139 btrfs_alloc_chunk(trans, root, flags); in check_system_chunk()
4247 static int can_overcommit(struct btrfs_root *root, in can_overcommit() argument
4251 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in can_overcommit()
4252 u64 profile = btrfs_get_alloc_profile(root, 0); in can_overcommit()
4274 spin_lock(&root->fs_info->free_chunk_lock); in can_overcommit()
4275 avail = root->fs_info->free_chunk_space; in can_overcommit()
4276 spin_unlock(&root->fs_info->free_chunk_lock); in can_overcommit()
4304 static void btrfs_writeback_inodes_sb_nr(struct btrfs_root *root, in btrfs_writeback_inodes_sb_nr() argument
4307 struct super_block *sb = root->fs_info->sb; in btrfs_writeback_inodes_sb_nr()
4320 btrfs_start_delalloc_roots(root->fs_info, 0, nr_items); in btrfs_writeback_inodes_sb_nr()
4322 btrfs_wait_ordered_roots(root->fs_info, nr_items); in btrfs_writeback_inodes_sb_nr()
4326 static inline int calc_reclaim_items_nr(struct btrfs_root *root, u64 to_reclaim) in calc_reclaim_items_nr() argument
4331 bytes = btrfs_calc_trans_metadata_size(root, 1); in calc_reclaim_items_nr()
4343 static void shrink_delalloc(struct btrfs_root *root, u64 to_reclaim, u64 orig, in shrink_delalloc() argument
4358 items = calc_reclaim_items_nr(root, to_reclaim); in shrink_delalloc()
4362 block_rsv = &root->fs_info->delalloc_block_rsv; in shrink_delalloc()
4366 &root->fs_info->delalloc_bytes); in shrink_delalloc()
4371 btrfs_wait_ordered_roots(root->fs_info, items); in shrink_delalloc()
4379 btrfs_writeback_inodes_sb_nr(root, nr_pages, items); in shrink_delalloc()
4384 max_reclaim = atomic_read(&root->fs_info->async_delalloc_pages); in shrink_delalloc()
4393 wait_event(root->fs_info->async_submit_wait, in shrink_delalloc()
4394 atomic_read(&root->fs_info->async_delalloc_pages) <= in shrink_delalloc()
4402 if (can_overcommit(root, space_info, orig, flush)) { in shrink_delalloc()
4410 btrfs_wait_ordered_roots(root->fs_info, items); in shrink_delalloc()
4417 &root->fs_info->delalloc_bytes); in shrink_delalloc()
4431 static int may_commit_transaction(struct btrfs_root *root, in may_commit_transaction() argument
4435 struct btrfs_block_rsv *delayed_rsv = &root->fs_info->delayed_block_rsv; in may_commit_transaction()
4466 trans = btrfs_join_transaction(root); in may_commit_transaction()
4470 return btrfs_commit_transaction(trans, root); in may_commit_transaction()
4482 static int flush_space(struct btrfs_root *root, in flush_space() argument
4494 nr = calc_reclaim_items_nr(root, num_bytes) * 2; in flush_space()
4498 trans = btrfs_join_transaction(root); in flush_space()
4503 ret = btrfs_run_delayed_items_nr(trans, root, nr); in flush_space()
4504 btrfs_end_transaction(trans, root); in flush_space()
4508 shrink_delalloc(root, num_bytes * 2, orig_bytes, in flush_space()
4512 trans = btrfs_join_transaction(root); in flush_space()
4517 ret = do_chunk_alloc(trans, root->fs_info->extent_root, in flush_space()
4518 btrfs_get_alloc_profile(root, 0), in flush_space()
4520 btrfs_end_transaction(trans, root); in flush_space()
4525 ret = may_commit_transaction(root, space_info, orig_bytes, 0); in flush_space()
4536 btrfs_calc_reclaim_metadata_size(struct btrfs_root *root, in btrfs_calc_reclaim_metadata_size() argument
4546 if (can_overcommit(root, space_info, to_reclaim, in btrfs_calc_reclaim_metadata_size()
4555 if (can_overcommit(root, space_info, 1024 * 1024, in btrfs_calc_reclaim_metadata_size()
4659 static int reserve_metadata_bytes(struct btrfs_root *root, in reserve_metadata_bytes() argument
4712 trace_btrfs_space_reservation(root->fs_info, in reserve_metadata_bytes()
4733 if (ret && can_overcommit(root, space_info, orig_bytes, flush)) { in reserve_metadata_bytes()
4735 trace_btrfs_space_reservation(root->fs_info, "space_info", in reserve_metadata_bytes()
4759 if (!root->fs_info->log_root_recovering && in reserve_metadata_bytes()
4760 need_do_async_reclaim(space_info, root->fs_info, used) && in reserve_metadata_bytes()
4761 !work_busy(&root->fs_info->async_reclaim_work)) in reserve_metadata_bytes()
4763 &root->fs_info->async_reclaim_work); in reserve_metadata_bytes()
4770 ret = flush_space(root, space_info, num_bytes, orig_bytes, in reserve_metadata_bytes()
4794 unlikely(root->orphan_cleanup_state == ORPHAN_CLEANUP_STARTED)) { in reserve_metadata_bytes()
4796 &root->fs_info->global_block_rsv; in reserve_metadata_bytes()
4803 trace_btrfs_space_reservation(root->fs_info, in reserve_metadata_bytes()
4817 const struct btrfs_root *root) in get_block_rsv() argument
4821 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) in get_block_rsv()
4824 if (root == root->fs_info->csum_root && trans->adding_csums) in get_block_rsv()
4827 if (root == root->fs_info->uuid_root) in get_block_rsv()
4831 block_rsv = root->block_rsv; in get_block_rsv()
4834 block_rsv = &root->fs_info->empty_block_rsv; in get_block_rsv()
4955 struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root, in btrfs_alloc_block_rsv() argument
4959 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_alloc_block_rsv()
4971 void btrfs_free_block_rsv(struct btrfs_root *root, in btrfs_free_block_rsv() argument
4976 btrfs_block_rsv_release(root, rsv, (u64)-1); in btrfs_free_block_rsv()
4985 int btrfs_block_rsv_add(struct btrfs_root *root, in btrfs_block_rsv_add() argument
4994 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
5003 int btrfs_block_rsv_check(struct btrfs_root *root, in btrfs_block_rsv_check() argument
5021 int btrfs_block_rsv_refill(struct btrfs_root *root, in btrfs_block_rsv_refill() argument
5042 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
5058 void btrfs_block_rsv_release(struct btrfs_root *root, in btrfs_block_rsv_release() argument
5062 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in btrfs_block_rsv_release()
5066 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv, in btrfs_block_rsv_release()
5183 struct btrfs_root *root) in btrfs_trans_release_metadata() argument
5191 trace_btrfs_space_reservation(root->fs_info, "transaction", in btrfs_trans_release_metadata()
5193 btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved); in btrfs_trans_release_metadata()
5201 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_orphan_reserve_metadata() local
5202 struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root); in btrfs_orphan_reserve_metadata()
5203 struct btrfs_block_rsv *dst_rsv = root->orphan_block_rsv; in btrfs_orphan_reserve_metadata()
5210 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); in btrfs_orphan_reserve_metadata()
5211 trace_btrfs_space_reservation(root->fs_info, "orphan", in btrfs_orphan_reserve_metadata()
5218 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_orphan_release_metadata() local
5219 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); in btrfs_orphan_release_metadata()
5220 trace_btrfs_space_reservation(root->fs_info, "orphan", in btrfs_orphan_release_metadata()
5222 btrfs_block_rsv_release(root, root->orphan_block_rsv, num_bytes); in btrfs_orphan_release_metadata()
5239 int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, in btrfs_subvolume_reserve_metadata() argument
5247 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in btrfs_subvolume_reserve_metadata()
5249 if (root->fs_info->quota_enabled) { in btrfs_subvolume_reserve_metadata()
5251 num_bytes = 3 * root->nodesize; in btrfs_subvolume_reserve_metadata()
5252 ret = btrfs_qgroup_reserve(root, num_bytes); in btrfs_subvolume_reserve_metadata()
5261 num_bytes = btrfs_calc_trans_metadata_size(root, items); in btrfs_subvolume_reserve_metadata()
5262 rsv->space_info = __find_space_info(root->fs_info, in btrfs_subvolume_reserve_metadata()
5264 ret = btrfs_block_rsv_add(root, rsv, num_bytes, in btrfs_subvolume_reserve_metadata()
5272 btrfs_qgroup_free(root, *qgroup_reserved); in btrfs_subvolume_reserve_metadata()
5278 void btrfs_subvolume_release_metadata(struct btrfs_root *root, in btrfs_subvolume_release_metadata() argument
5282 btrfs_block_rsv_release(root, rsv, (u64)-1); in btrfs_subvolume_release_metadata()
5348 struct btrfs_root *root = BTRFS_I(inode)->root; in calc_csum_metadata_size() local
5355 old_csums = btrfs_csum_bytes_to_leaves(root, BTRFS_I(inode)->csum_bytes); in calc_csum_metadata_size()
5360 num_csums = btrfs_csum_bytes_to_leaves(root, BTRFS_I(inode)->csum_bytes); in calc_csum_metadata_size()
5367 return btrfs_calc_trans_metadata_size(root, in calc_csum_metadata_size()
5370 return btrfs_calc_trans_metadata_size(root, old_csums - num_csums); in calc_csum_metadata_size()
5375 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_delalloc_reserve_metadata() local
5376 struct btrfs_block_rsv *block_rsv = &root->fs_info->delalloc_block_rsv; in btrfs_delalloc_reserve_metadata()
5398 btrfs_transaction_in_commit(root->fs_info)) in btrfs_delalloc_reserve_metadata()
5404 num_bytes = ALIGN(num_bytes, root->sectorsize); in btrfs_delalloc_reserve_metadata()
5428 to_reserve = btrfs_calc_trans_metadata_size(root, nr_extents); in btrfs_delalloc_reserve_metadata()
5433 if (root->fs_info->quota_enabled) { in btrfs_delalloc_reserve_metadata()
5434 ret = btrfs_qgroup_reserve(root, nr_extents * root->nodesize); in btrfs_delalloc_reserve_metadata()
5439 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush); in btrfs_delalloc_reserve_metadata()
5441 if (root->fs_info->quota_enabled) in btrfs_delalloc_reserve_metadata()
5442 btrfs_qgroup_free(root, nr_extents * root->nodesize); in btrfs_delalloc_reserve_metadata()
5459 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_delalloc_reserve_metadata()
5517 to_free += btrfs_calc_trans_metadata_size(root, dropped); in btrfs_delalloc_reserve_metadata()
5520 btrfs_block_rsv_release(root, block_rsv, to_free); in btrfs_delalloc_reserve_metadata()
5521 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_delalloc_reserve_metadata()
5540 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_delalloc_release_metadata() local
5544 num_bytes = ALIGN(num_bytes, root->sectorsize); in btrfs_delalloc_release_metadata()
5552 to_free += btrfs_calc_trans_metadata_size(root, dropped); in btrfs_delalloc_release_metadata()
5554 if (btrfs_test_is_dummy_root(root)) in btrfs_delalloc_release_metadata()
5557 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_delalloc_release_metadata()
5560 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv, in btrfs_delalloc_release_metadata()
5616 struct btrfs_root *root, u64 bytenr, in update_block_group() argument
5620 struct btrfs_fs_info *info = root->fs_info; in update_block_group()
5661 if (btrfs_test_opt(root, SPACE_CACHE) && in update_block_group()
5720 static u64 first_logical_byte(struct btrfs_root *root, u64 search_start) in first_logical_byte() argument
5725 spin_lock(&root->fs_info->block_group_cache_lock); in first_logical_byte()
5726 bytenr = root->fs_info->first_logical_byte; in first_logical_byte()
5727 spin_unlock(&root->fs_info->block_group_cache_lock); in first_logical_byte()
5732 cache = btrfs_lookup_first_block_group(root->fs_info, search_start); in first_logical_byte()
5742 static int pin_down_extent(struct btrfs_root *root, in pin_down_extent() argument
5757 set_extent_dirty(root->fs_info->pinned_extents, bytenr, in pin_down_extent()
5760 trace_btrfs_reserved_extent_free(root, bytenr, num_bytes); in pin_down_extent()
5767 int btrfs_pin_extent(struct btrfs_root *root, in btrfs_pin_extent() argument
5772 cache = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_pin_extent()
5775 pin_down_extent(root, cache, bytenr, num_bytes, reserved); in btrfs_pin_extent()
5784 int btrfs_pin_extent_for_log_replay(struct btrfs_root *root, in btrfs_pin_extent_for_log_replay() argument
5790 cache = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_pin_extent_for_log_replay()
5802 pin_down_extent(root, cache, bytenr, num_bytes, 0); in btrfs_pin_extent_for_log_replay()
5810 static int __exclude_logged_extent(struct btrfs_root *root, u64 start, u64 num_bytes) in __exclude_logged_extent() argument
5816 block_group = btrfs_lookup_block_group(root->fs_info, start); in __exclude_logged_extent()
5831 ret = add_excluded_extent(root, start, num_bytes); in __exclude_logged_extent()
5845 ret = add_excluded_extent(root, start, num_bytes); in __exclude_logged_extent()
5946 struct btrfs_root *root) in btrfs_prepare_extent_commit() argument
5948 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_prepare_extent_commit()
5977 static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end, in unpin_extent_range() argument
5980 struct btrfs_fs_info *fs_info = root->fs_info; in unpin_extent_range()
6040 struct btrfs_root *root) in btrfs_finish_extent_commit() argument
6042 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_finish_extent_commit()
6065 if (btrfs_test_opt(root, DISCARD)) in btrfs_finish_extent_commit()
6066 ret = btrfs_discard_extent(root, start, in btrfs_finish_extent_commit()
6070 unpin_extent_range(root, start, end, true); in btrfs_finish_extent_commit()
6100 struct btrfs_root *root, in __btrfs_free_extent() argument
6109 struct btrfs_fs_info *info = root->fs_info; in __btrfs_free_extent()
6123 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in __btrfs_free_extent()
6325 add_pinned_bytes(root->fs_info, -num_bytes, owner_objectid, in __btrfs_free_extent()
6330 extent_data_ref_count(root, path, iref)); in __btrfs_free_extent()
6350 ret = btrfs_del_csums(trans, root, bytenr, num_bytes); in __btrfs_free_extent()
6357 ret = update_block_group(trans, root, bytenr, num_bytes, 0); in __btrfs_free_extent()
6389 struct btrfs_root *root, u64 bytenr) in check_ref_cleanup() argument
6455 struct btrfs_root *root, in btrfs_free_tree_block() argument
6462 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { in btrfs_free_tree_block()
6463 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans, in btrfs_free_tree_block()
6465 parent, root->root_key.objectid, in btrfs_free_tree_block()
6477 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { in btrfs_free_tree_block()
6478 ret = check_ref_cleanup(trans, root, buf->start); in btrfs_free_tree_block()
6483 cache = btrfs_lookup_block_group(root->fs_info, buf->start); in btrfs_free_tree_block()
6486 pin_down_extent(root, cache, buf->start, buf->len, 1); in btrfs_free_tree_block()
6496 trace_btrfs_reserved_extent_free(root, buf->start, buf->len); in btrfs_free_tree_block()
6501 add_pinned_bytes(root->fs_info, buf->len, in btrfs_free_tree_block()
6503 root->root_key.objectid); in btrfs_free_tree_block()
6513 int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_free_extent() argument
6518 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_free_extent()
6520 if (btrfs_test_is_dummy_root(root)) in btrfs_free_extent()
6523 add_pinned_bytes(root->fs_info, num_bytes, owner, root_objectid); in btrfs_free_extent()
6532 btrfs_pin_extent(root, bytenr, num_bytes, 1); in btrfs_free_extent()
6725 struct btrfs_root *root = orig_root->fs_info->extent_root; in find_free_extent() local
6741 WARN_ON(num_bytes < root->sectorsize); in find_free_extent()
6748 space_info = __find_space_info(root->fs_info, flags); in find_free_extent()
6750 btrfs_err(root->fs_info, "No space info for %llu", flags); in find_free_extent()
6762 last_ptr = &root->fs_info->meta_alloc_cluster; in find_free_extent()
6763 if (!btrfs_test_opt(root, SSD)) in find_free_extent()
6768 btrfs_test_opt(root, SSD)) { in find_free_extent()
6769 last_ptr = &root->fs_info->data_alloc_cluster; in find_free_extent()
6779 search_start = max(search_start, first_logical_byte(root, 0)); in find_free_extent()
6786 block_group = btrfs_lookup_block_group(root->fs_info, in find_free_extent()
6892 trace_btrfs_reserve_extent_cluster(root, in find_free_extent()
6948 ret = btrfs_find_space_cluster(root, block_group, in find_free_extent()
6965 trace_btrfs_reserve_extent_cluster(root, in find_free_extent()
7029 search_start = ALIGN(offset, root->stripesize); in find_free_extent()
7091 trans = btrfs_join_transaction(root); in find_free_extent()
7098 ret = do_chunk_alloc(trans, root, flags, in find_free_extent()
7106 root, ret); in find_free_extent()
7110 btrfs_end_transaction(trans, root); in find_free_extent()
7172 int btrfs_reserve_extent(struct btrfs_root *root, in btrfs_reserve_extent() argument
7181 flags = btrfs_get_alloc_profile(root, is_data); in btrfs_reserve_extent()
7183 WARN_ON(num_bytes < root->sectorsize); in btrfs_reserve_extent()
7184 ret = find_free_extent(root, num_bytes, empty_size, hint_byte, ins, in btrfs_reserve_extent()
7190 num_bytes = round_down(num_bytes, root->sectorsize); in btrfs_reserve_extent()
7195 } else if (btrfs_test_opt(root, ENOSPC_DEBUG)) { in btrfs_reserve_extent()
7198 sinfo = __find_space_info(root->fs_info, flags); in btrfs_reserve_extent()
7199 btrfs_err(root->fs_info, "allocation failed flags %llu, wanted %llu", in btrfs_reserve_extent()
7209 static int __btrfs_free_reserved_extent(struct btrfs_root *root, in __btrfs_free_reserved_extent() argument
7216 cache = btrfs_lookup_block_group(root->fs_info, start); in __btrfs_free_reserved_extent()
7218 btrfs_err(root->fs_info, "Unable to find block group for %llu", in __btrfs_free_reserved_extent()
7224 pin_down_extent(root, cache, start, len, 1); in __btrfs_free_reserved_extent()
7226 if (btrfs_test_opt(root, DISCARD)) in __btrfs_free_reserved_extent()
7227 ret = btrfs_discard_extent(root, start, len, NULL); in __btrfs_free_reserved_extent()
7234 trace_btrfs_reserved_extent_free(root, start, len); in __btrfs_free_reserved_extent()
7239 int btrfs_free_reserved_extent(struct btrfs_root *root, in btrfs_free_reserved_extent() argument
7242 return __btrfs_free_reserved_extent(root, start, len, 0, delalloc); in btrfs_free_reserved_extent()
7245 int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root, in btrfs_free_and_pin_reserved_extent() argument
7248 return __btrfs_free_reserved_extent(root, start, len, 1, 0); in btrfs_free_and_pin_reserved_extent()
7252 struct btrfs_root *root, in alloc_reserved_file_extent() argument
7258 struct btrfs_fs_info *fs_info = root->fs_info; in alloc_reserved_file_extent()
7319 ret = update_block_group(trans, root, ins->objectid, ins->offset, 1); in alloc_reserved_file_extent()
7325 trace_btrfs_reserved_extent_alloc(root, ins->objectid, ins->offset); in alloc_reserved_file_extent()
7330 struct btrfs_root *root, in alloc_reserved_tree_block() argument
7337 struct btrfs_fs_info *fs_info = root->fs_info; in alloc_reserved_tree_block()
7345 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in alloc_reserved_tree_block()
7353 btrfs_free_and_pin_reserved_extent(root, ins->objectid, in alloc_reserved_tree_block()
7354 root->nodesize); in alloc_reserved_tree_block()
7363 btrfs_free_and_pin_reserved_extent(root, ins->objectid, in alloc_reserved_tree_block()
7364 root->nodesize); in alloc_reserved_tree_block()
7378 num_bytes = root->nodesize; in alloc_reserved_tree_block()
7408 ret = update_block_group(trans, root, ins->objectid, root->nodesize, in alloc_reserved_tree_block()
7416 trace_btrfs_reserved_extent_alloc(root, ins->objectid, root->nodesize); in alloc_reserved_tree_block()
7421 struct btrfs_root *root, in btrfs_alloc_reserved_file_extent() argument
7429 ret = btrfs_add_delayed_data_ref(root->fs_info, trans, ins->objectid, in btrfs_alloc_reserved_file_extent()
7442 struct btrfs_root *root, in btrfs_alloc_logged_file_extent() argument
7453 if (!btrfs_fs_incompat(root->fs_info, MIXED_GROUPS)) { in btrfs_alloc_logged_file_extent()
7454 ret = __exclude_logged_extent(root, ins->objectid, ins->offset); in btrfs_alloc_logged_file_extent()
7459 block_group = btrfs_lookup_block_group(root->fs_info, ins->objectid); in btrfs_alloc_logged_file_extent()
7466 ret = alloc_reserved_file_extent(trans, root, 0, root_objectid, in btrfs_alloc_logged_file_extent()
7473 btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_init_new_buffer() argument
7478 buf = btrfs_find_create_tree_block(root, bytenr); in btrfs_init_new_buffer()
7482 btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level); in btrfs_init_new_buffer()
7484 clean_tree_block(trans, root->fs_info, buf); in btrfs_init_new_buffer()
7490 if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) { in btrfs_init_new_buffer()
7491 buf->log_index = root->log_transid % 2; in btrfs_init_new_buffer()
7497 set_extent_dirty(&root->dirty_log_pages, buf->start, in btrfs_init_new_buffer()
7500 set_extent_new(&root->dirty_log_pages, buf->start, in btrfs_init_new_buffer()
7514 struct btrfs_root *root, u32 blocksize) in use_block_rsv() argument
7517 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in use_block_rsv()
7521 block_rsv = get_block_rsv(trans, root); in use_block_rsv()
7535 update_global_block_rsv(root->fs_info); in use_block_rsv()
7539 if (btrfs_test_opt(root, ENOSPC_DEBUG)) { in use_block_rsv()
7548 ret = reserve_metadata_bytes(root, block_rsv, blocksize, in use_block_rsv()
7581 struct btrfs_root *root, in btrfs_alloc_tree_block() argument
7592 u32 blocksize = root->nodesize; in btrfs_alloc_tree_block()
7593 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in btrfs_alloc_tree_block()
7596 if (btrfs_test_is_dummy_root(root)) { in btrfs_alloc_tree_block()
7597 buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr, in btrfs_alloc_tree_block()
7600 root->alloc_bytenr += blocksize; in btrfs_alloc_tree_block()
7604 block_rsv = use_block_rsv(trans, root, blocksize); in btrfs_alloc_tree_block()
7608 ret = btrfs_reserve_extent(root, blocksize, blocksize, in btrfs_alloc_tree_block()
7613 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level); in btrfs_alloc_tree_block()
7645 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans, in btrfs_alloc_tree_block()
7660 btrfs_free_reserved_extent(root, ins.objectid, ins.offset, 0); in btrfs_alloc_tree_block()
7662 unuse_block_rsv(root->fs_info, block_rsv, blocksize); in btrfs_alloc_tree_block()
7684 struct btrfs_root *root, in reada_walk_down() argument
7706 BTRFS_NODEPTRS_PER_BLOCK(root)); in reada_walk_down()
7711 blocksize = root->nodesize; in reada_walk_down()
7725 generation <= root->root_key.offset) in reada_walk_down()
7729 ret = btrfs_lookup_extent_info(trans, root, bytenr, in reada_walk_down()
7745 generation <= root->root_key.offset) in reada_walk_down()
7758 readahead_tree_block(root, bytenr); in reada_walk_down()
7765 struct btrfs_root *root, in account_leaf_items() argument
7793 ret = btrfs_qgroup_record_ref(trans, root->fs_info, in account_leaf_items()
7794 root->objectid, in account_leaf_items()
7817 static int adjust_slots_upwards(struct btrfs_root *root, in adjust_slots_upwards() argument
7869 struct btrfs_root *root, in account_shared_subtree() argument
7882 if (!root->fs_info->quota_enabled) in account_shared_subtree()
7892 ret = account_leaf_items(trans, root, root_eb); in account_shared_subtree()
7928 eb = read_tree_block(root, child_bytenr, child_gen); in account_shared_subtree()
7941 ret = btrfs_qgroup_record_ref(trans, root->fs_info, in account_shared_subtree()
7942 root->objectid, in account_shared_subtree()
7944 root->nodesize, in account_shared_subtree()
7953 ret = account_leaf_items(trans, root, path->nodes[level]); in account_shared_subtree()
7958 ret = adjust_slots_upwards(root, path, root_level); in account_shared_subtree()
7985 struct btrfs_root *root, in walk_down_proc() argument
7995 btrfs_header_owner(eb) != root->root_key.objectid) in walk_down_proc()
8006 ret = btrfs_lookup_extent_info(trans, root, in walk_down_proc()
8030 ret = btrfs_inc_ref(trans, root, eb, 1); in walk_down_proc()
8032 ret = btrfs_dec_ref(trans, root, eb, 0); in walk_down_proc()
8034 ret = btrfs_set_disk_extent_flags(trans, root, eb->start, in walk_down_proc()
8066 struct btrfs_root *root, in do_walk_down() argument
8089 generation <= root->root_key.offset) { in do_walk_down()
8095 blocksize = root->nodesize; in do_walk_down()
8097 next = btrfs_find_tree_block(root->fs_info, bytenr); in do_walk_down()
8099 next = btrfs_find_create_tree_block(root, bytenr); in do_walk_down()
8102 btrfs_set_buffer_lockdep_class(root->root_key.objectid, next, in do_walk_down()
8109 ret = btrfs_lookup_extent_info(trans, root, bytenr, level - 1, 1, in do_walk_down()
8118 btrfs_err(root->fs_info, "Missing references."); in do_walk_down()
8131 generation <= root->root_key.offset) in do_walk_down()
8158 reada_walk_down(trans, root, wc, path); in do_walk_down()
8159 next = read_tree_block(root, bytenr, generation); in do_walk_down()
8184 BUG_ON(root->root_key.objectid != in do_walk_down()
8190 ret = account_shared_subtree(trans, root, next, in do_walk_down()
8196 root->fs_info->sb->s_id, ret); in do_walk_down()
8199 ret = btrfs_free_extent(trans, root, bytenr, blocksize, parent, in do_walk_down()
8200 root->root_key.objectid, level - 1, 0, 0); in do_walk_down()
8222 struct btrfs_root *root, in walk_up_proc() argument
8255 ret = btrfs_lookup_extent_info(trans, root, in walk_up_proc()
8279 ret = btrfs_dec_ref(trans, root, eb, 1); in walk_up_proc()
8281 ret = btrfs_dec_ref(trans, root, eb, 0); in walk_up_proc()
8283 ret = account_leaf_items(trans, root, eb); in walk_up_proc()
8288 root->fs_info->sb->s_id, ret); in walk_up_proc()
8298 clean_tree_block(trans, root->fs_info, eb); in walk_up_proc()
8301 if (eb == root->node) { in walk_up_proc()
8305 BUG_ON(root->root_key.objectid != in walk_up_proc()
8311 BUG_ON(root->root_key.objectid != in walk_up_proc()
8315 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
8323 struct btrfs_root *root, in walk_down_tree() argument
8332 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
8343 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
8355 struct btrfs_root *root, in walk_up_tree() argument
8370 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
8400 int btrfs_drop_snapshot(struct btrfs_root *root, in btrfs_drop_snapshot() argument
8406 struct btrfs_root *tree_root = root->fs_info->tree_root; in btrfs_drop_snapshot()
8407 struct btrfs_root_item *root_item = &root->root_item; in btrfs_drop_snapshot()
8415 btrfs_debug(root->fs_info, "Drop subvolume %llu", root->objectid); in btrfs_drop_snapshot()
8440 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
8441 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
8455 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_drop_snapshot()
8469 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
8475 ret = btrfs_lookup_extent_info(trans, root, in btrfs_drop_snapshot()
8501 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root); in btrfs_drop_snapshot()
8505 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
8511 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
8532 (!for_reloc && btrfs_need_cleaner_sleep(root))) { in btrfs_drop_snapshot()
8534 &root->root_key, in btrfs_drop_snapshot()
8552 root->fs_info); in btrfs_drop_snapshot()
8561 if (!for_reloc && btrfs_need_cleaner_sleep(root)) { in btrfs_drop_snapshot()
8580 ret = btrfs_del_root(trans, tree_root, &root->root_key); in btrfs_drop_snapshot()
8586 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) { in btrfs_drop_snapshot()
8587 ret = btrfs_find_root(tree_root, &root->root_key, path, in btrfs_drop_snapshot()
8600 root->root_key.objectid); in btrfs_drop_snapshot()
8604 if (test_bit(BTRFS_ROOT_IN_RADIX, &root->state)) { in btrfs_drop_snapshot()
8605 btrfs_drop_and_free_fs_root(tree_root->fs_info, root); in btrfs_drop_snapshot()
8607 free_extent_buffer(root->node); in btrfs_drop_snapshot()
8608 free_extent_buffer(root->commit_root); in btrfs_drop_snapshot()
8609 btrfs_put_fs_root(root); in btrfs_drop_snapshot()
8634 btrfs_add_dead_root(root); in btrfs_drop_snapshot()
8636 btrfs_std_error(root->fs_info, err); in btrfs_drop_snapshot()
8647 struct btrfs_root *root, in btrfs_drop_subtree() argument
8658 BUG_ON(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID); in btrfs_drop_subtree()
8690 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root); in btrfs_drop_subtree()
8693 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
8699 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
8711 static u64 update_block_group_flags(struct btrfs_root *root, u64 flags) in update_block_group_flags() argument
8720 stripped = get_restripe_target(root->fs_info, flags); in update_block_group_flags()
8724 num_devices = root->fs_info->fs_devices->rw_devices; in update_block_group_flags()
8805 int btrfs_set_block_group_ro(struct btrfs_root *root, in btrfs_set_block_group_ro() argument
8816 trans = btrfs_join_transaction(root); in btrfs_set_block_group_ro()
8825 mutex_lock(&root->fs_info->ro_block_group_mutex); in btrfs_set_block_group_ro()
8829 mutex_unlock(&root->fs_info->ro_block_group_mutex); in btrfs_set_block_group_ro()
8830 btrfs_end_transaction(trans, root); in btrfs_set_block_group_ro()
8832 ret = btrfs_wait_for_commit(root, transid); in btrfs_set_block_group_ro()
8842 alloc_flags = update_block_group_flags(root, cache->flags); in btrfs_set_block_group_ro()
8844 ret = do_chunk_alloc(trans, root, alloc_flags, in btrfs_set_block_group_ro()
8860 alloc_flags = get_alloc_profile(root, cache->space_info->flags); in btrfs_set_block_group_ro()
8861 ret = do_chunk_alloc(trans, root, alloc_flags, in btrfs_set_block_group_ro()
8868 alloc_flags = update_block_group_flags(root, cache->flags); in btrfs_set_block_group_ro()
8869 lock_chunks(root->fs_info->chunk_root); in btrfs_set_block_group_ro()
8870 check_system_chunk(trans, root, alloc_flags); in btrfs_set_block_group_ro()
8871 unlock_chunks(root->fs_info->chunk_root); in btrfs_set_block_group_ro()
8873 mutex_unlock(&root->fs_info->ro_block_group_mutex); in btrfs_set_block_group_ro()
8875 btrfs_end_transaction(trans, root); in btrfs_set_block_group_ro()
8880 struct btrfs_root *root, u64 type) in btrfs_force_chunk_alloc() argument
8882 u64 alloc_flags = get_alloc_profile(root, type); in btrfs_force_chunk_alloc()
8883 return do_chunk_alloc(trans, root, alloc_flags, in btrfs_force_chunk_alloc()
8928 void btrfs_set_block_group_rw(struct btrfs_root *root, in btrfs_set_block_group_rw() argument
8953 int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr) in btrfs_can_relocate() argument
8957 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_can_relocate()
8968 block_group = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_can_relocate()
9018 target = get_restripe_target(root->fs_info, block_group->flags); in btrfs_can_relocate()
9047 trans = btrfs_join_transaction(root); in btrfs_can_relocate()
9053 mutex_lock(&root->fs_info->chunk_mutex); in btrfs_can_relocate()
9074 mutex_unlock(&root->fs_info->chunk_mutex); in btrfs_can_relocate()
9075 btrfs_end_transaction(trans, root); in btrfs_can_relocate()
9081 static int find_first_block_group(struct btrfs_root *root, in find_first_block_group() argument
9089 ret = btrfs_search_slot(NULL, root, key, path, 0, 0); in find_first_block_group()
9097 ret = btrfs_next_leaf(root, path); in find_first_block_group()
9283 btrfs_create_block_group_cache(struct btrfs_root *root, u64 start, u64 size) in btrfs_create_block_group_cache() argument
9302 cache->sectorsize = root->sectorsize; in btrfs_create_block_group_cache()
9303 cache->fs_info = root->fs_info; in btrfs_create_block_group_cache()
9304 cache->full_stripe_len = btrfs_full_stripe_len(root, in btrfs_create_block_group_cache()
9305 &root->fs_info->mapping_tree, in btrfs_create_block_group_cache()
9322 int btrfs_read_block_groups(struct btrfs_root *root) in btrfs_read_block_groups() argument
9327 struct btrfs_fs_info *info = root->fs_info; in btrfs_read_block_groups()
9335 root = info->extent_root; in btrfs_read_block_groups()
9344 cache_gen = btrfs_super_cache_generation(root->fs_info->super_copy); in btrfs_read_block_groups()
9345 if (btrfs_test_opt(root, SPACE_CACHE) && in btrfs_read_block_groups()
9346 btrfs_super_generation(root->fs_info->super_copy) != cache_gen) in btrfs_read_block_groups()
9348 if (btrfs_test_opt(root, CLEAR_CACHE)) in btrfs_read_block_groups()
9352 ret = find_first_block_group(root, path, &key); in btrfs_read_block_groups()
9361 cache = btrfs_create_block_group_cache(root, found_key.objectid, in btrfs_read_block_groups()
9379 if (btrfs_test_opt(root, SPACE_CACHE)) in btrfs_read_block_groups()
9396 ret = exclude_super_stripes(root, cache); in btrfs_read_block_groups()
9402 free_excluded_extents(root, cache); in btrfs_read_block_groups()
9417 free_excluded_extents(root, cache); in btrfs_read_block_groups()
9421 add_new_free_space(cache, root->fs_info, in btrfs_read_block_groups()
9425 free_excluded_extents(root, cache); in btrfs_read_block_groups()
9428 ret = btrfs_add_block_group_cache(root->fs_info, cache); in btrfs_read_block_groups()
9456 set_avail_alloc_bits(root->fs_info, cache->flags); in btrfs_read_block_groups()
9457 if (btrfs_chunk_readonly(root, cache->key.objectid)) { in btrfs_read_block_groups()
9471 list_for_each_entry_rcu(space_info, &root->fs_info->space_info, list) { in btrfs_read_block_groups()
9472 if (!(get_alloc_profile(root, space_info->flags) & in btrfs_read_block_groups()
9501 struct btrfs_root *root) in btrfs_create_pending_block_groups() argument
9504 struct btrfs_root *extent_root = root->fs_info->extent_root; in btrfs_create_pending_block_groups()
9532 struct btrfs_root *root, u64 bytes_used, in btrfs_make_block_group() argument
9540 extent_root = root->fs_info->extent_root; in btrfs_make_block_group()
9542 btrfs_set_log_full_commit(root->fs_info, trans); in btrfs_make_block_group()
9544 cache = btrfs_create_block_group_cache(root, chunk_offset, size); in btrfs_make_block_group()
9555 ret = exclude_super_stripes(root, cache); in btrfs_make_block_group()
9561 free_excluded_extents(root, cache); in btrfs_make_block_group()
9566 add_new_free_space(cache, root->fs_info, chunk_offset, in btrfs_make_block_group()
9569 free_excluded_extents(root, cache); in btrfs_make_block_group()
9571 ret = btrfs_add_block_group_cache(root->fs_info, cache); in btrfs_make_block_group()
9578 ret = update_space_info(root->fs_info, cache->flags, size, bytes_used, in btrfs_make_block_group()
9582 spin_lock(&root->fs_info->block_group_cache_lock); in btrfs_make_block_group()
9584 &root->fs_info->block_group_cache_tree); in btrfs_make_block_group()
9586 spin_unlock(&root->fs_info->block_group_cache_lock); in btrfs_make_block_group()
9590 update_global_block_rsv(root->fs_info); in btrfs_make_block_group()
9621 struct btrfs_root *root, u64 group_start, in btrfs_remove_block_group() argument
9627 struct btrfs_root *tree_root = root->fs_info->tree_root; in btrfs_remove_block_group()
9637 root = root->fs_info->extent_root; in btrfs_remove_block_group()
9639 block_group = btrfs_lookup_block_group(root->fs_info, group_start); in btrfs_remove_block_group()
9647 free_excluded_extents(root, block_group); in btrfs_remove_block_group()
9659 cluster = &root->fs_info->data_alloc_cluster; in btrfs_remove_block_group()
9668 cluster = &root->fs_info->meta_alloc_cluster; in btrfs_remove_block_group()
9697 btrfs_wait_cache_io(root, trans, block_group, in btrfs_remove_block_group()
9748 spin_lock(&root->fs_info->block_group_cache_lock); in btrfs_remove_block_group()
9750 &root->fs_info->block_group_cache_tree); in btrfs_remove_block_group()
9753 if (root->fs_info->first_logical_byte == block_group->key.objectid) in btrfs_remove_block_group()
9754 root->fs_info->first_logical_byte = (u64)-1; in btrfs_remove_block_group()
9755 spin_unlock(&root->fs_info->block_group_cache_lock); in btrfs_remove_block_group()
9766 clear_avail_alloc_bits(root->fs_info, block_group->flags); in btrfs_remove_block_group()
9779 down_write(&root->fs_info->commit_root_sem); in btrfs_remove_block_group()
9784 &root->fs_info->caching_block_groups, list) in btrfs_remove_block_group()
9793 up_write(&root->fs_info->commit_root_sem); in btrfs_remove_block_group()
9814 if (btrfs_test_opt(root, ENOSPC_DEBUG)) { in btrfs_remove_block_group()
9830 lock_chunks(root); in btrfs_remove_block_group()
9873 list_move_tail(&em->list, &root->fs_info->pinned_chunks); in btrfs_remove_block_group()
9880 em_tree = &root->fs_info->mapping_tree.map_tree; in btrfs_remove_block_group()
9893 unlock_chunks(root); in btrfs_remove_block_group()
9898 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in btrfs_remove_block_group()
9904 ret = btrfs_del_item(trans, root, path); in btrfs_remove_block_group()
9918 struct btrfs_root *root = fs_info->extent_root; in btrfs_delete_unused_bgs() local
9971 trans = btrfs_start_transaction(root, 1); in btrfs_delete_unused_bgs()
9973 btrfs_set_block_group_rw(root, block_group); in btrfs_delete_unused_bgs()
10000 btrfs_set_block_group_rw(root, block_group); in btrfs_delete_unused_bgs()
10007 btrfs_set_block_group_rw(root, block_group); in btrfs_delete_unused_bgs()
10029 ret = btrfs_remove_chunk(trans, root, in btrfs_delete_unused_bgs()
10032 btrfs_end_transaction(trans, root); in btrfs_delete_unused_bgs()
10078 int btrfs_error_unpin_extent_range(struct btrfs_root *root, u64 start, u64 end) in btrfs_error_unpin_extent_range() argument
10080 return unpin_extent_range(root, start, end, false); in btrfs_error_unpin_extent_range()
10083 int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range) in btrfs_trim_fs() argument
10085 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_trim_fs()
10153 void btrfs_end_write_no_snapshoting(struct btrfs_root *root) in btrfs_end_write_no_snapshoting() argument
10155 percpu_counter_dec(&root->subv_writers->counter); in btrfs_end_write_no_snapshoting()
10161 if (waitqueue_active(&root->subv_writers->wait)) in btrfs_end_write_no_snapshoting()
10162 wake_up(&root->subv_writers->wait); in btrfs_end_write_no_snapshoting()
10165 int btrfs_start_write_no_snapshoting(struct btrfs_root *root) in btrfs_start_write_no_snapshoting() argument
10167 if (atomic_read(&root->will_be_snapshoted)) in btrfs_start_write_no_snapshoting()
10170 percpu_counter_inc(&root->subv_writers->counter); in btrfs_start_write_no_snapshoting()
10175 if (atomic_read(&root->will_be_snapshoted)) { in btrfs_start_write_no_snapshoting()
10176 btrfs_end_write_no_snapshoting(root); in btrfs_start_write_no_snapshoting()