|
@@ -7589,6 +7589,10 @@ search:
|
|
u64 offset;
|
|
u64 offset;
|
|
int cached;
|
|
int cached;
|
|
|
|
|
|
|
|
+ /* If the block group is read-only, we can skip it entirely. */
|
|
|
|
+ if (unlikely(block_group->ro))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
btrfs_grab_block_group(block_group, delalloc);
|
|
btrfs_grab_block_group(block_group, delalloc);
|
|
search_start = block_group->key.objectid;
|
|
search_start = block_group->key.objectid;
|
|
|
|
|
|
@@ -7624,8 +7628,6 @@ have_block_group:
|
|
|
|
|
|
if (unlikely(block_group->cached == BTRFS_CACHE_ERROR))
|
|
if (unlikely(block_group->cached == BTRFS_CACHE_ERROR))
|
|
goto loop;
|
|
goto loop;
|
|
- if (unlikely(block_group->ro))
|
|
|
|
- goto loop;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* Ok we want to try and use the cluster allocator, so
|
|
* Ok we want to try and use the cluster allocator, so
|
|
@@ -7839,6 +7841,7 @@ loop:
|
|
failed_alloc = false;
|
|
failed_alloc = false;
|
|
BUG_ON(index != get_block_group_index(block_group));
|
|
BUG_ON(index != get_block_group_index(block_group));
|
|
btrfs_release_block_group(block_group, delalloc);
|
|
btrfs_release_block_group(block_group, delalloc);
|
|
|
|
+ cond_resched();
|
|
}
|
|
}
|
|
up_read(&space_info->groups_sem);
|
|
up_read(&space_info->groups_sem);
|
|
|
|
|