Lines Matching refs:fs_info
73 static void dump_space_info(struct btrfs_fs_info *fs_info,
78 static void space_info_add_new_bytes(struct btrfs_fs_info *fs_info,
81 static void space_info_add_old_bytes(struct btrfs_fs_info *fs_info,
209 static int add_excluded_extent(struct btrfs_fs_info *fs_info, in add_excluded_extent() argument
213 set_extent_bits(&fs_info->freed_extents[0], in add_excluded_extent()
215 set_extent_bits(&fs_info->freed_extents[1], in add_excluded_extent()
222 struct btrfs_fs_info *fs_info = cache->fs_info; in free_excluded_extents() local
228 clear_extent_bits(&fs_info->freed_extents[0], in free_excluded_extents()
230 clear_extent_bits(&fs_info->freed_extents[1], in free_excluded_extents()
236 struct btrfs_fs_info *fs_info = cache->fs_info; in exclude_super_stripes() local
245 ret = add_excluded_extent(fs_info, cache->key.objectid, in exclude_super_stripes()
253 ret = btrfs_rmap_block(fs_info, cache->key.objectid, in exclude_super_stripes()
279 ret = add_excluded_extent(fs_info, start, len); in exclude_super_stripes()
317 struct btrfs_fs_info *fs_info = block_group->fs_info; in fragment_free_space() local
321 fs_info->nodesize : fs_info->sectorsize; in fragment_free_space()
343 struct btrfs_fs_info *info = block_group->fs_info; in add_new_free_space()
382 struct btrfs_fs_info *fs_info = block_group->fs_info; in load_extent_tree_free() local
383 struct btrfs_root *extent_root = fs_info->extent_root; in load_extent_tree_free()
431 if (btrfs_fs_closing(fs_info) > 1) { in load_extent_tree_free()
444 rwsem_is_contended(&fs_info->commit_root_sem)) { in load_extent_tree_free()
448 up_read(&fs_info->commit_root_sem); in load_extent_tree_free()
452 down_read(&fs_info->commit_root_sem); in load_extent_tree_free()
492 fs_info->nodesize; in load_extent_tree_free()
519 struct btrfs_fs_info *fs_info; in caching_thread() local
525 fs_info = block_group->fs_info; in caching_thread()
528 down_read(&fs_info->commit_root_sem); in caching_thread()
530 if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) in caching_thread()
557 up_read(&fs_info->commit_root_sem); in caching_thread()
571 struct btrfs_fs_info *fs_info = cache->fs_info; in cache_block_group() local
626 if (btrfs_test_opt(fs_info, SPACE_CACHE)) { in cache_block_group()
628 ret = load_free_space_cache(fs_info, cache); in cache_block_group()
691 down_write(&fs_info->commit_root_sem); in cache_block_group()
693 list_add_tail(&caching_ctl->list, &fs_info->caching_block_groups); in cache_block_group()
694 up_write(&fs_info->commit_root_sem); in cache_block_group()
698 btrfs_queue_work(fs_info->caching_workers, &caching_ctl->work); in cache_block_group()
741 static void add_pinned_bytes(struct btrfs_fs_info *fs_info, s64 num_bytes, in add_pinned_bytes() argument
756 space_info = __find_space_info(fs_info, flags); in add_pinned_bytes()
778 int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len) in btrfs_lookup_data_extent() argument
791 ret = btrfs_search_slot(NULL, fs_info->extent_root, &key, path, 0, 0); in btrfs_lookup_data_extent()
806 struct btrfs_fs_info *fs_info, u64 bytenr, in btrfs_lookup_extent_info() argument
824 if (metadata && !btrfs_fs_incompat(fs_info, SKINNY_METADATA)) { in btrfs_lookup_extent_info()
825 offset = fs_info->nodesize; in btrfs_lookup_extent_info()
846 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 0); in btrfs_lookup_extent_info()
857 key.offset == fs_info->nodesize) in btrfs_lookup_extent_info()
872 btrfs_print_v0_err(fs_info); in btrfs_lookup_extent_info()
876 btrfs_handle_fs_error(fs_info, ret, NULL); in btrfs_lookup_extent_info()
1058 ASSERT(eb->fs_info); in btrfs_get_extent_inline_ref_type()
1065 IS_ALIGNED(offset, eb->fs_info->nodesize)) in btrfs_get_extent_inline_ref_type()
1072 ASSERT(eb->fs_info); in btrfs_get_extent_inline_ref_type()
1079 IS_ALIGNED(offset, eb->fs_info->nodesize)) in btrfs_get_extent_inline_ref_type()
1089 btrfs_err(eb->fs_info, "eb %llu invalid extent inline ref type %d", in btrfs_get_extent_inline_ref_type()
1137 struct btrfs_root *root = trans->fs_info->extent_root; in lookup_extent_data_ref()
1213 struct btrfs_root *root = trans->fs_info->extent_root; in insert_extent_data_ref()
1309 btrfs_print_v0_err(trans->fs_info); in remove_extent_data_ref()
1320 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); in remove_extent_data_ref()
1379 struct btrfs_root *root = trans->fs_info->extent_root; in lookup_tree_block_ref()
1415 ret = btrfs_insert_empty_item(trans, trans->fs_info->extent_root, in insert_tree_block_ref()
1480 struct btrfs_fs_info *fs_info = trans->fs_info; in lookup_inline_extent_backref() local
1481 struct btrfs_root *root = fs_info->extent_root; in lookup_inline_extent_backref()
1495 bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA); in lookup_inline_extent_backref()
1561 btrfs_print_v0_err(fs_info); in lookup_inline_extent_backref()
1666 void setup_inline_extent_backref(struct btrfs_fs_info *fs_info, in setup_inline_extent_backref() argument
1689 btrfs_extend_item(fs_info, path, size); in setup_inline_extent_backref()
1764 struct btrfs_fs_info *fs_info = leaf->fs_info; in update_inline_extent_backref() local
1819 btrfs_truncate_item(fs_info, path, item_size, 1); in update_inline_extent_backref()
1843 setup_inline_extent_backref(trans->fs_info, path, iref, parent, in insert_inline_extent_backref()
1885 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); in remove_extent_backref()
1963 int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr, in btrfs_discard_extent() argument
1975 btrfs_bio_counter_inc_blocked(fs_info); in btrfs_discard_extent()
1977 ret = btrfs_map_block(fs_info, BTRFS_MAP_DISCARD, bytenr, &num_bytes, in btrfs_discard_extent()
1990 ASSERT(btrfs_test_opt(fs_info, DEGRADED)); in btrfs_discard_extent()
2015 btrfs_bio_counter_dec(fs_info); in btrfs_discard_extent()
2032 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_inc_extent_ref() local
2059 add_pinned_bytes(fs_info, -num_bytes, metadata, root_objectid); in btrfs_inc_extent_ref()
2172 trace_run_delayed_data_ref(trans->fs_info, node, ref, node->action); in run_delayed_data_ref()
2222 struct btrfs_fs_info *fs_info = trans->fs_info; in run_delayed_extent_op() local
2235 if (metadata && !btrfs_fs_incompat(fs_info, SKINNY_METADATA)) in run_delayed_extent_op()
2255 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 1); in run_delayed_extent_op()
2291 btrfs_print_v0_err(fs_info); in run_delayed_extent_op()
2316 trace_run_delayed_tree_ref(trans->fs_info, node, ref, node->action); in run_delayed_tree_ref()
2323 btrfs_err(trans->fs_info, in run_delayed_tree_ref()
2354 btrfs_pin_extent(trans->fs_info, node->bytenr, in run_one_delayed_ref()
2429 struct btrfs_fs_info *fs_info = trans->fs_info; in cleanup_ref_head() local
2438 btrfs_debug(fs_info, "run_delayed_extent_op returned %d", ret); in cleanup_ref_head()
2463 trace_run_delayed_ref_head(fs_info, head, 0); in cleanup_ref_head()
2475 space_info = __find_space_info(fs_info, flags); in cleanup_ref_head()
2489 btrfs_pin_extent(fs_info, head->bytenr, in cleanup_ref_head()
2492 ret = btrfs_del_csums(trans, fs_info, head->bytenr, in cleanup_ref_head()
2498 btrfs_qgroup_free_delayed_ref(fs_info, head->qgroup_ref_root, in cleanup_ref_head()
2512 struct btrfs_fs_info *fs_info = trans->fs_info; in __btrfs_run_delayed_refs() local
2571 btrfs_check_delayed_seq(fs_info, ref->seq)) { in __btrfs_run_delayed_refs()
2639 btrfs_debug(fs_info, "run_one_delayed_ref returned %d", in __btrfs_run_delayed_refs()
2663 avg = fs_info->avg_delayed_ref_runtime * 3 + runtime; in __btrfs_run_delayed_refs()
2664 fs_info->avg_delayed_ref_runtime = avg >> 2; /* div by 4 */ in __btrfs_run_delayed_refs()
2713 static inline u64 heads_to_leaves(struct btrfs_fs_info *fs_info, u64 heads) in heads_to_leaves() argument
2719 if (!btrfs_fs_incompat(fs_info, SKINNY_METADATA)) in heads_to_leaves()
2726 return div_u64(num_bytes, BTRFS_LEAF_DATA_SIZE(fs_info)); in heads_to_leaves()
2733 u64 btrfs_csum_bytes_to_leaves(struct btrfs_fs_info *fs_info, u64 csum_bytes) in btrfs_csum_bytes_to_leaves() argument
2739 csum_size = BTRFS_MAX_ITEM_SIZE(fs_info); in btrfs_csum_bytes_to_leaves()
2741 (u64)btrfs_super_csum_size(fs_info->super_copy)); in btrfs_csum_bytes_to_leaves()
2742 num_csums = div64_u64(csum_bytes, fs_info->sectorsize); in btrfs_csum_bytes_to_leaves()
2749 struct btrfs_fs_info *fs_info) in btrfs_check_space_for_delayed_refs() argument
2758 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1); in btrfs_check_space_for_delayed_refs()
2759 num_heads = heads_to_leaves(fs_info, num_heads); in btrfs_check_space_for_delayed_refs()
2761 num_bytes += (num_heads - 1) * fs_info->nodesize; in btrfs_check_space_for_delayed_refs()
2763 num_bytes += btrfs_csum_bytes_to_leaves(fs_info, csum_bytes) * in btrfs_check_space_for_delayed_refs()
2764 fs_info->nodesize; in btrfs_check_space_for_delayed_refs()
2765 num_dirty_bgs_bytes = btrfs_calc_trans_metadata_size(fs_info, in btrfs_check_space_for_delayed_refs()
2767 global_rsv = &fs_info->global_block_rsv; in btrfs_check_space_for_delayed_refs()
2786 struct btrfs_fs_info *fs_info) in btrfs_should_throttle_delayed_refs() argument
2794 avg_runtime = fs_info->avg_delayed_ref_runtime; in btrfs_should_throttle_delayed_refs()
2801 return btrfs_check_space_for_delayed_refs(trans, fs_info); in btrfs_should_throttle_delayed_refs()
2824 struct btrfs_fs_info *fs_info = async->root->fs_info; in delayed_ref_async_start() local
2828 if (btrfs_transaction_blocked(fs_info)) in delayed_ref_async_start()
2861 int btrfs_async_run_delayed_refs(struct btrfs_fs_info *fs_info, in btrfs_async_run_delayed_refs() argument
2871 async->root = fs_info->tree_root; in btrfs_async_run_delayed_refs()
2884 btrfs_queue_work(fs_info->extent_workers, &async->work); in btrfs_async_run_delayed_refs()
2908 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_run_delayed_refs() local
2920 if (test_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags)) in btrfs_run_delayed_refs()
2967 struct btrfs_fs_info *fs_info, in btrfs_set_disk_extent_flags() argument
2984 ret = btrfs_add_delayed_extent_op(fs_info, trans, bytenr, in btrfs_set_disk_extent_flags()
3003 spin_lock(&root->fs_info->trans_lock); in check_delayed_ref()
3004 cur_trans = root->fs_info->running_transaction; in check_delayed_ref()
3007 spin_unlock(&root->fs_info->trans_lock); in check_delayed_ref()
3074 struct btrfs_fs_info *fs_info = root->fs_info; in check_committed_ref() local
3075 struct btrfs_root *extent_root = fs_info->extent_root; in check_committed_ref()
3177 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_mod_ref() local
3193 if (btrfs_is_testing(fs_info)) in __btrfs_mod_ref()
3236 num_bytes = fs_info->nodesize; in __btrfs_mod_ref()
3261 struct btrfs_fs_info *fs_info, in write_one_cache_group() argument
3266 struct btrfs_root *extent_root = fs_info->extent_root; in write_one_cache_group()
3288 next_block_group(struct btrfs_fs_info *fs_info, in next_block_group() argument
3293 spin_lock(&fs_info->block_group_cache_lock); in next_block_group()
3299 spin_unlock(&fs_info->block_group_cache_lock); in next_block_group()
3301 cache = btrfs_lookup_first_block_group(fs_info, next_bytenr); return cache; in next_block_group()
3311 spin_unlock(&fs_info->block_group_cache_lock); in next_block_group()
3319 struct btrfs_fs_info *fs_info = block_group->fs_info; in cache_save_setup() local
3320 struct btrfs_root *root = fs_info->tree_root; in cache_save_setup()
3343 inode = lookup_free_space_inode(fs_info, block_group, path); in cache_save_setup()
3357 ret = create_free_space_inode(fs_info, trans, block_group, in cache_save_setup()
3395 ret = btrfs_check_trunc_cache_free_space(fs_info, in cache_save_setup()
3396 &fs_info->global_block_rsv); in cache_save_setup()
3407 !btrfs_test_opt(fs_info, SPACE_CACHE)) { in cache_save_setup()
3478 struct btrfs_fs_info *fs_info) in btrfs_setup_space_cache() argument
3485 !btrfs_test_opt(fs_info, SPACE_CACHE)) in btrfs_setup_space_cache()
3517 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_start_dirty_block_groups() local
3589 ret = btrfs_write_out_cache(fs_info, trans, in btrfs_start_dirty_block_groups()
3610 ret = write_one_cache_group(trans, fs_info, in btrfs_start_dirty_block_groups()
3671 btrfs_cleanup_dirty_bgs(cur_trans, fs_info); in btrfs_start_dirty_block_groups()
3679 struct btrfs_fs_info *fs_info) in btrfs_write_dirty_block_groups() argument
3743 ret = btrfs_write_out_cache(fs_info, trans, in btrfs_write_dirty_block_groups()
3758 ret = write_one_cache_group(trans, fs_info, in btrfs_write_dirty_block_groups()
3776 ret = write_one_cache_group(trans, fs_info, in btrfs_write_dirty_block_groups()
3806 int btrfs_extent_readonly(struct btrfs_fs_info *fs_info, u64 bytenr) in btrfs_extent_readonly() argument
3811 block_group = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_extent_readonly()
3819 bool btrfs_inc_nocow_writers(struct btrfs_fs_info *fs_info, u64 bytenr) in btrfs_inc_nocow_writers() argument
3824 bg = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_inc_nocow_writers()
3843 void btrfs_dec_nocow_writers(struct btrfs_fs_info *fs_info, u64 bytenr) in btrfs_dec_nocow_writers() argument
3847 bg = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_dec_nocow_writers()
3952 static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) in set_avail_alloc_bits() argument
3957 write_seqlock(&fs_info->profiles_lock); in set_avail_alloc_bits()
3959 fs_info->avail_data_alloc_bits |= extra_flags; in set_avail_alloc_bits()
3961 fs_info->avail_metadata_alloc_bits |= extra_flags; in set_avail_alloc_bits()
3963 fs_info->avail_system_alloc_bits |= extra_flags; in set_avail_alloc_bits()
3964 write_sequnlock(&fs_info->profiles_lock); in set_avail_alloc_bits()
3973 static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags) in get_restripe_target() argument
3975 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in get_restripe_target()
4002 static u64 btrfs_reduce_alloc_profile(struct btrfs_fs_info *fs_info, u64 flags) in btrfs_reduce_alloc_profile() argument
4004 u64 num_devices = fs_info->fs_devices->rw_devices; in btrfs_reduce_alloc_profile()
4013 spin_lock(&fs_info->balance_lock); in btrfs_reduce_alloc_profile()
4014 target = get_restripe_target(fs_info, flags); in btrfs_reduce_alloc_profile()
4018 spin_unlock(&fs_info->balance_lock); in btrfs_reduce_alloc_profile()
4022 spin_unlock(&fs_info->balance_lock); in btrfs_reduce_alloc_profile()
4047 static u64 get_alloc_profile(struct btrfs_fs_info *fs_info, u64 orig_flags) in get_alloc_profile() argument
4054 seq = read_seqbegin(&fs_info->profiles_lock); in get_alloc_profile()
4057 flags |= fs_info->avail_data_alloc_bits; in get_alloc_profile()
4059 flags |= fs_info->avail_system_alloc_bits; in get_alloc_profile()
4061 flags |= fs_info->avail_metadata_alloc_bits; in get_alloc_profile()
4062 } while (read_seqretry(&fs_info->profiles_lock, seq)); in get_alloc_profile()
4064 return btrfs_reduce_alloc_profile(fs_info, flags); in get_alloc_profile()
4069 struct btrfs_fs_info *fs_info = root->fs_info; in get_alloc_profile_by_root() local
4075 else if (root == fs_info->chunk_root) in get_alloc_profile_by_root()
4080 ret = get_alloc_profile(fs_info, flags); in get_alloc_profile_by_root()
4084 u64 btrfs_data_alloc_profile(struct btrfs_fs_info *fs_info) in btrfs_data_alloc_profile() argument
4086 return get_alloc_profile(fs_info, BTRFS_BLOCK_GROUP_DATA); in btrfs_data_alloc_profile()
4089 u64 btrfs_metadata_alloc_profile(struct btrfs_fs_info *fs_info) in btrfs_metadata_alloc_profile() argument
4091 return get_alloc_profile(fs_info, BTRFS_BLOCK_GROUP_METADATA); in btrfs_metadata_alloc_profile()
4094 u64 btrfs_system_alloc_profile(struct btrfs_fs_info *fs_info) in btrfs_system_alloc_profile() argument
4096 return get_alloc_profile(fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in btrfs_system_alloc_profile()
4111 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_alloc_data_chunk_ondemand() local
4112 struct btrfs_space_info *data_sinfo = fs_info->data_sinfo; in btrfs_alloc_data_chunk_ondemand()
4119 bytes = ALIGN(bytes, fs_info->sectorsize); in btrfs_alloc_data_chunk_ondemand()
4144 alloc_target = btrfs_data_alloc_profile(fs_info); in btrfs_alloc_data_chunk_ondemand()
4191 btrfs_start_delalloc_roots(fs_info, -1); in btrfs_alloc_data_chunk_ondemand()
4192 btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, in btrfs_alloc_data_chunk_ondemand()
4211 mutex_lock(&fs_info->cleaner_delayed_iput_mutex); in btrfs_alloc_data_chunk_ondemand()
4212 mutex_unlock(&fs_info->cleaner_delayed_iput_mutex); in btrfs_alloc_data_chunk_ondemand()
4219 trace_btrfs_space_reservation(fs_info, in btrfs_alloc_data_chunk_ondemand()
4225 trace_btrfs_space_reservation(fs_info, "space_info", in btrfs_alloc_data_chunk_ondemand()
4235 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); in btrfs_check_data_free_space() local
4239 len = round_up(start + len, fs_info->sectorsize) - in btrfs_check_data_free_space()
4240 round_down(start, fs_info->sectorsize); in btrfs_check_data_free_space()
4241 start = round_down(start, fs_info->sectorsize); in btrfs_check_data_free_space()
4267 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); in btrfs_free_reserved_data_space_noquota() local
4271 len = round_up(start + len, fs_info->sectorsize) - in btrfs_free_reserved_data_space_noquota()
4272 round_down(start, fs_info->sectorsize); in btrfs_free_reserved_data_space_noquota()
4273 start = round_down(start, fs_info->sectorsize); in btrfs_free_reserved_data_space_noquota()
4275 data_sinfo = fs_info->data_sinfo; in btrfs_free_reserved_data_space_noquota()
4281 trace_btrfs_space_reservation(fs_info, "space_info", in btrfs_free_reserved_data_space_noquota()
4299 len = round_up(start + len, root->fs_info->sectorsize) - in btrfs_free_reserved_data_space()
4300 round_down(start, root->fs_info->sectorsize); in btrfs_free_reserved_data_space()
4301 start = round_down(start, root->fs_info->sectorsize); in btrfs_free_reserved_data_space()
4325 static int should_alloc_chunk(struct btrfs_fs_info *fs_info, in should_alloc_chunk() argument
4328 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in should_alloc_chunk()
4348 thresh = btrfs_super_total_bytes(fs_info->super_copy); in should_alloc_chunk()
4360 static u64 get_profile_num_devs(struct btrfs_fs_info *fs_info, u64 type) in get_profile_num_devs() argument
4368 num_dev = fs_info->fs_devices->rw_devices; in get_profile_num_devs()
4384 struct btrfs_fs_info *fs_info = trans->fs_info; in check_system_chunk() local
4395 lockdep_assert_held(&fs_info->chunk_mutex); in check_system_chunk()
4397 info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in check_system_chunk()
4402 num_devs = get_profile_num_devs(fs_info, type); in check_system_chunk()
4405 thresh = btrfs_calc_trunc_metadata_size(fs_info, num_devs) + in check_system_chunk()
4406 btrfs_calc_trans_metadata_size(fs_info, 1); in check_system_chunk()
4408 if (left < thresh && btrfs_test_opt(fs_info, ENOSPC_DEBUG)) { in check_system_chunk()
4409 btrfs_info(fs_info, "left=%llu, need=%llu, flags=%llu", in check_system_chunk()
4411 dump_space_info(fs_info, info, 0, 0); in check_system_chunk()
4415 u64 flags = btrfs_system_alloc_profile(fs_info); in check_system_chunk()
4427 ret = btrfs_block_rsv_add(fs_info->chunk_root, in check_system_chunk()
4428 &fs_info->chunk_block_rsv, in check_system_chunk()
4447 struct btrfs_fs_info *fs_info = trans->fs_info; in do_chunk_alloc() local
4457 space_info = __find_space_info(fs_info, flags); in do_chunk_alloc()
4464 should_alloc = should_alloc_chunk(fs_info, space_info, force); in do_chunk_alloc()
4485 mutex_lock(&fs_info->chunk_mutex); in do_chunk_alloc()
4486 mutex_unlock(&fs_info->chunk_mutex); in do_chunk_alloc()
4497 mutex_lock(&fs_info->chunk_mutex); in do_chunk_alloc()
4512 if (flags & BTRFS_BLOCK_GROUP_DATA && fs_info->metadata_ratio) { in do_chunk_alloc()
4513 fs_info->data_chunk_allocations++; in do_chunk_alloc()
4514 if (!(fs_info->data_chunk_allocations % in do_chunk_alloc()
4515 fs_info->metadata_ratio)) in do_chunk_alloc()
4516 force_metadata_allocation(fs_info); in do_chunk_alloc()
4542 mutex_unlock(&fs_info->chunk_mutex); in do_chunk_alloc()
4565 static int can_overcommit(struct btrfs_fs_info *fs_info, in can_overcommit() argument
4570 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in can_overcommit()
4582 profile = btrfs_system_alloc_profile(fs_info); in can_overcommit()
4584 profile = btrfs_metadata_alloc_profile(fs_info); in can_overcommit()
4602 avail = atomic64_read(&fs_info->free_chunk_space); in can_overcommit()
4628 static void btrfs_writeback_inodes_sb_nr(struct btrfs_fs_info *fs_info, in btrfs_writeback_inodes_sb_nr() argument
4631 struct super_block *sb = fs_info->sb; in btrfs_writeback_inodes_sb_nr()
4644 btrfs_start_delalloc_roots(fs_info, nr_items); in btrfs_writeback_inodes_sb_nr()
4646 btrfs_wait_ordered_roots(fs_info, nr_items, 0, (u64)-1); in btrfs_writeback_inodes_sb_nr()
4650 static inline u64 calc_reclaim_items_nr(struct btrfs_fs_info *fs_info, in calc_reclaim_items_nr() argument
4656 bytes = btrfs_calc_trans_metadata_size(fs_info, 1); in calc_reclaim_items_nr()
4668 static void shrink_delalloc(struct btrfs_fs_info *fs_info, u64 to_reclaim, in shrink_delalloc() argument
4681 items = calc_reclaim_items_nr(fs_info, to_reclaim); in shrink_delalloc()
4685 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); in shrink_delalloc()
4688 &fs_info->delalloc_bytes); in shrink_delalloc()
4693 btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1); in shrink_delalloc()
4701 btrfs_writeback_inodes_sb_nr(fs_info, nr_pages, items); in shrink_delalloc()
4706 max_reclaim = atomic_read(&fs_info->async_delalloc_pages); in shrink_delalloc()
4715 wait_event(fs_info->async_submit_wait, in shrink_delalloc()
4716 atomic_read(&fs_info->async_delalloc_pages) <= in shrink_delalloc()
4729 btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1); in shrink_delalloc()
4736 &fs_info->delalloc_bytes); in shrink_delalloc()
4757 static int may_commit_transaction(struct btrfs_fs_info *fs_info, in may_commit_transaction() argument
4761 struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_block_rsv; in may_commit_transaction()
4809 trans = btrfs_join_transaction(fs_info->extent_root); in may_commit_transaction()
4821 static void flush_space(struct btrfs_fs_info *fs_info, in flush_space() argument
4825 struct btrfs_root *root = fs_info->extent_root; in flush_space()
4834 nr = calc_reclaim_items_nr(fs_info, num_bytes) * 2; in flush_space()
4848 shrink_delalloc(fs_info, num_bytes * 2, num_bytes, in flush_space()
4858 btrfs_metadata_alloc_profile(fs_info), in flush_space()
4865 ret = may_commit_transaction(fs_info, space_info); in flush_space()
4872 trace_btrfs_flush_space(fs_info, space_info->flags, num_bytes, state, in flush_space()
4878 btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info, in btrfs_calc_reclaim_metadata_size() argument
4895 if (can_overcommit(fs_info, space_info, to_reclaim, in btrfs_calc_reclaim_metadata_size()
4901 if (can_overcommit(fs_info, space_info, SZ_1M, in btrfs_calc_reclaim_metadata_size()
4916 static inline int need_do_async_reclaim(struct btrfs_fs_info *fs_info, in need_do_async_reclaim() argument
4926 if (!btrfs_calc_reclaim_metadata_size(fs_info, space_info, in need_do_async_reclaim()
4930 return (used >= thresh && !btrfs_fs_closing(fs_info) && in need_do_async_reclaim()
4931 !test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state)); in need_do_async_reclaim()
4953 struct btrfs_fs_info *fs_info; in btrfs_async_reclaim_metadata_space() local
4960 fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work); in btrfs_async_reclaim_metadata_space()
4961 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); in btrfs_async_reclaim_metadata_space()
4964 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info, in btrfs_async_reclaim_metadata_space()
4976 flush_space(fs_info, space_info, to_reclaim, flush_state); in btrfs_async_reclaim_metadata_space()
4983 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, in btrfs_async_reclaim_metadata_space()
5013 static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info, in priority_reclaim_metadata_space() argument
5021 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info, in priority_reclaim_metadata_space()
5030 flush_space(fs_info, space_info, to_reclaim, flush_state); in priority_reclaim_metadata_space()
5049 static int wait_reserve_ticket(struct btrfs_fs_info *fs_info, in wait_reserve_ticket() argument
5078 trace_btrfs_space_reservation(fs_info, "space_info", in wait_reserve_ticket()
5100 static int __reserve_metadata_bytes(struct btrfs_fs_info *fs_info, in __reserve_metadata_bytes() argument
5124 trace_btrfs_space_reservation(fs_info, "space_info", in __reserve_metadata_bytes()
5127 } else if (can_overcommit(fs_info, space_info, orig_bytes, flush, in __reserve_metadata_bytes()
5130 trace_btrfs_space_reservation(fs_info, "space_info", in __reserve_metadata_bytes()
5150 trace_btrfs_trigger_flush(fs_info, in __reserve_metadata_bytes()
5155 &fs_info->async_reclaim_work); in __reserve_metadata_bytes()
5168 if (!test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags) && in __reserve_metadata_bytes()
5169 need_do_async_reclaim(fs_info, space_info, in __reserve_metadata_bytes()
5171 !work_busy(&fs_info->async_reclaim_work)) { in __reserve_metadata_bytes()
5172 trace_btrfs_trigger_flush(fs_info, space_info->flags, in __reserve_metadata_bytes()
5175 &fs_info->async_reclaim_work); in __reserve_metadata_bytes()
5183 return wait_reserve_ticket(fs_info, space_info, &ticket, in __reserve_metadata_bytes()
5187 priority_reclaim_metadata_space(fs_info, space_info, &ticket); in __reserve_metadata_bytes()
5193 trace_btrfs_space_reservation(fs_info, "space_info", in __reserve_metadata_bytes()
5225 struct btrfs_fs_info *fs_info = root->fs_info; in reserve_metadata_bytes() local
5226 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in reserve_metadata_bytes()
5228 bool system_chunk = (root == fs_info->chunk_root); in reserve_metadata_bytes()
5230 ret = __reserve_metadata_bytes(fs_info, block_rsv->space_info, in reserve_metadata_bytes()
5239 trace_btrfs_space_reservation(fs_info, "space_info:enospc", in reserve_metadata_bytes()
5243 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) in reserve_metadata_bytes()
5244 dump_space_info(fs_info, block_rsv->space_info, in reserve_metadata_bytes()
5254 struct btrfs_fs_info *fs_info = root->fs_info; in get_block_rsv() local
5258 (root == fs_info->csum_root && trans->adding_csums) || in get_block_rsv()
5259 (root == fs_info->uuid_root)) in get_block_rsv()
5266 block_rsv = &fs_info->empty_block_rsv; in get_block_rsv()
5298 int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, in btrfs_cond_migrate_bytes() argument
5302 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in btrfs_cond_migrate_bytes()
5327 static void space_info_add_old_bytes(struct btrfs_fs_info *fs_info, in space_info_add_old_bytes() argument
5357 !can_overcommit(fs_info, space_info, 0, flush, false)) in space_info_add_old_bytes()
5377 trace_btrfs_space_reservation(fs_info, "space_info", in space_info_add_old_bytes()
5387 static void space_info_add_new_bytes(struct btrfs_fs_info *fs_info, in space_info_add_new_bytes() argument
5399 trace_btrfs_space_reservation(fs_info, "space_info", in space_info_add_new_bytes()
5409 trace_btrfs_space_reservation(fs_info, "space_info", in space_info_add_new_bytes()
5424 static u64 block_rsv_release_bytes(struct btrfs_fs_info *fs_info, in block_rsv_release_bytes() argument
5472 space_info_add_old_bytes(fs_info, space_info, in block_rsv_release_bytes()
5501 void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info, in btrfs_init_metadata_block_rsv() argument
5506 rsv->space_info = __find_space_info(fs_info, in btrfs_init_metadata_block_rsv()
5510 struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info, in btrfs_alloc_block_rsv() argument
5519 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type); in btrfs_alloc_block_rsv()
5523 void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info, in btrfs_free_block_rsv() argument
5528 btrfs_block_rsv_release(fs_info, rsv, (u64)-1); in btrfs_free_block_rsv()
5633 trace_btrfs_space_reservation(root->fs_info, "delalloc", in btrfs_inode_rsv_refill()
5658 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_inode_rsv_release() local
5659 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in btrfs_inode_rsv_release()
5669 released = block_rsv_release_bytes(fs_info, block_rsv, global_rsv, 0, in btrfs_inode_rsv_release()
5672 trace_btrfs_space_reservation(fs_info, "delalloc", in btrfs_inode_rsv_release()
5681 void btrfs_block_rsv_release(struct btrfs_fs_info *fs_info, in btrfs_block_rsv_release() argument
5685 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in btrfs_block_rsv_release()
5690 block_rsv_release_bytes(fs_info, block_rsv, global_rsv, num_bytes, NULL); in btrfs_block_rsv_release()
5693 static void update_global_block_rsv(struct btrfs_fs_info *fs_info) in update_global_block_rsv() argument
5695 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv; in update_global_block_rsv()
5704 num_bytes = btrfs_root_used(&fs_info->extent_root->root_item) + in update_global_block_rsv()
5705 btrfs_root_used(&fs_info->csum_root->root_item) + in update_global_block_rsv()
5706 btrfs_root_used(&fs_info->tree_root->root_item); in update_global_block_rsv()
5722 trace_btrfs_space_reservation(fs_info, "space_info", in update_global_block_rsv()
5729 trace_btrfs_space_reservation(fs_info, "space_info", in update_global_block_rsv()
5743 static void init_global_block_rsv(struct btrfs_fs_info *fs_info) in init_global_block_rsv() argument
5747 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in init_global_block_rsv()
5748 fs_info->chunk_block_rsv.space_info = space_info; in init_global_block_rsv()
5750 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); in init_global_block_rsv()
5751 fs_info->global_block_rsv.space_info = space_info; in init_global_block_rsv()
5752 fs_info->trans_block_rsv.space_info = space_info; in init_global_block_rsv()
5753 fs_info->empty_block_rsv.space_info = space_info; in init_global_block_rsv()
5754 fs_info->delayed_block_rsv.space_info = space_info; in init_global_block_rsv()
5756 fs_info->extent_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5757 fs_info->csum_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5758 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5759 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5760 if (fs_info->quota_root) in init_global_block_rsv()
5761 fs_info->quota_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5762 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv; in init_global_block_rsv()
5764 update_global_block_rsv(fs_info); in init_global_block_rsv()
5767 static void release_global_block_rsv(struct btrfs_fs_info *fs_info) in release_global_block_rsv() argument
5769 block_rsv_release_bytes(fs_info, &fs_info->global_block_rsv, NULL, in release_global_block_rsv()
5771 WARN_ON(fs_info->trans_block_rsv.size > 0); in release_global_block_rsv()
5772 WARN_ON(fs_info->trans_block_rsv.reserved > 0); in release_global_block_rsv()
5773 WARN_ON(fs_info->chunk_block_rsv.size > 0); in release_global_block_rsv()
5774 WARN_ON(fs_info->chunk_block_rsv.reserved > 0); in release_global_block_rsv()
5775 WARN_ON(fs_info->delayed_block_rsv.size > 0); in release_global_block_rsv()
5776 WARN_ON(fs_info->delayed_block_rsv.reserved > 0); in release_global_block_rsv()
5786 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_trans_release_chunk_metadata() local
5793 block_rsv_release_bytes(fs_info, &fs_info->chunk_block_rsv, NULL, in btrfs_trans_release_chunk_metadata()
5819 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_subvolume_reserve_metadata() local
5820 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in btrfs_subvolume_reserve_metadata()
5822 if (test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags)) { in btrfs_subvolume_reserve_metadata()
5824 qgroup_num_bytes = 3 * fs_info->nodesize; in btrfs_subvolume_reserve_metadata()
5831 num_bytes = btrfs_calc_trans_metadata_size(fs_info, items); in btrfs_subvolume_reserve_metadata()
5832 rsv->space_info = __find_space_info(fs_info, in btrfs_subvolume_reserve_metadata()
5846 void btrfs_subvolume_release_metadata(struct btrfs_fs_info *fs_info, in btrfs_subvolume_release_metadata() argument
5849 btrfs_block_rsv_release(fs_info, rsv, (u64)-1); in btrfs_subvolume_release_metadata()
5852 static void btrfs_calculate_inode_block_rsv_size(struct btrfs_fs_info *fs_info, in btrfs_calculate_inode_block_rsv_size() argument
5864 reserve_size = btrfs_calc_trans_metadata_size(fs_info, in btrfs_calculate_inode_block_rsv_size()
5866 csum_leaves = btrfs_csum_bytes_to_leaves(fs_info, in btrfs_calculate_inode_block_rsv_size()
5868 reserve_size += btrfs_calc_trans_metadata_size(fs_info, in btrfs_calculate_inode_block_rsv_size()
5876 qgroup_rsv_size = outstanding_extents * fs_info->nodesize; in btrfs_calculate_inode_block_rsv_size()
5886 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_delalloc_reserve_metadata() local
5907 if (btrfs_transaction_in_commit(fs_info)) in btrfs_delalloc_reserve_metadata()
5914 num_bytes = ALIGN(num_bytes, fs_info->sectorsize); in btrfs_delalloc_reserve_metadata()
5921 btrfs_calculate_inode_block_rsv_size(fs_info, inode); in btrfs_delalloc_reserve_metadata()
5937 btrfs_calculate_inode_block_rsv_size(fs_info, inode); in btrfs_delalloc_reserve_metadata()
5959 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_delalloc_release_metadata() local
5961 num_bytes = ALIGN(num_bytes, fs_info->sectorsize); in btrfs_delalloc_release_metadata()
5964 btrfs_calculate_inode_block_rsv_size(fs_info, inode); in btrfs_delalloc_release_metadata()
5967 if (btrfs_is_testing(fs_info)) in btrfs_delalloc_release_metadata()
5988 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_delalloc_release_extents() local
5994 btrfs_calculate_inode_block_rsv_size(fs_info, inode); in btrfs_delalloc_release_extents()
5997 if (btrfs_is_testing(fs_info)) in btrfs_delalloc_release_extents()
6164 static u64 first_logical_byte(struct btrfs_fs_info *fs_info, u64 search_start) in first_logical_byte() argument
6169 spin_lock(&fs_info->block_group_cache_lock); in first_logical_byte()
6170 bytenr = fs_info->first_logical_byte; in first_logical_byte()
6171 spin_unlock(&fs_info->block_group_cache_lock); in first_logical_byte()
6176 cache = btrfs_lookup_first_block_group(fs_info, search_start); in first_logical_byte()
6186 static int pin_down_extent(struct btrfs_fs_info *fs_info, in pin_down_extent() argument
6201 trace_btrfs_space_reservation(fs_info, "pinned", in pin_down_extent()
6205 set_extent_dirty(fs_info->pinned_extents, bytenr, in pin_down_extent()
6213 int btrfs_pin_extent(struct btrfs_fs_info *fs_info, in btrfs_pin_extent() argument
6218 cache = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_pin_extent()
6221 pin_down_extent(fs_info, cache, bytenr, num_bytes, reserved); in btrfs_pin_extent()
6230 int btrfs_pin_extent_for_log_replay(struct btrfs_fs_info *fs_info, in btrfs_pin_extent_for_log_replay() argument
6236 cache = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_pin_extent_for_log_replay()
6248 pin_down_extent(fs_info, cache, bytenr, num_bytes, 0); in btrfs_pin_extent_for_log_replay()
6256 static int __exclude_logged_extent(struct btrfs_fs_info *fs_info, in __exclude_logged_extent() argument
6263 block_group = btrfs_lookup_block_group(fs_info, start); in __exclude_logged_extent()
6278 ret = add_excluded_extent(fs_info, start, num_bytes); in __exclude_logged_extent()
6292 ret = add_excluded_extent(fs_info, start, num_bytes); in __exclude_logged_extent()
6302 int btrfs_exclude_logged_extents(struct btrfs_fs_info *fs_info, in btrfs_exclude_logged_extents() argument
6311 if (!btrfs_fs_incompat(fs_info, MIXED_GROUPS)) in btrfs_exclude_logged_extents()
6326 ret = __exclude_logged_extent(fs_info, key.objectid, key.offset); in btrfs_exclude_logged_extents()
6340 void btrfs_dec_block_group_reservations(struct btrfs_fs_info *fs_info, in btrfs_dec_block_group_reservations() argument
6345 bg = btrfs_lookup_block_group(fs_info, start); in btrfs_dec_block_group_reservations()
6403 trace_btrfs_space_reservation(cache->fs_info, in btrfs_add_reserved_bytes()
6446 void btrfs_prepare_extent_commit(struct btrfs_fs_info *fs_info) in btrfs_prepare_extent_commit() argument
6452 down_write(&fs_info->commit_root_sem); in btrfs_prepare_extent_commit()
6455 &fs_info->caching_block_groups, list) { in btrfs_prepare_extent_commit()
6466 if (fs_info->pinned_extents == &fs_info->freed_extents[0]) in btrfs_prepare_extent_commit()
6467 fs_info->pinned_extents = &fs_info->freed_extents[1]; in btrfs_prepare_extent_commit()
6469 fs_info->pinned_extents = &fs_info->freed_extents[0]; in btrfs_prepare_extent_commit()
6471 up_write(&fs_info->commit_root_sem); in btrfs_prepare_extent_commit()
6473 update_global_block_rsv(fs_info); in btrfs_prepare_extent_commit()
6481 fetch_cluster_info(struct btrfs_fs_info *fs_info, in fetch_cluster_info() argument
6491 ret = &fs_info->meta_alloc_cluster; in fetch_cluster_info()
6492 if (btrfs_test_opt(fs_info, SSD)) in fetch_cluster_info()
6497 btrfs_test_opt(fs_info, SSD_SPREAD)) { in fetch_cluster_info()
6499 ret = &fs_info->data_alloc_cluster; in fetch_cluster_info()
6505 static int unpin_extent_range(struct btrfs_fs_info *fs_info, in unpin_extent_range() argument
6511 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in unpin_extent_range()
6525 cache = btrfs_lookup_block_group(fs_info, start); in unpin_extent_range()
6528 cluster = fetch_cluster_info(fs_info, in unpin_extent_range()
6565 trace_btrfs_space_reservation(fs_info, "pinned", in unpin_extent_range()
6587 trace_btrfs_space_reservation(fs_info, in unpin_extent_range()
6596 space_info_add_new_bytes(fs_info, space_info, in unpin_extent_range()
6609 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_extent_commit() local
6617 if (fs_info->pinned_extents == &fs_info->freed_extents[0]) in btrfs_finish_extent_commit()
6618 unpin = &fs_info->freed_extents[1]; in btrfs_finish_extent_commit()
6620 unpin = &fs_info->freed_extents[0]; in btrfs_finish_extent_commit()
6623 mutex_lock(&fs_info->unused_bg_unpin_mutex); in btrfs_finish_extent_commit()
6627 mutex_unlock(&fs_info->unused_bg_unpin_mutex); in btrfs_finish_extent_commit()
6631 if (btrfs_test_opt(fs_info, DISCARD)) in btrfs_finish_extent_commit()
6632 ret = btrfs_discard_extent(fs_info, start, in btrfs_finish_extent_commit()
6636 unpin_extent_range(fs_info, start, end, true); in btrfs_finish_extent_commit()
6637 mutex_unlock(&fs_info->unused_bg_unpin_mutex); in btrfs_finish_extent_commit()
6652 ret = btrfs_discard_extent(fs_info, in btrfs_finish_extent_commit()
6663 btrfs_warn(fs_info, in btrfs_finish_extent_commit()
6678 struct btrfs_fs_info *info = trans->fs_info; in __btrfs_free_extent()
6984 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_free_tree_block() local
7015 cache = btrfs_lookup_block_group(fs_info, buf->start); in btrfs_free_tree_block()
7018 pin_down_extent(fs_info, cache, buf->start, in btrfs_free_tree_block()
7029 trace_btrfs_reserved_extent_free(fs_info, buf->start, buf->len); in btrfs_free_tree_block()
7033 add_pinned_bytes(fs_info, buf->len, true, in btrfs_free_tree_block()
7051 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_free_extent() local
7055 if (btrfs_is_testing(fs_info)) in btrfs_free_extent()
7070 btrfs_pin_extent(fs_info, bytenr, num_bytes, 1); in btrfs_free_extent()
7090 add_pinned_bytes(fs_info, num_bytes, metadata, root_objectid); in btrfs_free_extent()
7225 static noinline int find_free_extent(struct btrfs_fs_info *fs_info, in find_free_extent() argument
7231 struct btrfs_root *root = fs_info->extent_root; in find_free_extent()
7247 WARN_ON(num_bytes < fs_info->sectorsize); in find_free_extent()
7252 trace_find_free_extent(fs_info, num_bytes, empty_size, flags); in find_free_extent()
7254 space_info = __find_space_info(fs_info, flags); in find_free_extent()
7256 btrfs_err(fs_info, "No space info for %llu", flags); in find_free_extent()
7283 last_ptr = fetch_cluster_info(fs_info, space_info, &empty_cluster); in find_free_extent()
7300 search_start = max(search_start, first_logical_byte(fs_info, 0)); in find_free_extent()
7303 block_group = btrfs_lookup_block_group(fs_info, search_start); in find_free_extent()
7470 ret = btrfs_find_space_cluster(fs_info, block_group, in find_free_extent()
7561 search_start = round_up(offset, fs_info->stripesize); in find_free_extent()
7707 static void dump_space_info(struct btrfs_fs_info *fs_info, in dump_space_info() argument
7715 btrfs_info(fs_info, "space_info %llu has %llu free, is %sfull", in dump_space_info()
7719 btrfs_info(fs_info, in dump_space_info()
7733 btrfs_info(fs_info, in dump_space_info()
7796 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_reserve_extent() local
7803 WARN_ON(num_bytes < fs_info->sectorsize); in btrfs_reserve_extent()
7804 ret = find_free_extent(fs_info, ram_bytes, num_bytes, empty_size, in btrfs_reserve_extent()
7807 btrfs_dec_block_group_reservations(fs_info, ins->objectid); in btrfs_reserve_extent()
7812 fs_info->sectorsize); in btrfs_reserve_extent()
7818 } else if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) { in btrfs_reserve_extent()
7821 sinfo = __find_space_info(fs_info, flags); in btrfs_reserve_extent()
7822 btrfs_err(fs_info, in btrfs_reserve_extent()
7826 dump_space_info(fs_info, sinfo, num_bytes, 1); in btrfs_reserve_extent()
7833 static int __btrfs_free_reserved_extent(struct btrfs_fs_info *fs_info, in __btrfs_free_reserved_extent() argument
7840 cache = btrfs_lookup_block_group(fs_info, start); in __btrfs_free_reserved_extent()
7842 btrfs_err(fs_info, "Unable to find block group for %llu", in __btrfs_free_reserved_extent()
7848 pin_down_extent(fs_info, cache, start, len, 1); in __btrfs_free_reserved_extent()
7850 if (btrfs_test_opt(fs_info, DISCARD)) in __btrfs_free_reserved_extent()
7851 ret = btrfs_discard_extent(fs_info, start, len, NULL); in __btrfs_free_reserved_extent()
7854 trace_btrfs_reserved_extent_free(fs_info, start, len); in __btrfs_free_reserved_extent()
7861 int btrfs_free_reserved_extent(struct btrfs_fs_info *fs_info, in btrfs_free_reserved_extent() argument
7864 return __btrfs_free_reserved_extent(fs_info, start, len, 0, delalloc); in btrfs_free_reserved_extent()
7867 int btrfs_free_and_pin_reserved_extent(struct btrfs_fs_info *fs_info, in btrfs_free_and_pin_reserved_extent() argument
7870 return __btrfs_free_reserved_extent(fs_info, start, len, 1, 0); in btrfs_free_and_pin_reserved_extent()
7878 struct btrfs_fs_info *fs_info = trans->fs_info; in alloc_reserved_file_extent() local
7899 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_file_extent()
7937 ret = update_block_group(trans, fs_info, ins->objectid, ins->offset, 1); in alloc_reserved_file_extent()
7939 btrfs_err(fs_info, "update block group failed for %llu %llu", in alloc_reserved_file_extent()
7943 trace_btrfs_reserved_extent_alloc(fs_info, ins->objectid, ins->offset); in alloc_reserved_file_extent()
7951 struct btrfs_fs_info *fs_info = trans->fs_info; in alloc_reserved_tree_block() local
7963 bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA); in alloc_reserved_tree_block()
7971 num_bytes = fs_info->nodesize; in alloc_reserved_tree_block()
7981 btrfs_free_and_pin_reserved_extent(fs_info, in alloc_reserved_tree_block()
7983 fs_info->nodesize); in alloc_reserved_tree_block()
7988 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_tree_block()
7992 btrfs_free_and_pin_reserved_extent(fs_info, in alloc_reserved_tree_block()
7994 fs_info->nodesize); in alloc_reserved_tree_block()
8034 ret = update_block_group(trans, fs_info, extent_key.objectid, in alloc_reserved_tree_block()
8035 fs_info->nodesize, 1); in alloc_reserved_tree_block()
8037 btrfs_err(fs_info, "update block group failed for %llu %llu", in alloc_reserved_tree_block()
8042 trace_btrfs_reserved_extent_alloc(fs_info, extent_key.objectid, in alloc_reserved_tree_block()
8043 fs_info->nodesize); in alloc_reserved_tree_block()
8077 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_alloc_logged_file_extent() local
8086 if (!btrfs_fs_incompat(fs_info, MIXED_GROUPS)) { in btrfs_alloc_logged_file_extent()
8087 ret = __exclude_logged_extent(fs_info, ins->objectid, in btrfs_alloc_logged_file_extent()
8093 block_group = btrfs_lookup_block_group(fs_info, ins->objectid); in btrfs_alloc_logged_file_extent()
8115 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_init_new_buffer() local
8118 buf = btrfs_find_create_tree_block(fs_info, bytenr); in btrfs_init_new_buffer()
8124 clean_tree_block(fs_info, buf); in btrfs_init_new_buffer()
8136 write_extent_buffer_fsid(buf, fs_info->fsid); in btrfs_init_new_buffer()
8137 write_extent_buffer_chunk_tree_uuid(buf, fs_info->chunk_tree_uuid); in btrfs_init_new_buffer()
8164 struct btrfs_fs_info *fs_info = root->fs_info; in use_block_rsv() local
8166 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv; in use_block_rsv()
8184 update_global_block_rsv(fs_info); in use_block_rsv()
8188 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) { in use_block_rsv()
8215 static void unuse_block_rsv(struct btrfs_fs_info *fs_info, in unuse_block_rsv() argument
8219 block_rsv_release_bytes(fs_info, block_rsv, NULL, 0, NULL); in unuse_block_rsv()
8233 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_alloc_tree_block() local
8240 u32 blocksize = fs_info->nodesize; in btrfs_alloc_tree_block()
8241 bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA); in btrfs_alloc_tree_block()
8244 if (btrfs_is_testing(fs_info)) { in btrfs_alloc_tree_block()
8310 btrfs_free_reserved_extent(fs_info, ins.objectid, ins.offset, 0); in btrfs_alloc_tree_block()
8312 unuse_block_rsv(fs_info, block_rsv, blocksize); in btrfs_alloc_tree_block()
8337 struct btrfs_fs_info *fs_info = root->fs_info; in reada_walk_down() local
8355 BTRFS_NODEPTRS_PER_BLOCK(fs_info)); in reada_walk_down()
8377 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, in reada_walk_down()
8406 readahead_tree_block(fs_info, bytenr); in reada_walk_down()
8425 struct btrfs_fs_info *fs_info = root->fs_info; in walk_down_proc() local
8443 ret = btrfs_lookup_extent_info(trans, fs_info, in walk_down_proc()
8471 ret = btrfs_set_disk_extent_flags(trans, fs_info, eb->start, in walk_down_proc()
8507 struct btrfs_fs_info *fs_info = root->fs_info; in do_walk_down() local
8536 blocksize = fs_info->nodesize; in do_walk_down()
8538 next = find_extent_buffer(fs_info, bytenr); in do_walk_down()
8540 next = btrfs_find_create_tree_block(fs_info, bytenr); in do_walk_down()
8551 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1, in do_walk_down()
8558 btrfs_err(fs_info, "Missing references."); in do_walk_down()
8600 next = read_tree_block(fs_info, bytenr, generation, level - 1, in do_walk_down()
8615 btrfs_err(root->fs_info, "mismatched level"); in do_walk_down()
8637 btrfs_err(root->fs_info, in do_walk_down()
8649 btrfs_err_rl(fs_info, in do_walk_down()
8688 struct btrfs_fs_info *fs_info = root->fs_info; in walk_up_proc() local
8718 ret = btrfs_lookup_extent_info(trans, fs_info, in walk_up_proc()
8748 btrfs_err_rl(fs_info, in walk_up_proc()
8760 clean_tree_block(fs_info, eb); in walk_up_proc()
8866 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_drop_snapshot() local
8869 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_drop_snapshot()
8878 btrfs_debug(fs_info, "Drop subvolume %llu", root->objectid); in btrfs_drop_snapshot()
8938 ret = btrfs_lookup_extent_info(trans, fs_info, in btrfs_drop_snapshot()
8963 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_snapshot()
8994 (!for_reloc && btrfs_need_cleaner_sleep(fs_info))) { in btrfs_drop_snapshot()
9005 if (!for_reloc && btrfs_need_cleaner_sleep(fs_info)) { in btrfs_drop_snapshot()
9006 btrfs_debug(fs_info, in btrfs_drop_snapshot()
9074 btrfs_handle_fs_error(fs_info, err, NULL); in btrfs_drop_snapshot()
9089 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_drop_subtree() local
9128 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_subtree()
9149 static u64 update_block_group_flags(struct btrfs_fs_info *fs_info, u64 flags) in update_block_group_flags() argument
9158 stripped = get_restripe_target(fs_info, flags); in update_block_group_flags()
9162 num_devices = fs_info->fs_devices->rw_devices; in update_block_group_flags()
9245 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_inc_block_group_ro() local
9251 trans = btrfs_join_transaction(fs_info->extent_root); in btrfs_inc_block_group_ro()
9260 mutex_lock(&fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
9264 mutex_unlock(&fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
9267 ret = btrfs_wait_for_commit(fs_info, transid); in btrfs_inc_block_group_ro()
9277 alloc_flags = update_block_group_flags(fs_info, cache->flags); in btrfs_inc_block_group_ro()
9295 alloc_flags = get_alloc_profile(fs_info, cache->space_info->flags); in btrfs_inc_block_group_ro()
9302 alloc_flags = update_block_group_flags(fs_info, cache->flags); in btrfs_inc_block_group_ro()
9303 mutex_lock(&fs_info->chunk_mutex); in btrfs_inc_block_group_ro()
9305 mutex_unlock(&fs_info->chunk_mutex); in btrfs_inc_block_group_ro()
9307 mutex_unlock(&fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
9315 u64 alloc_flags = get_alloc_profile(trans->fs_info, type); in btrfs_force_chunk_alloc()
9381 int btrfs_can_relocate(struct btrfs_fs_info *fs_info, u64 bytenr) in btrfs_can_relocate() argument
9383 struct btrfs_root *root = fs_info->extent_root; in btrfs_can_relocate()
9386 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_can_relocate()
9398 debug = btrfs_test_opt(fs_info, ENOSPC_DEBUG); in btrfs_can_relocate()
9400 block_group = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_can_relocate()
9405 btrfs_warn(fs_info, in btrfs_can_relocate()
9454 target = get_restripe_target(fs_info, block_group->flags); in btrfs_can_relocate()
9464 btrfs_warn(fs_info, in btrfs_can_relocate()
9494 mutex_lock(&fs_info->chunk_mutex); in btrfs_can_relocate()
9516 btrfs_warn(fs_info, in btrfs_can_relocate()
9519 mutex_unlock(&fs_info->chunk_mutex); in btrfs_can_relocate()
9526 static int find_first_block_group(struct btrfs_fs_info *fs_info, in find_first_block_group() argument
9530 struct btrfs_root *root = fs_info->extent_root; in find_first_block_group()
9560 em_tree = &root->fs_info->mapping_tree.map_tree; in find_first_block_group()
9566 btrfs_err(fs_info, in find_first_block_group()
9572 btrfs_err(fs_info, in find_first_block_group()
9586 btrfs_err(fs_info, in find_first_block_group()
9746 void btrfs_add_raid_kobjects(struct btrfs_fs_info *fs_info) in btrfs_add_raid_kobjects() argument
9754 spin_lock(&fs_info->pending_raid_kobjs_lock); in btrfs_add_raid_kobjects()
9755 list_splice_init(&fs_info->pending_raid_kobjs, &list); in btrfs_add_raid_kobjects()
9756 spin_unlock(&fs_info->pending_raid_kobjs_lock); in btrfs_add_raid_kobjects()
9759 space_info = __find_space_info(fs_info, rkobj->flags); in btrfs_add_raid_kobjects()
9770 btrfs_warn(fs_info, in btrfs_add_raid_kobjects()
9777 struct btrfs_fs_info *fs_info = cache->fs_info; in link_block_group() local
9790 btrfs_warn(cache->fs_info, in link_block_group()
9797 spin_lock(&fs_info->pending_raid_kobjs_lock); in link_block_group()
9798 list_add_tail(&rkobj->list, &fs_info->pending_raid_kobjs); in link_block_group()
9799 spin_unlock(&fs_info->pending_raid_kobjs_lock); in link_block_group()
9805 btrfs_create_block_group_cache(struct btrfs_fs_info *fs_info, in btrfs_create_block_group_cache() argument
9825 cache->fs_info = fs_info; in btrfs_create_block_group_cache()
9826 cache->full_stripe_len = btrfs_full_stripe_len(fs_info, start); in btrfs_create_block_group_cache()
9851 static int check_chunk_block_group_mappings(struct btrfs_fs_info *fs_info) in check_chunk_block_group_mappings() argument
9853 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in check_chunk_block_group_mappings()
9871 bg = btrfs_lookup_block_group(fs_info, em->start); in check_chunk_block_group_mappings()
9873 btrfs_err(fs_info, in check_chunk_block_group_mappings()
9884 btrfs_err(fs_info, in check_chunk_block_group_mappings()
10076 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_create_pending_block_groups() local
10078 struct btrfs_root *extent_root = fs_info->extent_root; in btrfs_create_pending_block_groups()
10112 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_make_block_group() local
10116 btrfs_set_log_full_commit(fs_info, trans); in btrfs_make_block_group()
10118 cache = btrfs_create_block_group_cache(fs_info, chunk_offset, size); in btrfs_make_block_group()
10159 cache->space_info = __find_space_info(fs_info, cache->flags); in btrfs_make_block_group()
10162 ret = btrfs_add_block_group_cache(fs_info, cache); in btrfs_make_block_group()
10173 trace_btrfs_add_block_group(fs_info, cache, 1); in btrfs_make_block_group()
10174 update_space_info(fs_info, cache->flags, size, bytes_used, in btrfs_make_block_group()
10176 update_global_block_rsv(fs_info); in btrfs_make_block_group()
10182 set_avail_alloc_bits(fs_info, type); in btrfs_make_block_group()
10186 static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) in clear_avail_alloc_bits() argument
10191 write_seqlock(&fs_info->profiles_lock); in clear_avail_alloc_bits()
10193 fs_info->avail_data_alloc_bits &= ~extra_flags; in clear_avail_alloc_bits()
10195 fs_info->avail_metadata_alloc_bits &= ~extra_flags; in clear_avail_alloc_bits()
10197 fs_info->avail_system_alloc_bits &= ~extra_flags; in clear_avail_alloc_bits()
10198 write_sequnlock(&fs_info->profiles_lock); in clear_avail_alloc_bits()
10204 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_remove_block_group() local
10205 struct btrfs_root *root = fs_info->extent_root; in btrfs_remove_block_group()
10209 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_remove_block_group()
10219 block_group = btrfs_lookup_block_group(fs_info, group_start); in btrfs_remove_block_group()
10229 btrfs_free_ref_tree_range(fs_info, block_group->key.objectid, in btrfs_remove_block_group()
10237 cluster = &fs_info->data_alloc_cluster; in btrfs_remove_block_group()
10246 cluster = &fs_info->meta_alloc_cluster; in btrfs_remove_block_group()
10261 inode = lookup_free_space_inode(fs_info, block_group, path); in btrfs_remove_block_group()
10324 spin_lock(&fs_info->block_group_cache_lock); in btrfs_remove_block_group()
10326 &fs_info->block_group_cache_tree); in btrfs_remove_block_group()
10329 if (fs_info->first_logical_byte == block_group->key.objectid) in btrfs_remove_block_group()
10330 fs_info->first_logical_byte = (u64)-1; in btrfs_remove_block_group()
10331 spin_unlock(&fs_info->block_group_cache_lock); in btrfs_remove_block_group()
10342 clear_avail_alloc_bits(fs_info, block_group->flags); in btrfs_remove_block_group()
10355 down_write(&fs_info->commit_root_sem); in btrfs_remove_block_group()
10360 &fs_info->caching_block_groups, list) in btrfs_remove_block_group()
10369 up_write(&fs_info->commit_root_sem); in btrfs_remove_block_group()
10390 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) { in btrfs_remove_block_group()
10406 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_block_group()
10454 list_move_tail(&em->list, &fs_info->pinned_chunks); in btrfs_remove_block_group()
10461 em_tree = &fs_info->mapping_tree.map_tree; in btrfs_remove_block_group()
10474 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_block_group()
10496 btrfs_start_trans_remove_block_group(struct btrfs_fs_info *fs_info, in btrfs_start_trans_remove_block_group() argument
10499 struct extent_map_tree *em_tree = &fs_info->mapping_tree.map_tree; in btrfs_start_trans_remove_block_group()
10532 return btrfs_start_transaction_fallback_global_rsv(fs_info->extent_root, in btrfs_start_trans_remove_block_group()
10540 void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info) in btrfs_delete_unused_bgs() argument
10547 if (!test_bit(BTRFS_FS_OPEN, &fs_info->flags)) in btrfs_delete_unused_bgs()
10550 spin_lock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
10551 while (!list_empty(&fs_info->unused_bgs)) { in btrfs_delete_unused_bgs()
10555 block_group = list_first_entry(&fs_info->unused_bgs, in btrfs_delete_unused_bgs()
10566 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
10568 mutex_lock(&fs_info->delete_unused_bgs_mutex); in btrfs_delete_unused_bgs()
10602 trans = btrfs_start_trans_remove_block_group(fs_info, in btrfs_delete_unused_bgs()
10627 mutex_lock(&fs_info->unused_bg_unpin_mutex); in btrfs_delete_unused_bgs()
10628 ret = clear_extent_bits(&fs_info->freed_extents[0], start, end, in btrfs_delete_unused_bgs()
10631 mutex_unlock(&fs_info->unused_bg_unpin_mutex); in btrfs_delete_unused_bgs()
10635 ret = clear_extent_bits(&fs_info->freed_extents[1], start, end, in btrfs_delete_unused_bgs()
10638 mutex_unlock(&fs_info->unused_bg_unpin_mutex); in btrfs_delete_unused_bgs()
10642 mutex_unlock(&fs_info->unused_bg_unpin_mutex); in btrfs_delete_unused_bgs()
10659 trimming = btrfs_test_opt(fs_info, DISCARD); in btrfs_delete_unused_bgs()
10683 spin_lock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
10691 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
10697 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_delete_unused_bgs()
10699 spin_lock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
10701 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
10704 int btrfs_init_space_info(struct btrfs_fs_info *fs_info) in btrfs_init_space_info() argument
10712 disk_super = fs_info->super_copy; in btrfs_init_space_info()
10721 ret = create_space_info(fs_info, flags); in btrfs_init_space_info()
10727 ret = create_space_info(fs_info, flags); in btrfs_init_space_info()
10730 ret = create_space_info(fs_info, flags); in btrfs_init_space_info()
10735 ret = create_space_info(fs_info, flags); in btrfs_init_space_info()
10741 int btrfs_error_unpin_extent_range(struct btrfs_fs_info *fs_info, in btrfs_error_unpin_extent_range() argument
10744 return unpin_extent_range(fs_info, start, end, false); in btrfs_error_unpin_extent_range()
10784 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_trim_free_extents() local
10788 ret = mutex_lock_interruptible(&fs_info->chunk_mutex); in btrfs_trim_free_extents()
10792 down_read(&fs_info->commit_root_sem); in btrfs_trim_free_extents()
10794 spin_lock(&fs_info->trans_lock); in btrfs_trim_free_extents()
10795 trans = fs_info->running_transaction; in btrfs_trim_free_extents()
10798 spin_unlock(&fs_info->trans_lock); in btrfs_trim_free_extents()
10806 up_read(&fs_info->commit_root_sem); in btrfs_trim_free_extents()
10807 mutex_unlock(&fs_info->chunk_mutex); in btrfs_trim_free_extents()
10814 up_read(&fs_info->commit_root_sem); in btrfs_trim_free_extents()
10815 mutex_unlock(&fs_info->chunk_mutex); in btrfs_trim_free_extents()
10834 int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) in btrfs_trim_fs() argument
10843 u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy); in btrfs_trim_fs()
10850 cache = btrfs_lookup_first_block_group(fs_info, range->start); in btrfs_trim_fs()
10852 cache = btrfs_lookup_block_group(fs_info, range->start); in btrfs_trim_fs()
10890 cache = next_block_group(fs_info, cache); in btrfs_trim_fs()
10893 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_trim_fs()
10894 devices = &fs_info->fs_devices->alloc_list; in btrfs_trim_fs()
10903 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_trim_fs()
10955 struct btrfs_fs_info *fs_info = bg->fs_info; in btrfs_mark_bg_unused() local
10957 spin_lock(&fs_info->unused_bgs_lock); in btrfs_mark_bg_unused()
10961 list_add_tail(&bg->bg_list, &fs_info->unused_bgs); in btrfs_mark_bg_unused()
10963 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_mark_bg_unused()