Lines Matching refs:space_info
546 spin_lock(&block_group->space_info->lock); in caching_thread()
550 block_group->space_info->bytes_used += bytes_used >> 1; in caching_thread()
552 spin_unlock(&block_group->space_info->lock); in caching_thread()
663 spin_lock(&cache->space_info->lock); in cache_block_group()
667 cache->space_info->bytes_used += bytes_used >> 1; in cache_block_group()
669 spin_unlock(&cache->space_info->lock); in cache_block_group()
745 struct list_head *head = &info->space_info; in __find_space_info()
767 struct list_head *head = &info->space_info; in btrfs_clear_space_info_full()
2782 if (global_rsv->space_info->full) { in btrfs_check_space_for_delayed_refs()
3793 struct btrfs_space_info **space_info) in update_space_info() argument
3816 *space_info = found; in update_space_info()
3858 *space_info = found; in update_space_info()
3859 list_add_rcu(&found->list, &info->space_info); in update_space_info()
4204 struct list_head *head = &info->space_info; in force_metadata_allocation()
4339 struct btrfs_space_info *space_info; in do_chunk_alloc() local
4348 space_info = __find_space_info(extent_root->fs_info, flags); in do_chunk_alloc()
4349 if (!space_info) { in do_chunk_alloc()
4351 0, 0, &space_info); in do_chunk_alloc()
4354 BUG_ON(!space_info); /* Logic error */ in do_chunk_alloc()
4357 spin_lock(&space_info->lock); in do_chunk_alloc()
4358 if (force < space_info->force_alloc) in do_chunk_alloc()
4359 force = space_info->force_alloc; in do_chunk_alloc()
4360 if (space_info->full) { in do_chunk_alloc()
4361 if (should_alloc_chunk(extent_root, space_info, force)) in do_chunk_alloc()
4365 spin_unlock(&space_info->lock); in do_chunk_alloc()
4369 if (!should_alloc_chunk(extent_root, space_info, force)) { in do_chunk_alloc()
4370 spin_unlock(&space_info->lock); in do_chunk_alloc()
4372 } else if (space_info->chunk_alloc) { in do_chunk_alloc()
4375 space_info->chunk_alloc = 1; in do_chunk_alloc()
4378 spin_unlock(&space_info->lock); in do_chunk_alloc()
4400 if (btrfs_mixed_space_info(space_info)) in do_chunk_alloc()
4424 spin_lock(&space_info->lock); in do_chunk_alloc()
4428 space_info->full = 1; in do_chunk_alloc()
4432 space_info->force_alloc = CHUNK_ALLOC_NO_FORCE; in do_chunk_alloc()
4434 space_info->chunk_alloc = 0; in do_chunk_alloc()
4435 spin_unlock(&space_info->lock); in do_chunk_alloc()
4460 struct btrfs_space_info *space_info, u64 bytes, in can_overcommit() argument
4469 used = space_info->bytes_used + space_info->bytes_reserved + in can_overcommit()
4470 space_info->bytes_pinned + space_info->bytes_readonly; in can_overcommit()
4481 if (used + space_size >= space_info->total_bytes) in can_overcommit()
4484 used += space_info->bytes_may_use; in can_overcommit()
4511 if (used + bytes < space_info->total_bytes + avail) in can_overcommit()
4559 struct btrfs_space_info *space_info; in shrink_delalloc() local
4575 space_info = block_rsv->space_info; in shrink_delalloc()
4613 spin_lock(&space_info->lock); in shrink_delalloc()
4614 if (can_overcommit(root, space_info, orig, flush)) { in shrink_delalloc()
4615 spin_unlock(&space_info->lock); in shrink_delalloc()
4618 spin_unlock(&space_info->lock); in shrink_delalloc()
4644 struct btrfs_space_info *space_info, in may_commit_transaction() argument
4658 if (percpu_counter_compare(&space_info->total_bytes_pinned, in may_commit_transaction()
4666 if (space_info != delayed_rsv->space_info) in may_commit_transaction()
4670 if (percpu_counter_compare(&space_info->total_bytes_pinned, in may_commit_transaction()
4695 struct btrfs_space_info *space_info, u64 num_bytes, in flush_space() argument
4737 ret = may_commit_transaction(root, space_info, orig_bytes, 0); in flush_space()
4749 struct btrfs_space_info *space_info) in btrfs_calc_reclaim_metadata_size() argument
4757 spin_lock(&space_info->lock); in btrfs_calc_reclaim_metadata_size()
4758 if (can_overcommit(root, space_info, to_reclaim, in btrfs_calc_reclaim_metadata_size()
4764 used = space_info->bytes_used + space_info->bytes_reserved + in btrfs_calc_reclaim_metadata_size()
4765 space_info->bytes_pinned + space_info->bytes_readonly + in btrfs_calc_reclaim_metadata_size()
4766 space_info->bytes_may_use; in btrfs_calc_reclaim_metadata_size()
4767 if (can_overcommit(root, space_info, 1024 * 1024, in btrfs_calc_reclaim_metadata_size()
4769 expected = div_factor_fine(space_info->total_bytes, 95); in btrfs_calc_reclaim_metadata_size()
4771 expected = div_factor_fine(space_info->total_bytes, 90); in btrfs_calc_reclaim_metadata_size()
4777 to_reclaim = min(to_reclaim, space_info->bytes_may_use + in btrfs_calc_reclaim_metadata_size()
4778 space_info->bytes_reserved); in btrfs_calc_reclaim_metadata_size()
4780 spin_unlock(&space_info->lock); in btrfs_calc_reclaim_metadata_size()
4785 static inline int need_do_async_reclaim(struct btrfs_space_info *space_info, in need_do_async_reclaim() argument
4788 u64 thresh = div_factor_fine(space_info->total_bytes, 98); in need_do_async_reclaim()
4791 if (space_info->bytes_used >= thresh) in need_do_async_reclaim()
4798 static int btrfs_need_do_async_reclaim(struct btrfs_space_info *space_info, in btrfs_need_do_async_reclaim() argument
4804 spin_lock(&space_info->lock); in btrfs_need_do_async_reclaim()
4809 if (flush_state > COMMIT_TRANS && space_info->full) { in btrfs_need_do_async_reclaim()
4810 spin_unlock(&space_info->lock); in btrfs_need_do_async_reclaim()
4814 used = space_info->bytes_used + space_info->bytes_reserved + in btrfs_need_do_async_reclaim()
4815 space_info->bytes_pinned + space_info->bytes_readonly + in btrfs_need_do_async_reclaim()
4816 space_info->bytes_may_use; in btrfs_need_do_async_reclaim()
4817 if (need_do_async_reclaim(space_info, fs_info, used)) { in btrfs_need_do_async_reclaim()
4818 spin_unlock(&space_info->lock); in btrfs_need_do_async_reclaim()
4821 spin_unlock(&space_info->lock); in btrfs_need_do_async_reclaim()
4829 struct btrfs_space_info *space_info; in btrfs_async_reclaim_metadata_space() local
4834 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); in btrfs_async_reclaim_metadata_space()
4837 space_info); in btrfs_async_reclaim_metadata_space()
4843 flush_space(fs_info->fs_root, space_info, to_reclaim, in btrfs_async_reclaim_metadata_space()
4846 if (!btrfs_need_do_async_reclaim(space_info, fs_info, in btrfs_async_reclaim_metadata_space()
4876 struct btrfs_space_info *space_info = block_rsv->space_info; in reserve_metadata_bytes() local
4885 spin_lock(&space_info->lock); in reserve_metadata_bytes()
4891 space_info->flush) { in reserve_metadata_bytes()
4892 spin_unlock(&space_info->lock); in reserve_metadata_bytes()
4901 ret = wait_event_killable(space_info->wait, !space_info->flush); in reserve_metadata_bytes()
4906 spin_lock(&space_info->lock); in reserve_metadata_bytes()
4910 used = space_info->bytes_used + space_info->bytes_reserved + in reserve_metadata_bytes()
4911 space_info->bytes_pinned + space_info->bytes_readonly + in reserve_metadata_bytes()
4912 space_info->bytes_may_use; in reserve_metadata_bytes()
4921 if (used <= space_info->total_bytes) { in reserve_metadata_bytes()
4922 if (used + orig_bytes <= space_info->total_bytes) { in reserve_metadata_bytes()
4923 space_info->bytes_may_use += orig_bytes; in reserve_metadata_bytes()
4925 "space_info", space_info->flags, orig_bytes, 1); in reserve_metadata_bytes()
4941 num_bytes = used - space_info->total_bytes + in reserve_metadata_bytes()
4945 if (ret && can_overcommit(root, space_info, orig_bytes, flush)) { in reserve_metadata_bytes()
4946 space_info->bytes_may_use += orig_bytes; in reserve_metadata_bytes()
4948 space_info->flags, orig_bytes, in reserve_metadata_bytes()
4963 space_info->flush = 1; in reserve_metadata_bytes()
4964 } else if (!ret && space_info->flags & BTRFS_BLOCK_GROUP_METADATA) { in reserve_metadata_bytes()
4972 need_do_async_reclaim(space_info, root->fs_info, used) && in reserve_metadata_bytes()
4977 spin_unlock(&space_info->lock); in reserve_metadata_bytes()
4982 ret = flush_space(root, space_info, num_bytes, orig_bytes, in reserve_metadata_bytes()
5017 space_info->flags, orig_bytes, 1); in reserve_metadata_bytes()
5019 spin_lock(&space_info->lock); in reserve_metadata_bytes()
5020 space_info->flush = 0; in reserve_metadata_bytes()
5021 wake_up_all(&space_info->wait); in reserve_metadata_bytes()
5022 spin_unlock(&space_info->lock); in reserve_metadata_bytes()
5081 if (global_rsv->space_info != dest->space_info) in btrfs_cond_migrate_bytes()
5103 struct btrfs_space_info *space_info = block_rsv->space_info; in block_rsv_release_bytes() local
5134 spin_lock(&space_info->lock); in block_rsv_release_bytes()
5135 space_info->bytes_may_use -= num_bytes; in block_rsv_release_bytes()
5137 space_info->flags, num_bytes, 0); in block_rsv_release_bytes()
5138 spin_unlock(&space_info->lock); in block_rsv_release_bytes()
5174 block_rsv->space_info = __find_space_info(fs_info, in btrfs_alloc_block_rsv()
5272 block_rsv->space_info != global_rsv->space_info) in btrfs_block_rsv_release()
5316 struct btrfs_space_info *sinfo = block_rsv->space_info; in update_global_block_rsv()
5353 struct btrfs_space_info *space_info; in init_global_block_rsv() local
5355 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM); in init_global_block_rsv()
5356 fs_info->chunk_block_rsv.space_info = space_info; in init_global_block_rsv()
5358 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); in init_global_block_rsv()
5359 fs_info->global_block_rsv.space_info = space_info; in init_global_block_rsv()
5360 fs_info->delalloc_block_rsv.space_info = space_info; in init_global_block_rsv()
5361 fs_info->trans_block_rsv.space_info = space_info; in init_global_block_rsv()
5362 fs_info->empty_block_rsv.space_info = space_info; in init_global_block_rsv()
5363 fs_info->delayed_block_rsv.space_info = space_info; in init_global_block_rsv()
5488 rsv->space_info = __find_space_info(root->fs_info, in btrfs_subvolume_reserve_metadata()
5890 spin_lock(&cache->space_info->lock); in update_block_group()
5903 cache->space_info->bytes_reserved -= num_bytes; in update_block_group()
5904 cache->space_info->bytes_used += num_bytes; in update_block_group()
5905 cache->space_info->disk_used += num_bytes * factor; in update_block_group()
5907 spin_unlock(&cache->space_info->lock); in update_block_group()
5912 cache->space_info->bytes_pinned += num_bytes; in update_block_group()
5913 cache->space_info->bytes_used -= num_bytes; in update_block_group()
5914 cache->space_info->disk_used -= num_bytes * factor; in update_block_group()
5916 spin_unlock(&cache->space_info->lock); in update_block_group()
5981 spin_lock(&cache->space_info->lock); in pin_down_extent()
5984 cache->space_info->bytes_pinned += num_bytes; in pin_down_extent()
5987 cache->space_info->bytes_reserved -= num_bytes; in pin_down_extent()
5990 spin_unlock(&cache->space_info->lock); in pin_down_extent()
6145 struct btrfs_space_info *space_info = cache->space_info; in btrfs_update_reserved_bytes() local
6148 spin_lock(&space_info->lock); in btrfs_update_reserved_bytes()
6155 space_info->bytes_reserved += num_bytes; in btrfs_update_reserved_bytes()
6158 "space_info", space_info->flags, in btrfs_update_reserved_bytes()
6160 space_info->bytes_may_use -= num_bytes; in btrfs_update_reserved_bytes()
6168 space_info->bytes_readonly += num_bytes; in btrfs_update_reserved_bytes()
6170 space_info->bytes_reserved -= num_bytes; in btrfs_update_reserved_bytes()
6176 spin_unlock(&space_info->lock); in btrfs_update_reserved_bytes()
6217 fetch_cluster_info(struct btrfs_root *root, struct btrfs_space_info *space_info, in fetch_cluster_info() argument
6224 if (btrfs_mixed_space_info(space_info)) in fetch_cluster_info()
6229 if (space_info->flags & BTRFS_BLOCK_GROUP_METADATA) { in fetch_cluster_info()
6233 } else if ((space_info->flags & BTRFS_BLOCK_GROUP_DATA) && ssd) { in fetch_cluster_info()
6245 struct btrfs_space_info *space_info; in unpin_extent_range() local
6264 cache->space_info, in unpin_extent_range()
6280 space_info = cache->space_info; in unpin_extent_range()
6295 spin_lock(&space_info->lock); in unpin_extent_range()
6298 space_info->bytes_pinned -= len; in unpin_extent_range()
6299 space_info->max_extent_size = 0; in unpin_extent_range()
6300 percpu_counter_add(&space_info->total_bytes_pinned, -len); in unpin_extent_range()
6302 space_info->bytes_readonly += len; in unpin_extent_range()
6306 if (!readonly && global_rsv->space_info == space_info) { in unpin_extent_range()
6312 space_info->bytes_may_use += len; in unpin_extent_range()
6318 spin_unlock(&space_info->lock); in unpin_extent_range()
6395 struct btrfs_space_info *space_info; in add_pinned_bytes() local
6407 space_info = __find_space_info(fs_info, flags); in add_pinned_bytes()
6408 BUG_ON(!space_info); /* Logic bug */ in add_pinned_bytes()
6409 percpu_counter_add(&space_info->total_bytes_pinned, num_bytes); in add_pinned_bytes()
7029 struct btrfs_space_info *space_info; in find_free_extent() local
7048 space_info = __find_space_info(root->fs_info, flags); in find_free_extent()
7049 if (!space_info) { in find_free_extent()
7064 if (unlikely(space_info->max_extent_size)) { in find_free_extent()
7065 spin_lock(&space_info->lock); in find_free_extent()
7066 if (space_info->max_extent_size && in find_free_extent()
7067 num_bytes > space_info->max_extent_size) { in find_free_extent()
7068 ins->offset = space_info->max_extent_size; in find_free_extent()
7069 spin_unlock(&space_info->lock); in find_free_extent()
7071 } else if (space_info->max_extent_size) { in find_free_extent()
7074 spin_unlock(&space_info->lock); in find_free_extent()
7077 last_ptr = fetch_cluster_info(orig_root, space_info, &empty_cluster); in find_free_extent()
7108 down_read(&space_info->groups_sem); in find_free_extent()
7118 up_read(&space_info->groups_sem); in find_free_extent()
7132 down_read(&space_info->groups_sem); in find_free_extent()
7133 list_for_each_entry(block_group, &space_info->block_groups[index], in find_free_extent()
7386 up_read(&space_info->groups_sem); in find_free_extent()
7490 spin_lock(&space_info->lock); in find_free_extent()
7491 space_info->max_extent_size = max_extent_size; in find_free_extent()
7492 spin_unlock(&space_info->lock); in find_free_extent()
7910 block_rsv->space_info == global_rsv->space_info) { in use_block_rsv()
9117 struct btrfs_space_info *sinfo = cache->space_info; in inc_block_group_ro()
9213 alloc_flags = get_alloc_profile(root, cache->space_info->flags); in btrfs_inc_block_group_ro()
9284 struct btrfs_space_info *sinfo = cache->space_info; in btrfs_dec_block_group_ro()
9311 struct btrfs_space_info *space_info; in btrfs_can_relocate() local
9335 space_info = block_group->space_info; in btrfs_can_relocate()
9336 spin_lock(&space_info->lock); in btrfs_can_relocate()
9338 full = space_info->full; in btrfs_can_relocate()
9347 if ((space_info->total_bytes != block_group->key.offset) && in btrfs_can_relocate()
9348 (space_info->bytes_used + space_info->bytes_reserved + in btrfs_can_relocate()
9349 space_info->bytes_pinned + space_info->bytes_readonly + in btrfs_can_relocate()
9350 min_free < space_info->total_bytes)) { in btrfs_can_relocate()
9351 spin_unlock(&space_info->lock); in btrfs_can_relocate()
9354 spin_unlock(&space_info->lock); in btrfs_can_relocate()
9509 struct btrfs_space_info *space_info; in btrfs_free_block_groups() local
9541 down_write(&block_group->space_info->groups_sem); in btrfs_free_block_groups()
9543 up_write(&block_group->space_info->groups_sem); in btrfs_free_block_groups()
9573 while (!list_empty(&info->space_info)) { in btrfs_free_block_groups()
9576 space_info = list_entry(info->space_info.next, in btrfs_free_block_groups()
9580 if (WARN_ON(space_info->bytes_pinned > 0 || in btrfs_free_block_groups()
9581 space_info->bytes_reserved > 0 || in btrfs_free_block_groups()
9582 space_info->bytes_may_use > 0)) { in btrfs_free_block_groups()
9583 dump_space_info(space_info, 0, 0); in btrfs_free_block_groups()
9586 list_del(&space_info->list); in btrfs_free_block_groups()
9589 kobj = space_info->block_group_kobjs[i]; in btrfs_free_block_groups()
9590 space_info->block_group_kobjs[i] = NULL; in btrfs_free_block_groups()
9596 kobject_del(&space_info->kobj); in btrfs_free_block_groups()
9597 kobject_put(&space_info->kobj); in btrfs_free_block_groups()
9602 static void __link_block_group(struct btrfs_space_info *space_info, in __link_block_group() argument
9608 down_write(&space_info->groups_sem); in __link_block_group()
9609 if (list_empty(&space_info->block_groups[index])) in __link_block_group()
9611 list_add_tail(&cache->list, &space_info->block_groups[index]); in __link_block_group()
9612 up_write(&space_info->groups_sem); in __link_block_group()
9623 ret = kobject_add(&rkobj->kobj, &space_info->kobj, in __link_block_group()
9629 space_info->block_group_kobjs[index] = &rkobj->kobj; in __link_block_group()
9683 struct btrfs_space_info *space_info; in btrfs_read_block_groups() local
9792 &space_info); in btrfs_read_block_groups()
9804 cache->space_info = space_info; in btrfs_read_block_groups()
9805 spin_lock(&cache->space_info->lock); in btrfs_read_block_groups()
9806 cache->space_info->bytes_readonly += cache->bytes_super; in btrfs_read_block_groups()
9807 spin_unlock(&cache->space_info->lock); in btrfs_read_block_groups()
9809 __link_block_group(space_info, cache); 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()
9839 &space_info->block_groups[BTRFS_RAID_RAID0], in btrfs_read_block_groups()
9843 &space_info->block_groups[BTRFS_RAID_SINGLE], in btrfs_read_block_groups()
9943 &cache->space_info); in btrfs_make_block_group()
9962 &cache->space_info); in btrfs_make_block_group()
9975 spin_lock(&cache->space_info->lock); in btrfs_make_block_group()
9976 cache->space_info->bytes_readonly += cache->bytes_super; in btrfs_make_block_group()
9977 spin_unlock(&cache->space_info->lock); in btrfs_make_block_group()
9979 __link_block_group(cache->space_info, cache); in btrfs_make_block_group()
10140 down_write(&block_group->space_info->groups_sem); in btrfs_remove_block_group()
10146 if (list_empty(&block_group->space_info->block_groups[index])) { in btrfs_remove_block_group()
10147 kobj = block_group->space_info->block_group_kobjs[index]; in btrfs_remove_block_group()
10148 block_group->space_info->block_group_kobjs[index] = NULL; in btrfs_remove_block_group()
10151 up_write(&block_group->space_info->groups_sem); in btrfs_remove_block_group()
10194 spin_lock(&block_group->space_info->lock); in btrfs_remove_block_group()
10198 WARN_ON(block_group->space_info->total_bytes in btrfs_remove_block_group()
10200 WARN_ON(block_group->space_info->bytes_readonly in btrfs_remove_block_group()
10202 WARN_ON(block_group->space_info->disk_total in btrfs_remove_block_group()
10205 block_group->space_info->total_bytes -= block_group->key.offset; in btrfs_remove_block_group()
10206 block_group->space_info->bytes_readonly -= block_group->key.offset; in btrfs_remove_block_group()
10207 block_group->space_info->disk_total -= block_group->key.offset * factor; in btrfs_remove_block_group()
10209 spin_unlock(&block_group->space_info->lock); in btrfs_remove_block_group()
10346 struct btrfs_space_info *space_info; in btrfs_delete_unused_bgs() local
10364 space_info = block_group->space_info; in btrfs_delete_unused_bgs()
10366 if (ret || btrfs_mixed_space_info(space_info)) { in btrfs_delete_unused_bgs()
10375 down_write(&space_info->groups_sem); in btrfs_delete_unused_bgs()
10388 up_write(&space_info->groups_sem); in btrfs_delete_unused_bgs()
10395 up_write(&space_info->groups_sem); in btrfs_delete_unused_bgs()
10448 spin_lock(&space_info->lock); in btrfs_delete_unused_bgs()
10451 space_info->bytes_pinned -= block_group->pinned; in btrfs_delete_unused_bgs()
10452 space_info->bytes_readonly += block_group->pinned; in btrfs_delete_unused_bgs()
10453 percpu_counter_add(&space_info->total_bytes_pinned, in btrfs_delete_unused_bgs()
10458 spin_unlock(&space_info->lock); in btrfs_delete_unused_bgs()
10509 struct btrfs_space_info *space_info; in btrfs_init_space_info() local
10525 ret = update_space_info(fs_info, flags, 0, 0, &space_info); in btrfs_init_space_info()
10531 ret = update_space_info(fs_info, flags, 0, 0, &space_info); in btrfs_init_space_info()
10534 ret = update_space_info(fs_info, flags, 0, 0, &space_info); in btrfs_init_space_info()
10539 ret = update_space_info(fs_info, flags, 0, 0, &space_info); in btrfs_init_space_info()