Commit 9a673218 authored by Dan Carpenter's avatar Dan Carpenter Committed by Kleber Sacilotto de Souza

btrfs: return error pointer from alloc_test_extent_buffer

BugLink: https://bugs.launchpad.net/bugs/1858462

[ Upstream commit b6293c82 ]

Callers of alloc_test_extent_buffer have not correctly interpreted the
return value as error pointer, as alloc_test_extent_buffer should behave
as alloc_extent_buffer. The self-tests were unaffected but
btrfs_find_create_tree_block could call both functions and that would
cause problems up in the call chain.

Fixes: faa2dbf0 ("Btrfs: add sanity tests for new qgroup accounting code")
CC: stable@vger.kernel.org # 4.4+
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarConnor Kuehl <connor.kuehl@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent a26bf46d
...@@ -4948,12 +4948,14 @@ struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info, ...@@ -4948,12 +4948,14 @@ struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
return eb; return eb;
eb = alloc_dummy_extent_buffer(fs_info, start); eb = alloc_dummy_extent_buffer(fs_info, start);
if (!eb) if (!eb)
return NULL; return ERR_PTR(-ENOMEM);
eb->fs_info = fs_info; eb->fs_info = fs_info;
again: again:
ret = radix_tree_preload(GFP_NOFS & ~__GFP_HIGHMEM); ret = radix_tree_preload(GFP_NOFS & ~__GFP_HIGHMEM);
if (ret) if (ret) {
exists = ERR_PTR(ret);
goto free_eb; goto free_eb;
}
spin_lock(&fs_info->buffer_lock); spin_lock(&fs_info->buffer_lock);
ret = radix_tree_insert(&fs_info->buffer_radix, ret = radix_tree_insert(&fs_info->buffer_radix,
start >> PAGE_CACHE_SHIFT, eb); start >> PAGE_CACHE_SHIFT, eb);
......
...@@ -477,9 +477,9 @@ int btrfs_test_qgroups(void) ...@@ -477,9 +477,9 @@ int btrfs_test_qgroups(void)
* *cough*backref walking code*cough* * *cough*backref walking code*cough*
*/ */
root->node = alloc_test_extent_buffer(root->fs_info, 4096); root->node = alloc_test_extent_buffer(root->fs_info, 4096);
if (!root->node) { if (IS_ERR(root->node)) {
test_msg("Couldn't allocate dummy buffer\n"); test_msg("Couldn't allocate dummy buffer\n");
ret = -ENOMEM; ret = PTR_ERR(root->node);
goto out; goto out;
} }
btrfs_set_header_level(root->node, 0); btrfs_set_header_level(root->node, 0);
......
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