diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 9f0a4e3bd8a9..96be62450318 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -378,15 +378,18 @@ again: | |||
378 | if (ret) | 378 | if (ret) |
379 | break; | 379 | break; |
380 | 380 | ||
381 | caching_ctl->progress = last; | 381 | if (need_resched() || |
382 | btrfs_release_path(extent_root, path); | 382 | btrfs_next_leaf(extent_root, path)) { |
383 | up_read(&fs_info->extent_commit_sem); | 383 | caching_ctl->progress = last; |
384 | mutex_unlock(&caching_ctl->mutex); | 384 | btrfs_release_path(extent_root, path); |
385 | if (btrfs_transaction_in_commit(fs_info)) | 385 | up_read(&fs_info->extent_commit_sem); |
386 | schedule_timeout(1); | 386 | mutex_unlock(&caching_ctl->mutex); |
387 | else | ||
388 | cond_resched(); | 387 | cond_resched(); |
389 | goto again; | 388 | goto again; |
389 | } | ||
390 | leaf = path->nodes[0]; | ||
391 | nritems = btrfs_header_nritems(leaf); | ||
392 | continue; | ||
390 | } | 393 | } |
391 | 394 | ||
392 | if (key.objectid < block_group->key.objectid) { | 395 | if (key.objectid < block_group->key.objectid) { |