diff options
author | Su Yue <suy.fnst@cn.fujitsu.com> | 2018-02-08 11:27:22 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-06-07 16:32:03 +0200 |
commit | cb1fbe71ae88fc307b99f9595fc9e7d65974f75f (patch) | |
tree | fdc3d05cde7154d350844021fef562f41ecae8df | |
parent | bbf1e8a400d73b5ff2047a584b79db9d3392dc5c (diff) |
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 <wqu@suse.com>
Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | check/mode-lowmem.c | 10 |
1 files 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, |