diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 8464d369e478ec15d43bf7c307f5af85a5f6815f..fa57965f60a33c20670e555bb1dc6b28439143a3 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -419,8 +419,7 @@ static noinline void caching_thread(struct btrfs_work *work) 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 @@ static noinline void caching_thread(struct btrfs_work *work) 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;