btrfs: return error pointer from alloc_test_extent_buffer
commitb6293c821e
upstream. 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:faa2dbf004
("Btrfs: add sanity tests for new qgroup accounting code") CC: stable@vger.kernel.org # 4.4+ Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2bfffc24da
commit
aed46bbd42
@ -5066,12 +5066,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);
|
ret = radix_tree_preload(GFP_NOFS);
|
||||||
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_SHIFT, eb);
|
start >> PAGE_SHIFT, eb);
|
||||||
|
@ -463,9 +463,9 @@ static int run_test(test_func_t test_func, int bitmaps, u32 sectorsize,
|
|||||||
root->fs_info->tree_root = root;
|
root->fs_info->tree_root = root;
|
||||||
|
|
||||||
root->node = alloc_test_extent_buffer(root->fs_info, nodesize);
|
root->node = alloc_test_extent_buffer(root->fs_info, nodesize);
|
||||||
if (!root->node) {
|
if (IS_ERR(root->node)) {
|
||||||
test_std_err(TEST_ALLOC_EXTENT_BUFFER);
|
test_std_err(TEST_ALLOC_EXTENT_BUFFER);
|
||||||
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);
|
||||||
|
@ -484,9 +484,9 @@ int btrfs_test_qgroups(u32 sectorsize, u32 nodesize)
|
|||||||
* *cough*backref walking code*cough*
|
* *cough*backref walking code*cough*
|
||||||
*/
|
*/
|
||||||
root->node = alloc_test_extent_buffer(root->fs_info, nodesize);
|
root->node = alloc_test_extent_buffer(root->fs_info, nodesize);
|
||||||
if (!root->node) {
|
if (IS_ERR(root->node)) {
|
||||||
test_err("couldn't allocate dummy buffer");
|
test_err("couldn't allocate dummy buffer");
|
||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user