Lines Matching refs:block_group
98 struct inode *lookup_free_space_inode(struct btrfs_block_group *block_group, in lookup_free_space_inode() argument
101 struct btrfs_fs_info *fs_info = block_group->fs_info; in lookup_free_space_inode()
105 spin_lock(&block_group->lock); in lookup_free_space_inode()
106 if (block_group->inode) in lookup_free_space_inode()
107 inode = igrab(block_group->inode); in lookup_free_space_inode()
108 spin_unlock(&block_group->lock); in lookup_free_space_inode()
113 block_group->start); in lookup_free_space_inode()
117 spin_lock(&block_group->lock); in lookup_free_space_inode()
122 block_group->disk_cache_state = BTRFS_DC_CLEAR; in lookup_free_space_inode()
125 if (!block_group->iref) { in lookup_free_space_inode()
126 block_group->inode = igrab(inode); in lookup_free_space_inode()
127 block_group->iref = 1; in lookup_free_space_inode()
129 spin_unlock(&block_group->lock); in lookup_free_space_inode()
196 struct btrfs_block_group *block_group, in create_free_space_inode() argument
207 ino, block_group->start); in create_free_space_inode()
230 struct btrfs_block_group *block_group, in btrfs_truncate_free_space_cache() argument
237 if (block_group) { in btrfs_truncate_free_space_cache()
246 if (!list_empty(&block_group->io_list)) { in btrfs_truncate_free_space_cache()
247 list_del_init(&block_group->io_list); in btrfs_truncate_free_space_cache()
249 btrfs_wait_cache_io(trans, block_group, path); in btrfs_truncate_free_space_cache()
250 btrfs_put_block_group(block_group); in btrfs_truncate_free_space_cache()
257 spin_lock(&block_group->lock); in btrfs_truncate_free_space_cache()
258 block_group->disk_cache_state = BTRFS_DC_CLEAR; in btrfs_truncate_free_space_cache()
259 spin_unlock(&block_group->lock); in btrfs_truncate_free_space_cache()
844 int load_free_space_cache(struct btrfs_block_group *block_group) in load_free_space_cache() argument
846 struct btrfs_fs_info *fs_info = block_group->fs_info; in load_free_space_cache()
847 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in load_free_space_cache()
852 u64 used = block_group->used; in load_free_space_cache()
858 spin_lock(&block_group->lock); in load_free_space_cache()
859 if (block_group->disk_cache_state != BTRFS_DC_WRITTEN) { in load_free_space_cache()
860 spin_unlock(&block_group->lock); in load_free_space_cache()
863 spin_unlock(&block_group->lock); in load_free_space_cache()
890 inode = lookup_free_space_inode(block_group, path); in load_free_space_cache()
897 spin_lock(&block_group->lock); in load_free_space_cache()
898 if (block_group->disk_cache_state != BTRFS_DC_WRITTEN) { in load_free_space_cache()
899 spin_unlock(&block_group->lock); in load_free_space_cache()
903 spin_unlock(&block_group->lock); in load_free_space_cache()
906 path, block_group->start); in load_free_space_cache()
912 matched = (ctl->free_space == (block_group->length - used - in load_free_space_cache()
913 block_group->bytes_super)); in load_free_space_cache()
920 block_group->start); in load_free_space_cache()
926 spin_lock(&block_group->lock); in load_free_space_cache()
927 block_group->disk_cache_state = BTRFS_DC_CLEAR; in load_free_space_cache()
928 spin_unlock(&block_group->lock); in load_free_space_cache()
933 block_group->start); in load_free_space_cache()
943 struct btrfs_block_group *block_group, in write_cache_extent_entries() argument
954 if (block_group && !list_empty(&block_group->cluster_list)) { in write_cache_extent_entries()
955 cluster = list_entry(block_group->cluster_list.next, in write_cache_extent_entries()
1072 struct btrfs_block_group *block_group, in write_pinned_extent_entries() argument
1080 if (!block_group) in write_pinned_extent_entries()
1092 start = block_group->start; in write_pinned_extent_entries()
1094 while (start < block_group->start + block_group->length) { in write_pinned_extent_entries()
1102 if (extent_start >= block_group->start + block_group->length) in write_pinned_extent_entries()
1106 extent_end = min(block_group->start + block_group->length, in write_pinned_extent_entries()
1171 struct btrfs_block_group *block_group, in __btrfs_wait_cache_io() argument
1193 if (block_group) in __btrfs_wait_cache_io()
1196 block_group->start, ret); in __btrfs_wait_cache_io()
1200 if (block_group) { in __btrfs_wait_cache_io()
1205 spin_lock(&block_group->lock); in __btrfs_wait_cache_io()
1212 if (!ret && list_empty(&block_group->dirty_list)) in __btrfs_wait_cache_io()
1213 block_group->disk_cache_state = BTRFS_DC_WRITTEN; in __btrfs_wait_cache_io()
1215 block_group->disk_cache_state = BTRFS_DC_ERROR; in __btrfs_wait_cache_io()
1217 spin_unlock(&block_group->lock); in __btrfs_wait_cache_io()
1236 struct btrfs_block_group *block_group, in btrfs_wait_cache_io() argument
1239 return __btrfs_wait_cache_io(block_group->fs_info->tree_root, trans, in btrfs_wait_cache_io()
1240 block_group, &block_group->io_ctl, in btrfs_wait_cache_io()
1241 path, block_group->start); in btrfs_wait_cache_io()
1257 struct btrfs_block_group *block_group, in __btrfs_write_out_cache() argument
1276 if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA)) { in __btrfs_write_out_cache()
1277 down_write(&block_group->data_rwsem); in __btrfs_write_out_cache()
1278 spin_lock(&block_group->lock); in __btrfs_write_out_cache()
1279 if (block_group->delalloc_bytes) { in __btrfs_write_out_cache()
1280 block_group->disk_cache_state = BTRFS_DC_WRITTEN; in __btrfs_write_out_cache()
1281 spin_unlock(&block_group->lock); in __btrfs_write_out_cache()
1282 up_write(&block_group->data_rwsem); in __btrfs_write_out_cache()
1288 spin_unlock(&block_group->lock); in __btrfs_write_out_cache()
1305 block_group, &entries, &bitmaps, in __btrfs_write_out_cache()
1318 ret = write_pinned_extent_entries(trans, block_group, io_ctl, &entries); in __btrfs_write_out_cache()
1343 if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA)) in __btrfs_write_out_cache()
1344 up_write(&block_group->data_rwsem); in __btrfs_write_out_cache()
1378 if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA)) in __btrfs_write_out_cache()
1379 up_write(&block_group->data_rwsem); in __btrfs_write_out_cache()
1395 struct btrfs_block_group *block_group, in btrfs_write_out_cache() argument
1399 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_write_out_cache()
1403 spin_lock(&block_group->lock); in btrfs_write_out_cache()
1404 if (block_group->disk_cache_state < BTRFS_DC_SETUP) { in btrfs_write_out_cache()
1405 spin_unlock(&block_group->lock); in btrfs_write_out_cache()
1408 spin_unlock(&block_group->lock); in btrfs_write_out_cache()
1410 inode = lookup_free_space_inode(block_group, path); in btrfs_write_out_cache()
1415 block_group, &block_group->io_ctl, trans); in btrfs_write_out_cache()
1419 block_group->start, ret); in btrfs_write_out_cache()
1420 spin_lock(&block_group->lock); in btrfs_write_out_cache()
1421 block_group->disk_cache_state = BTRFS_DC_ERROR; in btrfs_write_out_cache()
1422 spin_unlock(&block_group->lock); in btrfs_write_out_cache()
1424 block_group->io_ctl.inode = NULL; in btrfs_write_out_cache()
1681 struct btrfs_block_group *block_group = ctl->private; in recalculate_thresholds() local
1685 u64 size = block_group->length; in recalculate_thresholds()
1922 struct btrfs_block_group *block_group = ctl->private; in count_bitmap_extents() local
1927 if (!block_group || !bytes) in count_bitmap_extents()
2093 struct btrfs_block_group *block_group = ctl->private; in use_bitmap() local
2094 struct btrfs_fs_info *fs_info = block_group->fs_info; in use_bitmap()
2098 if (btrfs_should_fragment_free_space(block_group)) in use_bitmap()
2134 if (((BITS_PER_BITMAP * ctl->unit) >> 1) > block_group->length) in use_bitmap()
2149 struct btrfs_block_group *block_group = NULL; in insert_into_bitmap() local
2163 block_group = ctl->private; in insert_into_bitmap()
2170 if (block_group && !list_empty(&block_group->cluster_list)) { in insert_into_bitmap()
2175 cluster = list_entry(block_group->cluster_list.next, in insert_into_bitmap()
2469 struct btrfs_block_group *block_group = ctl->private; in __btrfs_add_free_space() local
2515 btrfs_discard_update_discardable(block_group, ctl); in __btrfs_add_free_space()
2524 btrfs_discard_check_filter(block_group, filter_bytes); in __btrfs_add_free_space()
2525 btrfs_discard_queue_work(&fs_info->discard_ctl, block_group); in __btrfs_add_free_space()
2531 int btrfs_add_free_space(struct btrfs_block_group *block_group, in btrfs_add_free_space() argument
2536 if (btrfs_test_opt(block_group->fs_info, DISCARD_SYNC)) in btrfs_add_free_space()
2539 return __btrfs_add_free_space(block_group->fs_info, in btrfs_add_free_space()
2540 block_group->free_space_ctl, in btrfs_add_free_space()
2549 int btrfs_add_free_space_async_trimmed(struct btrfs_block_group *block_group, in btrfs_add_free_space_async_trimmed() argument
2554 if (btrfs_test_opt(block_group->fs_info, DISCARD_SYNC) || in btrfs_add_free_space_async_trimmed()
2555 btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC)) in btrfs_add_free_space_async_trimmed()
2558 return __btrfs_add_free_space(block_group->fs_info, in btrfs_add_free_space_async_trimmed()
2559 block_group->free_space_ctl, in btrfs_add_free_space_async_trimmed()
2563 int btrfs_remove_free_space(struct btrfs_block_group *block_group, in btrfs_remove_free_space() argument
2566 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_remove_free_space()
2635 ret = __btrfs_add_free_space(block_group->fs_info, ctl, in btrfs_remove_free_space()
2650 btrfs_discard_update_discardable(block_group, ctl); in btrfs_remove_free_space()
2656 void btrfs_dump_free_space(struct btrfs_block_group *block_group, in btrfs_dump_free_space() argument
2659 struct btrfs_fs_info *fs_info = block_group->fs_info; in btrfs_dump_free_space()
2660 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_dump_free_space()
2668 if (info->bytes >= bytes && !block_group->ro) in btrfs_dump_free_space()
2676 list_empty(&block_group->cluster_list) ? "no" : "yes"); in btrfs_dump_free_space()
2681 void btrfs_init_free_space_ctl(struct btrfs_block_group *block_group) in btrfs_init_free_space_ctl() argument
2683 struct btrfs_fs_info *fs_info = block_group->fs_info; in btrfs_init_free_space_ctl()
2684 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_init_free_space_ctl()
2688 ctl->start = block_group->start; in btrfs_init_free_space_ctl()
2689 ctl->private = block_group; in btrfs_init_free_space_ctl()
2709 struct btrfs_block_group *block_group, in __btrfs_return_cluster_to_free_space() argument
2712 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in __btrfs_return_cluster_to_free_space()
2717 if (cluster->block_group != block_group) { in __btrfs_return_cluster_to_free_space()
2722 cluster->block_group = NULL; in __btrfs_return_cluster_to_free_space()
2759 btrfs_put_block_group(block_group); in __btrfs_return_cluster_to_free_space()
2790 void btrfs_remove_free_space_cache(struct btrfs_block_group *block_group) in btrfs_remove_free_space_cache() argument
2792 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_remove_free_space_cache()
2797 while ((head = block_group->cluster_list.next) != in btrfs_remove_free_space_cache()
2798 &block_group->cluster_list) { in btrfs_remove_free_space_cache()
2802 WARN_ON(cluster->block_group != block_group); in btrfs_remove_free_space_cache()
2803 __btrfs_return_cluster_to_free_space(block_group, cluster); in btrfs_remove_free_space_cache()
2808 btrfs_discard_update_discardable(block_group, ctl); in btrfs_remove_free_space_cache()
2819 bool btrfs_is_free_space_trimmed(struct btrfs_block_group *block_group) in btrfs_is_free_space_trimmed() argument
2821 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_is_free_space_trimmed()
2844 u64 btrfs_find_space_for_alloc(struct btrfs_block_group *block_group, in btrfs_find_space_for_alloc() argument
2848 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_find_space_for_alloc()
2850 &block_group->fs_info->discard_ctl; in btrfs_find_space_for_alloc()
2860 block_group->full_stripe_len, max_extent_size); in btrfs_find_space_for_alloc()
2892 btrfs_discard_update_discardable(block_group, ctl); in btrfs_find_space_for_alloc()
2896 __btrfs_add_free_space(block_group->fs_info, ctl, in btrfs_find_space_for_alloc()
2911 struct btrfs_block_group *block_group, in btrfs_return_cluster_to_free_space() argument
2918 if (!block_group) { in btrfs_return_cluster_to_free_space()
2919 block_group = cluster->block_group; in btrfs_return_cluster_to_free_space()
2920 if (!block_group) { in btrfs_return_cluster_to_free_space()
2924 } else if (cluster->block_group != block_group) { in btrfs_return_cluster_to_free_space()
2929 btrfs_get_block_group(block_group); in btrfs_return_cluster_to_free_space()
2932 ctl = block_group->free_space_ctl; in btrfs_return_cluster_to_free_space()
2936 __btrfs_return_cluster_to_free_space(block_group, cluster); in btrfs_return_cluster_to_free_space()
2939 btrfs_discard_queue_work(&block_group->fs_info->discard_ctl, block_group); in btrfs_return_cluster_to_free_space()
2942 btrfs_put_block_group(block_group); in btrfs_return_cluster_to_free_space()
2945 static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group *block_group, in btrfs_alloc_from_bitmap() argument
2951 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_alloc_from_bitmap()
2978 u64 btrfs_alloc_from_cluster(struct btrfs_block_group *block_group, in btrfs_alloc_from_cluster() argument
2982 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_alloc_from_cluster()
2984 &block_group->fs_info->discard_ctl; in btrfs_alloc_from_cluster()
2993 if (cluster->block_group != block_group) in btrfs_alloc_from_cluster()
3017 ret = btrfs_alloc_from_bitmap(block_group, in btrfs_alloc_from_cluster()
3075 static int btrfs_bitmap_cluster(struct btrfs_block_group *block_group, in btrfs_bitmap_cluster() argument
3081 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_bitmap_cluster()
3146 trace_btrfs_setup_cluster(block_group, cluster, in btrfs_bitmap_cluster()
3157 setup_cluster_no_bitmap(struct btrfs_block_group *block_group, in setup_cluster_no_bitmap() argument
3162 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in setup_cluster_no_bitmap()
3239 trace_btrfs_setup_cluster(block_group, cluster, total_size, 0); in setup_cluster_no_bitmap()
3248 setup_cluster_bitmap(struct btrfs_block_group *block_group, in setup_cluster_bitmap() argument
3253 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in setup_cluster_bitmap()
3277 ret = btrfs_bitmap_cluster(block_group, entry, cluster, offset, in setup_cluster_bitmap()
3298 int btrfs_find_space_cluster(struct btrfs_block_group *block_group, in btrfs_find_space_cluster() argument
3302 struct btrfs_fs_info *fs_info = block_group->fs_info; in btrfs_find_space_cluster()
3303 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_find_space_cluster()
3318 } else if (block_group->flags & BTRFS_BLOCK_GROUP_METADATA) { in btrfs_find_space_cluster()
3340 if (cluster->block_group) { in btrfs_find_space_cluster()
3345 trace_btrfs_find_cluster(block_group, offset, bytes, empty_size, in btrfs_find_space_cluster()
3348 ret = setup_cluster_no_bitmap(block_group, cluster, &bitmaps, offset, in btrfs_find_space_cluster()
3352 ret = setup_cluster_bitmap(block_group, cluster, &bitmaps, in btrfs_find_space_cluster()
3361 btrfs_get_block_group(block_group); in btrfs_find_space_cluster()
3363 &block_group->cluster_list); in btrfs_find_space_cluster()
3364 cluster->block_group = block_group; in btrfs_find_space_cluster()
3366 trace_btrfs_failed_cluster_setup(block_group); in btrfs_find_space_cluster()
3386 cluster->block_group = NULL; in btrfs_init_free_cluster()
3389 static int do_trimming(struct btrfs_block_group *block_group, in do_trimming() argument
3395 struct btrfs_space_info *space_info = block_group->space_info; in do_trimming()
3396 struct btrfs_fs_info *fs_info = block_group->fs_info; in do_trimming()
3397 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in do_trimming()
3406 spin_lock(&block_group->lock); in do_trimming()
3407 if (!block_group->ro) { in do_trimming()
3408 block_group->reserved += reserved_bytes; in do_trimming()
3412 spin_unlock(&block_group->lock); in do_trimming()
3435 spin_lock(&block_group->lock); in do_trimming()
3436 if (block_group->ro) in do_trimming()
3438 block_group->reserved -= reserved_bytes; in do_trimming()
3440 spin_unlock(&block_group->lock); in do_trimming()
3450 static int trim_no_bitmap(struct btrfs_block_group *block_group, in trim_no_bitmap() argument
3455 &block_group->fs_info->discard_ctl; in trim_no_bitmap()
3456 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in trim_no_bitmap()
3539 ret = do_trimming(block_group, total_trimmed, start, bytes, in trim_no_bitmap()
3543 block_group->discard_cursor = start + bytes; in trim_no_bitmap()
3548 block_group->discard_cursor = start; in trim_no_bitmap()
3563 block_group->discard_cursor = btrfs_block_group_end(block_group); in trim_no_bitmap()
3616 static int trim_bitmaps(struct btrfs_block_group *block_group, in trim_bitmaps() argument
3621 &block_group->fs_info->discard_ctl; in trim_bitmaps()
3622 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in trim_bitmaps()
3638 block_group->discard_cursor = in trim_bitmaps()
3639 btrfs_block_group_end(block_group); in trim_bitmaps()
3726 ret = do_trimming(block_group, total_trimmed, start, bytes, in trim_bitmaps()
3730 block_group->discard_cursor = in trim_bitmaps()
3731 btrfs_block_group_end(block_group); in trim_bitmaps()
3741 block_group->discard_cursor = start; in trim_bitmaps()
3754 block_group->discard_cursor = end; in trim_bitmaps()
3760 int btrfs_trim_block_group(struct btrfs_block_group *block_group, in btrfs_trim_block_group() argument
3763 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl; in btrfs_trim_block_group()
3769 spin_lock(&block_group->lock); in btrfs_trim_block_group()
3770 if (block_group->removed) { in btrfs_trim_block_group()
3771 spin_unlock(&block_group->lock); in btrfs_trim_block_group()
3774 btrfs_freeze_block_group(block_group); in btrfs_trim_block_group()
3775 spin_unlock(&block_group->lock); in btrfs_trim_block_group()
3777 ret = trim_no_bitmap(block_group, trimmed, start, end, minlen, false); in btrfs_trim_block_group()
3781 ret = trim_bitmaps(block_group, trimmed, start, end, minlen, 0, false); in btrfs_trim_block_group()
3787 btrfs_unfreeze_block_group(block_group); in btrfs_trim_block_group()
3791 int btrfs_trim_block_group_extents(struct btrfs_block_group *block_group, in btrfs_trim_block_group_extents() argument
3799 spin_lock(&block_group->lock); in btrfs_trim_block_group_extents()
3800 if (block_group->removed) { in btrfs_trim_block_group_extents()
3801 spin_unlock(&block_group->lock); in btrfs_trim_block_group_extents()
3804 btrfs_freeze_block_group(block_group); in btrfs_trim_block_group_extents()
3805 spin_unlock(&block_group->lock); in btrfs_trim_block_group_extents()
3807 ret = trim_no_bitmap(block_group, trimmed, start, end, minlen, async); in btrfs_trim_block_group_extents()
3808 btrfs_unfreeze_block_group(block_group); in btrfs_trim_block_group_extents()
3813 int btrfs_trim_block_group_bitmaps(struct btrfs_block_group *block_group, in btrfs_trim_block_group_bitmaps() argument
3821 spin_lock(&block_group->lock); in btrfs_trim_block_group_bitmaps()
3822 if (block_group->removed) { in btrfs_trim_block_group_bitmaps()
3823 spin_unlock(&block_group->lock); in btrfs_trim_block_group_bitmaps()
3826 btrfs_freeze_block_group(block_group); in btrfs_trim_block_group_bitmaps()
3827 spin_unlock(&block_group->lock); in btrfs_trim_block_group_bitmaps()
3829 ret = trim_bitmaps(block_group, trimmed, start, end, minlen, maxlen, in btrfs_trim_block_group_bitmaps()
3832 btrfs_unfreeze_block_group(block_group); in btrfs_trim_block_group_bitmaps()