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>
This commit is contained in:
Su Yue 2018-02-08 11:27:22 +08:00 committed by David Sterba
parent bbf1e8a400
commit cb1fbe71ae

View File

@ -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,