Lines Matching refs:block_group

154 				       struct btrfs_block_group *block_group)  in btrfs_add_block_group_cache()  argument
160 ASSERT(block_group->length != 0); in btrfs_add_block_group_cache()
168 if (block_group->start < cache->start) { in btrfs_add_block_group_cache()
170 } else if (block_group->start > cache->start) { in btrfs_add_block_group_cache()
178 rb_link_node(&block_group->cache_node, parent, p); in btrfs_add_block_group_cache()
179 rb_insert_color(&block_group->cache_node, in btrfs_add_block_group_cache()
182 if (info->first_logical_byte > block_group->start) in btrfs_add_block_group_cache()
183 info->first_logical_byte = block_group->start; in btrfs_add_block_group_cache()
428 static void fragment_free_space(struct btrfs_block_group *block_group) in fragment_free_space() argument
430 struct btrfs_fs_info *fs_info = block_group->fs_info; in fragment_free_space()
431 u64 start = block_group->start; in fragment_free_space()
432 u64 len = block_group->length; in fragment_free_space()
433 u64 chunk = block_group->flags & BTRFS_BLOCK_GROUP_METADATA ? in fragment_free_space()
438 btrfs_remove_free_space(block_group, start, chunk); in fragment_free_space()
454 u64 add_new_free_space(struct btrfs_block_group *block_group, u64 start, u64 end) in add_new_free_space() argument
456 struct btrfs_fs_info *info = block_group->fs_info; in add_new_free_space()
473 ret = btrfs_add_free_space_async_trimmed(block_group, in add_new_free_space()
485 ret = btrfs_add_free_space_async_trimmed(block_group, start, in add_new_free_space()
495 struct btrfs_block_group *block_group = caching_ctl->block_group; in load_extent_tree_free() local
496 struct btrfs_fs_info *fs_info = block_group->fs_info; in load_extent_tree_free()
511 last = max_t(u64, block_group->start, BTRFS_SUPER_INFO_OFFSET); in load_extent_tree_free()
519 if (btrfs_should_fragment_free_space(block_group)) in load_extent_tree_free()
591 if (key.objectid < block_group->start) { in load_extent_tree_free()
596 if (key.objectid >= block_group->start + block_group->length) in load_extent_tree_free()
601 total_found += add_new_free_space(block_group, last, in load_extent_tree_free()
619 total_found += add_new_free_space(block_group, last, in load_extent_tree_free()
620 block_group->start + block_group->length); in load_extent_tree_free()
630 struct btrfs_block_group *block_group; in caching_thread() local
636 block_group = caching_ctl->block_group; in caching_thread()
637 fs_info = block_group->fs_info; in caching_thread()
655 spin_lock(&block_group->lock); in caching_thread()
656 block_group->caching_ctl = NULL; in caching_thread()
657 block_group->cached = ret ? BTRFS_CACHE_ERROR : BTRFS_CACHE_FINISHED; in caching_thread()
658 spin_unlock(&block_group->lock); in caching_thread()
661 if (btrfs_should_fragment_free_space(block_group)) { in caching_thread()
664 spin_lock(&block_group->space_info->lock); in caching_thread()
665 spin_lock(&block_group->lock); in caching_thread()
666 bytes_used = block_group->length - block_group->used; in caching_thread()
667 block_group->space_info->bytes_used += bytes_used >> 1; in caching_thread()
668 spin_unlock(&block_group->lock); in caching_thread()
669 spin_unlock(&block_group->space_info->lock); in caching_thread()
670 fragment_free_space(block_group); in caching_thread()
677 btrfs_free_excluded_extents(block_group); in caching_thread()
683 btrfs_put_block_group(block_group); in caching_thread()
700 caching_ctl->block_group = cache; in btrfs_cache_block_group()
874 struct btrfs_block_group *block_group) in remove_block_group_item() argument
882 key.objectid = block_group->start; in remove_block_group_item()
884 key.offset = block_group->length; in remove_block_group_item()
901 struct btrfs_block_group *block_group; in btrfs_remove_block_group() local
914 block_group = btrfs_lookup_block_group(fs_info, group_start); in btrfs_remove_block_group()
915 BUG_ON(!block_group); in btrfs_remove_block_group()
916 BUG_ON(!block_group->ro); in btrfs_remove_block_group()
918 trace_btrfs_remove_block_group(block_group); in btrfs_remove_block_group()
923 btrfs_free_excluded_extents(block_group); in btrfs_remove_block_group()
924 btrfs_free_ref_tree_range(fs_info, block_group->start, in btrfs_remove_block_group()
925 block_group->length); in btrfs_remove_block_group()
927 index = btrfs_bg_flags_to_raid_index(block_group->flags); in btrfs_remove_block_group()
928 factor = btrfs_bg_type_to_factor(block_group->flags); in btrfs_remove_block_group()
933 btrfs_return_cluster_to_free_space(block_group, cluster); in btrfs_remove_block_group()
942 btrfs_return_cluster_to_free_space(block_group, cluster); in btrfs_remove_block_group()
955 inode = lookup_free_space_inode(block_group, path); in btrfs_remove_block_group()
963 if (!list_empty(&block_group->io_list)) { in btrfs_remove_block_group()
964 list_del_init(&block_group->io_list); in btrfs_remove_block_group()
966 WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode); in btrfs_remove_block_group()
969 btrfs_wait_cache_io(trans, block_group, path); in btrfs_remove_block_group()
970 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
974 if (!list_empty(&block_group->dirty_list)) { in btrfs_remove_block_group()
975 list_del_init(&block_group->dirty_list); in btrfs_remove_block_group()
977 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
990 spin_lock(&block_group->lock); in btrfs_remove_block_group()
991 if (block_group->iref) { in btrfs_remove_block_group()
992 block_group->iref = 0; in btrfs_remove_block_group()
993 block_group->inode = NULL; in btrfs_remove_block_group()
994 spin_unlock(&block_group->lock); in btrfs_remove_block_group()
997 spin_unlock(&block_group->lock); in btrfs_remove_block_group()
1005 key.offset = block_group->start; in btrfs_remove_block_group()
1020 rb_erase(&block_group->cache_node, in btrfs_remove_block_group()
1022 RB_CLEAR_NODE(&block_group->cache_node); in btrfs_remove_block_group()
1025 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
1027 if (fs_info->first_logical_byte == block_group->start) in btrfs_remove_block_group()
1031 down_write(&block_group->space_info->groups_sem); in btrfs_remove_block_group()
1036 list_del_init(&block_group->list); in btrfs_remove_block_group()
1037 if (list_empty(&block_group->space_info->block_groups[index])) { in btrfs_remove_block_group()
1038 kobj = block_group->space_info->block_group_kobjs[index]; in btrfs_remove_block_group()
1039 block_group->space_info->block_group_kobjs[index] = NULL; in btrfs_remove_block_group()
1040 clear_avail_alloc_bits(fs_info, block_group->flags); in btrfs_remove_block_group()
1042 up_write(&block_group->space_info->groups_sem); in btrfs_remove_block_group()
1043 clear_incompat_bg_bits(fs_info, block_group->flags); in btrfs_remove_block_group()
1049 if (block_group->has_caching_ctl) in btrfs_remove_block_group()
1050 caching_ctl = btrfs_get_caching_control(block_group); in btrfs_remove_block_group()
1051 if (block_group->cached == BTRFS_CACHE_STARTED) in btrfs_remove_block_group()
1052 btrfs_wait_block_group_cache_done(block_group); in btrfs_remove_block_group()
1053 if (block_group->has_caching_ctl) { in btrfs_remove_block_group()
1060 if (ctl->block_group == block_group) { in btrfs_remove_block_group()
1077 WARN_ON(!list_empty(&block_group->dirty_list)); in btrfs_remove_block_group()
1078 WARN_ON(!list_empty(&block_group->io_list)); in btrfs_remove_block_group()
1081 btrfs_remove_free_space_cache(block_group); in btrfs_remove_block_group()
1083 spin_lock(&block_group->space_info->lock); in btrfs_remove_block_group()
1084 list_del_init(&block_group->ro_list); in btrfs_remove_block_group()
1087 WARN_ON(block_group->space_info->total_bytes in btrfs_remove_block_group()
1088 < block_group->length); in btrfs_remove_block_group()
1089 WARN_ON(block_group->space_info->bytes_readonly in btrfs_remove_block_group()
1090 < block_group->length); in btrfs_remove_block_group()
1091 WARN_ON(block_group->space_info->disk_total in btrfs_remove_block_group()
1092 < block_group->length * factor); in btrfs_remove_block_group()
1094 block_group->space_info->total_bytes -= block_group->length; in btrfs_remove_block_group()
1095 block_group->space_info->bytes_readonly -= block_group->length; in btrfs_remove_block_group()
1096 block_group->space_info->disk_total -= block_group->length * factor; in btrfs_remove_block_group()
1098 spin_unlock(&block_group->space_info->lock); in btrfs_remove_block_group()
1111 ret = remove_block_group_free_space(trans, block_group); in btrfs_remove_block_group()
1115 ret = remove_block_group_item(trans, path, block_group); in btrfs_remove_block_group()
1119 spin_lock(&block_group->lock); in btrfs_remove_block_group()
1120 block_group->removed = 1; in btrfs_remove_block_group()
1147 remove_em = (atomic_read(&block_group->frozen) == 0); in btrfs_remove_block_group()
1148 spin_unlock(&block_group->lock); in btrfs_remove_block_group()
1163 btrfs_put_block_group(block_group); in btrfs_remove_block_group()
1340 struct btrfs_block_group *block_group; in btrfs_delete_unused_bgs() local
1353 block_group = list_first_entry(&fs_info->unused_bgs, in btrfs_delete_unused_bgs()
1356 list_del_init(&block_group->bg_list); in btrfs_delete_unused_bgs()
1358 space_info = block_group->space_info; in btrfs_delete_unused_bgs()
1361 btrfs_put_block_group(block_group); in btrfs_delete_unused_bgs()
1366 btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group); in btrfs_delete_unused_bgs()
1379 !btrfs_is_free_space_trimmed(block_group)) { in btrfs_delete_unused_bgs()
1380 trace_btrfs_skip_unused_block_group(block_group); in btrfs_delete_unused_bgs()
1384 block_group); in btrfs_delete_unused_bgs()
1388 spin_lock(&block_group->lock); in btrfs_delete_unused_bgs()
1389 if (block_group->reserved || block_group->pinned || in btrfs_delete_unused_bgs()
1390 block_group->used || block_group->ro || in btrfs_delete_unused_bgs()
1391 list_is_singular(&block_group->list)) { in btrfs_delete_unused_bgs()
1398 trace_btrfs_skip_unused_block_group(block_group); in btrfs_delete_unused_bgs()
1399 spin_unlock(&block_group->lock); in btrfs_delete_unused_bgs()
1403 spin_unlock(&block_group->lock); in btrfs_delete_unused_bgs()
1406 ret = inc_block_group_ro(block_group, 0); in btrfs_delete_unused_bgs()
1418 block_group->start); in btrfs_delete_unused_bgs()
1420 btrfs_dec_block_group_ro(block_group); in btrfs_delete_unused_bgs()
1429 if (!clean_pinned_extents(trans, block_group)) { in btrfs_delete_unused_bgs()
1430 btrfs_dec_block_group_ro(block_group); in btrfs_delete_unused_bgs()
1442 if (!list_empty(&block_group->discard_list)) { in btrfs_delete_unused_bgs()
1444 btrfs_dec_block_group_ro(block_group); in btrfs_delete_unused_bgs()
1446 block_group); in btrfs_delete_unused_bgs()
1453 spin_lock(&block_group->lock); in btrfs_delete_unused_bgs()
1456 -block_group->pinned); in btrfs_delete_unused_bgs()
1457 space_info->bytes_readonly += block_group->pinned; in btrfs_delete_unused_bgs()
1458 __btrfs_mod_total_bytes_pinned(space_info, -block_group->pinned); in btrfs_delete_unused_bgs()
1459 block_group->pinned = 0; in btrfs_delete_unused_bgs()
1461 spin_unlock(&block_group->lock); in btrfs_delete_unused_bgs()
1479 btrfs_freeze_block_group(block_group); in btrfs_delete_unused_bgs()
1485 ret = btrfs_remove_chunk(trans, block_group->start); in btrfs_delete_unused_bgs()
1489 btrfs_unfreeze_block_group(block_group); in btrfs_delete_unused_bgs()
1505 list_move(&block_group->bg_list, in btrfs_delete_unused_bgs()
1508 btrfs_get_block_group(block_group); in btrfs_delete_unused_bgs()
1514 btrfs_put_block_group(block_group); in btrfs_delete_unused_bgs()
1523 btrfs_put_block_group(block_group); in btrfs_delete_unused_bgs()
2080 struct btrfs_block_group *block_group) in insert_block_group_item() argument
2087 spin_lock(&block_group->lock); in insert_block_group_item()
2088 btrfs_set_stack_block_group_used(&bgi, block_group->used); in insert_block_group_item()
2091 btrfs_set_stack_block_group_flags(&bgi, block_group->flags); in insert_block_group_item()
2092 key.objectid = block_group->start; in insert_block_group_item()
2094 key.offset = block_group->length; in insert_block_group_item()
2095 spin_unlock(&block_group->lock); in insert_block_group_item()
2104 struct btrfs_block_group *block_group; in btrfs_create_pending_block_groups() local
2113 block_group = list_first_entry(&trans->new_bgs, in btrfs_create_pending_block_groups()
2119 index = btrfs_bg_flags_to_raid_index(block_group->flags); in btrfs_create_pending_block_groups()
2121 ret = insert_block_group_item(trans, block_group); in btrfs_create_pending_block_groups()
2124 ret = btrfs_finish_chunk_alloc(trans, block_group->start, in btrfs_create_pending_block_groups()
2125 block_group->length); in btrfs_create_pending_block_groups()
2128 add_block_group_free_space(trans, block_group); in btrfs_create_pending_block_groups()
2136 if (block_group->space_info->block_group_kobjs[index] == NULL) in btrfs_create_pending_block_groups()
2137 btrfs_sysfs_add_block_group_type(block_group); in btrfs_create_pending_block_groups()
2142 list_del_init(&block_group->bg_list); in btrfs_create_pending_block_groups()
2363 static int cache_save_setup(struct btrfs_block_group *block_group, in cache_save_setup() argument
2367 struct btrfs_fs_info *fs_info = block_group->fs_info; in cache_save_setup()
2381 if (block_group->length < (100 * SZ_1M)) { in cache_save_setup()
2382 spin_lock(&block_group->lock); in cache_save_setup()
2383 block_group->disk_cache_state = BTRFS_DC_WRITTEN; in cache_save_setup()
2384 spin_unlock(&block_group->lock); in cache_save_setup()
2391 inode = lookup_free_space_inode(block_group, path); in cache_save_setup()
2402 if (block_group->ro) in cache_save_setup()
2405 ret = create_free_space_inode(trans, block_group, path); in cache_save_setup()
2435 if (block_group->cache_generation == trans->transid && in cache_save_setup()
2452 spin_lock(&block_group->lock); in cache_save_setup()
2453 if (block_group->cached != BTRFS_CACHE_FINISHED || in cache_save_setup()
2462 spin_unlock(&block_group->lock); in cache_save_setup()
2465 spin_unlock(&block_group->lock); in cache_save_setup()
2482 num_pages = div_u64(block_group->length, SZ_256M); in cache_save_setup()
2515 spin_lock(&block_group->lock); in cache_save_setup()
2517 block_group->cache_generation = trans->transid; in cache_save_setup()
2518 block_group->disk_cache_state = dcs; in cache_save_setup()
2519 spin_unlock(&block_group->lock); in cache_save_setup()
3279 struct btrfs_block_group *block_group; in btrfs_put_block_group_cache() local
3285 block_group = btrfs_lookup_first_block_group(info, last); in btrfs_put_block_group_cache()
3286 while (block_group) { in btrfs_put_block_group_cache()
3287 btrfs_wait_block_group_cache_done(block_group); in btrfs_put_block_group_cache()
3288 spin_lock(&block_group->lock); in btrfs_put_block_group_cache()
3289 if (block_group->iref) in btrfs_put_block_group_cache()
3291 spin_unlock(&block_group->lock); in btrfs_put_block_group_cache()
3292 block_group = btrfs_next_block_group(block_group); in btrfs_put_block_group_cache()
3294 if (!block_group) { in btrfs_put_block_group_cache()
3301 inode = block_group->inode; in btrfs_put_block_group_cache()
3302 block_group->iref = 0; in btrfs_put_block_group_cache()
3303 block_group->inode = NULL; in btrfs_put_block_group_cache()
3304 spin_unlock(&block_group->lock); in btrfs_put_block_group_cache()
3305 ASSERT(block_group->io_ctl.inode == NULL); in btrfs_put_block_group_cache()
3307 last = block_group->start + block_group->length; in btrfs_put_block_group_cache()
3308 btrfs_put_block_group(block_group); in btrfs_put_block_group_cache()
3319 struct btrfs_block_group *block_group; in btrfs_free_block_groups() local
3335 block_group = list_first_entry(&info->unused_bgs, in btrfs_free_block_groups()
3338 list_del_init(&block_group->bg_list); in btrfs_free_block_groups()
3339 btrfs_put_block_group(block_group); in btrfs_free_block_groups()
3345 block_group = rb_entry(n, struct btrfs_block_group, in btrfs_free_block_groups()
3347 rb_erase(&block_group->cache_node, in btrfs_free_block_groups()
3349 RB_CLEAR_NODE(&block_group->cache_node); in btrfs_free_block_groups()
3352 down_write(&block_group->space_info->groups_sem); in btrfs_free_block_groups()
3353 list_del(&block_group->list); in btrfs_free_block_groups()
3354 up_write(&block_group->space_info->groups_sem); in btrfs_free_block_groups()
3360 if (block_group->cached == BTRFS_CACHE_NO || in btrfs_free_block_groups()
3361 block_group->cached == BTRFS_CACHE_ERROR) in btrfs_free_block_groups()
3362 btrfs_free_excluded_extents(block_group); in btrfs_free_block_groups()
3364 btrfs_remove_free_space_cache(block_group); in btrfs_free_block_groups()
3365 ASSERT(block_group->cached != BTRFS_CACHE_STARTED); in btrfs_free_block_groups()
3366 ASSERT(list_empty(&block_group->dirty_list)); in btrfs_free_block_groups()
3367 ASSERT(list_empty(&block_group->io_list)); in btrfs_free_block_groups()
3368 ASSERT(list_empty(&block_group->bg_list)); in btrfs_free_block_groups()
3369 ASSERT(refcount_read(&block_group->refs) == 1); in btrfs_free_block_groups()
3370 ASSERT(block_group->swap_extents == 0); in btrfs_free_block_groups()
3371 btrfs_put_block_group(block_group); in btrfs_free_block_groups()
3404 void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group) in btrfs_unfreeze_block_group() argument
3406 struct btrfs_fs_info *fs_info = block_group->fs_info; in btrfs_unfreeze_block_group()
3411 spin_lock(&block_group->lock); in btrfs_unfreeze_block_group()
3412 cleanup = (atomic_dec_and_test(&block_group->frozen) && in btrfs_unfreeze_block_group()
3413 block_group->removed); in btrfs_unfreeze_block_group()
3414 spin_unlock(&block_group->lock); in btrfs_unfreeze_block_group()
3419 em = lookup_extent_mapping(em_tree, block_group->start, in btrfs_unfreeze_block_group()
3434 __btrfs_remove_free_space_cache(block_group->free_space_ctl); in btrfs_unfreeze_block_group()