Lines Matching refs:block_group

149 				struct btrfs_block_group_cache *block_group)  in btrfs_add_block_group_cache()  argument
162 if (block_group->key.objectid < cache->key.objectid) { in btrfs_add_block_group_cache()
164 } else if (block_group->key.objectid > cache->key.objectid) { in btrfs_add_block_group_cache()
172 rb_link_node(&block_group->cache_node, parent, p); in btrfs_add_block_group_cache()
173 rb_insert_color(&block_group->cache_node, in btrfs_add_block_group_cache()
176 if (info->first_logical_byte > block_group->key.objectid) in btrfs_add_block_group_cache()
177 info->first_logical_byte = block_group->key.objectid; in btrfs_add_block_group_cache()
341 static u64 add_new_free_space(struct btrfs_block_group_cache *block_group, in add_new_free_space() argument
360 ret = btrfs_add_free_space(block_group, start, in add_new_free_space()
372 ret = btrfs_add_free_space(block_group, start, size); in add_new_free_space()
381 struct btrfs_block_group_cache *block_group; in caching_thread() local
394 block_group = caching_ctl->block_group; in caching_thread()
395 fs_info = block_group->fs_info; in caching_thread()
402 last = max_t(u64, block_group->key.objectid, BTRFS_SUPER_INFO_OFFSET); in caching_thread()
473 if (key.objectid < block_group->key.objectid) { in caching_thread()
478 if (key.objectid >= block_group->key.objectid + in caching_thread()
479 block_group->key.offset) in caching_thread()
484 total_found += add_new_free_space(block_group, in caching_thread()
502 total_found += add_new_free_space(block_group, fs_info, last, in caching_thread()
503 block_group->key.objectid + in caching_thread()
504 block_group->key.offset); in caching_thread()
507 spin_lock(&block_group->lock); in caching_thread()
508 block_group->caching_ctl = NULL; in caching_thread()
509 block_group->cached = BTRFS_CACHE_FINISHED; in caching_thread()
510 spin_unlock(&block_group->lock); in caching_thread()
516 free_excluded_extents(extent_root, block_group); in caching_thread()
521 spin_lock(&block_group->lock); in caching_thread()
522 block_group->caching_ctl = NULL; in caching_thread()
523 block_group->cached = BTRFS_CACHE_ERROR; in caching_thread()
524 spin_unlock(&block_group->lock); in caching_thread()
529 btrfs_put_block_group(block_group); in caching_thread()
547 caching_ctl->block_group = cache; in cache_block_group()
3217 static int cache_save_setup(struct btrfs_block_group_cache *block_group, in cache_save_setup() argument
3221 struct btrfs_root *root = block_group->fs_info->tree_root; in cache_save_setup()
3233 if (block_group->key.offset < (100 * 1024 * 1024)) { in cache_save_setup()
3234 spin_lock(&block_group->lock); in cache_save_setup()
3235 block_group->disk_cache_state = BTRFS_DC_WRITTEN; in cache_save_setup()
3236 spin_unlock(&block_group->lock); in cache_save_setup()
3243 inode = lookup_free_space_inode(root, block_group, path); in cache_save_setup()
3254 if (block_group->ro) in cache_save_setup()
3257 ret = create_free_space_inode(root, trans, block_group, path); in cache_save_setup()
3264 if (block_group->cache_generation == trans->transid && in cache_save_setup()
3304 spin_lock(&block_group->lock); in cache_save_setup()
3305 if (block_group->cached != BTRFS_CACHE_FINISHED || in cache_save_setup()
3313 spin_unlock(&block_group->lock); in cache_save_setup()
3316 spin_unlock(&block_group->lock); in cache_save_setup()
3324 num_pages = div_u64(block_group->key.offset, 256 * 1024 * 1024); in cache_save_setup()
3347 spin_lock(&block_group->lock); in cache_save_setup()
3349 block_group->cache_generation = trans->transid; in cache_save_setup()
3350 block_group->disk_cache_state = dcs; in cache_save_setup()
3351 spin_unlock(&block_group->lock); in cache_save_setup()
3646 struct btrfs_block_group_cache *block_group; in btrfs_extent_readonly() local
3649 block_group = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_extent_readonly()
3650 if (!block_group || block_group->ro) in btrfs_extent_readonly()
3652 if (block_group) in btrfs_extent_readonly()
3653 btrfs_put_block_group(block_group); in btrfs_extent_readonly()
5813 struct btrfs_block_group_cache *block_group; in __exclude_logged_extent() local
5816 block_group = btrfs_lookup_block_group(root->fs_info, start); in __exclude_logged_extent()
5817 if (!block_group) in __exclude_logged_extent()
5820 cache_block_group(block_group, 0); in __exclude_logged_extent()
5821 caching_ctl = get_caching_control(block_group); in __exclude_logged_extent()
5825 BUG_ON(!block_group_cache_done(block_group)); in __exclude_logged_extent()
5826 ret = btrfs_remove_free_space(block_group, start, num_bytes); in __exclude_logged_extent()
5833 ret = btrfs_remove_free_space(block_group, in __exclude_logged_extent()
5837 ret = btrfs_remove_free_space(block_group, in __exclude_logged_extent()
5851 btrfs_put_block_group(block_group); in __exclude_logged_extent()
5957 cache = caching_ctl->block_group; in btrfs_prepare_extent_commit()
6662 btrfs_lock_cluster(struct btrfs_block_group_cache *block_group, in btrfs_lock_cluster() argument
6671 if (used_bg == cluster->block_group) in btrfs_lock_cluster()
6678 used_bg = cluster->block_group; in btrfs_lock_cluster()
6682 if (used_bg == block_group) in btrfs_lock_cluster()
6727 struct btrfs_block_group_cache *block_group = NULL; in find_free_extent() local
6774 if (last_ptr->block_group) in find_free_extent()
6786 block_group = btrfs_lookup_block_group(root->fs_info, in find_free_extent()
6795 if (block_group && block_group_bits(block_group, flags) && in find_free_extent()
6796 block_group->cached != BTRFS_CACHE_NO) { in find_free_extent()
6798 if (list_empty(&block_group->list) || in find_free_extent()
6799 block_group->ro) { in find_free_extent()
6806 btrfs_put_block_group(block_group); in find_free_extent()
6809 index = get_block_group_index(block_group); in find_free_extent()
6810 btrfs_lock_block_group(block_group, delalloc); in find_free_extent()
6813 } else if (block_group) { in find_free_extent()
6814 btrfs_put_block_group(block_group); in find_free_extent()
6820 list_for_each_entry(block_group, &space_info->block_groups[index], in find_free_extent()
6825 btrfs_grab_block_group(block_group, delalloc); in find_free_extent()
6826 search_start = block_group->key.objectid; in find_free_extent()
6833 if (!block_group_bits(block_group, flags)) { in find_free_extent()
6845 if ((flags & extra) && !(block_group->flags & extra)) in find_free_extent()
6850 cached = block_group_cache_done(block_group); in find_free_extent()
6852 ret = cache_block_group(block_group, 0); in find_free_extent()
6857 if (unlikely(block_group->cached == BTRFS_CACHE_ERROR)) in find_free_extent()
6859 if (unlikely(block_group->ro)) in find_free_extent()
6873 used_block_group = btrfs_lock_cluster(block_group, in find_free_extent()
6879 if (used_block_group != block_group && in find_free_extent()
6895 if (used_block_group != block_group) { in find_free_extent()
6896 btrfs_release_block_group(block_group, in find_free_extent()
6898 block_group = used_block_group; in find_free_extent()
6903 WARN_ON(last_ptr->block_group != used_block_group); in find_free_extent()
6921 used_block_group != block_group) { in find_free_extent()
6934 if (used_block_group != block_group) in find_free_extent()
6945 block_group->full_stripe_len); in find_free_extent()
6948 ret = btrfs_find_space_cluster(root, block_group, in find_free_extent()
6957 offset = btrfs_alloc_from_cluster(block_group, in find_free_extent()
6966 block_group, search_start, in find_free_extent()
6975 wait_block_group_cache_progress(block_group, in find_free_extent()
6992 spin_lock(&block_group->free_space_ctl->tree_lock); in find_free_extent()
6994 block_group->free_space_ctl->free_space < in find_free_extent()
6996 if (block_group->free_space_ctl->free_space > in find_free_extent()
6999 block_group->free_space_ctl->free_space; in find_free_extent()
7000 spin_unlock(&block_group->free_space_ctl->tree_lock); in find_free_extent()
7003 spin_unlock(&block_group->free_space_ctl->tree_lock); in find_free_extent()
7005 offset = btrfs_find_space_for_alloc(block_group, search_start, in find_free_extent()
7019 wait_block_group_cache_progress(block_group, in find_free_extent()
7033 block_group->key.objectid + block_group->key.offset) { in find_free_extent()
7034 btrfs_add_free_space(block_group, offset, num_bytes); in find_free_extent()
7039 btrfs_add_free_space(block_group, offset, in find_free_extent()
7043 ret = btrfs_update_reserved_bytes(block_group, num_bytes, in find_free_extent()
7046 btrfs_add_free_space(block_group, offset, num_bytes); in find_free_extent()
7054 trace_btrfs_reserve_extent(orig_root, block_group, in find_free_extent()
7056 btrfs_release_block_group(block_group, delalloc); in find_free_extent()
7061 BUG_ON(index != get_block_group_index(block_group)); in find_free_extent()
7062 btrfs_release_block_group(block_group, delalloc); in find_free_extent()
7447 struct btrfs_block_group_cache *block_group; in btrfs_alloc_logged_file_extent() local
7459 block_group = btrfs_lookup_block_group(root->fs_info, ins->objectid); in btrfs_alloc_logged_file_extent()
7460 if (!block_group) in btrfs_alloc_logged_file_extent()
7463 ret = btrfs_update_reserved_bytes(block_group, ins->offset, in btrfs_alloc_logged_file_extent()
7468 btrfs_put_block_group(block_group); in btrfs_alloc_logged_file_extent()
8893 struct btrfs_block_group_cache *block_group; in btrfs_account_ro_block_groups_free_space() local
8902 list_for_each_entry(block_group, &sinfo->ro_bgs, ro_list) { in btrfs_account_ro_block_groups_free_space()
8903 spin_lock(&block_group->lock); in btrfs_account_ro_block_groups_free_space()
8905 if (!block_group->ro) { in btrfs_account_ro_block_groups_free_space()
8906 spin_unlock(&block_group->lock); in btrfs_account_ro_block_groups_free_space()
8910 if (block_group->flags & (BTRFS_BLOCK_GROUP_RAID1 | in btrfs_account_ro_block_groups_free_space()
8917 free_bytes += (block_group->key.offset - in btrfs_account_ro_block_groups_free_space()
8918 btrfs_block_group_used(&block_group->item)) * in btrfs_account_ro_block_groups_free_space()
8921 spin_unlock(&block_group->lock); in btrfs_account_ro_block_groups_free_space()
8955 struct btrfs_block_group_cache *block_group; in btrfs_can_relocate() local
8968 block_group = btrfs_lookup_block_group(root->fs_info, bytenr); in btrfs_can_relocate()
8971 if (!block_group) in btrfs_can_relocate()
8974 min_free = btrfs_block_group_used(&block_group->item); in btrfs_can_relocate()
8980 space_info = block_group->space_info; in btrfs_can_relocate()
8992 if ((space_info->total_bytes != block_group->key.offset) && in btrfs_can_relocate()
9018 target = get_restripe_target(root->fs_info, block_group->flags); in btrfs_can_relocate()
9029 index = get_block_group_index(block_group); in btrfs_can_relocate()
9077 btrfs_put_block_group(block_group); in btrfs_can_relocate()
9119 struct btrfs_block_group_cache *block_group; in btrfs_put_block_group_cache() local
9125 block_group = btrfs_lookup_first_block_group(info, last); in btrfs_put_block_group_cache()
9126 while (block_group) { in btrfs_put_block_group_cache()
9127 spin_lock(&block_group->lock); in btrfs_put_block_group_cache()
9128 if (block_group->iref) in btrfs_put_block_group_cache()
9130 spin_unlock(&block_group->lock); in btrfs_put_block_group_cache()
9131 block_group = next_block_group(info->tree_root, in btrfs_put_block_group_cache()
9132 block_group); in btrfs_put_block_group_cache()
9134 if (!block_group) { in btrfs_put_block_group_cache()
9141 inode = block_group->inode; in btrfs_put_block_group_cache()
9142 block_group->iref = 0; in btrfs_put_block_group_cache()
9143 block_group->inode = NULL; in btrfs_put_block_group_cache()
9144 spin_unlock(&block_group->lock); in btrfs_put_block_group_cache()
9146 last = block_group->key.objectid + block_group->key.offset; in btrfs_put_block_group_cache()
9147 btrfs_put_block_group(block_group); in btrfs_put_block_group_cache()
9153 struct btrfs_block_group_cache *block_group; in btrfs_free_block_groups() local
9169 block_group = list_first_entry(&info->unused_bgs, in btrfs_free_block_groups()
9172 list_del_init(&block_group->bg_list); in btrfs_free_block_groups()
9173 btrfs_put_block_group(block_group); in btrfs_free_block_groups()
9179 block_group = rb_entry(n, struct btrfs_block_group_cache, in btrfs_free_block_groups()
9181 rb_erase(&block_group->cache_node, in btrfs_free_block_groups()
9183 RB_CLEAR_NODE(&block_group->cache_node); in btrfs_free_block_groups()
9186 down_write(&block_group->space_info->groups_sem); in btrfs_free_block_groups()
9187 list_del(&block_group->list); in btrfs_free_block_groups()
9188 up_write(&block_group->space_info->groups_sem); in btrfs_free_block_groups()
9190 if (block_group->cached == BTRFS_CACHE_STARTED) in btrfs_free_block_groups()
9191 wait_block_group_cache_done(block_group); in btrfs_free_block_groups()
9197 if (block_group->cached == BTRFS_CACHE_NO || in btrfs_free_block_groups()
9198 block_group->cached == BTRFS_CACHE_ERROR) in btrfs_free_block_groups()
9199 free_excluded_extents(info->extent_root, block_group); in btrfs_free_block_groups()
9201 btrfs_remove_free_space_cache(block_group); in btrfs_free_block_groups()
9202 btrfs_put_block_group(block_group); in btrfs_free_block_groups()
9503 struct btrfs_block_group_cache *block_group, *tmp; in btrfs_create_pending_block_groups() local
9509 list_for_each_entry_safe(block_group, tmp, &trans->new_bgs, bg_list) { in btrfs_create_pending_block_groups()
9513 spin_lock(&block_group->lock); in btrfs_create_pending_block_groups()
9514 memcpy(&item, &block_group->item, sizeof(item)); in btrfs_create_pending_block_groups()
9515 memcpy(&key, &block_group->key, sizeof(key)); in btrfs_create_pending_block_groups()
9516 spin_unlock(&block_group->lock); in btrfs_create_pending_block_groups()
9527 list_del_init(&block_group->bg_list); in btrfs_create_pending_block_groups()
9625 struct btrfs_block_group_cache *block_group; in btrfs_remove_block_group() local
9639 block_group = btrfs_lookup_block_group(root->fs_info, group_start); in btrfs_remove_block_group()
9640 BUG_ON(!block_group); in btrfs_remove_block_group()
9641 BUG_ON(!block_group->ro); in btrfs_remove_block_group()
9647 free_excluded_extents(root, block_group); in btrfs_remove_block_group()
9649 memcpy(&key, &block_group->key, sizeof(key)); in btrfs_remove_block_group()
9650 index = get_block_group_index(block_group); in btrfs_remove_block_group()
9651 if (block_group->flags & (BTRFS_BLOCK_GROUP_DUP | in btrfs_remove_block_group()
9661 btrfs_return_cluster_to_free_space(block_group, cluster); in btrfs_remove_block_group()
9670 btrfs_return_cluster_to_free_space(block_group, cluster); in btrfs_remove_block_group()
9683 inode = lookup_free_space_inode(tree_root, block_group, path); in btrfs_remove_block_group()
9691 if (!list_empty(&block_group->io_list)) { in btrfs_remove_block_group()
9692 list_del_init(&block_group->io_list); in btrfs_remove_block_group()
9694 WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode); in btrfs_remove_block_group()
9697 btrfs_wait_cache_io(root, trans, block_group, in btrfs_remove_block_group()
9698 &block_group->io_ctl, path, in btrfs_remove_block_group()
9699 block_group->key.objectid); in btrfs_remove_block_group()
9700 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
9704 if (!list_empty(&block_group->dirty_list)) { in btrfs_remove_block_group()
9705 list_del_init(&block_group->dirty_list); in btrfs_remove_block_group()
9706 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
9719 spin_lock(&block_group->lock); in btrfs_remove_block_group()
9720 if (block_group->iref) { in btrfs_remove_block_group()
9721 block_group->iref = 0; in btrfs_remove_block_group()
9722 block_group->inode = NULL; in btrfs_remove_block_group()
9723 spin_unlock(&block_group->lock); in btrfs_remove_block_group()
9726 spin_unlock(&block_group->lock); in btrfs_remove_block_group()
9733 key.offset = block_group->key.objectid; in btrfs_remove_block_group()
9749 rb_erase(&block_group->cache_node, in btrfs_remove_block_group()
9751 RB_CLEAR_NODE(&block_group->cache_node); in btrfs_remove_block_group()
9753 if (root->fs_info->first_logical_byte == block_group->key.objectid) in btrfs_remove_block_group()
9757 down_write(&block_group->space_info->groups_sem); in btrfs_remove_block_group()
9762 list_del_init(&block_group->list); in btrfs_remove_block_group()
9763 if (list_empty(&block_group->space_info->block_groups[index])) { in btrfs_remove_block_group()
9764 kobj = block_group->space_info->block_group_kobjs[index]; in btrfs_remove_block_group()
9765 block_group->space_info->block_group_kobjs[index] = NULL; in btrfs_remove_block_group()
9766 clear_avail_alloc_bits(root->fs_info, block_group->flags); in btrfs_remove_block_group()
9768 up_write(&block_group->space_info->groups_sem); in btrfs_remove_block_group()
9774 if (block_group->has_caching_ctl) in btrfs_remove_block_group()
9775 caching_ctl = get_caching_control(block_group); in btrfs_remove_block_group()
9776 if (block_group->cached == BTRFS_CACHE_STARTED) in btrfs_remove_block_group()
9777 wait_block_group_cache_done(block_group); in btrfs_remove_block_group()
9778 if (block_group->has_caching_ctl) { in btrfs_remove_block_group()
9785 if (ctl->block_group == block_group) { in btrfs_remove_block_group()
9802 if (!list_empty(&block_group->dirty_list)) { in btrfs_remove_block_group()
9805 if (!list_empty(&block_group->io_list)) { in btrfs_remove_block_group()
9809 btrfs_remove_free_space_cache(block_group); in btrfs_remove_block_group()
9811 spin_lock(&block_group->space_info->lock); in btrfs_remove_block_group()
9812 list_del_init(&block_group->ro_list); in btrfs_remove_block_group()
9815 WARN_ON(block_group->space_info->total_bytes in btrfs_remove_block_group()
9816 < block_group->key.offset); in btrfs_remove_block_group()
9817 WARN_ON(block_group->space_info->bytes_readonly in btrfs_remove_block_group()
9818 < block_group->key.offset); in btrfs_remove_block_group()
9819 WARN_ON(block_group->space_info->disk_total in btrfs_remove_block_group()
9820 < block_group->key.offset * factor); in btrfs_remove_block_group()
9822 block_group->space_info->total_bytes -= block_group->key.offset; in btrfs_remove_block_group()
9823 block_group->space_info->bytes_readonly -= block_group->key.offset; in btrfs_remove_block_group()
9824 block_group->space_info->disk_total -= block_group->key.offset * factor; in btrfs_remove_block_group()
9826 spin_unlock(&block_group->space_info->lock); in btrfs_remove_block_group()
9828 memcpy(&key, &block_group->key, sizeof(key)); in btrfs_remove_block_group()
9835 spin_lock(&block_group->lock); in btrfs_remove_block_group()
9836 block_group->removed = 1; in btrfs_remove_block_group()
9855 remove_em = (atomic_read(&block_group->trimming) == 0); in btrfs_remove_block_group()
9875 spin_unlock(&block_group->lock); in btrfs_remove_block_group()
9895 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
9896 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
9916 struct btrfs_block_group_cache *block_group; in btrfs_delete_unused_bgs() local
9929 block_group = list_first_entry(&fs_info->unused_bgs, in btrfs_delete_unused_bgs()
9932 space_info = block_group->space_info; in btrfs_delete_unused_bgs()
9933 list_del_init(&block_group->bg_list); in btrfs_delete_unused_bgs()
9935 btrfs_put_block_group(block_group); in btrfs_delete_unused_bgs()
9942 spin_lock(&block_group->lock); in btrfs_delete_unused_bgs()
9943 if (block_group->reserved || in btrfs_delete_unused_bgs()
9944 btrfs_block_group_used(&block_group->item) || in btrfs_delete_unused_bgs()
9945 block_group->ro) { in btrfs_delete_unused_bgs()
9952 spin_unlock(&block_group->lock); in btrfs_delete_unused_bgs()
9956 spin_unlock(&block_group->lock); in btrfs_delete_unused_bgs()
9959 ret = set_block_group_ro(block_group, 0); in btrfs_delete_unused_bgs()
9973 btrfs_set_block_group_rw(root, block_group); in btrfs_delete_unused_bgs()
9982 start = block_group->key.objectid; in btrfs_delete_unused_bgs()
9983 end = start + block_group->key.offset - 1; in btrfs_delete_unused_bgs()
10000 btrfs_set_block_group_rw(root, block_group); in btrfs_delete_unused_bgs()
10007 btrfs_set_block_group_rw(root, block_group); in btrfs_delete_unused_bgs()
10014 spin_lock(&block_group->lock); in btrfs_delete_unused_bgs()
10016 space_info->bytes_pinned -= block_group->pinned; in btrfs_delete_unused_bgs()
10017 space_info->bytes_readonly += block_group->pinned; in btrfs_delete_unused_bgs()
10019 -block_group->pinned); in btrfs_delete_unused_bgs()
10020 block_group->pinned = 0; in btrfs_delete_unused_bgs()
10022 spin_unlock(&block_group->lock); in btrfs_delete_unused_bgs()
10030 block_group->key.objectid); in btrfs_delete_unused_bgs()
10034 btrfs_put_block_group(block_group); in btrfs_delete_unused_bgs()