diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 7bea4d2f85dcdb1ff2248000b97099e282409580..99aa9b77e9481b8bc3df9315f9b7cf96b45a582f 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -420,6 +420,7 @@ static noinline void caching_thread(struct btrfs_work *work) /* need to make sure the commit_root doesn't disappear */ down_read(&fs_info->extent_commit_sem); +next: ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0); if (ret < 0) goto err; @@ -459,6 +460,16 @@ static noinline void caching_thread(struct btrfs_work *work) continue; } + if (key.objectid < last) { + key.objectid = last; + key.offset = 0; + key.type = BTRFS_EXTENT_ITEM_KEY; + + caching_ctl->progress = last; + btrfs_release_path(path); + goto next; + } + if (key.objectid < block_group->key.objectid) { path->slots[0]++; continue;