From cb1fbe71ae88fc307b99f9595fc9e7d65974f75f Mon Sep 17 00:00:00 2001 From: Su Yue Date: Thu, 8 Feb 2018 11:27:22 +0800 Subject: btrfs-progs: check: lowmem: assign parent early in repair_extent_data_item The variable @eb is assigned to leaf in fs_tree before insertion of backref. It will cause wrong parent of new inserted backref. Set @parent at beginning to fix the problem. Reviewed-by: Qu Wenruo Signed-off-by: Su Yue Signed-off-by: David Sterba --- check/mode-lowmem.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c index 894c42d1..12a88974 100644 --- a/check/mode-lowmem.c +++ b/check/mode-lowmem.c @@ -2535,6 +2535,11 @@ static int repair_extent_data_item(struct btrfs_trans_handle *trans, extent_offset = btrfs_file_extent_offset(eb, fi); offset = file_offset - extent_offset; + if (nrefs->full_backref[0]) + parent = btrfs_header_bytenr(eb); + else + parent = 0; + /* now repair only adds backref */ if ((err & BACKREF_MISSING) == 0) return err; @@ -2576,11 +2581,6 @@ static int repair_extent_data_item(struct btrfs_trans_handle *trans, btrfs_release_path(&path); } - if (nrefs->full_backref[0]) - parent = btrfs_header_bytenr(eb); - else - parent = 0; - ret = btrfs_inc_extent_ref(trans, root, disk_bytenr, num_bytes, parent, root->objectid, parent ? BTRFS_FIRST_FREE_OBJECTID : fi_key.objectid, -- cgit v1.2.3