Lines Matching refs:block_group
68 static void wait_eb_writebacks(struct btrfs_block_group *block_group);
69 static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_written);
1758 struct btrfs_block_group *block_group = ctx->zoned_bg;
1759 struct btrfs_fs_info *fs_info = block_group->fs_info;
1761 if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags))
1764 if (fs_info->treelog_bg == block_group->start) {
1765 if (!btrfs_zone_activate(block_group)) {
1768 if (ret_fin != 1 || !btrfs_zone_activate(block_group))
1771 } else if (*active_bg != block_group) {
1798 if (!btrfs_zone_activate(block_group))
1800 if (*active_bg != block_group) {
1802 *active_bg = block_group;
1803 btrfs_get_block_group(block_group);
1823 struct btrfs_block_group *block_group = ctx->zoned_bg;
1828 if (block_group) {
1829 if (block_group->start > eb->start ||
1830 block_group->start + block_group->length <= eb->start) {
1831 btrfs_put_block_group(block_group);
1832 block_group = NULL;
1837 if (!block_group) {
1838 block_group = btrfs_lookup_block_group(fs_info, eb->start);
1839 if (!block_group)
1841 ctx->zoned_bg = block_group;
1844 if (block_group->meta_write_pointer == eb->start) {
1850 if (block_group->flags & BTRFS_BLOCK_GROUP_SYSTEM)
1862 if (block_group->meta_write_pointer > eb->start)
1959 * @block_group: the block group to activate
1963 bool btrfs_zone_activate(struct btrfs_block_group *block_group)
1965 struct btrfs_fs_info *fs_info = block_group->fs_info;
1969 const bool is_data = (block_group->flags & BTRFS_BLOCK_GROUP_DATA);
1973 if (!btrfs_is_zoned(block_group->fs_info))
1976 map = block_group->physical_map;
1979 spin_lock(&block_group->lock);
1980 if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags)) {
1986 if (btrfs_zoned_bg_is_full(block_group)) {
2023 set_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags);
2024 spin_unlock(&block_group->lock);
2027 btrfs_get_block_group(block_group);
2028 list_add_tail(&block_group->active_bg_list, &fs_info->zone_active_bgs);
2034 spin_unlock(&block_group->lock);
2039 static void wait_eb_writebacks(struct btrfs_block_group *block_group)
2041 struct btrfs_fs_info *fs_info = block_group->fs_info;
2042 const u64 end = block_group->start + block_group->length;
2049 block_group->start >> fs_info->sectorsize_bits) {
2058 if (eb->start < block_group->start)
2071 static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_written)
2073 struct btrfs_fs_info *fs_info = block_group->fs_info;
2075 const bool is_metadata = (block_group->flags &
2080 spin_lock(&block_group->lock);
2081 if (!test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags)) {
2082 spin_unlock(&block_group->lock);
2088 block_group->start + block_group->alloc_offset > block_group->meta_write_pointer) {
2089 spin_unlock(&block_group->lock);
2098 * and block_group->meta_write_pointer for metadata.
2101 if (test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags)) {
2102 spin_unlock(&block_group->lock);
2105 spin_unlock(&block_group->lock);
2107 ret = btrfs_inc_block_group_ro(block_group, false);
2112 btrfs_wait_block_group_reservations(block_group);
2114 btrfs_wait_ordered_roots(fs_info, U64_MAX, block_group->start,
2115 block_group->length);
2118 wait_eb_writebacks(block_group);
2120 spin_lock(&block_group->lock);
2127 &block_group->runtime_flags)) {
2128 spin_unlock(&block_group->lock);
2129 btrfs_dec_block_group_ro(block_group);
2133 if (block_group->reserved ||
2135 &block_group->runtime_flags)) {
2136 spin_unlock(&block_group->lock);
2137 btrfs_dec_block_group_ro(block_group);
2142 clear_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags);
2143 block_group->alloc_offset = block_group->zone_capacity;
2144 if (block_group->flags & (BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_SYSTEM))
2145 block_group->meta_write_pointer = block_group->start +
2146 block_group->zone_capacity;
2147 block_group->free_space_ctl->free_space = 0;
2148 btrfs_clear_treelog_bg(block_group);
2149 btrfs_clear_data_reloc_bg(block_group);
2150 spin_unlock(&block_group->lock);
2152 map = block_group->physical_map;
2169 if (!(block_group->flags & BTRFS_BLOCK_GROUP_DATA))
2175 btrfs_dec_block_group_ro(block_group);
2178 ASSERT(!list_empty(&block_group->active_bg_list));
2179 list_del_init(&block_group->active_bg_list);
2183 btrfs_put_block_group(block_group);
2190 int btrfs_zone_finish(struct btrfs_block_group *block_group)
2192 if (!btrfs_is_zoned(block_group->fs_info))
2195 return do_zone_finish(block_group, false);
2247 struct btrfs_block_group *block_group;
2253 block_group = btrfs_lookup_block_group(fs_info, logical);
2254 ASSERT(block_group);
2257 if (block_group->flags & BTRFS_BLOCK_GROUP_DATA)
2264 block_group->start + block_group->zone_capacity)
2267 do_zone_finish(block_group, true);
2270 btrfs_put_block_group(block_group);
2363 struct btrfs_block_group *block_group;
2368 block_group = btrfs_lookup_block_group(fs_info, logical);
2370 ASSERT(block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA));
2372 spin_lock(&block_group->lock);
2373 if (!test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags))
2377 if (block_group->start + block_group->alloc_offset == logical + length) {
2383 &block_group->runtime_flags);
2387 spin_unlock(&block_group->lock);
2388 btrfs_put_block_group(block_group);
2393 struct btrfs_block_group *block_group;
2399 list_for_each_entry(block_group, &fs_info->zone_active_bgs,
2403 spin_lock(&block_group->lock);
2404 if (block_group->reserved || block_group->alloc_offset == 0 ||
2405 (block_group->flags & BTRFS_BLOCK_GROUP_SYSTEM) ||
2406 test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags)) {
2407 spin_unlock(&block_group->lock);
2411 avail = block_group->zone_capacity - block_group->alloc_offset;
2415 min_bg = block_group;
2419 spin_unlock(&block_group->lock);
2490 struct btrfs_block_group *block_group;
2522 list_for_each_entry(block_group, &fs_info->zone_active_bgs, active_bg_list) {
2523 struct map_lookup *map = block_group->physical_map;
2525 if (!(block_group->flags &