Lines Matching refs:fs_info
25 static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags) in get_restripe_target() argument
27 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in get_restripe_target()
54 static u64 btrfs_reduce_alloc_profile(struct btrfs_fs_info *fs_info, u64 flags) in btrfs_reduce_alloc_profile() argument
56 u64 num_devices = fs_info->fs_devices->rw_devices; in btrfs_reduce_alloc_profile()
65 spin_lock(&fs_info->balance_lock); in btrfs_reduce_alloc_profile()
66 target = get_restripe_target(fs_info, flags); in btrfs_reduce_alloc_profile()
68 spin_unlock(&fs_info->balance_lock); in btrfs_reduce_alloc_profile()
71 spin_unlock(&fs_info->balance_lock); in btrfs_reduce_alloc_profile()
96 u64 btrfs_get_alloc_profile(struct btrfs_fs_info *fs_info, u64 orig_flags) in btrfs_get_alloc_profile() argument
103 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_get_alloc_profile()
106 flags |= fs_info->avail_data_alloc_bits; in btrfs_get_alloc_profile()
108 flags |= fs_info->avail_system_alloc_bits; in btrfs_get_alloc_profile()
110 flags |= fs_info->avail_metadata_alloc_bits; in btrfs_get_alloc_profile()
111 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_get_alloc_profile()
113 return btrfs_reduce_alloc_profile(fs_info, flags); in btrfs_get_alloc_profile()
133 btrfs_discard_cancel_work(&cache->fs_info->discard_ctl, in btrfs_put_block_group()
255 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_next_block_group() local
258 spin_lock(&fs_info->block_group_cache_lock); in btrfs_next_block_group()
264 spin_unlock(&fs_info->block_group_cache_lock); in btrfs_next_block_group()
266 cache = btrfs_lookup_first_block_group(fs_info, next_bytenr); return cache; in btrfs_next_block_group()
275 spin_unlock(&fs_info->block_group_cache_lock); in btrfs_next_block_group()
279 bool btrfs_inc_nocow_writers(struct btrfs_fs_info *fs_info, u64 bytenr) in btrfs_inc_nocow_writers() argument
284 bg = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_inc_nocow_writers()
302 void btrfs_dec_nocow_writers(struct btrfs_fs_info *fs_info, u64 bytenr) in btrfs_dec_nocow_writers() argument
306 bg = btrfs_lookup_block_group(fs_info, bytenr); in btrfs_dec_nocow_writers()
323 void btrfs_dec_block_group_reservations(struct btrfs_fs_info *fs_info, in btrfs_dec_block_group_reservations() argument
328 bg = btrfs_lookup_block_group(fs_info, start); in btrfs_dec_block_group_reservations()
430 struct btrfs_fs_info *fs_info = block_group->fs_info; in fragment_free_space() local
434 fs_info->nodesize : fs_info->sectorsize; in fragment_free_space()
456 struct btrfs_fs_info *info = block_group->fs_info; in add_new_free_space()
496 struct btrfs_fs_info *fs_info = block_group->fs_info; in load_extent_tree_free() local
497 struct btrfs_root *extent_root = fs_info->extent_root; in load_extent_tree_free()
545 if (btrfs_fs_closing(fs_info) > 1) { in load_extent_tree_free()
558 rwsem_is_contended(&fs_info->commit_root_sem)) { in load_extent_tree_free()
562 up_read(&fs_info->commit_root_sem); in load_extent_tree_free()
566 down_read(&fs_info->commit_root_sem); in load_extent_tree_free()
605 fs_info->nodesize; in load_extent_tree_free()
631 struct btrfs_fs_info *fs_info; in caching_thread() local
637 fs_info = block_group->fs_info; in caching_thread()
640 down_read(&fs_info->commit_root_sem); in caching_thread()
649 if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE) && in caching_thread()
650 !(test_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags))) in caching_thread()
676 up_read(&fs_info->commit_root_sem); in caching_thread()
689 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_cache_block_group() local
743 if (btrfs_test_opt(fs_info, SPACE_CACHE)) { in btrfs_cache_block_group()
807 down_write(&fs_info->commit_root_sem); in btrfs_cache_block_group()
809 list_add_tail(&caching_ctl->list, &fs_info->caching_block_groups); in btrfs_cache_block_group()
810 up_write(&fs_info->commit_root_sem); in btrfs_cache_block_group()
814 btrfs_queue_work(fs_info->caching_workers, &caching_ctl->work); in btrfs_cache_block_group()
819 static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) in clear_avail_alloc_bits() argument
824 write_seqlock(&fs_info->profiles_lock); in clear_avail_alloc_bits()
826 fs_info->avail_data_alloc_bits &= ~extra_flags; in clear_avail_alloc_bits()
828 fs_info->avail_metadata_alloc_bits &= ~extra_flags; in clear_avail_alloc_bits()
830 fs_info->avail_system_alloc_bits &= ~extra_flags; in clear_avail_alloc_bits()
831 write_sequnlock(&fs_info->profiles_lock); in clear_avail_alloc_bits()
842 static void clear_incompat_bg_bits(struct btrfs_fs_info *fs_info, u64 flags) in clear_incompat_bg_bits() argument
850 struct list_head *head = &fs_info->space_info; in clear_incompat_bg_bits()
866 btrfs_clear_fs_incompat(fs_info, RAID56); in clear_incompat_bg_bits()
868 btrfs_clear_fs_incompat(fs_info, RAID1C34); in clear_incompat_bg_bits()
876 struct btrfs_fs_info *fs_info = trans->fs_info; in remove_block_group_item() local
881 root = fs_info->extent_root; in remove_block_group_item()
899 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_remove_block_group() local
903 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_remove_block_group()
914 block_group = btrfs_lookup_block_group(fs_info, group_start); in btrfs_remove_block_group()
924 btrfs_free_ref_tree_range(fs_info, block_group->start, in btrfs_remove_block_group()
931 cluster = &fs_info->data_alloc_cluster; in btrfs_remove_block_group()
940 cluster = &fs_info->meta_alloc_cluster; in btrfs_remove_block_group()
1019 spin_lock(&fs_info->block_group_cache_lock); in btrfs_remove_block_group()
1021 &fs_info->block_group_cache_tree); in btrfs_remove_block_group()
1027 if (fs_info->first_logical_byte == block_group->start) in btrfs_remove_block_group()
1028 fs_info->first_logical_byte = (u64)-1; in btrfs_remove_block_group()
1029 spin_unlock(&fs_info->block_group_cache_lock); in btrfs_remove_block_group()
1040 clear_avail_alloc_bits(fs_info, block_group->flags); in btrfs_remove_block_group()
1043 clear_incompat_bg_bits(fs_info, block_group->flags); in btrfs_remove_block_group()
1054 down_write(&fs_info->commit_root_sem); in btrfs_remove_block_group()
1059 &fs_info->caching_block_groups, list) in btrfs_remove_block_group()
1068 up_write(&fs_info->commit_root_sem); in btrfs_remove_block_group()
1086 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) { in btrfs_remove_block_group()
1153 em_tree = &fs_info->mapping_tree; in btrfs_remove_block_group()
1165 btrfs_delayed_refs_rsv_release(fs_info, 1); in btrfs_remove_block_group()
1171 struct btrfs_fs_info *fs_info, const u64 chunk_offset) in btrfs_start_trans_remove_block_group() argument
1173 struct extent_map_tree *em_tree = &fs_info->mapping_tree; in btrfs_start_trans_remove_block_group()
1206 return btrfs_start_transaction_fallback_global_rsv(fs_info->extent_root, in btrfs_start_trans_remove_block_group()
1268 if (btrfs_can_overcommit(cache->fs_info, sinfo, num_bytes, in inc_block_group_ro()
1281 if (ret == -ENOSPC && btrfs_test_opt(cache->fs_info, ENOSPC_DEBUG)) { in inc_block_group_ro()
1282 btrfs_info(cache->fs_info, in inc_block_group_ro()
1284 btrfs_dump_space_info(cache->fs_info, cache->space_info, 0, 0); in inc_block_group_ro()
1292 struct btrfs_fs_info *fs_info = bg->fs_info; in clean_pinned_extents() local
1298 spin_lock(&fs_info->trans_lock); in clean_pinned_extents()
1299 if (trans->transaction->list.prev != &fs_info->trans_list) { in clean_pinned_extents()
1304 spin_unlock(&fs_info->trans_lock); in clean_pinned_extents()
1316 mutex_lock(&fs_info->unused_bg_unpin_mutex); in clean_pinned_extents()
1327 mutex_unlock(&fs_info->unused_bg_unpin_mutex); in clean_pinned_extents()
1338 void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info) in btrfs_delete_unused_bgs() argument
1343 const bool async_trim_enabled = btrfs_test_opt(fs_info, DISCARD_ASYNC); in btrfs_delete_unused_bgs()
1346 if (!test_bit(BTRFS_FS_OPEN, &fs_info->flags)) in btrfs_delete_unused_bgs()
1349 spin_lock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
1350 while (!list_empty(&fs_info->unused_bgs)) { in btrfs_delete_unused_bgs()
1353 block_group = list_first_entry(&fs_info->unused_bgs, in btrfs_delete_unused_bgs()
1364 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
1366 btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group); in btrfs_delete_unused_bgs()
1368 mutex_lock(&fs_info->delete_unused_bgs_mutex); in btrfs_delete_unused_bgs()
1378 if (btrfs_test_opt(fs_info, DISCARD_ASYNC) && in btrfs_delete_unused_bgs()
1383 btrfs_discard_queue_work(&fs_info->discard_ctl, in btrfs_delete_unused_bgs()
1417 trans = btrfs_start_trans_remove_block_group(fs_info, in btrfs_delete_unused_bgs()
1441 spin_lock(&fs_info->discard_ctl.lock); in btrfs_delete_unused_bgs()
1443 spin_unlock(&fs_info->discard_ctl.lock); in btrfs_delete_unused_bgs()
1445 btrfs_discard_queue_work(&fs_info->discard_ctl, in btrfs_delete_unused_bgs()
1449 spin_unlock(&fs_info->discard_ctl.lock); in btrfs_delete_unused_bgs()
1455 btrfs_space_info_update_bytes_pinned(fs_info, space_info, in btrfs_delete_unused_bgs()
1471 if (!async_trim_enabled && btrfs_test_opt(fs_info, DISCARD_ASYNC)) in btrfs_delete_unused_bgs()
1475 trimming = btrfs_test_opt(fs_info, DISCARD_SYNC); in btrfs_delete_unused_bgs()
1499 spin_lock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
1507 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
1513 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_delete_unused_bgs()
1515 spin_lock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
1517 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_delete_unused_bgs()
1522 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_delete_unused_bgs()
1524 btrfs_discard_punt_unused_bgs_list(fs_info); in btrfs_delete_unused_bgs()
1529 struct btrfs_fs_info *fs_info = bg->fs_info; in btrfs_mark_bg_unused() local
1531 spin_lock(&fs_info->unused_bgs_lock); in btrfs_mark_bg_unused()
1535 list_add_tail(&bg->bg_list, &fs_info->unused_bgs); in btrfs_mark_bg_unused()
1537 spin_unlock(&fs_info->unused_bgs_lock); in btrfs_mark_bg_unused()
1540 static int read_bg_from_eb(struct btrfs_fs_info *fs_info, struct btrfs_key *key, in read_bg_from_eb() argument
1554 em_tree = &fs_info->mapping_tree; in read_bg_from_eb()
1559 btrfs_err(fs_info, in read_bg_from_eb()
1566 btrfs_err(fs_info, in read_bg_from_eb()
1579 btrfs_err(fs_info, in read_bg_from_eb()
1591 static int find_first_block_group(struct btrfs_fs_info *fs_info, in find_first_block_group() argument
1595 struct btrfs_root *root = fs_info->extent_root; in find_first_block_group()
1620 ret = read_bg_from_eb(fs_info, &found_key, path); in find_first_block_group()
1630 static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) in set_avail_alloc_bits() argument
1635 write_seqlock(&fs_info->profiles_lock); in set_avail_alloc_bits()
1637 fs_info->avail_data_alloc_bits |= extra_flags; in set_avail_alloc_bits()
1639 fs_info->avail_metadata_alloc_bits |= extra_flags; in set_avail_alloc_bits()
1641 fs_info->avail_system_alloc_bits |= extra_flags; in set_avail_alloc_bits()
1642 write_sequnlock(&fs_info->profiles_lock); in set_avail_alloc_bits()
1658 int btrfs_rmap_block(struct btrfs_fs_info *fs_info, u64 chunk_start, in btrfs_rmap_block() argument
1670 em = btrfs_get_chunk_map(fs_info, chunk_start, 1); in btrfs_rmap_block()
1736 struct btrfs_fs_info *fs_info = cache->fs_info; in exclude_super_stripes() local
1745 ret = btrfs_add_excluded_extent(fs_info, cache->start, in exclude_super_stripes()
1753 ret = btrfs_rmap_block(fs_info, cache->start, in exclude_super_stripes()
1763 ret = btrfs_add_excluded_extent(fs_info, logical[nr], in exclude_super_stripes()
1787 struct btrfs_fs_info *fs_info, u64 start) in btrfs_create_block_group_cache() argument
1804 cache->fs_info = fs_info; in btrfs_create_block_group_cache()
1805 cache->full_stripe_len = btrfs_full_stripe_len(fs_info, start); in btrfs_create_block_group_cache()
1831 static int check_chunk_block_group_mappings(struct btrfs_fs_info *fs_info) in check_chunk_block_group_mappings() argument
1833 struct extent_map_tree *map_tree = &fs_info->mapping_tree; in check_chunk_block_group_mappings()
1851 bg = btrfs_lookup_block_group(fs_info, em->start); in check_chunk_block_group_mappings()
1853 btrfs_err(fs_info, in check_chunk_block_group_mappings()
1863 btrfs_err(fs_info, in check_chunk_block_group_mappings()
2082 struct btrfs_fs_info *fs_info = trans->fs_info; in insert_block_group_item() local
2097 root = fs_info->extent_root; in insert_block_group_item()
2103 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_create_pending_block_groups() local
2141 btrfs_delayed_refs_rsv_release(fs_info, 1); in btrfs_create_pending_block_groups()
2150 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_make_block_group() local
2156 cache = btrfs_create_block_group_cache(fs_info, chunk_offset); in btrfs_make_block_group()
2192 cache->space_info = btrfs_find_space_info(fs_info, cache->flags); in btrfs_make_block_group()
2195 ret = btrfs_add_block_group_cache(fs_info, cache); in btrfs_make_block_group()
2206 trace_btrfs_add_block_group(fs_info, cache, 1); in btrfs_make_block_group()
2207 btrfs_update_space_info(fs_info, cache->flags, size, bytes_used, in btrfs_make_block_group()
2209 btrfs_update_global_block_rsv(fs_info); in btrfs_make_block_group()
2217 set_avail_alloc_bits(fs_info, type); in btrfs_make_block_group()
2233 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_inc_block_group_ro() local
2239 trans = btrfs_join_transaction(fs_info->extent_root); in btrfs_inc_block_group_ro()
2248 mutex_lock(&fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
2252 mutex_unlock(&fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
2255 ret = btrfs_wait_for_commit(fs_info, transid); in btrfs_inc_block_group_ro()
2266 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags); in btrfs_inc_block_group_ro()
2286 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->space_info->flags); in btrfs_inc_block_group_ro()
2295 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags); in btrfs_inc_block_group_ro()
2296 mutex_lock(&fs_info->chunk_mutex); in btrfs_inc_block_group_ro()
2298 mutex_unlock(&fs_info->chunk_mutex); in btrfs_inc_block_group_ro()
2301 mutex_unlock(&fs_info->ro_block_group_mutex); in btrfs_inc_block_group_ro()
2330 struct btrfs_fs_info *fs_info = trans->fs_info; in update_block_group_item() local
2332 struct btrfs_root *root = fs_info->extent_root; in update_block_group_item()
2367 struct btrfs_fs_info *fs_info = block_group->fs_info; in cache_save_setup() local
2368 struct btrfs_root *root = fs_info->tree_root; in cache_save_setup()
2442 ret = btrfs_check_trunc_cache_free_space(fs_info, in cache_save_setup()
2443 &fs_info->global_block_rsv); in cache_save_setup()
2454 !btrfs_test_opt(fs_info, SPACE_CACHE)) { in cache_save_setup()
2527 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_setup_space_cache() local
2533 !btrfs_test_opt(fs_info, SPACE_CACHE)) in btrfs_setup_space_cache()
2565 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_start_dirty_block_groups() local
2684 btrfs_delayed_refs_rsv_release(fs_info, 1); in btrfs_start_dirty_block_groups()
2722 btrfs_cleanup_dirty_bgs(cur_trans, fs_info); in btrfs_start_dirty_block_groups()
2731 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_write_dirty_block_groups() local
2832 btrfs_delayed_refs_rsv_release(fs_info, 1); in btrfs_write_dirty_block_groups()
2856 struct btrfs_fs_info *info = trans->fs_info; in btrfs_update_block_group()
2985 trace_btrfs_space_reservation(cache->fs_info, "space_info", in btrfs_add_reserved_bytes()
2987 btrfs_space_info_update_bytes_may_use(cache->fs_info, in btrfs_add_reserved_bytes()
2997 btrfs_try_granting_tickets(cache->fs_info, space_info); in btrfs_add_reserved_bytes()
3032 btrfs_try_granting_tickets(cache->fs_info, space_info); in btrfs_free_reserved_bytes()
3047 static int should_alloc_chunk(struct btrfs_fs_info *fs_info, in should_alloc_chunk() argument
3061 thresh = btrfs_super_total_bytes(fs_info->super_copy); in should_alloc_chunk()
3075 u64 alloc_flags = btrfs_get_alloc_profile(trans->fs_info, type); in btrfs_force_chunk_alloc()
3092 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_chunk_alloc() local
3102 space_info = btrfs_find_space_info(fs_info, flags); in btrfs_chunk_alloc()
3109 should_alloc = should_alloc_chunk(fs_info, space_info, force); in btrfs_chunk_alloc()
3131 mutex_lock(&fs_info->chunk_mutex); in btrfs_chunk_alloc()
3132 mutex_unlock(&fs_info->chunk_mutex); in btrfs_chunk_alloc()
3143 mutex_lock(&fs_info->chunk_mutex); in btrfs_chunk_alloc()
3158 if (flags & BTRFS_BLOCK_GROUP_DATA && fs_info->metadata_ratio) { in btrfs_chunk_alloc()
3159 fs_info->data_chunk_allocations++; in btrfs_chunk_alloc()
3160 if (!(fs_info->data_chunk_allocations % in btrfs_chunk_alloc()
3161 fs_info->metadata_ratio)) in btrfs_chunk_alloc()
3162 force_metadata_allocation(fs_info); in btrfs_chunk_alloc()
3189 mutex_unlock(&fs_info->chunk_mutex); in btrfs_chunk_alloc()
3210 static u64 get_profile_num_devs(struct btrfs_fs_info *fs_info, u64 type) in get_profile_num_devs() argument
3216 num_dev = fs_info->fs_devices->rw_devices; in get_profile_num_devs()
3226 struct btrfs_fs_info *fs_info = trans->fs_info; in check_system_chunk() local
3237 lockdep_assert_held(&fs_info->chunk_mutex); in check_system_chunk()
3239 info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in check_system_chunk()
3244 num_devs = get_profile_num_devs(fs_info, type); in check_system_chunk()
3247 thresh = btrfs_calc_metadata_size(fs_info, num_devs) + in check_system_chunk()
3248 btrfs_calc_insert_metadata_size(fs_info, 1); in check_system_chunk()
3250 if (left < thresh && btrfs_test_opt(fs_info, ENOSPC_DEBUG)) { in check_system_chunk()
3251 btrfs_info(fs_info, "left=%llu, need=%llu, flags=%llu", in check_system_chunk()
3253 btrfs_dump_space_info(fs_info, info, 0, 0); in check_system_chunk()
3257 u64 flags = btrfs_system_alloc_profile(fs_info); in check_system_chunk()
3269 ret = btrfs_block_rsv_add(fs_info->chunk_root, in check_system_chunk()
3270 &fs_info->chunk_block_rsv, in check_system_chunk()
3406 struct btrfs_fs_info *fs_info = block_group->fs_info; in btrfs_unfreeze_block_group() local
3417 em_tree = &fs_info->mapping_tree; in btrfs_unfreeze_block_group()