/*
* if this is the last block group we have in this space, we can't
- * relocate it.
+ * relocate it unless we're able to allocate a new chunk below.
+ *
+ * Otherwise, we need to make sure we have room in the space to handle
+ * all of the extents from this block group. If we can, we're good
*/
- if (space_info->total_bytes == block_group->key.offset) {
- ret = -1;
- spin_unlock(&space_info->lock);
- goto out;
- }
-
- /*
- * need to make sure we have room in the space to handle all of the
- * extents from this block group. If we can, we're good
- */
- if (space_info->bytes_used + space_info->bytes_reserved +
+ if ((space_info->total_bytes != block_group->key.offset) &&
+ (space_info->bytes_used + space_info->bytes_reserved +
space_info->bytes_pinned + space_info->bytes_readonly +
btrfs_block_group_used(&block_group->item) <
- space_info->total_bytes) {
+ space_info->total_bytes)) {
spin_unlock(&space_info->lock);
goto out;
}