aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-07-28 15:26:59 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-07-28 15:26:59 -0400
commit0a2a1330d2621c7f963d9f55bb094811cc1c06b9 (patch)
treeee1850a7461623a9ac0fbcb2d8ccd1701606a5c6 /fs/btrfs/extent-tree.c
parent9583f1c99fe5a11b3f294ac8093e93f008bea29e (diff)
parent0e4324a4c36b3eb5cd1f71cbbc38d888f919ebfc (diff)
Merge branch 'for-4.13-part3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba: "Fixes addressing problems reported by users, and there's one more regression fix" * 'for-4.13-part3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: round down size diff when shrinking/growing device Btrfs: fix early ENOSPC due to delalloc btrfs: fix lockup in find_free_extent with read-only block groups Btrfs: fix dir item validation when replaying xattr deletes
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 375f8c728d91..e3b0b4196d3d 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -4825,10 +4825,6 @@ skip_async:
4825 else 4825 else
4826 flush = BTRFS_RESERVE_NO_FLUSH; 4826 flush = BTRFS_RESERVE_NO_FLUSH;
4827 spin_lock(&space_info->lock); 4827 spin_lock(&space_info->lock);
4828 if (can_overcommit(fs_info, space_info, orig, flush, false)) {
4829 spin_unlock(&space_info->lock);
4830 break;
4831 }
4832 if (list_empty(&space_info->tickets) && 4828 if (list_empty(&space_info->tickets) &&
4833 list_empty(&space_info->priority_tickets)) { 4829 list_empty(&space_info->priority_tickets)) {
4834 spin_unlock(&space_info->lock); 4830 spin_unlock(&space_info->lock);
@@ -7589,6 +7585,10 @@ search:
7589 u64 offset; 7585 u64 offset;
7590 int cached; 7586 int cached;
7591 7587
7588 /* If the block group is read-only, we can skip it entirely. */
7589 if (unlikely(block_group->ro))
7590 continue;
7591
7592 btrfs_grab_block_group(block_group, delalloc); 7592 btrfs_grab_block_group(block_group, delalloc);
7593 search_start = block_group->key.objectid; 7593 search_start = block_group->key.objectid;
7594 7594
@@ -7624,8 +7624,6 @@ have_block_group:
7624 7624
7625 if (unlikely(block_group->cached == BTRFS_CACHE_ERROR)) 7625 if (unlikely(block_group->cached == BTRFS_CACHE_ERROR))
7626 goto loop; 7626 goto loop;
7627 if (unlikely(block_group->ro))
7628 goto loop;
7629 7627
7630 /* 7628 /*
7631 * Ok we want to try and use the cluster allocator, so 7629 * Ok we want to try and use the cluster allocator, so
@@ -7839,6 +7837,7 @@ loop:
7839 failed_alloc = false; 7837 failed_alloc = false;
7840 BUG_ON(index != get_block_group_index(block_group)); 7838 BUG_ON(index != get_block_group_index(block_group));
7841 btrfs_release_block_group(block_group, delalloc); 7839 btrfs_release_block_group(block_group, delalloc);
7840 cond_resched();
7842 } 7841 }
7843 up_read(&space_info->groups_sem); 7842 up_read(&space_info->groups_sem);
7844 7843