diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index ae69a00387e7..3955e475ceec 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -749,6 +749,7 @@ again: | |||
749 | * our range starts | 749 | * our range starts |
750 | */ | 750 | */ |
751 | node = tree_search(tree, start); | 751 | node = tree_search(tree, start); |
752 | process_node: | ||
752 | if (!node) | 753 | if (!node) |
753 | break; | 754 | break; |
754 | 755 | ||
@@ -769,7 +770,10 @@ again: | |||
769 | if (start > end) | 770 | if (start > end) |
770 | break; | 771 | break; |
771 | 772 | ||
772 | cond_resched_lock(&tree->lock); | 773 | if (!cond_resched_lock(&tree->lock)) { |
774 | node = rb_next(node); | ||
775 | goto process_node; | ||
776 | } | ||
773 | } | 777 | } |
774 | out: | 778 | out: |
775 | spin_unlock(&tree->lock); | 779 | spin_unlock(&tree->lock); |
@@ -4306,7 +4310,7 @@ static void __free_extent_buffer(struct extent_buffer *eb) | |||
4306 | kmem_cache_free(extent_buffer_cache, eb); | 4310 | kmem_cache_free(extent_buffer_cache, eb); |
4307 | } | 4311 | } |
4308 | 4312 | ||
4309 | static int extent_buffer_under_io(struct extent_buffer *eb) | 4313 | int extent_buffer_under_io(struct extent_buffer *eb) |
4310 | { | 4314 | { |
4311 | return (atomic_read(&eb->io_pages) || | 4315 | return (atomic_read(&eb->io_pages) || |
4312 | test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags) || | 4316 | test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags) || |