H A D | extent-tree.c | 683 struct list_head *head = &info->space_info; __find_space_info() 705 struct list_head *head = &info->space_info; btrfs_clear_space_info_full() 2678 if (global_rsv->space_info->full) { btrfs_check_space_for_delayed_refs() 3676 struct btrfs_space_info **space_info) update_space_info() 3698 *space_info = found; update_space_info() 3739 *space_info = found; update_space_info() 3740 list_add_rcu(&found->list, &info->space_info); update_space_info() 4006 "space_info:enospc", btrfs_check_data_free_space() 4014 trace_btrfs_space_reservation(root->fs_info, "space_info", btrfs_check_data_free_space() 4037 trace_btrfs_space_reservation(root->fs_info, "space_info", btrfs_free_reserved_data_space() 4044 struct list_head *head = &info->space_info; force_metadata_allocation() 4146 struct btrfs_space_info *space_info; do_chunk_alloc() local 4155 space_info = __find_space_info(extent_root->fs_info, flags); do_chunk_alloc() 4156 if (!space_info) { do_chunk_alloc() 4158 0, 0, &space_info); do_chunk_alloc() 4161 BUG_ON(!space_info); /* Logic error */ do_chunk_alloc() 4164 spin_lock(&space_info->lock); do_chunk_alloc() 4165 if (force < space_info->force_alloc) do_chunk_alloc() 4166 force = space_info->force_alloc; do_chunk_alloc() 4167 if (space_info->full) { do_chunk_alloc() 4168 if (should_alloc_chunk(extent_root, space_info, force)) do_chunk_alloc() 4172 spin_unlock(&space_info->lock); do_chunk_alloc() 4176 if (!should_alloc_chunk(extent_root, space_info, force)) { do_chunk_alloc() 4177 spin_unlock(&space_info->lock); do_chunk_alloc() 4179 } else if (space_info->chunk_alloc) { do_chunk_alloc() 4182 space_info->chunk_alloc = 1; do_chunk_alloc() 4185 spin_unlock(&space_info->lock); do_chunk_alloc() 4207 if (btrfs_mixed_space_info(space_info)) do_chunk_alloc() 4231 spin_lock(&space_info->lock); do_chunk_alloc() 4235 space_info->full = 1; do_chunk_alloc() 4239 space_info->force_alloc = CHUNK_ALLOC_NO_FORCE; do_chunk_alloc() 4241 space_info->chunk_alloc = 0; do_chunk_alloc() 4242 spin_unlock(&space_info->lock); do_chunk_alloc() 4248 struct btrfs_space_info *space_info, u64 bytes, can_overcommit() 4257 used = space_info->bytes_used + space_info->bytes_reserved + can_overcommit() 4258 space_info->bytes_pinned + space_info->bytes_readonly; can_overcommit() 4269 if (used + space_size >= space_info->total_bytes) can_overcommit() 4272 used += space_info->bytes_may_use; can_overcommit() 4299 if (used + bytes < space_info->total_bytes + avail) can_overcommit() 4347 struct btrfs_space_info *space_info; shrink_delalloc() local 4363 space_info = block_rsv->space_info; shrink_delalloc() 4401 spin_lock(&space_info->lock); shrink_delalloc() 4402 if (can_overcommit(root, space_info, orig, flush)) { shrink_delalloc() 4403 spin_unlock(&space_info->lock); shrink_delalloc() 4406 spin_unlock(&space_info->lock); shrink_delalloc() 4432 struct btrfs_space_info *space_info, may_commit_transaction() 4446 if (percpu_counter_compare(&space_info->total_bytes_pinned, may_commit_transaction() 4454 if (space_info != delayed_rsv->space_info) may_commit_transaction() 4458 if (percpu_counter_compare(&space_info->total_bytes_pinned, may_commit_transaction() 4483 struct btrfs_space_info *space_info, u64 num_bytes, flush_space() 4525 ret = may_commit_transaction(root, space_info, orig_bytes, 0); flush_space() 4537 struct btrfs_space_info *space_info) btrfs_calc_reclaim_metadata_size() 4545 spin_lock(&space_info->lock); btrfs_calc_reclaim_metadata_size() 4546 if (can_overcommit(root, space_info, to_reclaim, btrfs_calc_reclaim_metadata_size() 4552 used = space_info->bytes_used + space_info->bytes_reserved + btrfs_calc_reclaim_metadata_size() 4553 space_info->bytes_pinned + space_info->bytes_readonly + btrfs_calc_reclaim_metadata_size() 4554 space_info->bytes_may_use; btrfs_calc_reclaim_metadata_size() 4555 if (can_overcommit(root, space_info, 1024 * 1024, btrfs_calc_reclaim_metadata_size() 4557 expected = div_factor_fine(space_info->total_bytes, 95); btrfs_calc_reclaim_metadata_size() 4559 expected = div_factor_fine(space_info->total_bytes, 90); btrfs_calc_reclaim_metadata_size() 4565 to_reclaim = min(to_reclaim, space_info->bytes_may_use + btrfs_calc_reclaim_metadata_size() 4566 space_info->bytes_reserved); btrfs_calc_reclaim_metadata_size() 4568 spin_unlock(&space_info->lock); btrfs_calc_reclaim_metadata_size() 4573 static inline int need_do_async_reclaim(struct btrfs_space_info *space_info, need_do_async_reclaim() argument 4576 u64 thresh = div_factor_fine(space_info->total_bytes, 98); need_do_async_reclaim() 4579 if (space_info->bytes_used >= thresh) need_do_async_reclaim() 4586 static int btrfs_need_do_async_reclaim(struct btrfs_space_info *space_info, btrfs_need_do_async_reclaim() argument 4592 spin_lock(&space_info->lock); btrfs_need_do_async_reclaim() 4597 if (flush_state > COMMIT_TRANS && space_info->full) { btrfs_need_do_async_reclaim() 4598 spin_unlock(&space_info->lock); btrfs_need_do_async_reclaim() 4602 used = space_info->bytes_used + space_info->bytes_reserved + btrfs_need_do_async_reclaim() 4603 space_info->bytes_pinned + space_info->bytes_readonly + btrfs_need_do_async_reclaim() 4604 space_info->bytes_may_use; btrfs_need_do_async_reclaim() 4605 if (need_do_async_reclaim(space_info, fs_info, used)) { btrfs_need_do_async_reclaim() 4606 spin_unlock(&space_info->lock); btrfs_need_do_async_reclaim() 4609 spin_unlock(&space_info->lock); btrfs_need_do_async_reclaim() 4617 struct btrfs_space_info *space_info; btrfs_async_reclaim_metadata_space() local 4622 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); btrfs_async_reclaim_metadata_space() 4625 space_info); btrfs_async_reclaim_metadata_space() 4631 flush_space(fs_info->fs_root, space_info, to_reclaim, btrfs_async_reclaim_metadata_space() 4634 if (!btrfs_need_do_async_reclaim(space_info, fs_info, btrfs_async_reclaim_metadata_space() 4664 struct btrfs_space_info *space_info = block_rsv->space_info; reserve_metadata_bytes() local 4673 spin_lock(&space_info->lock); reserve_metadata_bytes() 4679 space_info->flush) { reserve_metadata_bytes() 4680 spin_unlock(&space_info->lock); reserve_metadata_bytes() 4689 ret = wait_event_killable(space_info->wait, !space_info->flush); reserve_metadata_bytes() 4694 spin_lock(&space_info->lock); reserve_metadata_bytes() 4698 used = space_info->bytes_used + space_info->bytes_reserved + reserve_metadata_bytes() 4699 space_info->bytes_pinned + space_info->bytes_readonly + reserve_metadata_bytes() 4700 space_info->bytes_may_use; reserve_metadata_bytes() 4709 if (used <= space_info->total_bytes) { reserve_metadata_bytes() 4710 if (used + orig_bytes <= space_info->total_bytes) { reserve_metadata_bytes() 4711 space_info->bytes_may_use += orig_bytes; reserve_metadata_bytes() 4713 "space_info", space_info->flags, orig_bytes, 1); reserve_metadata_bytes() 4729 num_bytes = used - space_info->total_bytes + reserve_metadata_bytes() 4733 if (ret && can_overcommit(root, space_info, orig_bytes, flush)) { reserve_metadata_bytes() 4734 space_info->bytes_may_use += orig_bytes; reserve_metadata_bytes() 4735 trace_btrfs_space_reservation(root->fs_info, "space_info", reserve_metadata_bytes() 4736 space_info->flags, orig_bytes, reserve_metadata_bytes() 4751 space_info->flush = 1; reserve_metadata_bytes() 4752 } else if (!ret && space_info->flags & BTRFS_BLOCK_GROUP_METADATA) { reserve_metadata_bytes() 4760 need_do_async_reclaim(space_info, root->fs_info, used) && reserve_metadata_bytes() 4765 spin_unlock(&space_info->lock); reserve_metadata_bytes() 4770 ret = flush_space(root, space_info, num_bytes, orig_bytes, reserve_metadata_bytes() 4804 "space_info:enospc", reserve_metadata_bytes() 4805 space_info->flags, orig_bytes, 1); reserve_metadata_bytes() 4807 spin_lock(&space_info->lock); reserve_metadata_bytes() 4808 space_info->flush = 0; reserve_metadata_bytes() 4809 wake_up_all(&space_info->wait); reserve_metadata_bytes() 4810 spin_unlock(&space_info->lock); reserve_metadata_bytes() 4873 if (global_rsv->space_info != dest->space_info) btrfs_cond_migrate_bytes() 4895 struct btrfs_space_info *space_info = block_rsv->space_info; block_rsv_release_bytes() local 4926 spin_lock(&space_info->lock); block_rsv_release_bytes() 4927 space_info->bytes_may_use -= num_bytes; block_rsv_release_bytes() 4928 trace_btrfs_space_reservation(fs_info, "space_info", block_rsv_release_bytes() 4929 space_info->flags, num_bytes, 0); block_rsv_release_bytes() 4930 spin_unlock(&space_info->lock); block_rsv_release_bytes() 4966 block_rsv->space_info = __find_space_info(fs_info, btrfs_alloc_block_rsv() 5064 block_rsv->space_info != global_rsv->space_info) btrfs_block_rsv_release() 5108 struct btrfs_space_info *sinfo = block_rsv->space_info; update_global_block_rsv() 5126 trace_btrfs_space_reservation(fs_info, "space_info", update_global_block_rsv() 5133 trace_btrfs_space_reservation(fs_info, "space_info", update_global_block_rsv() 5145 struct btrfs_space_info *space_info; init_global_block_rsv() local 5147 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM); init_global_block_rsv() 5148 fs_info->chunk_block_rsv.space_info = space_info; init_global_block_rsv() 5150 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); init_global_block_rsv() 5151 fs_info->global_block_rsv.space_info = space_info; init_global_block_rsv() 5152 fs_info->delalloc_block_rsv.space_info = space_info; init_global_block_rsv() 5153 fs_info->trans_block_rsv.space_info = space_info; init_global_block_rsv() 5154 fs_info->empty_block_rsv.space_info = space_info; init_global_block_rsv() 5155 fs_info->delayed_block_rsv.space_info = space_info; init_global_block_rsv() 5262 rsv->space_info = __find_space_info(root->fs_info, btrfs_subvolume_reserve_metadata() 5658 spin_lock(&cache->space_info->lock); update_block_group() 5671 cache->space_info->bytes_reserved -= num_bytes; update_block_group() 5672 cache->space_info->bytes_used += num_bytes; update_block_group() 5673 cache->space_info->disk_used += num_bytes * factor; update_block_group() 5675 spin_unlock(&cache->space_info->lock); update_block_group() 5680 cache->space_info->bytes_pinned += num_bytes; update_block_group() 5681 cache->space_info->bytes_used -= num_bytes; update_block_group() 5682 cache->space_info->disk_used -= num_bytes * factor; update_block_group() 5684 spin_unlock(&cache->space_info->lock); update_block_group() 5746 spin_lock(&cache->space_info->lock); pin_down_extent() 5749 cache->space_info->bytes_pinned += num_bytes; pin_down_extent() 5752 cache->space_info->bytes_reserved -= num_bytes; pin_down_extent() 5755 spin_unlock(&cache->space_info->lock); pin_down_extent() 5910 struct btrfs_space_info *space_info = cache->space_info; btrfs_update_reserved_bytes() local 5913 spin_lock(&space_info->lock); btrfs_update_reserved_bytes() 5920 space_info->bytes_reserved += num_bytes; btrfs_update_reserved_bytes() 5923 "space_info", space_info->flags, btrfs_update_reserved_bytes() 5925 space_info->bytes_may_use -= num_bytes; btrfs_update_reserved_bytes() 5933 space_info->bytes_readonly += num_bytes; btrfs_update_reserved_bytes() 5935 space_info->bytes_reserved -= num_bytes; btrfs_update_reserved_bytes() 5941 spin_unlock(&space_info->lock); btrfs_update_reserved_bytes() 5982 struct btrfs_space_info *space_info; unpin_extent_range() local 6007 space_info = cache->space_info; unpin_extent_range() 6009 spin_lock(&space_info->lock); unpin_extent_range() 6012 space_info->bytes_pinned -= len; unpin_extent_range() 6013 percpu_counter_add(&space_info->total_bytes_pinned, -len); unpin_extent_range() 6015 space_info->bytes_readonly += len; unpin_extent_range() 6019 if (!readonly && global_rsv->space_info == space_info) { unpin_extent_range() 6025 space_info->bytes_may_use += len; unpin_extent_range() 6031 spin_unlock(&space_info->lock); unpin_extent_range() 6081 struct btrfs_space_info *space_info; add_pinned_bytes() local 6093 space_info = __find_space_info(fs_info, flags); add_pinned_bytes() 6094 BUG_ON(!space_info); /* Logic bug */ add_pinned_bytes() 6095 percpu_counter_add(&space_info->total_bytes_pinned, num_bytes); add_pinned_bytes() 6731 struct btrfs_space_info *space_info; find_free_extent() local 6748 space_info = __find_space_info(root->fs_info, flags); find_free_extent() 6749 if (!space_info) { find_free_extent() 6758 if (btrfs_mixed_space_info(space_info)) find_free_extent() 6797 down_read(&space_info->groups_sem); find_free_extent() 6807 up_read(&space_info->groups_sem); find_free_extent() 6819 down_read(&space_info->groups_sem); find_free_extent() 6820 list_for_each_entry(block_group, &space_info->block_groups[index], find_free_extent() 7064 up_read(&space_info->groups_sem); find_free_extent() 7139 printk(KERN_INFO "BTRFS: space_info %llu has %llu free, is %sfull\n", dump_space_info() 7144 printk(KERN_INFO "BTRFS: space_info total=%llu, used=%llu, pinned=%llu, " dump_space_info() 7558 block_rsv->space_info == global_rsv->space_info) { use_block_rsv() 8762 struct btrfs_space_info *sinfo = cache->space_info; set_block_group_ro() 8860 alloc_flags = get_alloc_profile(root, cache->space_info->flags); btrfs_set_block_group_ro() 8889 * space_info. takes mirrors into account. 8931 struct btrfs_space_info *sinfo = cache->space_info; btrfs_set_block_group_rw() 8956 struct btrfs_space_info *space_info; btrfs_can_relocate() local 8980 space_info = block_group->space_info; btrfs_can_relocate() 8981 spin_lock(&space_info->lock); btrfs_can_relocate() 8983 full = space_info->full; btrfs_can_relocate() 8992 if ((space_info->total_bytes != block_group->key.offset) && btrfs_can_relocate() 8993 (space_info->bytes_used + space_info->bytes_reserved + btrfs_can_relocate() 8994 space_info->bytes_pinned + space_info->bytes_readonly + btrfs_can_relocate() 8995 min_free < space_info->total_bytes)) { btrfs_can_relocate() 8996 spin_unlock(&space_info->lock); btrfs_can_relocate() 8999 spin_unlock(&space_info->lock); btrfs_can_relocate() 9154 struct btrfs_space_info *space_info; btrfs_free_block_groups() local 9186 down_write(&block_group->space_info->groups_sem); btrfs_free_block_groups() 9188 up_write(&block_group->space_info->groups_sem); btrfs_free_block_groups() 9209 * free all the space_info structs. This is only called during btrfs_free_block_groups() 9218 while (!list_empty(&info->space_info)) { btrfs_free_block_groups() 9221 space_info = list_entry(info->space_info.next, btrfs_free_block_groups() 9225 if (WARN_ON(space_info->bytes_pinned > 0 || btrfs_free_block_groups() 9226 space_info->bytes_reserved > 0 || btrfs_free_block_groups() 9227 space_info->bytes_may_use > 0)) { btrfs_free_block_groups() 9228 dump_space_info(space_info, 0, 0); btrfs_free_block_groups() 9231 list_del(&space_info->list); btrfs_free_block_groups() 9234 kobj = space_info->block_group_kobjs[i]; btrfs_free_block_groups() 9235 space_info->block_group_kobjs[i] = NULL; btrfs_free_block_groups() 9241 kobject_del(&space_info->kobj); btrfs_free_block_groups() 9242 kobject_put(&space_info->kobj); btrfs_free_block_groups() 9247 static void __link_block_group(struct btrfs_space_info *space_info, __link_block_group() argument 9253 down_write(&space_info->groups_sem); __link_block_group() 9254 if (list_empty(&space_info->block_groups[index])) __link_block_group() 9256 list_add_tail(&cache->list, &space_info->block_groups[index]); __link_block_group() 9257 up_write(&space_info->groups_sem); __link_block_group() 9268 ret = kobject_add(&rkobj->kobj, &space_info->kobj, __link_block_group() 9274 space_info->block_group_kobjs[index] = &rkobj->kobj; __link_block_group() 9328 struct btrfs_space_info *space_info; btrfs_read_block_groups() local 9437 &space_info); btrfs_read_block_groups() 9449 cache->space_info = space_info; btrfs_read_block_groups() 9450 spin_lock(&cache->space_info->lock); btrfs_read_block_groups() 9451 cache->space_info->bytes_readonly += cache->bytes_super; btrfs_read_block_groups() 9452 spin_unlock(&cache->space_info->lock); btrfs_read_block_groups() 9454 __link_block_group(space_info, cache); btrfs_read_block_groups() 9471 list_for_each_entry_rcu(space_info, &root->fs_info->space_info, list) { btrfs_read_block_groups() 9472 if (!(get_alloc_profile(root, space_info->flags) & btrfs_read_block_groups() 9484 &space_info->block_groups[BTRFS_RAID_RAID0], btrfs_read_block_groups() 9488 &space_info->block_groups[BTRFS_RAID_SINGLE], btrfs_read_block_groups() 9579 &cache->space_info); btrfs_make_block_group() 9592 spin_lock(&cache->space_info->lock); btrfs_make_block_group() 9593 cache->space_info->bytes_readonly += cache->bytes_super; btrfs_make_block_group() 9594 spin_unlock(&cache->space_info->lock); btrfs_make_block_group() 9596 __link_block_group(cache->space_info, cache); btrfs_make_block_group() 9757 down_write(&block_group->space_info->groups_sem); btrfs_remove_block_group() 9763 if (list_empty(&block_group->space_info->block_groups[index])) { btrfs_remove_block_group() 9764 kobj = block_group->space_info->block_group_kobjs[index]; btrfs_remove_block_group() 9765 block_group->space_info->block_group_kobjs[index] = NULL; btrfs_remove_block_group() 9768 up_write(&block_group->space_info->groups_sem); btrfs_remove_block_group() 9811 spin_lock(&block_group->space_info->lock); btrfs_remove_block_group() 9815 WARN_ON(block_group->space_info->total_bytes btrfs_remove_block_group() 9817 WARN_ON(block_group->space_info->bytes_readonly btrfs_remove_block_group() 9819 WARN_ON(block_group->space_info->disk_total btrfs_remove_block_group() 9822 block_group->space_info->total_bytes -= block_group->key.offset; btrfs_remove_block_group() 9823 block_group->space_info->bytes_readonly -= block_group->key.offset; btrfs_remove_block_group() 9824 block_group->space_info->disk_total -= block_group->key.offset * factor; btrfs_remove_block_group() 9826 spin_unlock(&block_group->space_info->lock); btrfs_remove_block_group() 9917 struct btrfs_space_info *space_info; btrfs_delete_unused_bgs() local 9932 space_info = block_group->space_info; btrfs_delete_unused_bgs() 9934 if (ret || btrfs_mixed_space_info(space_info)) { btrfs_delete_unused_bgs() 9941 down_write(&space_info->groups_sem); btrfs_delete_unused_bgs() 9953 up_write(&space_info->groups_sem); btrfs_delete_unused_bgs() 9960 up_write(&space_info->groups_sem); btrfs_delete_unused_bgs() 10013 spin_lock(&space_info->lock); btrfs_delete_unused_bgs() 10016 space_info->bytes_pinned -= block_group->pinned; btrfs_delete_unused_bgs() 10017 space_info->bytes_readonly += block_group->pinned; btrfs_delete_unused_bgs() 10018 percpu_counter_add(&space_info->total_bytes_pinned, btrfs_delete_unused_bgs() 10023 spin_unlock(&space_info->lock); btrfs_delete_unused_bgs() 10042 struct btrfs_space_info *space_info; btrfs_init_space_info() local 10058 ret = update_space_info(fs_info, flags, 0, 0, &space_info); btrfs_init_space_info() 10064 ret = update_space_info(fs_info, flags, 0, 0, &space_info); btrfs_init_space_info() 10067 ret = update_space_info(fs_info, flags, 0, 0, &space_info); btrfs_init_space_info() 10072 ret = update_space_info(fs_info, flags, 0, 0, &space_info); btrfs_init_space_info() 3674 update_space_info(struct btrfs_fs_info *info, u64 flags, u64 total_bytes, u64 bytes_used, struct btrfs_space_info **space_info) update_space_info() argument 4247 can_overcommit(struct btrfs_root *root, struct btrfs_space_info *space_info, u64 bytes, enum btrfs_reserve_flush_enum flush) can_overcommit() argument 4431 may_commit_transaction(struct btrfs_root *root, struct btrfs_space_info *space_info, u64 bytes, int force) may_commit_transaction() argument 4482 flush_space(struct btrfs_root *root, struct btrfs_space_info *space_info, u64 num_bytes, u64 orig_bytes, int state) flush_space() argument 4536 btrfs_calc_reclaim_metadata_size(struct btrfs_root *root, struct btrfs_space_info *space_info) btrfs_calc_reclaim_metadata_size() argument
|