Lines Matching refs:block_group

66 static void wait_eb_writebacks(struct btrfs_block_group *block_group);
67 static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_written);
1854 struct btrfs_block_group *block_group = ctx->zoned_bg;
1855 struct btrfs_fs_info *fs_info = block_group->fs_info;
1857 if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags))
1860 if (fs_info->treelog_bg == block_group->start) {
1861 if (!btrfs_zone_activate(block_group)) {
1864 if (ret_fin != 1 || !btrfs_zone_activate(block_group))
1867 } else if (*active_bg != block_group) {
1894 if (!btrfs_zone_activate(block_group))
1896 if (*active_bg != block_group) {
1898 *active_bg = block_group;
1899 btrfs_get_block_group(block_group);
1919 struct btrfs_block_group *block_group = ctx->zoned_bg;
1924 if (block_group) {
1925 if (block_group->start > eb->start ||
1926 block_group->start + block_group->length <= eb->start) {
1927 btrfs_put_block_group(block_group);
1928 block_group = NULL;
1933 if (!block_group) {
1934 block_group = btrfs_lookup_block_group(fs_info, eb->start);
1935 if (!block_group)
1937 ctx->zoned_bg = block_group;
1940 if (block_group->meta_write_pointer == eb->start) {
1946 if (block_group->flags & BTRFS_BLOCK_GROUP_SYSTEM)
1958 if (block_group->meta_write_pointer > eb->start)
2055 * @block_group: the block group to activate
2059 bool btrfs_zone_activate(struct btrfs_block_group *block_group)
2061 struct btrfs_fs_info *fs_info = block_group->fs_info;
2065 const bool is_data = (block_group->flags & BTRFS_BLOCK_GROUP_DATA);
2069 if (!btrfs_is_zoned(block_group->fs_info))
2072 map = block_group->physical_map;
2075 spin_lock(&block_group->lock);
2076 if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags)) {
2082 if (btrfs_zoned_bg_is_full(block_group)) {
2119 set_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags);
2120 spin_unlock(&block_group->lock);
2123 btrfs_get_block_group(block_group);
2124 list_add_tail(&block_group->active_bg_list, &fs_info->zone_active_bgs);
2130 spin_unlock(&block_group->lock);
2135 static void wait_eb_writebacks(struct btrfs_block_group *block_group)
2137 struct btrfs_fs_info *fs_info = block_group->fs_info;
2138 const u64 end = block_group->start + block_group->length;
2145 block_group->start >> fs_info->sectorsize_bits) {
2154 if (eb->start < block_group->start)
2167 static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_written)
2169 struct btrfs_fs_info *fs_info = block_group->fs_info;
2171 const bool is_metadata = (block_group->flags &
2177 spin_lock(&block_group->lock);
2178 if (!test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags)) {
2179 spin_unlock(&block_group->lock);
2185 block_group->start + block_group->alloc_offset > block_group->meta_write_pointer) {
2186 spin_unlock(&block_group->lock);
2195 * and block_group->meta_write_pointer for metadata.
2198 if (test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags)) {
2199 spin_unlock(&block_group->lock);
2202 spin_unlock(&block_group->lock);
2204 ret = btrfs_inc_block_group_ro(block_group, false);
2209 btrfs_wait_block_group_reservations(block_group);
2211 btrfs_wait_ordered_roots(fs_info, U64_MAX, block_group->start,
2212 block_group->length);
2215 wait_eb_writebacks(block_group);
2217 spin_lock(&block_group->lock);
2224 &block_group->runtime_flags)) {
2225 spin_unlock(&block_group->lock);
2226 btrfs_dec_block_group_ro(block_group);
2230 if (block_group->reserved ||
2232 &block_group->runtime_flags)) {
2233 spin_unlock(&block_group->lock);
2234 btrfs_dec_block_group_ro(block_group);
2239 clear_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags);
2240 block_group->alloc_offset = block_group->zone_capacity;
2241 if (block_group->flags & (BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_SYSTEM))
2242 block_group->meta_write_pointer = block_group->start +
2243 block_group->zone_capacity;
2244 block_group->free_space_ctl->free_space = 0;
2245 btrfs_clear_treelog_bg(block_group);
2246 btrfs_clear_data_reloc_bg(block_group);
2247 spin_unlock(&block_group->lock);
2250 map = block_group->physical_map;
2271 if (!(block_group->flags & BTRFS_BLOCK_GROUP_DATA))
2278 btrfs_dec_block_group_ro(block_group);
2281 ASSERT(!list_empty(&block_group->active_bg_list));
2282 list_del_init(&block_group->active_bg_list);
2286 btrfs_put_block_group(block_group);
2293 int btrfs_zone_finish(struct btrfs_block_group *block_group)
2295 if (!btrfs_is_zoned(block_group->fs_info))
2298 return do_zone_finish(block_group, false);
2350 struct btrfs_block_group *block_group;
2356 block_group = btrfs_lookup_block_group(fs_info, logical);
2357 ASSERT(block_group);
2360 if (block_group->flags & BTRFS_BLOCK_GROUP_DATA)
2367 block_group->start + block_group->zone_capacity)
2370 do_zone_finish(block_group, true);
2373 btrfs_put_block_group(block_group);
2466 struct btrfs_block_group *block_group;
2471 block_group = btrfs_lookup_block_group(fs_info, logical);
2473 ASSERT(block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA));
2475 spin_lock(&block_group->lock);
2476 if (!test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags))
2480 if (block_group->start + block_group->alloc_offset == logical + length) {
2486 &block_group->runtime_flags);
2490 spin_unlock(&block_group->lock);
2491 btrfs_put_block_group(block_group);
2496 struct btrfs_block_group *block_group;
2502 list_for_each_entry(block_group, &fs_info->zone_active_bgs,
2506 spin_lock(&block_group->lock);
2507 if (block_group->reserved || block_group->alloc_offset == 0 ||
2508 (block_group->flags & BTRFS_BLOCK_GROUP_SYSTEM) ||
2509 test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags)) {
2510 spin_unlock(&block_group->lock);
2514 avail = block_group->zone_capacity - block_group->alloc_offset;
2518 min_bg = block_group;
2522 spin_unlock(&block_group->lock);
2593 struct btrfs_block_group *block_group;
2625 list_for_each_entry(block_group, &fs_info->zone_active_bgs, active_bg_list) {
2626 struct btrfs_chunk_map *map = block_group->physical_map;
2628 if (!(block_group->flags &