Lines Matching refs:root

78 			      struct btrfs_root *root, u64 bytenr,
81 struct btrfs_root *root,
90 struct btrfs_root *root,
95 struct btrfs_root *root,
111 int btrfs_pin_extent(struct btrfs_root *root,
228 static int add_excluded_extent(struct btrfs_root *root, in add_excluded_extent() argument
232 set_extent_bits(&root->fs_info->freed_extents[0], in add_excluded_extent()
234 set_extent_bits(&root->fs_info->freed_extents[1], in add_excluded_extent()
239 static void free_excluded_extents(struct btrfs_root *root, in free_excluded_extents() argument
247 clear_extent_bits(&root->fs_info->freed_extents[0], in free_excluded_extents()
249 clear_extent_bits(&root->fs_info->freed_extents[1], in free_excluded_extents()
253 static int exclude_super_stripes(struct btrfs_root *root, in exclude_super_stripes() argument
264 ret = add_excluded_extent(root, cache->key.objectid, in exclude_super_stripes()
272 ret = btrfs_rmap_block(&root->fs_info->mapping_tree, in exclude_super_stripes()
299 ret = add_excluded_extent(root, start, len); in exclude_super_stripes()
335 static void fragment_free_space(struct btrfs_root *root, in fragment_free_space() argument
341 root->nodesize : root->sectorsize; in fragment_free_space()
777 int btrfs_lookup_data_extent(struct btrfs_root *root, u64 start, u64 len) in btrfs_lookup_data_extent() argument
790 ret = btrfs_search_slot(NULL, root->fs_info->extent_root, &key, path, in btrfs_lookup_data_extent()
806 struct btrfs_root *root, u64 bytenr, in btrfs_lookup_extent_info() argument
824 if (metadata && !btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) { in btrfs_lookup_extent_info()
825 offset = root->nodesize; in btrfs_lookup_extent_info()
846 ret = btrfs_search_slot(trans, root->fs_info->extent_root, in btrfs_lookup_extent_info()
858 key.offset == root->nodesize) in btrfs_lookup_extent_info()
1043 struct btrfs_root *root, in convert_extent_item_v0() argument
1069 ret = btrfs_next_leaf(root, path); in convert_extent_item_v0()
1094 ret = btrfs_search_slot(trans, root, &key, path, in convert_extent_item_v0()
1100 btrfs_extend_item(root, path, new_size); in convert_extent_item_v0()
1159 struct btrfs_root *root, in lookup_extent_data_ref() argument
1184 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
1196 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
1211 ret = btrfs_next_leaf(root, path); in lookup_extent_data_ref()
1246 struct btrfs_root *root, in insert_extent_data_ref() argument
1270 ret = btrfs_insert_empty_item(trans, root, path, &key, size); in insert_extent_data_ref()
1296 ret = btrfs_insert_empty_item(trans, root, path, &key, in insert_extent_data_ref()
1325 struct btrfs_root *root, in remove_extent_data_ref() argument
1362 ret = btrfs_del_item(trans, root, path); in remove_extent_data_ref()
1424 struct btrfs_root *root, in lookup_tree_block_ref() argument
1441 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
1448 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
1457 struct btrfs_root *root, in insert_tree_block_ref() argument
1474 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in insert_tree_block_ref()
1532 struct btrfs_root *root, in lookup_inline_extent_backref() argument
1552 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in lookup_inline_extent_backref()
1576 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1); in lookup_inline_extent_backref()
1622 ret = convert_extent_item_v0(trans, root, path, owner, in lookup_inline_extent_backref()
1694 BTRFS_MAX_EXTENT_ITEM_SIZE(root)) { in lookup_inline_extent_backref()
1724 void setup_inline_extent_backref(struct btrfs_root *root, in setup_inline_extent_backref() argument
1747 btrfs_extend_item(root, path, size); in setup_inline_extent_backref()
1785 struct btrfs_root *root, in lookup_extent_backref() argument
1793 ret = lookup_inline_extent_backref(trans, root, path, ref_ret, in lookup_extent_backref()
1803 ret = lookup_tree_block_ref(trans, root, path, bytenr, parent, in lookup_extent_backref()
1806 ret = lookup_extent_data_ref(trans, root, path, bytenr, parent, in lookup_extent_backref()
1816 void update_inline_extent_backref(struct btrfs_root *root, in update_inline_extent_backref() argument
1874 btrfs_truncate_item(root, path, item_size, 1); in update_inline_extent_backref()
1881 struct btrfs_root *root, in insert_inline_extent_backref() argument
1891 ret = lookup_inline_extent_backref(trans, root, path, &iref, in insert_inline_extent_backref()
1896 update_inline_extent_backref(root, path, iref, in insert_inline_extent_backref()
1899 setup_inline_extent_backref(root, path, iref, parent, in insert_inline_extent_backref()
1908 struct btrfs_root *root, in insert_extent_backref() argument
1916 ret = insert_tree_block_ref(trans, root, path, bytenr, in insert_extent_backref()
1919 ret = insert_extent_data_ref(trans, root, path, bytenr, in insert_extent_backref()
1927 struct btrfs_root *root, in remove_extent_backref() argument
1936 update_inline_extent_backref(root, path, iref, in remove_extent_backref()
1939 ret = remove_extent_data_ref(trans, root, path, refs_to_drop, in remove_extent_backref()
1943 ret = btrfs_del_item(trans, root, path); in remove_extent_backref()
2021 int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr, in btrfs_discard_extent() argument
2030 ret = btrfs_map_block(root->fs_info, REQ_DISCARD, in btrfs_discard_extent()
2073 struct btrfs_root *root, in btrfs_inc_extent_ref() argument
2078 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_inc_extent_ref()
2098 struct btrfs_root *root, in __btrfs_inc_extent_ref() argument
2104 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_inc_extent_ref()
2147 ret = insert_extent_backref(trans, root->fs_info->extent_root, in __btrfs_inc_extent_ref()
2151 btrfs_abort_transaction(trans, root, ret); in __btrfs_inc_extent_ref()
2158 struct btrfs_root *root, in run_delayed_data_ref() argument
2179 ref_root = ref->root; in run_delayed_data_ref()
2184 ret = alloc_reserved_file_extent(trans, root, in run_delayed_data_ref()
2189 ret = __btrfs_inc_extent_ref(trans, root, node, parent, in run_delayed_data_ref()
2194 ret = __btrfs_free_extent(trans, root, node, parent, in run_delayed_data_ref()
2223 struct btrfs_root *root, in run_delayed_extent_op() argument
2239 if (metadata && !btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) in run_delayed_extent_op()
2259 ret = btrfs_search_slot(trans, root->fs_info->extent_root, &key, in run_delayed_extent_op()
2295 ret = convert_extent_item_v0(trans, root->fs_info->extent_root, in run_delayed_extent_op()
2316 struct btrfs_root *root, in run_delayed_tree_ref() argument
2326 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in run_delayed_tree_ref()
2334 ref_root = ref->root; in run_delayed_tree_ref()
2348 ret = alloc_reserved_tree_block(trans, root, in run_delayed_tree_ref()
2354 ret = __btrfs_inc_extent_ref(trans, root, node, in run_delayed_tree_ref()
2359 ret = __btrfs_free_extent(trans, root, node, in run_delayed_tree_ref()
2370 struct btrfs_root *root, in run_one_delayed_ref() argument
2379 btrfs_pin_extent(root, node->bytenr, in run_one_delayed_ref()
2397 btrfs_pin_extent(root, node->bytenr, in run_one_delayed_ref()
2400 ret = btrfs_del_csums(trans, root, in run_one_delayed_ref()
2407 btrfs_qgroup_free_delayed_ref(root->fs_info, in run_one_delayed_ref()
2415 ret = run_delayed_tree_ref(trans, root, node, extent_op, in run_one_delayed_ref()
2419 ret = run_delayed_data_ref(trans, root, node, extent_op, in run_one_delayed_ref()
2454 struct btrfs_root *root, in __btrfs_run_delayed_refs() argument
2461 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_run_delayed_refs()
2560 ret = run_delayed_extent_op(trans, root, in __btrfs_run_delayed_refs()
2626 ret = run_one_delayed_ref(trans, root, ref, extent_op, in __btrfs_run_delayed_refs()
2686 static u64 find_middle(struct rb_root *root) in find_middle() argument
2688 struct rb_node *n = root->rb_node; in find_middle()
2694 n = rb_first(root); in find_middle()
2699 n = rb_last(root); in find_middle()
2704 n = root->rb_node; in find_middle()
2723 static inline u64 heads_to_leaves(struct btrfs_root *root, u64 heads) in heads_to_leaves() argument
2729 if (!btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) in heads_to_leaves()
2736 return div_u64(num_bytes, BTRFS_LEAF_DATA_SIZE(root)); in heads_to_leaves()
2743 u64 btrfs_csum_bytes_to_leaves(struct btrfs_root *root, u64 csum_bytes) in btrfs_csum_bytes_to_leaves() argument
2749 csum_size = BTRFS_LEAF_DATA_SIZE(root) - sizeof(struct btrfs_item); in btrfs_csum_bytes_to_leaves()
2751 (u64)btrfs_super_csum_size(root->fs_info->super_copy)); in btrfs_csum_bytes_to_leaves()
2752 num_csums = div64_u64(csum_bytes, root->sectorsize); in btrfs_csum_bytes_to_leaves()
2759 struct btrfs_root *root) in btrfs_check_space_for_delayed_refs() argument
2768 num_bytes = btrfs_calc_trans_metadata_size(root, 1); in btrfs_check_space_for_delayed_refs()
2769 num_heads = heads_to_leaves(root, num_heads); in btrfs_check_space_for_delayed_refs()
2771 num_bytes += (num_heads - 1) * root->nodesize; in btrfs_check_space_for_delayed_refs()
2773 num_bytes += btrfs_csum_bytes_to_leaves(root, csum_bytes) * root->nodesize; in btrfs_check_space_for_delayed_refs()
2774 num_dirty_bgs_bytes = btrfs_calc_trans_metadata_size(root, in btrfs_check_space_for_delayed_refs()
2776 global_rsv = &root->fs_info->global_block_rsv; in btrfs_check_space_for_delayed_refs()
2795 struct btrfs_root *root) in btrfs_should_throttle_delayed_refs() argument
2797 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_should_throttle_delayed_refs()
2811 return btrfs_check_space_for_delayed_refs(trans, root); in btrfs_should_throttle_delayed_refs()
2815 struct btrfs_root *root; member
2831 trans = btrfs_join_transaction(async->root); in delayed_ref_async_start()
2842 ret = btrfs_run_delayed_refs(trans, async->root, async->count); in delayed_ref_async_start()
2846 ret = btrfs_end_transaction(trans, async->root); in delayed_ref_async_start()
2856 int btrfs_async_run_delayed_refs(struct btrfs_root *root, in btrfs_async_run_delayed_refs() argument
2866 async->root = root->fs_info->tree_root; in btrfs_async_run_delayed_refs()
2878 btrfs_queue_work(root->fs_info->extent_workers, &async->work); in btrfs_async_run_delayed_refs()
2900 struct btrfs_root *root, unsigned long count) in btrfs_run_delayed_refs() argument
2913 if (root == root->fs_info->extent_root) in btrfs_run_delayed_refs()
2914 root = root->fs_info->tree_root; in btrfs_run_delayed_refs()
2922 delayed_refs->run_delayed_start = find_middle(&delayed_refs->root); in btrfs_run_delayed_refs()
2925 ret = __btrfs_run_delayed_refs(trans, root, count); in btrfs_run_delayed_refs()
2927 btrfs_abort_transaction(trans, root, ret); in btrfs_run_delayed_refs()
2933 btrfs_create_pending_block_groups(trans, root); in btrfs_run_delayed_refs()
2979 struct btrfs_root *root, in btrfs_set_disk_extent_flags() argument
2996 ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr, in btrfs_set_disk_extent_flags()
3004 struct btrfs_root *root, in check_delayed_ref() argument
3053 if (data_ref->root != root->root_key.objectid || in check_delayed_ref()
3066 struct btrfs_root *root, in check_committed_ref() argument
3070 struct btrfs_root *extent_root = root->fs_info->extent_root; in check_committed_ref()
3114 btrfs_root_last_snapshot(&root->root_item)) in check_committed_ref()
3126 root->root_key.objectid || in check_committed_ref()
3137 struct btrfs_root *root, in btrfs_cross_ref_exist() argument
3149 ret = check_committed_ref(trans, root, path, objectid, in btrfs_cross_ref_exist()
3154 ret2 = check_delayed_ref(trans, root, path, objectid, in btrfs_cross_ref_exist()
3167 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID) in btrfs_cross_ref_exist()
3173 struct btrfs_root *root, in __btrfs_mod_ref() argument
3191 if (btrfs_test_is_dummy_root(root)) in __btrfs_mod_ref()
3198 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0) in __btrfs_mod_ref()
3227 ret = process_func(trans, root, bytenr, num_bytes, in __btrfs_mod_ref()
3234 num_bytes = root->nodesize; in __btrfs_mod_ref()
3235 ret = process_func(trans, root, bytenr, num_bytes, in __btrfs_mod_ref()
3246 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_inc_ref() argument
3249 return __btrfs_mod_ref(trans, root, buf, full_backref, 1); in btrfs_inc_ref()
3252 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_dec_ref() argument
3255 return __btrfs_mod_ref(trans, root, buf, full_backref, 0); in btrfs_dec_ref()
3259 struct btrfs_root *root, in write_one_cache_group() argument
3264 struct btrfs_root *extent_root = root->fs_info->extent_root; in write_one_cache_group()
3286 next_block_group(struct btrfs_root *root, in next_block_group() argument
3291 spin_lock(&root->fs_info->block_group_cache_lock); in next_block_group()
3297 spin_unlock(&root->fs_info->block_group_cache_lock); in next_block_group()
3299 cache = btrfs_lookup_first_block_group(root->fs_info, in next_block_group()
3311 spin_unlock(&root->fs_info->block_group_cache_lock); in next_block_group()
3319 struct btrfs_root *root = block_group->fs_info->tree_root; in cache_save_setup() local
3341 inode = lookup_free_space_inode(root, block_group, path); in cache_save_setup()
3355 ret = create_free_space_inode(root, trans, block_group, path); in cache_save_setup()
3374 ret = btrfs_update_inode(trans, root, inode); in cache_save_setup()
3386 btrfs_abort_transaction(trans, root, ret); in cache_save_setup()
3392 ret = btrfs_check_trunc_cache_free_space(root, in cache_save_setup()
3393 &root->fs_info->global_block_rsv); in cache_save_setup()
3397 ret = btrfs_truncate_free_space_cache(root, trans, NULL, inode); in cache_save_setup()
3404 !btrfs_test_opt(root, SPACE_CACHE)) { in cache_save_setup()
3474 struct btrfs_root *root) in btrfs_setup_space_cache() argument
3481 !btrfs_test_opt(root, SPACE_CACHE)) in btrfs_setup_space_cache()
3512 struct btrfs_root *root) in btrfs_start_dirty_block_groups() argument
3537 btrfs_create_pending_block_groups(trans, root); in btrfs_start_dirty_block_groups()
3562 btrfs_wait_cache_io(root, trans, cache, in btrfs_start_dirty_block_groups()
3587 ret = btrfs_write_out_cache(root, trans, cache, path); in btrfs_start_dirty_block_groups()
3606 ret = write_one_cache_group(trans, root, path, cache); in btrfs_start_dirty_block_groups()
3626 btrfs_abort_transaction(trans, root, ret); in btrfs_start_dirty_block_groups()
3651 ret = btrfs_run_delayed_refs(trans, root, 0); in btrfs_start_dirty_block_groups()
3672 struct btrfs_root *root) in btrfs_write_dirty_block_groups() argument
3704 btrfs_wait_cache_io(root, trans, cache, in btrfs_write_dirty_block_groups()
3720 ret = btrfs_run_delayed_refs(trans, root, (unsigned long) -1); in btrfs_write_dirty_block_groups()
3724 ret = btrfs_write_out_cache(root, trans, cache, path); in btrfs_write_dirty_block_groups()
3738 ret = write_one_cache_group(trans, root, path, cache); in btrfs_write_dirty_block_groups()
3740 btrfs_abort_transaction(trans, root, ret); in btrfs_write_dirty_block_groups()
3752 btrfs_wait_cache_io(root, trans, cache, in btrfs_write_dirty_block_groups()
3761 int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr) in btrfs_extent_readonly() argument
3766 block_group = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_extent_readonly()
3916 static u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags) in btrfs_reduce_alloc_profile() argument
3918 u64 num_devices = root->fs_info->fs_devices->rw_devices; in btrfs_reduce_alloc_profile()
3927 spin_lock(&root->fs_info->balance_lock); in btrfs_reduce_alloc_profile()
3928 target = get_restripe_target(root->fs_info, flags); in btrfs_reduce_alloc_profile()
3932 spin_unlock(&root->fs_info->balance_lock); in btrfs_reduce_alloc_profile()
3936 spin_unlock(&root->fs_info->balance_lock); in btrfs_reduce_alloc_profile()
3961 static u64 get_alloc_profile(struct btrfs_root *root, u64 orig_flags) in get_alloc_profile() argument
3968 seq = read_seqbegin(&root->fs_info->profiles_lock); in get_alloc_profile()
3971 flags |= root->fs_info->avail_data_alloc_bits; in get_alloc_profile()
3973 flags |= root->fs_info->avail_system_alloc_bits; in get_alloc_profile()
3975 flags |= root->fs_info->avail_metadata_alloc_bits; in get_alloc_profile()
3976 } while (read_seqretry(&root->fs_info->profiles_lock, seq)); in get_alloc_profile()
3978 return btrfs_reduce_alloc_profile(root, flags); in get_alloc_profile()
3981 u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data) in btrfs_get_alloc_profile() argument
3988 else if (root == root->fs_info->chunk_root) in btrfs_get_alloc_profile()
3993 ret = get_alloc_profile(root, flags); in btrfs_get_alloc_profile()
4000 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_alloc_data_chunk_ondemand() local
4001 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_alloc_data_chunk_ondemand()
4008 bytes = ALIGN(bytes, root->sectorsize); in btrfs_alloc_data_chunk_ondemand()
4039 alloc_target = btrfs_get_alloc_profile(root, 1); in btrfs_alloc_data_chunk_ondemand()
4050 trans = btrfs_join_transaction(root); in btrfs_alloc_data_chunk_ondemand()
4054 ret = do_chunk_alloc(trans, root->fs_info->extent_root, in btrfs_alloc_data_chunk_ondemand()
4057 btrfs_end_transaction(trans, root); in btrfs_alloc_data_chunk_ondemand()
4086 !atomic_read(&root->fs_info->open_ioctl_trans)) { in btrfs_alloc_data_chunk_ondemand()
4094 trans = btrfs_join_transaction(root); in btrfs_alloc_data_chunk_ondemand()
4101 ret = btrfs_commit_transaction(trans, root); in btrfs_alloc_data_chunk_ondemand()
4109 mutex_lock(&root->fs_info->cleaner_delayed_iput_mutex); in btrfs_alloc_data_chunk_ondemand()
4110 mutex_unlock(&root->fs_info->cleaner_delayed_iput_mutex); in btrfs_alloc_data_chunk_ondemand()
4113 btrfs_end_transaction(trans, root); in btrfs_alloc_data_chunk_ondemand()
4117 trace_btrfs_space_reservation(root->fs_info, in btrfs_alloc_data_chunk_ondemand()
4123 trace_btrfs_space_reservation(root->fs_info, "space_info", in btrfs_alloc_data_chunk_ondemand()
4137 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_check_data_free_space() local
4141 len = round_up(start + len, root->sectorsize) - in btrfs_check_data_free_space()
4142 round_down(start, root->sectorsize); in btrfs_check_data_free_space()
4143 start = round_down(start, root->sectorsize); in btrfs_check_data_free_space()
4170 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_free_reserved_data_space_noquota() local
4174 len = round_up(start + len, root->sectorsize) - in btrfs_free_reserved_data_space_noquota()
4175 round_down(start, root->sectorsize); in btrfs_free_reserved_data_space_noquota()
4176 start = round_down(start, root->sectorsize); in btrfs_free_reserved_data_space_noquota()
4178 data_sinfo = root->fs_info->data_sinfo; in btrfs_free_reserved_data_space_noquota()
4184 trace_btrfs_space_reservation(root->fs_info, "space_info", in btrfs_free_reserved_data_space_noquota()
4220 static int should_alloc_chunk(struct btrfs_root *root, in should_alloc_chunk() argument
4223 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in should_alloc_chunk()
4244 thresh = btrfs_super_total_bytes(root->fs_info->super_copy); in should_alloc_chunk()
4257 static u64 get_profile_num_devs(struct btrfs_root *root, u64 type) in get_profile_num_devs() argument
4265 num_dev = root->fs_info->fs_devices->rw_devices; in get_profile_num_devs()
4280 struct btrfs_root *root, in check_system_chunk() argument
4293 ASSERT(mutex_is_locked(&root->fs_info->chunk_mutex)); in check_system_chunk()
4295 info = __find_space_info(root->fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in check_system_chunk()
4302 num_devs = get_profile_num_devs(root, type); in check_system_chunk()
4305 thresh = btrfs_calc_trunc_metadata_size(root, num_devs) + in check_system_chunk()
4306 btrfs_calc_trans_metadata_size(root, 1); in check_system_chunk()
4308 if (left < thresh && btrfs_test_opt(root, ENOSPC_DEBUG)) { in check_system_chunk()
4309 btrfs_info(root->fs_info, "left=%llu, need=%llu, flags=%llu", in check_system_chunk()
4317 flags = btrfs_get_alloc_profile(root->fs_info->chunk_root, 0); in check_system_chunk()
4324 ret = btrfs_alloc_chunk(trans, root, flags); in check_system_chunk()
4328 ret = btrfs_block_rsv_add(root->fs_info->chunk_root, in check_system_chunk()
4329 &root->fs_info->chunk_block_rsv, in check_system_chunk()
4453 btrfs_create_pending_block_groups(trans, trans->root); in do_chunk_alloc()
4459 static int can_overcommit(struct btrfs_root *root, in can_overcommit() argument
4463 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in can_overcommit()
4464 u64 profile = btrfs_get_alloc_profile(root, 0); in can_overcommit()
4486 spin_lock(&root->fs_info->free_chunk_lock); in can_overcommit()
4487 avail = root->fs_info->free_chunk_space; in can_overcommit()
4488 spin_unlock(&root->fs_info->free_chunk_lock); in can_overcommit()
4516 static void btrfs_writeback_inodes_sb_nr(struct btrfs_root *root, in btrfs_writeback_inodes_sb_nr() argument
4519 struct super_block *sb = root->fs_info->sb; in btrfs_writeback_inodes_sb_nr()
4532 btrfs_start_delalloc_roots(root->fs_info, 0, nr_items); in btrfs_writeback_inodes_sb_nr()
4534 btrfs_wait_ordered_roots(root->fs_info, nr_items); in btrfs_writeback_inodes_sb_nr()
4538 static inline int calc_reclaim_items_nr(struct btrfs_root *root, u64 to_reclaim) in calc_reclaim_items_nr() argument
4543 bytes = btrfs_calc_trans_metadata_size(root, 1); in calc_reclaim_items_nr()
4555 static void shrink_delalloc(struct btrfs_root *root, u64 to_reclaim, u64 orig, in shrink_delalloc() argument
4570 items = calc_reclaim_items_nr(root, to_reclaim); in shrink_delalloc()
4574 block_rsv = &root->fs_info->delalloc_block_rsv; in shrink_delalloc()
4578 &root->fs_info->delalloc_bytes); in shrink_delalloc()
4583 btrfs_wait_ordered_roots(root->fs_info, items); in shrink_delalloc()
4591 btrfs_writeback_inodes_sb_nr(root, nr_pages, items); in shrink_delalloc()
4596 max_reclaim = atomic_read(&root->fs_info->async_delalloc_pages); in shrink_delalloc()
4605 wait_event(root->fs_info->async_submit_wait, in shrink_delalloc()
4606 atomic_read(&root->fs_info->async_delalloc_pages) <= in shrink_delalloc()
4614 if (can_overcommit(root, space_info, orig, flush)) { in shrink_delalloc()
4622 btrfs_wait_ordered_roots(root->fs_info, items); in shrink_delalloc()
4629 &root->fs_info->delalloc_bytes); in shrink_delalloc()
4643 static int may_commit_transaction(struct btrfs_root *root, in may_commit_transaction() argument
4647 struct btrfs_block_rsv *delayed_rsv = &root->fs_info->delayed_block_rsv; in may_commit_transaction()
4678 trans = btrfs_join_transaction(root); in may_commit_transaction()
4682 return btrfs_commit_transaction(trans, root); in may_commit_transaction()
4694 static int flush_space(struct btrfs_root *root, in flush_space() argument
4706 nr = calc_reclaim_items_nr(root, num_bytes) * 2; in flush_space()
4710 trans = btrfs_join_transaction(root); in flush_space()
4715 ret = btrfs_run_delayed_items_nr(trans, root, nr); in flush_space()
4716 btrfs_end_transaction(trans, root); in flush_space()
4720 shrink_delalloc(root, num_bytes * 2, orig_bytes, in flush_space()
4724 trans = btrfs_join_transaction(root); in flush_space()
4729 ret = do_chunk_alloc(trans, root->fs_info->extent_root, in flush_space()
4730 btrfs_get_alloc_profile(root, 0), in flush_space()
4732 btrfs_end_transaction(trans, root); in flush_space()
4737 ret = may_commit_transaction(root, space_info, orig_bytes, 0); in flush_space()
4748 btrfs_calc_reclaim_metadata_size(struct btrfs_root *root, in btrfs_calc_reclaim_metadata_size() argument
4758 if (can_overcommit(root, space_info, to_reclaim, in btrfs_calc_reclaim_metadata_size()
4767 if (can_overcommit(root, space_info, 1024 * 1024, in btrfs_calc_reclaim_metadata_size()
4871 static int reserve_metadata_bytes(struct btrfs_root *root, in reserve_metadata_bytes() argument
4924 trace_btrfs_space_reservation(root->fs_info, in reserve_metadata_bytes()
4945 if (ret && can_overcommit(root, space_info, orig_bytes, flush)) { in reserve_metadata_bytes()
4947 trace_btrfs_space_reservation(root->fs_info, "space_info", in reserve_metadata_bytes()
4971 if (!root->fs_info->log_root_recovering && in reserve_metadata_bytes()
4972 need_do_async_reclaim(space_info, root->fs_info, used) && in reserve_metadata_bytes()
4973 !work_busy(&root->fs_info->async_reclaim_work)) in reserve_metadata_bytes()
4975 &root->fs_info->async_reclaim_work); in reserve_metadata_bytes()
4982 ret = flush_space(root, space_info, num_bytes, orig_bytes, in reserve_metadata_bytes()
5006 unlikely(root->orphan_cleanup_state == ORPHAN_CLEANUP_STARTED)) { in reserve_metadata_bytes()
5008 &root->fs_info->global_block_rsv; in reserve_metadata_bytes()
5015 trace_btrfs_space_reservation(root->fs_info, in reserve_metadata_bytes()
5029 const struct btrfs_root *root) in get_block_rsv() argument
5033 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) || in get_block_rsv()
5034 (root == root->fs_info->csum_root && trans->adding_csums) || in get_block_rsv()
5035 (root == root->fs_info->uuid_root)) in get_block_rsv()
5039 block_rsv = root->block_rsv; in get_block_rsv()
5042 block_rsv = &root->fs_info->empty_block_rsv; in get_block_rsv()
5163 struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root, in btrfs_alloc_block_rsv() argument
5167 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_alloc_block_rsv()
5179 void btrfs_free_block_rsv(struct btrfs_root *root, in btrfs_free_block_rsv() argument
5184 btrfs_block_rsv_release(root, rsv, (u64)-1); in btrfs_free_block_rsv()
5193 int btrfs_block_rsv_add(struct btrfs_root *root, in btrfs_block_rsv_add() argument
5202 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
5211 int btrfs_block_rsv_check(struct btrfs_root *root, in btrfs_block_rsv_check() argument
5229 int btrfs_block_rsv_refill(struct btrfs_root *root, in btrfs_block_rsv_refill() argument
5250 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
5266 void btrfs_block_rsv_release(struct btrfs_root *root, in btrfs_block_rsv_release() argument
5270 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in btrfs_block_rsv_release()
5274 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv, in btrfs_block_rsv_release()
5391 struct btrfs_root *root) in btrfs_trans_release_metadata() argument
5399 trace_btrfs_space_reservation(root->fs_info, "transaction", in btrfs_trans_release_metadata()
5401 btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved); in btrfs_trans_release_metadata()
5411 struct btrfs_fs_info *fs_info = trans->root->fs_info; in btrfs_trans_release_chunk_metadata()
5427 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_orphan_reserve_metadata() local
5428 struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root); in btrfs_orphan_reserve_metadata()
5429 struct btrfs_block_rsv *dst_rsv = root->orphan_block_rsv; in btrfs_orphan_reserve_metadata()
5436 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); in btrfs_orphan_reserve_metadata()
5437 trace_btrfs_space_reservation(root->fs_info, "orphan", in btrfs_orphan_reserve_metadata()
5444 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_orphan_release_metadata() local
5445 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); in btrfs_orphan_release_metadata()
5446 trace_btrfs_space_reservation(root->fs_info, "orphan", in btrfs_orphan_release_metadata()
5448 btrfs_block_rsv_release(root, root->orphan_block_rsv, num_bytes); in btrfs_orphan_release_metadata()
5465 int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, in btrfs_subvolume_reserve_metadata() argument
5473 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in btrfs_subvolume_reserve_metadata()
5475 if (root->fs_info->quota_enabled) { in btrfs_subvolume_reserve_metadata()
5477 num_bytes = 3 * root->nodesize; in btrfs_subvolume_reserve_metadata()
5478 ret = btrfs_qgroup_reserve_meta(root, num_bytes); in btrfs_subvolume_reserve_metadata()
5487 num_bytes = btrfs_calc_trans_metadata_size(root, items); in btrfs_subvolume_reserve_metadata()
5488 rsv->space_info = __find_space_info(root->fs_info, in btrfs_subvolume_reserve_metadata()
5490 ret = btrfs_block_rsv_add(root, rsv, num_bytes, in btrfs_subvolume_reserve_metadata()
5497 btrfs_qgroup_free_meta(root, *qgroup_reserved); in btrfs_subvolume_reserve_metadata()
5502 void btrfs_subvolume_release_metadata(struct btrfs_root *root, in btrfs_subvolume_release_metadata() argument
5506 btrfs_block_rsv_release(root, rsv, (u64)-1); in btrfs_subvolume_release_metadata()
5572 struct btrfs_root *root = BTRFS_I(inode)->root; in calc_csum_metadata_size() local
5579 old_csums = btrfs_csum_bytes_to_leaves(root, BTRFS_I(inode)->csum_bytes); in calc_csum_metadata_size()
5584 num_csums = btrfs_csum_bytes_to_leaves(root, BTRFS_I(inode)->csum_bytes); in calc_csum_metadata_size()
5591 return btrfs_calc_trans_metadata_size(root, in calc_csum_metadata_size()
5594 return btrfs_calc_trans_metadata_size(root, old_csums - num_csums); in calc_csum_metadata_size()
5599 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_delalloc_reserve_metadata() local
5600 struct btrfs_block_rsv *block_rsv = &root->fs_info->delalloc_block_rsv; in btrfs_delalloc_reserve_metadata()
5622 btrfs_transaction_in_commit(root->fs_info)) in btrfs_delalloc_reserve_metadata()
5628 num_bytes = ALIGN(num_bytes, root->sectorsize); in btrfs_delalloc_reserve_metadata()
5652 to_reserve = btrfs_calc_trans_metadata_size(root, nr_extents); in btrfs_delalloc_reserve_metadata()
5657 if (root->fs_info->quota_enabled) { in btrfs_delalloc_reserve_metadata()
5658 ret = btrfs_qgroup_reserve_meta(root, in btrfs_delalloc_reserve_metadata()
5659 nr_extents * root->nodesize); in btrfs_delalloc_reserve_metadata()
5664 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush); in btrfs_delalloc_reserve_metadata()
5666 btrfs_qgroup_free_meta(root, nr_extents * root->nodesize); in btrfs_delalloc_reserve_metadata()
5683 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_delalloc_reserve_metadata()
5741 to_free += btrfs_calc_trans_metadata_size(root, dropped); in btrfs_delalloc_reserve_metadata()
5744 btrfs_block_rsv_release(root, block_rsv, to_free); in btrfs_delalloc_reserve_metadata()
5745 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_delalloc_reserve_metadata()
5764 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_delalloc_release_metadata() local
5768 num_bytes = ALIGN(num_bytes, root->sectorsize); in btrfs_delalloc_release_metadata()
5776 to_free += btrfs_calc_trans_metadata_size(root, dropped); in btrfs_delalloc_release_metadata()
5778 if (btrfs_test_is_dummy_root(root)) in btrfs_delalloc_release_metadata()
5781 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_delalloc_release_metadata()
5784 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv, in btrfs_delalloc_release_metadata()
5848 struct btrfs_root *root, u64 bytenr, in update_block_group() argument
5852 struct btrfs_fs_info *info = root->fs_info; in update_block_group()
5893 if (btrfs_test_opt(root, SPACE_CACHE) && in update_block_group()
5955 static u64 first_logical_byte(struct btrfs_root *root, u64 search_start) in first_logical_byte() argument
5960 spin_lock(&root->fs_info->block_group_cache_lock); in first_logical_byte()
5961 bytenr = root->fs_info->first_logical_byte; in first_logical_byte()
5962 spin_unlock(&root->fs_info->block_group_cache_lock); in first_logical_byte()
5967 cache = btrfs_lookup_first_block_group(root->fs_info, search_start); in first_logical_byte()
5977 static int pin_down_extent(struct btrfs_root *root, in pin_down_extent() argument
5992 set_extent_dirty(root->fs_info->pinned_extents, bytenr, in pin_down_extent()
5995 trace_btrfs_reserved_extent_free(root, bytenr, num_bytes); in pin_down_extent()
6002 int btrfs_pin_extent(struct btrfs_root *root, in btrfs_pin_extent() argument
6007 cache = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_pin_extent()
6010 pin_down_extent(root, cache, bytenr, num_bytes, reserved); in btrfs_pin_extent()
6019 int btrfs_pin_extent_for_log_replay(struct btrfs_root *root, in btrfs_pin_extent_for_log_replay() argument
6025 cache = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_pin_extent_for_log_replay()
6037 pin_down_extent(root, cache, bytenr, num_bytes, 0); in btrfs_pin_extent_for_log_replay()
6045 static int __exclude_logged_extent(struct btrfs_root *root, u64 start, u64 num_bytes) in __exclude_logged_extent() argument
6051 block_group = btrfs_lookup_block_group(root->fs_info, start); in __exclude_logged_extent()
6066 ret = add_excluded_extent(root, start, num_bytes); in __exclude_logged_extent()
6080 ret = add_excluded_extent(root, start, num_bytes); in __exclude_logged_extent()
6181 struct btrfs_root *root) in btrfs_prepare_extent_commit() argument
6183 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_prepare_extent_commit()
6217 fetch_cluster_info(struct btrfs_root *root, struct btrfs_space_info *space_info, in fetch_cluster_info() argument
6221 bool ssd = btrfs_test_opt(root, SSD); in fetch_cluster_info()
6230 ret = &root->fs_info->meta_alloc_cluster; in fetch_cluster_info()
6234 ret = &root->fs_info->data_alloc_cluster; in fetch_cluster_info()
6240 static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end, in unpin_extent_range() argument
6243 struct btrfs_fs_info *fs_info = root->fs_info; in unpin_extent_range()
6263 cluster = fetch_cluster_info(root, in unpin_extent_range()
6327 struct btrfs_root *root) in btrfs_finish_extent_commit() argument
6329 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_finish_extent_commit()
6351 if (btrfs_test_opt(root, DISCARD)) in btrfs_finish_extent_commit()
6352 ret = btrfs_discard_extent(root, start, in btrfs_finish_extent_commit()
6356 unpin_extent_range(root, start, end, true); in btrfs_finish_extent_commit()
6372 ret = btrfs_discard_extent(root, in btrfs_finish_extent_commit()
6414 struct btrfs_root *root, in __btrfs_free_extent() argument
6422 struct btrfs_fs_info *info = root->fs_info; in __btrfs_free_extent()
6437 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in __btrfs_free_extent()
6635 add_pinned_bytes(root->fs_info, -num_bytes, owner_objectid, in __btrfs_free_extent()
6660 ret = btrfs_del_csums(trans, root, bytenr, num_bytes); in __btrfs_free_extent()
6667 ret = update_block_group(trans, root, bytenr, num_bytes, 0); in __btrfs_free_extent()
6687 struct btrfs_root *root, u64 bytenr) in check_ref_cleanup() argument
6753 struct btrfs_root *root, in btrfs_free_tree_block() argument
6760 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { in btrfs_free_tree_block()
6761 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans, in btrfs_free_tree_block()
6763 parent, root->root_key.objectid, in btrfs_free_tree_block()
6775 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { in btrfs_free_tree_block()
6776 ret = check_ref_cleanup(trans, root, buf->start); in btrfs_free_tree_block()
6781 cache = btrfs_lookup_block_group(root->fs_info, buf->start); in btrfs_free_tree_block()
6784 pin_down_extent(root, cache, buf->start, buf->len, 1); in btrfs_free_tree_block()
6794 trace_btrfs_reserved_extent_free(root, buf->start, buf->len); in btrfs_free_tree_block()
6799 add_pinned_bytes(root->fs_info, buf->len, in btrfs_free_tree_block()
6801 root->root_key.objectid); in btrfs_free_tree_block()
6811 int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_free_extent() argument
6816 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_free_extent()
6818 if (btrfs_test_is_dummy_root(root)) in btrfs_free_extent()
6821 add_pinned_bytes(root->fs_info, num_bytes, owner, root_objectid); in btrfs_free_extent()
6830 btrfs_pin_extent(root, bytenr, num_bytes, 1); in btrfs_free_extent()
7023 struct btrfs_root *root = orig_root->fs_info->extent_root; in find_free_extent() local
7041 WARN_ON(num_bytes < root->sectorsize); in find_free_extent()
7048 space_info = __find_space_info(root->fs_info, flags); in find_free_extent()
7050 btrfs_err(root->fs_info, "No space info for %llu", flags); in find_free_extent()
7094 search_start = max(search_start, first_logical_byte(root, 0)); in find_free_extent()
7097 block_group = btrfs_lookup_block_group(root->fs_info, in find_free_extent()
7206 trace_btrfs_reserve_extent_cluster(root, in find_free_extent()
7262 ret = btrfs_find_space_cluster(root, block_group, in find_free_extent()
7279 trace_btrfs_reserve_extent_cluster(root, in find_free_extent()
7351 search_start = ALIGN(offset, root->stripesize); in find_free_extent()
7430 trans = btrfs_join_transaction(root); in find_free_extent()
7437 ret = do_chunk_alloc(trans, root, flags, in find_free_extent()
7454 root, ret); in find_free_extent()
7458 btrfs_end_transaction(trans, root); in find_free_extent()
7538 int btrfs_reserve_extent(struct btrfs_root *root, in btrfs_reserve_extent() argument
7547 flags = btrfs_get_alloc_profile(root, is_data); in btrfs_reserve_extent()
7549 WARN_ON(num_bytes < root->sectorsize); in btrfs_reserve_extent()
7550 ret = find_free_extent(root, num_bytes, empty_size, hint_byte, ins, in btrfs_reserve_extent()
7556 num_bytes = round_down(num_bytes, root->sectorsize); in btrfs_reserve_extent()
7561 } else if (btrfs_test_opt(root, ENOSPC_DEBUG)) { in btrfs_reserve_extent()
7564 sinfo = __find_space_info(root->fs_info, flags); in btrfs_reserve_extent()
7565 btrfs_err(root->fs_info, "allocation failed flags %llu, wanted %llu", in btrfs_reserve_extent()
7575 static int __btrfs_free_reserved_extent(struct btrfs_root *root, in __btrfs_free_reserved_extent() argument
7582 cache = btrfs_lookup_block_group(root->fs_info, start); in __btrfs_free_reserved_extent()
7584 btrfs_err(root->fs_info, "Unable to find block group for %llu", in __btrfs_free_reserved_extent()
7590 pin_down_extent(root, cache, start, len, 1); in __btrfs_free_reserved_extent()
7592 if (btrfs_test_opt(root, DISCARD)) in __btrfs_free_reserved_extent()
7593 ret = btrfs_discard_extent(root, start, len, NULL); in __btrfs_free_reserved_extent()
7600 trace_btrfs_reserved_extent_free(root, start, len); in __btrfs_free_reserved_extent()
7605 int btrfs_free_reserved_extent(struct btrfs_root *root, in btrfs_free_reserved_extent() argument
7608 return __btrfs_free_reserved_extent(root, start, len, 0, delalloc); in btrfs_free_reserved_extent()
7611 int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root, in btrfs_free_and_pin_reserved_extent() argument
7614 return __btrfs_free_reserved_extent(root, start, len, 1, 0); in btrfs_free_and_pin_reserved_extent()
7618 struct btrfs_root *root, in alloc_reserved_file_extent() argument
7624 struct btrfs_fs_info *fs_info = root->fs_info; in alloc_reserved_file_extent()
7678 ret = update_block_group(trans, root, ins->objectid, ins->offset, 1); in alloc_reserved_file_extent()
7684 trace_btrfs_reserved_extent_alloc(root, ins->objectid, ins->offset); in alloc_reserved_file_extent()
7689 struct btrfs_root *root, in alloc_reserved_tree_block() argument
7695 struct btrfs_fs_info *fs_info = root->fs_info; in alloc_reserved_tree_block()
7703 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in alloc_reserved_tree_block()
7711 btrfs_free_and_pin_reserved_extent(root, ins->objectid, in alloc_reserved_tree_block()
7712 root->nodesize); in alloc_reserved_tree_block()
7721 btrfs_free_and_pin_reserved_extent(root, ins->objectid, in alloc_reserved_tree_block()
7722 root->nodesize); in alloc_reserved_tree_block()
7736 num_bytes = root->nodesize; in alloc_reserved_tree_block()
7758 ret = update_block_group(trans, root, ins->objectid, root->nodesize, in alloc_reserved_tree_block()
7766 trace_btrfs_reserved_extent_alloc(root, ins->objectid, root->nodesize); in alloc_reserved_tree_block()
7771 struct btrfs_root *root, in btrfs_alloc_reserved_file_extent() argument
7780 ret = btrfs_add_delayed_data_ref(root->fs_info, trans, ins->objectid, in btrfs_alloc_reserved_file_extent()
7794 struct btrfs_root *root, in btrfs_alloc_logged_file_extent() argument
7805 if (!btrfs_fs_incompat(root->fs_info, MIXED_GROUPS)) { in btrfs_alloc_logged_file_extent()
7806 ret = __exclude_logged_extent(root, ins->objectid, ins->offset); in btrfs_alloc_logged_file_extent()
7811 block_group = btrfs_lookup_block_group(root->fs_info, ins->objectid); in btrfs_alloc_logged_file_extent()
7818 ret = alloc_reserved_file_extent(trans, root, 0, root_objectid, in btrfs_alloc_logged_file_extent()
7825 btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_init_new_buffer() argument
7830 buf = btrfs_find_create_tree_block(root, bytenr); in btrfs_init_new_buffer()
7834 btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level); in btrfs_init_new_buffer()
7836 clean_tree_block(trans, root->fs_info, buf); in btrfs_init_new_buffer()
7842 if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) { in btrfs_init_new_buffer()
7843 buf->log_index = root->log_transid % 2; in btrfs_init_new_buffer()
7849 set_extent_dirty(&root->dirty_log_pages, buf->start, in btrfs_init_new_buffer()
7852 set_extent_new(&root->dirty_log_pages, buf->start, in btrfs_init_new_buffer()
7866 struct btrfs_root *root, u32 blocksize) in use_block_rsv() argument
7869 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; in use_block_rsv()
7873 block_rsv = get_block_rsv(trans, root); in use_block_rsv()
7887 update_global_block_rsv(root->fs_info); in use_block_rsv()
7891 if (btrfs_test_opt(root, ENOSPC_DEBUG)) { in use_block_rsv()
7900 ret = reserve_metadata_bytes(root, block_rsv, blocksize, in use_block_rsv()
7930 struct btrfs_root *root, in btrfs_alloc_tree_block() argument
7941 u32 blocksize = root->nodesize; in btrfs_alloc_tree_block()
7942 bool skinny_metadata = btrfs_fs_incompat(root->fs_info, in btrfs_alloc_tree_block()
7945 if (btrfs_test_is_dummy_root(root)) { in btrfs_alloc_tree_block()
7946 buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr, in btrfs_alloc_tree_block()
7949 root->alloc_bytenr += blocksize; in btrfs_alloc_tree_block()
7953 block_rsv = use_block_rsv(trans, root, blocksize); in btrfs_alloc_tree_block()
7957 ret = btrfs_reserve_extent(root, blocksize, blocksize, in btrfs_alloc_tree_block()
7962 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level); in btrfs_alloc_tree_block()
7994 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans, in btrfs_alloc_tree_block()
8009 btrfs_free_reserved_extent(root, ins.objectid, ins.offset, 0); in btrfs_alloc_tree_block()
8011 unuse_block_rsv(root->fs_info, block_rsv, blocksize); in btrfs_alloc_tree_block()
8033 struct btrfs_root *root, in reada_walk_down() argument
8055 BTRFS_NODEPTRS_PER_BLOCK(root)); in reada_walk_down()
8060 blocksize = root->nodesize; in reada_walk_down()
8074 generation <= root->root_key.offset) in reada_walk_down()
8078 ret = btrfs_lookup_extent_info(trans, root, bytenr, in reada_walk_down()
8094 generation <= root->root_key.offset) in reada_walk_down()
8107 readahead_tree_block(root, bytenr); in reada_walk_down()
8118 struct btrfs_root *root, u64 bytenr, in record_one_subtree_extent() argument
8142 struct btrfs_root *root, in account_leaf_items() argument
8152 if (!root->fs_info->quota_enabled) in account_leaf_items()
8174 ret = record_one_subtree_extent(trans, root, bytenr, num_bytes); in account_leaf_items()
8195 static int adjust_slots_upwards(struct btrfs_root *root, in adjust_slots_upwards() argument
8247 struct btrfs_root *root, in account_shared_subtree() argument
8260 if (!root->fs_info->quota_enabled) in account_shared_subtree()
8270 ret = account_leaf_items(trans, root, root_eb); in account_shared_subtree()
8306 eb = read_tree_block(root, child_bytenr, child_gen); in account_shared_subtree()
8323 ret = record_one_subtree_extent(trans, root, child_bytenr, in account_shared_subtree()
8324 root->nodesize); in account_shared_subtree()
8330 ret = account_leaf_items(trans, root, path->nodes[level]); in account_shared_subtree()
8335 ret = adjust_slots_upwards(root, path, root_level); in account_shared_subtree()
8362 struct btrfs_root *root, in walk_down_proc() argument
8372 btrfs_header_owner(eb) != root->root_key.objectid) in walk_down_proc()
8383 ret = btrfs_lookup_extent_info(trans, root, in walk_down_proc()
8407 ret = btrfs_inc_ref(trans, root, eb, 1); in walk_down_proc()
8409 ret = btrfs_dec_ref(trans, root, eb, 0); in walk_down_proc()
8411 ret = btrfs_set_disk_extent_flags(trans, root, eb->start, in walk_down_proc()
8443 struct btrfs_root *root, in do_walk_down() argument
8466 generation <= root->root_key.offset) { in do_walk_down()
8472 blocksize = root->nodesize; in do_walk_down()
8474 next = btrfs_find_tree_block(root->fs_info, bytenr); in do_walk_down()
8476 next = btrfs_find_create_tree_block(root, bytenr); in do_walk_down()
8479 btrfs_set_buffer_lockdep_class(root->root_key.objectid, next, in do_walk_down()
8486 ret = btrfs_lookup_extent_info(trans, root, bytenr, level - 1, 1, in do_walk_down()
8495 btrfs_err(root->fs_info, "Missing references."); in do_walk_down()
8508 generation <= root->root_key.offset) in do_walk_down()
8535 reada_walk_down(trans, root, wc, path); in do_walk_down()
8536 next = read_tree_block(root, bytenr, generation); in do_walk_down()
8563 BUG_ON(root->root_key.objectid != in do_walk_down()
8569 ret = account_shared_subtree(trans, root, next, in do_walk_down()
8572 btrfs_err_rl(root->fs_info, in do_walk_down()
8579 ret = btrfs_free_extent(trans, root, bytenr, blocksize, parent, in do_walk_down()
8580 root->root_key.objectid, level - 1, 0); in do_walk_down()
8602 struct btrfs_root *root, in walk_up_proc() argument
8635 ret = btrfs_lookup_extent_info(trans, root, in walk_up_proc()
8659 ret = btrfs_dec_ref(trans, root, eb, 1); in walk_up_proc()
8661 ret = btrfs_dec_ref(trans, root, eb, 0); in walk_up_proc()
8663 ret = account_leaf_items(trans, root, eb); in walk_up_proc()
8665 btrfs_err_rl(root->fs_info, in walk_up_proc()
8679 clean_tree_block(trans, root->fs_info, eb); in walk_up_proc()
8682 if (eb == root->node) { in walk_up_proc()
8686 BUG_ON(root->root_key.objectid != in walk_up_proc()
8692 BUG_ON(root->root_key.objectid != in walk_up_proc()
8696 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
8704 struct btrfs_root *root, in walk_down_tree() argument
8713 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
8724 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
8736 struct btrfs_root *root, in walk_up_tree() argument
8751 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
8781 int btrfs_drop_snapshot(struct btrfs_root *root, in btrfs_drop_snapshot() argument
8787 struct btrfs_root *tree_root = root->fs_info->tree_root; in btrfs_drop_snapshot()
8788 struct btrfs_root_item *root_item = &root->root_item; in btrfs_drop_snapshot()
8796 btrfs_debug(root->fs_info, "Drop subvolume %llu", root->objectid); in btrfs_drop_snapshot()
8821 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
8822 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
8836 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_drop_snapshot()
8850 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
8856 ret = btrfs_lookup_extent_info(trans, root, in btrfs_drop_snapshot()
8882 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root); in btrfs_drop_snapshot()
8886 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
8892 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
8913 (!for_reloc && btrfs_need_cleaner_sleep(root))) { in btrfs_drop_snapshot()
8915 &root->root_key, in btrfs_drop_snapshot()
8924 if (!for_reloc && btrfs_need_cleaner_sleep(root)) { in btrfs_drop_snapshot()
8943 ret = btrfs_del_root(trans, tree_root, &root->root_key); in btrfs_drop_snapshot()
8949 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) { in btrfs_drop_snapshot()
8950 ret = btrfs_find_root(tree_root, &root->root_key, path, in btrfs_drop_snapshot()
8963 root->root_key.objectid); in btrfs_drop_snapshot()
8967 if (test_bit(BTRFS_ROOT_IN_RADIX, &root->state)) { in btrfs_drop_snapshot()
8968 btrfs_add_dropped_root(trans, root); in btrfs_drop_snapshot()
8970 free_extent_buffer(root->node); in btrfs_drop_snapshot()
8971 free_extent_buffer(root->commit_root); in btrfs_drop_snapshot()
8972 btrfs_put_fs_root(root); in btrfs_drop_snapshot()
8989 btrfs_add_dead_root(root); in btrfs_drop_snapshot()
8991 btrfs_std_error(root->fs_info, err, NULL); in btrfs_drop_snapshot()
9002 struct btrfs_root *root, in btrfs_drop_subtree() argument
9013 BUG_ON(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID); in btrfs_drop_subtree()
9045 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root); in btrfs_drop_subtree()
9048 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
9054 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
9066 static u64 update_block_group_flags(struct btrfs_root *root, u64 flags) in update_block_group_flags() argument
9075 stripped = get_restripe_target(root->fs_info, flags); in update_block_group_flags()
9079 num_devices = root->fs_info->fs_devices->rw_devices; in update_block_group_flags()
9160 int btrfs_inc_block_group_ro(struct btrfs_root *root, in btrfs_inc_block_group_ro() argument
9169 trans = btrfs_join_transaction(root); in btrfs_inc_block_group_ro()
9178 mutex_lock(&root->fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
9182 mutex_unlock(&root->fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
9183 btrfs_end_transaction(trans, root); in btrfs_inc_block_group_ro()
9185 ret = btrfs_wait_for_commit(root, transid); in btrfs_inc_block_group_ro()
9195 alloc_flags = update_block_group_flags(root, cache->flags); in btrfs_inc_block_group_ro()
9197 ret = do_chunk_alloc(trans, root, alloc_flags, in btrfs_inc_block_group_ro()
9213 alloc_flags = get_alloc_profile(root, cache->space_info->flags); in btrfs_inc_block_group_ro()
9214 ret = do_chunk_alloc(trans, root, alloc_flags, in btrfs_inc_block_group_ro()
9221 alloc_flags = update_block_group_flags(root, cache->flags); in btrfs_inc_block_group_ro()
9222 lock_chunks(root->fs_info->chunk_root); in btrfs_inc_block_group_ro()
9223 check_system_chunk(trans, root, alloc_flags); in btrfs_inc_block_group_ro()
9224 unlock_chunks(root->fs_info->chunk_root); in btrfs_inc_block_group_ro()
9226 mutex_unlock(&root->fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
9228 btrfs_end_transaction(trans, root); in btrfs_inc_block_group_ro()
9233 struct btrfs_root *root, u64 type) in btrfs_force_chunk_alloc() argument
9235 u64 alloc_flags = get_alloc_profile(root, type); in btrfs_force_chunk_alloc()
9236 return do_chunk_alloc(trans, root, alloc_flags, in btrfs_force_chunk_alloc()
9281 void btrfs_dec_block_group_ro(struct btrfs_root *root, in btrfs_dec_block_group_ro() argument
9308 int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr) in btrfs_can_relocate() argument
9312 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_can_relocate()
9323 block_group = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_can_relocate()
9373 target = get_restripe_target(root->fs_info, block_group->flags); in btrfs_can_relocate()
9402 trans = btrfs_join_transaction(root); in btrfs_can_relocate()
9408 mutex_lock(&root->fs_info->chunk_mutex); in btrfs_can_relocate()
9429 mutex_unlock(&root->fs_info->chunk_mutex); in btrfs_can_relocate()
9430 btrfs_end_transaction(trans, root); in btrfs_can_relocate()
9436 static int find_first_block_group(struct btrfs_root *root, in find_first_block_group() argument
9444 ret = btrfs_search_slot(NULL, root, key, path, 0, 0); in find_first_block_group()
9452 ret = btrfs_next_leaf(root, path); in find_first_block_group()
9638 btrfs_create_block_group_cache(struct btrfs_root *root, u64 start, u64 size) in btrfs_create_block_group_cache() argument
9657 cache->sectorsize = root->sectorsize; in btrfs_create_block_group_cache()
9658 cache->fs_info = root->fs_info; in btrfs_create_block_group_cache()
9659 cache->full_stripe_len = btrfs_full_stripe_len(root, in btrfs_create_block_group_cache()
9660 &root->fs_info->mapping_tree, in btrfs_create_block_group_cache()
9677 int btrfs_read_block_groups(struct btrfs_root *root) in btrfs_read_block_groups() argument
9682 struct btrfs_fs_info *info = root->fs_info; in btrfs_read_block_groups()
9690 root = info->extent_root; in btrfs_read_block_groups()
9699 cache_gen = btrfs_super_cache_generation(root->fs_info->super_copy); in btrfs_read_block_groups()
9700 if (btrfs_test_opt(root, SPACE_CACHE) && in btrfs_read_block_groups()
9701 btrfs_super_generation(root->fs_info->super_copy) != cache_gen) in btrfs_read_block_groups()
9703 if (btrfs_test_opt(root, CLEAR_CACHE)) in btrfs_read_block_groups()
9707 ret = find_first_block_group(root, path, &key); in btrfs_read_block_groups()
9716 cache = btrfs_create_block_group_cache(root, found_key.objectid, in btrfs_read_block_groups()
9734 if (btrfs_test_opt(root, SPACE_CACHE)) in btrfs_read_block_groups()
9751 ret = exclude_super_stripes(root, cache); in btrfs_read_block_groups()
9757 free_excluded_extents(root, cache); in btrfs_read_block_groups()
9772 free_excluded_extents(root, cache); in btrfs_read_block_groups()
9776 add_new_free_space(cache, root->fs_info, in btrfs_read_block_groups()
9780 free_excluded_extents(root, cache); in btrfs_read_block_groups()
9783 ret = btrfs_add_block_group_cache(root->fs_info, cache); in btrfs_read_block_groups()
9811 set_avail_alloc_bits(root->fs_info, cache->flags); in btrfs_read_block_groups()
9812 if (btrfs_chunk_readonly(root, cache->key.objectid)) { in btrfs_read_block_groups()
9826 list_for_each_entry_rcu(space_info, &root->fs_info->space_info, list) { in btrfs_read_block_groups()
9827 if (!(get_alloc_profile(root, space_info->flags) & in btrfs_read_block_groups()
9856 struct btrfs_root *root) in btrfs_create_pending_block_groups() argument
9859 struct btrfs_root *extent_root = root->fs_info->extent_root; in btrfs_create_pending_block_groups()
9890 struct btrfs_root *root, u64 bytes_used, in btrfs_make_block_group() argument
9898 extent_root = root->fs_info->extent_root; in btrfs_make_block_group()
9900 btrfs_set_log_full_commit(root->fs_info, trans); in btrfs_make_block_group()
9902 cache = btrfs_create_block_group_cache(root, chunk_offset, size); in btrfs_make_block_group()
9913 ret = exclude_super_stripes(root, cache); in btrfs_make_block_group()
9919 free_excluded_extents(root, cache); in btrfs_make_block_group()
9924 add_new_free_space(cache, root->fs_info, chunk_offset, in btrfs_make_block_group()
9927 free_excluded_extents(root, cache); in btrfs_make_block_group()
9930 if (btrfs_should_fragment_free_space(root, cache)) { in btrfs_make_block_group()
9934 fragment_free_space(root, cache); in btrfs_make_block_group()
9942 ret = update_space_info(root->fs_info, cache->flags, 0, 0, in btrfs_make_block_group()
9950 ret = btrfs_add_block_group_cache(root->fs_info, cache); in btrfs_make_block_group()
9961 ret = update_space_info(root->fs_info, cache->flags, size, bytes_used, in btrfs_make_block_group()
9965 spin_lock(&root->fs_info->block_group_cache_lock); in btrfs_make_block_group()
9967 &root->fs_info->block_group_cache_tree); in btrfs_make_block_group()
9969 spin_unlock(&root->fs_info->block_group_cache_lock); in btrfs_make_block_group()
9973 update_global_block_rsv(root->fs_info); in btrfs_make_block_group()
10004 struct btrfs_root *root, u64 group_start, in btrfs_remove_block_group() argument
10010 struct btrfs_root *tree_root = root->fs_info->tree_root; in btrfs_remove_block_group()
10020 root = root->fs_info->extent_root; in btrfs_remove_block_group()
10022 block_group = btrfs_lookup_block_group(root->fs_info, group_start); in btrfs_remove_block_group()
10030 free_excluded_extents(root, block_group); in btrfs_remove_block_group()
10042 cluster = &root->fs_info->data_alloc_cluster; in btrfs_remove_block_group()
10051 cluster = &root->fs_info->meta_alloc_cluster; in btrfs_remove_block_group()
10080 btrfs_wait_cache_io(root, trans, block_group, in btrfs_remove_block_group()
10131 spin_lock(&root->fs_info->block_group_cache_lock); in btrfs_remove_block_group()
10133 &root->fs_info->block_group_cache_tree); in btrfs_remove_block_group()
10136 if (root->fs_info->first_logical_byte == block_group->key.objectid) in btrfs_remove_block_group()
10137 root->fs_info->first_logical_byte = (u64)-1; in btrfs_remove_block_group()
10138 spin_unlock(&root->fs_info->block_group_cache_lock); in btrfs_remove_block_group()
10149 clear_avail_alloc_bits(root->fs_info, block_group->flags); in btrfs_remove_block_group()
10162 down_write(&root->fs_info->commit_root_sem); in btrfs_remove_block_group()
10167 &root->fs_info->caching_block_groups, list) in btrfs_remove_block_group()
10176 up_write(&root->fs_info->commit_root_sem); in btrfs_remove_block_group()
10197 if (btrfs_test_opt(root, ENOSPC_DEBUG)) { in btrfs_remove_block_group()
10213 lock_chunks(root); in btrfs_remove_block_group()
10261 list_move_tail(&em->list, &root->fs_info->pinned_chunks); in btrfs_remove_block_group()
10268 em_tree = &root->fs_info->mapping_tree.map_tree; in btrfs_remove_block_group()
10281 unlock_chunks(root); in btrfs_remove_block_group()
10286 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in btrfs_remove_block_group()
10292 ret = btrfs_del_item(trans, root, path); in btrfs_remove_block_group()
10347 struct btrfs_root *root = fs_info->extent_root; in btrfs_delete_unused_bgs() local
10408 btrfs_dec_block_group_ro(root, block_group); in btrfs_delete_unused_bgs()
10435 btrfs_dec_block_group_ro(root, block_group); in btrfs_delete_unused_bgs()
10442 btrfs_dec_block_group_ro(root, block_group); in btrfs_delete_unused_bgs()
10461 trimming = btrfs_test_opt(root, DISCARD); in btrfs_delete_unused_bgs()
10471 ret = btrfs_remove_chunk(trans, root, in btrfs_delete_unused_bgs()
10498 btrfs_end_transaction(trans, root); in btrfs_delete_unused_bgs()
10545 int btrfs_error_unpin_extent_range(struct btrfs_root *root, u64 start, u64 end) in btrfs_error_unpin_extent_range() argument
10547 return unpin_extent_range(root, start, end, false); in btrfs_error_unpin_extent_range()
10637 int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range) in btrfs_trim_fs() argument
10639 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_trim_fs()
10697 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_trim_fs()
10698 devices = &root->fs_info->fs_devices->alloc_list; in btrfs_trim_fs()
10707 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_trim_fs()
10721 void btrfs_end_write_no_snapshoting(struct btrfs_root *root) in btrfs_end_write_no_snapshoting() argument
10723 percpu_counter_dec(&root->subv_writers->counter); in btrfs_end_write_no_snapshoting()
10728 if (waitqueue_active(&root->subv_writers->wait)) in btrfs_end_write_no_snapshoting()
10729 wake_up(&root->subv_writers->wait); in btrfs_end_write_no_snapshoting()
10732 int btrfs_start_write_no_snapshoting(struct btrfs_root *root) in btrfs_start_write_no_snapshoting() argument
10734 if (atomic_read(&root->will_be_snapshoted)) in btrfs_start_write_no_snapshoting()
10737 percpu_counter_inc(&root->subv_writers->counter); in btrfs_start_write_no_snapshoting()
10742 if (atomic_read(&root->will_be_snapshoted)) { in btrfs_start_write_no_snapshoting()
10743 btrfs_end_write_no_snapshoting(root); in btrfs_start_write_no_snapshoting()