cache = btrfs_lookup_block_group(fs_info, buf->start);
- if (!btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN) &&
- btrfs_is_zoned(fs_info))
+ if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
+ pin_down_extent(trans, cache, buf->start, buf->len, 1);
+ btrfs_put_block_group(cache);
+ goto out;
+ }
+
+ if (btrfs_is_zoned(fs_info)) {
btrfs_redirty_list_add(trans->transaction, buf);
+ pin_down_extent(trans, cache, buf->start, buf->len, 1);
+ btrfs_put_block_group(cache);
+ goto out;
+ }
+
+ WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
- pin_down_extent(trans, cache, buf->start, buf->len, 1);
+ btrfs_add_free_space(cache, buf->start, buf->len);
+ btrfs_free_reserved_bytes(cache, buf->len, 0);
btrfs_put_block_group(cache);
+ trace_btrfs_reserved_extent_free(fs_info, buf->start, buf->len);
}
out:
if (last_ref) {