Lines Matching refs:cache

118 void btrfs_get_block_group(struct btrfs_block_group *cache)  in btrfs_get_block_group()  argument
120 refcount_inc(&cache->refs); in btrfs_get_block_group()
123 void btrfs_put_block_group(struct btrfs_block_group *cache) in btrfs_put_block_group() argument
125 if (refcount_dec_and_test(&cache->refs)) { in btrfs_put_block_group()
126 WARN_ON(cache->pinned > 0); in btrfs_put_block_group()
127 WARN_ON(cache->reserved > 0); in btrfs_put_block_group()
134 if (WARN_ON(!list_empty(&cache->discard_list))) in btrfs_put_block_group()
135 btrfs_discard_cancel_work(&cache->fs_info->discard_ctl, in btrfs_put_block_group()
136 cache); in btrfs_put_block_group()
146 WARN_ON(!RB_EMPTY_ROOT(&cache->full_stripe_locks_root.root)); in btrfs_put_block_group()
147 kfree(cache->free_space_ctl); in btrfs_put_block_group()
148 kfree(cache->physical_map); in btrfs_put_block_group()
149 kfree(cache); in btrfs_put_block_group()
161 struct btrfs_block_group *cache; in btrfs_add_block_group_cache() local
170 cache = rb_entry(parent, struct btrfs_block_group, cache_node); in btrfs_add_block_group_cache()
171 if (block_group->start < cache->start) { in btrfs_add_block_group_cache()
173 } else if (block_group->start > cache->start) { in btrfs_add_block_group_cache()
200 struct btrfs_block_group *cache, *ret = NULL; in block_group_cache_tree_search() local
208 cache = rb_entry(n, struct btrfs_block_group, cache_node); in block_group_cache_tree_search()
209 end = cache->start + cache->length - 1; in block_group_cache_tree_search()
210 start = cache->start; in block_group_cache_tree_search()
214 ret = cache; in block_group_cache_tree_search()
218 ret = cache; in block_group_cache_tree_search()
223 ret = cache; in block_group_cache_tree_search()
256 struct btrfs_block_group *cache) in btrfs_next_block_group() argument
258 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_next_block_group()
264 if (RB_EMPTY_NODE(&cache->cache_node)) { in btrfs_next_block_group()
265 const u64 next_bytenr = cache->start + cache->length; in btrfs_next_block_group()
268 btrfs_put_block_group(cache); in btrfs_next_block_group()
269 cache = btrfs_lookup_first_block_group(fs_info, next_bytenr); return cache; in btrfs_next_block_group()
271 node = rb_next(&cache->cache_node); in btrfs_next_block_group()
272 btrfs_put_block_group(cache); in btrfs_next_block_group()
274 cache = rb_entry(node, struct btrfs_block_group, cache_node); in btrfs_next_block_group()
275 btrfs_get_block_group(cache); in btrfs_next_block_group()
277 cache = NULL; in btrfs_next_block_group()
279 return cache; in btrfs_next_block_group()
364 struct btrfs_block_group *cache) in btrfs_get_caching_control() argument
368 spin_lock(&cache->lock); in btrfs_get_caching_control()
369 if (!cache->caching_ctl) { in btrfs_get_caching_control()
370 spin_unlock(&cache->lock); in btrfs_get_caching_control()
374 ctl = cache->caching_ctl; in btrfs_get_caching_control()
376 spin_unlock(&cache->lock); in btrfs_get_caching_control()
399 void btrfs_wait_block_group_cache_progress(struct btrfs_block_group *cache, in btrfs_wait_block_group_cache_progress() argument
404 caching_ctl = btrfs_get_caching_control(cache); in btrfs_wait_block_group_cache_progress()
408 wait_event(caching_ctl->wait, btrfs_block_group_done(cache) || in btrfs_wait_block_group_cache_progress()
409 (cache->free_space_ctl->free_space >= num_bytes)); in btrfs_wait_block_group_cache_progress()
414 int btrfs_wait_block_group_cache_done(struct btrfs_block_group *cache) in btrfs_wait_block_group_cache_done() argument
419 caching_ctl = btrfs_get_caching_control(cache); in btrfs_wait_block_group_cache_done()
421 return (cache->cached == BTRFS_CACHE_ERROR) ? -EIO : 0; in btrfs_wait_block_group_cache_done()
423 wait_event(caching_ctl->wait, btrfs_block_group_done(cache)); in btrfs_wait_block_group_cache_done()
424 if (cache->cached == BTRFS_CACHE_ERROR) in btrfs_wait_block_group_cache_done()
430 static bool space_cache_v1_done(struct btrfs_block_group *cache) in space_cache_v1_done() argument
434 spin_lock(&cache->lock); in space_cache_v1_done()
435 ret = cache->cached != BTRFS_CACHE_FAST; in space_cache_v1_done()
436 spin_unlock(&cache->lock); in space_cache_v1_done()
441 void btrfs_wait_space_cache_v1_finished(struct btrfs_block_group *cache, in btrfs_wait_space_cache_v1_finished() argument
444 wait_event(caching_ctl->wait, space_cache_v1_done(cache)); in btrfs_wait_space_cache_v1_finished()
723 int btrfs_cache_block_group(struct btrfs_block_group *cache, int load_cache_only) in btrfs_cache_block_group() argument
726 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_cache_block_group()
741 caching_ctl->block_group = cache; in btrfs_cache_block_group()
742 caching_ctl->progress = cache->start; in btrfs_cache_block_group()
746 spin_lock(&cache->lock); in btrfs_cache_block_group()
747 if (cache->cached != BTRFS_CACHE_NO) { in btrfs_cache_block_group()
750 caching_ctl = cache->caching_ctl; in btrfs_cache_block_group()
753 spin_unlock(&cache->lock); in btrfs_cache_block_group()
756 WARN_ON(cache->caching_ctl); in btrfs_cache_block_group()
757 cache->caching_ctl = caching_ctl; in btrfs_cache_block_group()
759 cache->cached = BTRFS_CACHE_FAST; in btrfs_cache_block_group()
761 cache->cached = BTRFS_CACHE_STARTED; in btrfs_cache_block_group()
762 cache->has_caching_ctl = 1; in btrfs_cache_block_group()
763 spin_unlock(&cache->lock); in btrfs_cache_block_group()
770 btrfs_get_block_group(cache); in btrfs_cache_block_group()
775 btrfs_wait_space_cache_v1_finished(cache, caching_ctl); in btrfs_cache_block_group()
1159 static int inc_block_group_ro(struct btrfs_block_group *cache, int force) in inc_block_group_ro() argument
1161 struct btrfs_space_info *sinfo = cache->space_info; in inc_block_group_ro()
1166 spin_lock(&cache->lock); in inc_block_group_ro()
1168 if (cache->swap_extents) { in inc_block_group_ro()
1173 if (cache->ro) { in inc_block_group_ro()
1174 cache->ro++; in inc_block_group_ro()
1179 num_bytes = cache->length - cache->reserved - cache->pinned - in inc_block_group_ro()
1180 cache->bytes_super - cache->zone_unusable - cache->used; in inc_block_group_ro()
1204 if (btrfs_can_overcommit(cache->fs_info, sinfo, num_bytes, in inc_block_group_ro()
1211 if (btrfs_is_zoned(cache->fs_info)) { in inc_block_group_ro()
1213 sinfo->bytes_readonly += cache->zone_unusable; in inc_block_group_ro()
1214 sinfo->bytes_zone_unusable -= cache->zone_unusable; in inc_block_group_ro()
1215 cache->zone_unusable = 0; in inc_block_group_ro()
1217 cache->ro++; in inc_block_group_ro()
1218 list_add_tail(&cache->ro_list, &sinfo->ro_bgs); in inc_block_group_ro()
1221 spin_unlock(&cache->lock); in inc_block_group_ro()
1223 if (ret == -ENOSPC && btrfs_test_opt(cache->fs_info, ENOSPC_DEBUG)) { in inc_block_group_ro()
1224 btrfs_info(cache->fs_info, in inc_block_group_ro()
1225 "unable to make block group %llu ro", cache->start); in inc_block_group_ro()
1226 btrfs_dump_space_info(cache->fs_info, cache->space_info, 0, 0); in inc_block_group_ro()
1828 static int exclude_super_stripes(struct btrfs_block_group *cache) in exclude_super_stripes() argument
1830 struct btrfs_fs_info *fs_info = cache->fs_info; in exclude_super_stripes()
1837 if (cache->start < BTRFS_SUPER_INFO_OFFSET) { in exclude_super_stripes()
1838 stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->start; in exclude_super_stripes()
1839 cache->bytes_super += stripe_len; in exclude_super_stripes()
1840 ret = btrfs_add_excluded_extent(fs_info, cache->start, in exclude_super_stripes()
1848 ret = btrfs_rmap_block(fs_info, cache->start, NULL, in exclude_super_stripes()
1857 cache->start); in exclude_super_stripes()
1863 cache->start + cache->length - logical[nr]); in exclude_super_stripes()
1865 cache->bytes_super += len; in exclude_super_stripes()
1879 static void link_block_group(struct btrfs_block_group *cache) in link_block_group() argument
1881 struct btrfs_space_info *space_info = cache->space_info; in link_block_group()
1882 int index = btrfs_bg_flags_to_raid_index(cache->flags); in link_block_group()
1885 list_add_tail(&cache->list, &space_info->block_groups[index]); in link_block_group()
1892 struct btrfs_block_group *cache; in btrfs_create_block_group_cache() local
1894 cache = kzalloc(sizeof(*cache), GFP_NOFS); in btrfs_create_block_group_cache()
1895 if (!cache) in btrfs_create_block_group_cache()
1898 cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl), in btrfs_create_block_group_cache()
1900 if (!cache->free_space_ctl) { in btrfs_create_block_group_cache()
1901 kfree(cache); in btrfs_create_block_group_cache()
1905 cache->start = start; in btrfs_create_block_group_cache()
1907 cache->fs_info = fs_info; in btrfs_create_block_group_cache()
1908 cache->full_stripe_len = btrfs_full_stripe_len(fs_info, start); in btrfs_create_block_group_cache()
1910 cache->discard_index = BTRFS_DISCARD_INDEX_UNUSED; in btrfs_create_block_group_cache()
1912 refcount_set(&cache->refs, 1); in btrfs_create_block_group_cache()
1913 spin_lock_init(&cache->lock); in btrfs_create_block_group_cache()
1914 init_rwsem(&cache->data_rwsem); in btrfs_create_block_group_cache()
1915 INIT_LIST_HEAD(&cache->list); in btrfs_create_block_group_cache()
1916 INIT_LIST_HEAD(&cache->cluster_list); in btrfs_create_block_group_cache()
1917 INIT_LIST_HEAD(&cache->bg_list); in btrfs_create_block_group_cache()
1918 INIT_LIST_HEAD(&cache->ro_list); in btrfs_create_block_group_cache()
1919 INIT_LIST_HEAD(&cache->discard_list); in btrfs_create_block_group_cache()
1920 INIT_LIST_HEAD(&cache->dirty_list); in btrfs_create_block_group_cache()
1921 INIT_LIST_HEAD(&cache->io_list); in btrfs_create_block_group_cache()
1922 INIT_LIST_HEAD(&cache->active_bg_list); in btrfs_create_block_group_cache()
1923 btrfs_init_free_space_ctl(cache, cache->free_space_ctl); in btrfs_create_block_group_cache()
1924 atomic_set(&cache->frozen, 0); in btrfs_create_block_group_cache()
1925 mutex_init(&cache->free_space_lock); in btrfs_create_block_group_cache()
1926 btrfs_init_full_stripe_locks_tree(&cache->full_stripe_locks_root); in btrfs_create_block_group_cache()
1928 return cache; in btrfs_create_block_group_cache()
1990 struct btrfs_block_group *cache; in read_one_block_group() local
1997 cache = btrfs_create_block_group_cache(info, key->objectid); in read_one_block_group()
1998 if (!cache) in read_one_block_group()
2001 cache->length = key->offset; in read_one_block_group()
2002 cache->used = btrfs_stack_block_group_used(bgi); in read_one_block_group()
2003 cache->flags = btrfs_stack_block_group_flags(bgi); in read_one_block_group()
2005 set_free_space_tree_thresholds(cache); in read_one_block_group()
2019 cache->disk_cache_state = BTRFS_DC_CLEAR; in read_one_block_group()
2021 if (!mixed && ((cache->flags & BTRFS_BLOCK_GROUP_METADATA) && in read_one_block_group()
2022 (cache->flags & BTRFS_BLOCK_GROUP_DATA))) { in read_one_block_group()
2025 cache->start); in read_one_block_group()
2030 ret = btrfs_load_block_group_zone_info(cache, false); in read_one_block_group()
2033 cache->start); in read_one_block_group()
2042 ret = exclude_super_stripes(cache); in read_one_block_group()
2045 btrfs_free_excluded_extents(cache); in read_one_block_group()
2062 btrfs_calc_zone_unusable(cache); in read_one_block_group()
2064 btrfs_free_excluded_extents(cache); in read_one_block_group()
2065 } else if (cache->length == cache->used) { in read_one_block_group()
2066 cache->last_byte_to_unpin = (u64)-1; in read_one_block_group()
2067 cache->cached = BTRFS_CACHE_FINISHED; in read_one_block_group()
2068 btrfs_free_excluded_extents(cache); in read_one_block_group()
2069 } else if (cache->used == 0) { in read_one_block_group()
2070 cache->last_byte_to_unpin = (u64)-1; in read_one_block_group()
2071 cache->cached = BTRFS_CACHE_FINISHED; in read_one_block_group()
2072 add_new_free_space(cache, cache->start, in read_one_block_group()
2073 cache->start + cache->length); in read_one_block_group()
2074 btrfs_free_excluded_extents(cache); in read_one_block_group()
2077 ret = btrfs_add_block_group_cache(info, cache); in read_one_block_group()
2079 btrfs_remove_free_space_cache(cache); in read_one_block_group()
2082 trace_btrfs_add_block_group(info, cache, 0); in read_one_block_group()
2083 btrfs_update_space_info(info, cache->flags, cache->length, in read_one_block_group()
2084 cache->used, cache->bytes_super, in read_one_block_group()
2085 cache->zone_unusable, &space_info); in read_one_block_group()
2087 cache->space_info = space_info; in read_one_block_group()
2089 link_block_group(cache); in read_one_block_group()
2091 set_avail_alloc_bits(info, cache->flags); in read_one_block_group()
2092 if (btrfs_chunk_writeable(info, cache->start)) { in read_one_block_group()
2093 if (cache->used == 0) { in read_one_block_group()
2094 ASSERT(list_empty(&cache->bg_list)); in read_one_block_group()
2096 btrfs_discard_queue_work(&info->discard_ctl, cache); in read_one_block_group()
2098 btrfs_mark_bg_unused(cache); in read_one_block_group()
2101 inc_block_group_ro(cache, 1); in read_one_block_group()
2106 btrfs_put_block_group(cache); in read_one_block_group()
2170 struct btrfs_block_group *cache; in btrfs_read_block_groups() local
2226 cache = list_first_entry(&space_info->block_groups[i], in btrfs_read_block_groups()
2229 btrfs_sysfs_add_block_group_type(cache); in btrfs_read_block_groups()
2242 list_for_each_entry(cache, in btrfs_read_block_groups()
2245 inc_block_group_ro(cache, 1); in btrfs_read_block_groups()
2246 list_for_each_entry(cache, in btrfs_read_block_groups()
2249 inc_block_group_ro(cache, 1); in btrfs_read_block_groups()
2447 struct btrfs_block_group *cache; in btrfs_make_block_group() local
2452 cache = btrfs_create_block_group_cache(fs_info, chunk_offset); in btrfs_make_block_group()
2453 if (!cache) in btrfs_make_block_group()
2456 cache->length = size; in btrfs_make_block_group()
2457 set_free_space_tree_thresholds(cache); in btrfs_make_block_group()
2458 cache->used = bytes_used; in btrfs_make_block_group()
2459 cache->flags = type; in btrfs_make_block_group()
2460 cache->last_byte_to_unpin = (u64)-1; in btrfs_make_block_group()
2461 cache->cached = BTRFS_CACHE_FINISHED; in btrfs_make_block_group()
2463 cache->needs_free_space = 1; in btrfs_make_block_group()
2465 ret = btrfs_load_block_group_zone_info(cache, true); in btrfs_make_block_group()
2467 btrfs_put_block_group(cache); in btrfs_make_block_group()
2475 btrfs_zone_activate(cache); in btrfs_make_block_group()
2477 ret = exclude_super_stripes(cache); in btrfs_make_block_group()
2480 btrfs_free_excluded_extents(cache); in btrfs_make_block_group()
2481 btrfs_put_block_group(cache); in btrfs_make_block_group()
2485 add_new_free_space(cache, chunk_offset, chunk_offset + size); in btrfs_make_block_group()
2487 btrfs_free_excluded_extents(cache); in btrfs_make_block_group()
2490 if (btrfs_should_fragment_free_space(cache)) { in btrfs_make_block_group()
2494 fragment_free_space(cache); in btrfs_make_block_group()
2502 cache->space_info = btrfs_find_space_info(fs_info, cache->flags); in btrfs_make_block_group()
2503 ASSERT(cache->space_info); in btrfs_make_block_group()
2505 ret = btrfs_add_block_group_cache(fs_info, cache); in btrfs_make_block_group()
2507 btrfs_remove_free_space_cache(cache); in btrfs_make_block_group()
2508 btrfs_put_block_group(cache); in btrfs_make_block_group()
2516 trace_btrfs_add_block_group(fs_info, cache, 1); in btrfs_make_block_group()
2517 btrfs_update_space_info(fs_info, cache->flags, size, bytes_used, in btrfs_make_block_group()
2518 cache->bytes_super, cache->zone_unusable, in btrfs_make_block_group()
2519 &cache->space_info); in btrfs_make_block_group()
2522 link_block_group(cache); in btrfs_make_block_group()
2524 list_add_tail(&cache->bg_list, &trans->new_bgs); in btrfs_make_block_group()
2529 return cache; in btrfs_make_block_group()
2541 int btrfs_inc_block_group_ro(struct btrfs_block_group *cache, in btrfs_inc_block_group_ro() argument
2544 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_inc_block_group_ro()
2581 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags); in btrfs_inc_block_group_ro()
2582 if (alloc_flags != cache->flags) { in btrfs_inc_block_group_ro()
2596 ret = inc_block_group_ro(cache, 0); in btrfs_inc_block_group_ro()
2601 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->space_info->flags); in btrfs_inc_block_group_ro()
2605 ret = inc_block_group_ro(cache, 0); in btrfs_inc_block_group_ro()
2609 if (cache->flags & BTRFS_BLOCK_GROUP_SYSTEM) { in btrfs_inc_block_group_ro()
2610 alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags); in btrfs_inc_block_group_ro()
2622 void btrfs_dec_block_group_ro(struct btrfs_block_group *cache) in btrfs_dec_block_group_ro() argument
2624 struct btrfs_space_info *sinfo = cache->space_info; in btrfs_dec_block_group_ro()
2627 BUG_ON(!cache->ro); in btrfs_dec_block_group_ro()
2630 spin_lock(&cache->lock); in btrfs_dec_block_group_ro()
2631 if (!--cache->ro) { in btrfs_dec_block_group_ro()
2632 if (btrfs_is_zoned(cache->fs_info)) { in btrfs_dec_block_group_ro()
2634 cache->zone_unusable = in btrfs_dec_block_group_ro()
2635 (cache->alloc_offset - cache->used) + in btrfs_dec_block_group_ro()
2636 (cache->length - cache->zone_capacity); in btrfs_dec_block_group_ro()
2637 sinfo->bytes_zone_unusable += cache->zone_unusable; in btrfs_dec_block_group_ro()
2638 sinfo->bytes_readonly -= cache->zone_unusable; in btrfs_dec_block_group_ro()
2640 num_bytes = cache->length - cache->reserved - in btrfs_dec_block_group_ro()
2641 cache->pinned - cache->bytes_super - in btrfs_dec_block_group_ro()
2642 cache->zone_unusable - cache->used; in btrfs_dec_block_group_ro()
2644 list_del_init(&cache->ro_list); in btrfs_dec_block_group_ro()
2646 spin_unlock(&cache->lock); in btrfs_dec_block_group_ro()
2652 struct btrfs_block_group *cache) in update_block_group_item() argument
2662 key.objectid = cache->start; in update_block_group_item()
2664 key.offset = cache->length; in update_block_group_item()
2675 btrfs_set_stack_block_group_used(&bgi, cache->used); in update_block_group_item()
2678 btrfs_set_stack_block_group_flags(&bgi, cache->flags); in update_block_group_item()
2855 struct btrfs_block_group *cache, *tmp; in btrfs_setup_space_cache() local
2868 list_for_each_entry_safe(cache, tmp, &cur_trans->dirty_bgs, in btrfs_setup_space_cache()
2870 if (cache->disk_cache_state == BTRFS_DC_CLEAR) in btrfs_setup_space_cache()
2871 cache_save_setup(cache, trans, path); in btrfs_setup_space_cache()
2893 struct btrfs_block_group *cache; in btrfs_start_dirty_block_groups() local
2932 cache = list_first_entry(&dirty, struct btrfs_block_group, in btrfs_start_dirty_block_groups()
2939 if (!list_empty(&cache->io_list)) { in btrfs_start_dirty_block_groups()
2940 list_del_init(&cache->io_list); in btrfs_start_dirty_block_groups()
2941 btrfs_wait_cache_io(trans, cache, path); in btrfs_start_dirty_block_groups()
2942 btrfs_put_block_group(cache); in btrfs_start_dirty_block_groups()
2955 list_del_init(&cache->dirty_list); in btrfs_start_dirty_block_groups()
2960 cache_save_setup(cache, trans, path); in btrfs_start_dirty_block_groups()
2962 if (cache->disk_cache_state == BTRFS_DC_SETUP) { in btrfs_start_dirty_block_groups()
2963 cache->io_ctl.inode = NULL; in btrfs_start_dirty_block_groups()
2964 ret = btrfs_write_out_cache(trans, cache, path); in btrfs_start_dirty_block_groups()
2965 if (ret == 0 && cache->io_ctl.inode) { in btrfs_start_dirty_block_groups()
2974 list_add_tail(&cache->io_list, io); in btrfs_start_dirty_block_groups()
2984 ret = update_block_group_item(trans, path, cache); in btrfs_start_dirty_block_groups()
2997 if (list_empty(&cache->dirty_list)) { in btrfs_start_dirty_block_groups()
2998 list_add_tail(&cache->dirty_list, in btrfs_start_dirty_block_groups()
3000 btrfs_get_block_group(cache); in btrfs_start_dirty_block_groups()
3011 btrfs_put_block_group(cache); in btrfs_start_dirty_block_groups()
3061 struct btrfs_block_group *cache; in btrfs_write_dirty_block_groups() local
3090 cache = list_first_entry(&cur_trans->dirty_bgs, in btrfs_write_dirty_block_groups()
3099 if (!list_empty(&cache->io_list)) { in btrfs_write_dirty_block_groups()
3101 list_del_init(&cache->io_list); in btrfs_write_dirty_block_groups()
3102 btrfs_wait_cache_io(trans, cache, path); in btrfs_write_dirty_block_groups()
3103 btrfs_put_block_group(cache); in btrfs_write_dirty_block_groups()
3111 list_del_init(&cache->dirty_list); in btrfs_write_dirty_block_groups()
3115 cache_save_setup(cache, trans, path); in btrfs_write_dirty_block_groups()
3121 if (!ret && cache->disk_cache_state == BTRFS_DC_SETUP) { in btrfs_write_dirty_block_groups()
3122 cache->io_ctl.inode = NULL; in btrfs_write_dirty_block_groups()
3123 ret = btrfs_write_out_cache(trans, cache, path); in btrfs_write_dirty_block_groups()
3124 if (ret == 0 && cache->io_ctl.inode) { in btrfs_write_dirty_block_groups()
3127 list_add_tail(&cache->io_list, io); in btrfs_write_dirty_block_groups()
3137 ret = update_block_group_item(trans, path, cache); in btrfs_write_dirty_block_groups()
3154 ret = update_block_group_item(trans, path, cache); in btrfs_write_dirty_block_groups()
3162 btrfs_put_block_group(cache); in btrfs_write_dirty_block_groups()
3173 cache = list_first_entry(io, struct btrfs_block_group, in btrfs_write_dirty_block_groups()
3175 list_del_init(&cache->io_list); in btrfs_write_dirty_block_groups()
3176 btrfs_wait_cache_io(trans, cache, path); in btrfs_write_dirty_block_groups()
3177 btrfs_put_block_group(cache); in btrfs_write_dirty_block_groups()
3188 struct btrfs_block_group *cache = NULL; in btrfs_update_block_group() local
3206 cache = btrfs_lookup_block_group(info, bytenr); in btrfs_update_block_group()
3207 if (!cache) { in btrfs_update_block_group()
3211 factor = btrfs_bg_type_to_factor(cache->flags); in btrfs_update_block_group()
3219 if (!alloc && !btrfs_block_group_done(cache)) in btrfs_update_block_group()
3220 btrfs_cache_block_group(cache, 1); in btrfs_update_block_group()
3222 byte_in_group = bytenr - cache->start; in btrfs_update_block_group()
3223 WARN_ON(byte_in_group > cache->length); in btrfs_update_block_group()
3225 spin_lock(&cache->space_info->lock); in btrfs_update_block_group()
3226 spin_lock(&cache->lock); in btrfs_update_block_group()
3229 cache->disk_cache_state < BTRFS_DC_CLEAR) in btrfs_update_block_group()
3230 cache->disk_cache_state = BTRFS_DC_CLEAR; in btrfs_update_block_group()
3232 old_val = cache->used; in btrfs_update_block_group()
3233 num_bytes = min(total, cache->length - byte_in_group); in btrfs_update_block_group()
3236 cache->used = old_val; in btrfs_update_block_group()
3237 cache->reserved -= num_bytes; in btrfs_update_block_group()
3238 cache->space_info->bytes_reserved -= num_bytes; in btrfs_update_block_group()
3239 cache->space_info->bytes_used += num_bytes; in btrfs_update_block_group()
3240 cache->space_info->disk_used += num_bytes * factor; in btrfs_update_block_group()
3241 spin_unlock(&cache->lock); in btrfs_update_block_group()
3242 spin_unlock(&cache->space_info->lock); in btrfs_update_block_group()
3245 cache->used = old_val; in btrfs_update_block_group()
3246 cache->pinned += num_bytes; in btrfs_update_block_group()
3248 cache->space_info, num_bytes); in btrfs_update_block_group()
3249 cache->space_info->bytes_used -= num_bytes; in btrfs_update_block_group()
3250 cache->space_info->disk_used -= num_bytes * factor; in btrfs_update_block_group()
3251 spin_unlock(&cache->lock); in btrfs_update_block_group()
3252 spin_unlock(&cache->space_info->lock); in btrfs_update_block_group()
3260 if (list_empty(&cache->dirty_list)) { in btrfs_update_block_group()
3261 list_add_tail(&cache->dirty_list, in btrfs_update_block_group()
3264 btrfs_get_block_group(cache); in btrfs_update_block_group()
3276 btrfs_mark_bg_unused(cache); in btrfs_update_block_group()
3279 btrfs_put_block_group(cache); in btrfs_update_block_group()
3301 int btrfs_add_reserved_bytes(struct btrfs_block_group *cache, in btrfs_add_reserved_bytes() argument
3304 struct btrfs_space_info *space_info = cache->space_info; in btrfs_add_reserved_bytes()
3308 spin_lock(&cache->lock); in btrfs_add_reserved_bytes()
3309 if (cache->ro) { in btrfs_add_reserved_bytes()
3312 cache->reserved += num_bytes; in btrfs_add_reserved_bytes()
3314 trace_btrfs_space_reservation(cache->fs_info, "space_info", in btrfs_add_reserved_bytes()
3316 btrfs_space_info_update_bytes_may_use(cache->fs_info, in btrfs_add_reserved_bytes()
3319 cache->delalloc_bytes += num_bytes; in btrfs_add_reserved_bytes()
3326 btrfs_try_granting_tickets(cache->fs_info, space_info); in btrfs_add_reserved_bytes()
3328 spin_unlock(&cache->lock); in btrfs_add_reserved_bytes()
3344 void btrfs_free_reserved_bytes(struct btrfs_block_group *cache, in btrfs_free_reserved_bytes() argument
3347 struct btrfs_space_info *space_info = cache->space_info; in btrfs_free_reserved_bytes()
3350 spin_lock(&cache->lock); in btrfs_free_reserved_bytes()
3351 if (cache->ro) in btrfs_free_reserved_bytes()
3353 cache->reserved -= num_bytes; in btrfs_free_reserved_bytes()
3358 cache->delalloc_bytes -= num_bytes; in btrfs_free_reserved_bytes()
3359 spin_unlock(&cache->lock); in btrfs_free_reserved_bytes()
3361 btrfs_try_granting_tickets(cache->fs_info, space_info); in btrfs_free_reserved_bytes()
3992 void btrfs_freeze_block_group(struct btrfs_block_group *cache) in btrfs_freeze_block_group() argument
3994 atomic_inc(&cache->frozen); in btrfs_freeze_block_group()