aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2017-07-21 19:15:57 +0200
committerDavid Sterba <dsterba@suse.com>2017-07-21 19:15:57 +0200
commit93058e69596db4a3458a9e5e197c9373d5f57bf1 (patch)
tree1160a6bd7b110755d25a282559de03ded38549c6 /fs
parentaf373e8aa0563a1656d6a906349bea96f5f342f1 (diff)
parent96cbacc20519d67fcbe521ec42983a025cd10093 (diff)
Merge branch 'ext/jeffm/lockup-find-free-ro-bg' into for-next-next-v4.14-20170721
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/extent-tree.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index be3e43b1aa61..075015d12992 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -7575,6 +7575,10 @@ search:
u64 offset;
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);
search_start = block_group->key.objectid;
@@ -7610,8 +7614,6 @@ have_block_group:
if (unlikely(block_group->cached == BTRFS_CACHE_ERROR))
goto loop;
- if (unlikely(block_group->ro))
- goto loop;
/*
* Ok we want to try and use the cluster allocator, so
@@ -7825,6 +7827,7 @@ loop:
failed_alloc = false;
BUG_ON(index != get_block_group_index(block_group));
btrfs_release_block_group(block_group, delalloc);
+ cond_resched();
}
up_read(&space_info->groups_sem);