Commit b6296858 authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba

btrfs: remove roots ulist when checking data extent sharedness

Currently btrfs_is_data_extent_shared() is passing a ulist for the roots
argument of find_parent_nodes(), however it does not use that ulist for
anything and for this context that list always ends up with at most one
element.

Since find_parent_nodes() is able to deal with a NULL ulist for its roots
argument, make btrfs_is_data_extent_shared() pass it NULL and avoid the
burden of allocating memory for the unnused roots ulist, initializing it,
releasing it and allocating one struct ulist_node for it during the call
to find_parent_nodes().
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 84a7949d
...@@ -1664,7 +1664,6 @@ struct btrfs_backref_share_check_ctx *btrfs_alloc_backref_share_check_ctx(void) ...@@ -1664,7 +1664,6 @@ struct btrfs_backref_share_check_ctx *btrfs_alloc_backref_share_check_ctx(void)
return NULL; return NULL;
ulist_init(&ctx->refs); ulist_init(&ctx->refs);
ulist_init(&ctx->roots);
return ctx; return ctx;
} }
...@@ -1675,7 +1674,6 @@ void btrfs_free_backref_share_ctx(struct btrfs_backref_share_check_ctx *ctx) ...@@ -1675,7 +1674,6 @@ void btrfs_free_backref_share_ctx(struct btrfs_backref_share_check_ctx *ctx)
return; return;
ulist_release(&ctx->refs); ulist_release(&ctx->refs);
ulist_release(&ctx->roots);
kfree(ctx); kfree(ctx);
} }
...@@ -1718,7 +1716,6 @@ int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr, ...@@ -1718,7 +1716,6 @@ int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr,
}; };
int level; int level;
ulist_init(&ctx->roots);
ulist_init(&ctx->refs); ulist_init(&ctx->refs);
trans = btrfs_join_transaction_nostart(root); trans = btrfs_join_transaction_nostart(root);
...@@ -1742,7 +1739,7 @@ int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr, ...@@ -1742,7 +1739,7 @@ int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr,
bool cached; bool cached;
ret = find_parent_nodes(trans, fs_info, bytenr, elem.seq, &ctx->refs, ret = find_parent_nodes(trans, fs_info, bytenr, elem.seq, &ctx->refs,
&ctx->roots, NULL, &shared, false); NULL, NULL, &shared, false);
if (ret == BACKREF_FOUND_SHARED) { if (ret == BACKREF_FOUND_SHARED) {
/* this is the only condition under which we return 1 */ /* this is the only condition under which we return 1 */
ret = 1; ret = 1;
...@@ -1810,7 +1807,6 @@ int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr, ...@@ -1810,7 +1807,6 @@ int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr,
up_read(&fs_info->commit_root_sem); up_read(&fs_info->commit_root_sem);
} }
out: out:
ulist_release(&ctx->roots);
ulist_release(&ctx->refs); ulist_release(&ctx->refs);
return ret; return ret;
} }
......
...@@ -26,7 +26,6 @@ struct btrfs_backref_shared_cache_entry { ...@@ -26,7 +26,6 @@ struct btrfs_backref_shared_cache_entry {
struct btrfs_backref_share_check_ctx { struct btrfs_backref_share_check_ctx {
/* Ulists used during backref walking. */ /* Ulists used during backref walking. */
struct ulist refs; struct ulist refs;
struct ulist roots;
/* /*
* A path from a root to a leaf that has a file extent item pointing to * A path from a root to a leaf that has a file extent item pointing to
* a given data extent should never exceed the maximum b+tree height. * a given data extent should never exceed the maximum b+tree height.
......
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