aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/backref.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/backref.c')
-rw-r--r--fs/btrfs/backref.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index 3f75895c919b..8f7d1237b7a0 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -179,7 +179,8 @@ static int __add_prelim_ref(struct list_head *head, u64 root_id,
179 179
180static int add_all_parents(struct btrfs_root *root, struct btrfs_path *path, 180static int add_all_parents(struct btrfs_root *root, struct btrfs_path *path,
181 struct ulist *parents, int level, 181 struct ulist *parents, int level,
182 struct btrfs_key *key, u64 wanted_disk_byte, 182 struct btrfs_key *key, u64 time_seq,
183 u64 wanted_disk_byte,
183 const u64 *extent_item_pos) 184 const u64 *extent_item_pos)
184{ 185{
185 int ret; 186 int ret;
@@ -212,7 +213,7 @@ add_parent:
212 */ 213 */
213 while (1) { 214 while (1) {
214 eie = NULL; 215 eie = NULL;
215 ret = btrfs_next_leaf(root, path); 216 ret = btrfs_next_old_leaf(root, path, time_seq);
216 if (ret < 0) 217 if (ret < 0)
217 return ret; 218 return ret;
218 if (ret) 219 if (ret)
@@ -294,18 +295,10 @@ static int __resolve_indirect_ref(struct btrfs_fs_info *fs_info,
294 goto out; 295 goto out;
295 } 296 }
296 297
297 if (level == 0) { 298 if (level == 0)
298 if (ret == 1 && path->slots[0] >= btrfs_header_nritems(eb)) {
299 ret = btrfs_next_leaf(root, path);
300 if (ret)
301 goto out;
302 eb = path->nodes[0];
303 }
304
305 btrfs_item_key_to_cpu(eb, &key, path->slots[0]); 299 btrfs_item_key_to_cpu(eb, &key, path->slots[0]);
306 }
307 300
308 ret = add_all_parents(root, path, parents, level, &key, 301 ret = add_all_parents(root, path, parents, level, &key, time_seq,
309 ref->wanted_disk_byte, extent_item_pos); 302 ref->wanted_disk_byte, extent_item_pos);
310out: 303out:
311 btrfs_free_path(path); 304 btrfs_free_path(path);