Commit 76d76e78 authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

btrfs: make remove_extent_backref pass the root

With extent tree v2 we'll have a different extent root based on where
the bytenr is located, so adjust the remove_extent_backref() helper and
it's helpers to pass the extent_root around.
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent dfe8aec4
...@@ -593,6 +593,7 @@ static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans, ...@@ -593,6 +593,7 @@ static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
} }
static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans, static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, struct btrfs_path *path,
int refs_to_drop, int *last_ref) int refs_to_drop, int *last_ref)
{ {
...@@ -626,7 +627,7 @@ static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans, ...@@ -626,7 +627,7 @@ static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
num_refs -= refs_to_drop; num_refs -= refs_to_drop;
if (num_refs == 0) { if (num_refs == 0) {
ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); ret = btrfs_del_item(trans, root, path);
*last_ref = 1; *last_ref = 1;
} else { } else {
if (key.type == BTRFS_EXTENT_DATA_REF_KEY) if (key.type == BTRFS_EXTENT_DATA_REF_KEY)
...@@ -1174,6 +1175,7 @@ int insert_inline_extent_backref(struct btrfs_trans_handle *trans, ...@@ -1174,6 +1175,7 @@ int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
} }
static int remove_extent_backref(struct btrfs_trans_handle *trans, static int remove_extent_backref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, struct btrfs_path *path,
struct btrfs_extent_inline_ref *iref, struct btrfs_extent_inline_ref *iref,
int refs_to_drop, int is_data, int *last_ref) int refs_to_drop, int is_data, int *last_ref)
...@@ -1185,11 +1187,11 @@ static int remove_extent_backref(struct btrfs_trans_handle *trans, ...@@ -1185,11 +1187,11 @@ static int remove_extent_backref(struct btrfs_trans_handle *trans,
update_inline_extent_backref(path, iref, -refs_to_drop, NULL, update_inline_extent_backref(path, iref, -refs_to_drop, NULL,
last_ref); last_ref);
} else if (is_data) { } else if (is_data) {
ret = remove_extent_data_ref(trans, path, refs_to_drop, ret = remove_extent_data_ref(trans, root, path, refs_to_drop,
last_ref); last_ref);
} else { } else {
*last_ref = 1; *last_ref = 1;
ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); ret = btrfs_del_item(trans, root, path);
} }
return ret; return ret;
} }
...@@ -2996,9 +2998,9 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans, ...@@ -2996,9 +2998,9 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
goto err_dump; goto err_dump;
} }
/* Must be SHARED_* item, remove the backref first */ /* Must be SHARED_* item, remove the backref first */
ret = remove_extent_backref(trans, path, NULL, ret = remove_extent_backref(trans, extent_root, path,
refs_to_drop, NULL, refs_to_drop, is_data,
is_data, &last_ref); &last_ref);
if (ret) { if (ret) {
btrfs_abort_transaction(trans, ret); btrfs_abort_transaction(trans, ret);
goto out; goto out;
...@@ -3122,8 +3124,8 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans, ...@@ -3122,8 +3124,8 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
btrfs_mark_buffer_dirty(leaf); btrfs_mark_buffer_dirty(leaf);
} }
if (found_extent) { if (found_extent) {
ret = remove_extent_backref(trans, path, iref, ret = remove_extent_backref(trans, extent_root, path,
refs_to_drop, is_data, iref, refs_to_drop, is_data,
&last_ref); &last_ref);
if (ret) { if (ret) {
btrfs_abort_transaction(trans, ret); btrfs_abort_transaction(trans, ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment