mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 07:01:32 +00:00
Btrfs: fix possible infinite loop in slow caching
So I noticed there is an infinite loop in the slow caching code. If we return 1 when we hit the end of the tree, so we could end up caching the last block group the slow way and suddenly we're looping forever because we just keep re-searching and trying again. Fix this by only doing btrfs_next_leaf() if we don't need_resched(). Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
parent
62dbd7176e
commit
0a3896d0f5
@ -419,8 +419,7 @@ again:
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
if (need_resched() ||
|
||||
btrfs_next_leaf(extent_root, path)) {
|
||||
if (need_resched()) {
|
||||
caching_ctl->progress = last;
|
||||
btrfs_release_path(path);
|
||||
up_read(&fs_info->extent_commit_sem);
|
||||
@ -428,6 +427,12 @@ again:
|
||||
cond_resched();
|
||||
goto again;
|
||||
}
|
||||
|
||||
ret = btrfs_next_leaf(extent_root, path);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
if (ret)
|
||||
break;
|
||||
leaf = path->nodes[0];
|
||||
nritems = btrfs_header_nritems(leaf);
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user