aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter2019-12-03 05:24:58 -0600
committerGreg Kroah-Hartman2019-12-31 05:37:55 -0600
commitf8f86208bfbe7b556d108e3dae05e315cfcc34f4 (patch)
treebff2669097f939ce1a3479ecb08c2ff55b35014c
parent51ff11e50d8b2bbde8b790b4e7cdd5688d5aef94 (diff)
downloadkernel-f8f86208bfbe7b556d108e3dae05e315cfcc34f4.tar.gz
kernel-f8f86208bfbe7b556d108e3dae05e315cfcc34f4.tar.xz
kernel-f8f86208bfbe7b556d108e3dae05e315cfcc34f4.zip
btrfs: return error pointer from alloc_test_extent_buffer
[ Upstream commit b6293c821ea8fa2a631a2112cd86cd435effeb8b ] 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: faa2dbf004e8 ("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: Sasha Levin <sashal@kernel.org>
-rw-r--r--fs/btrfs/extent_io.c6
-rw-r--r--fs/btrfs/tests/free-space-tree-tests.c6
-rw-r--r--fs/btrfs/tests/qgroup-tests.c4
3 files changed, 9 insertions, 7 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 4cc534584665..fced434bbddc 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4949,12 +4949,14 @@ struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
4949 return eb; 4949 return eb;
4950 eb = alloc_dummy_extent_buffer(fs_info, start); 4950 eb = alloc_dummy_extent_buffer(fs_info, start);
4951 if (!eb) 4951 if (!eb)
4952 return NULL; 4952 return ERR_PTR(-ENOMEM);
4953 eb->fs_info = fs_info; 4953 eb->fs_info = fs_info;
4954again: 4954again:
4955 ret = radix_tree_preload(GFP_NOFS); 4955 ret = radix_tree_preload(GFP_NOFS);
4956 if (ret) 4956 if (ret) {
4957 exists = ERR_PTR(ret);
4957 goto free_eb; 4958 goto free_eb;
4959 }
4958 spin_lock(&fs_info->buffer_lock); 4960 spin_lock(&fs_info->buffer_lock);
4959 ret = radix_tree_insert(&fs_info->buffer_radix, 4961 ret = radix_tree_insert(&fs_info->buffer_radix,
4960 start >> PAGE_SHIFT, eb); 4962 start >> PAGE_SHIFT, eb);
diff --git a/fs/btrfs/tests/free-space-tree-tests.c b/fs/btrfs/tests/free-space-tree-tests.c
index 8444a018cca2..f6c783e959b7 100644
--- a/fs/btrfs/tests/free-space-tree-tests.c
+++ b/fs/btrfs/tests/free-space-tree-tests.c
@@ -475,9 +475,9 @@ static int run_test(test_func_t test_func, int bitmaps, u32 sectorsize,
475 root->fs_info->tree_root = root; 475 root->fs_info->tree_root = root;
476 476
477 root->node = alloc_test_extent_buffer(root->fs_info, nodesize); 477 root->node = alloc_test_extent_buffer(root->fs_info, nodesize);
478 if (!root->node) { 478 if (IS_ERR(root->node)) {
479 test_msg("Couldn't allocate dummy buffer\n"); 479 test_msg("couldn't allocate dummy buffer\n");
480 ret = -ENOMEM; 480 ret = PTR_ERR(root->node);
481 goto out; 481 goto out;
482 } 482 }
483 btrfs_set_header_level(root->node, 0); 483 btrfs_set_header_level(root->node, 0);
diff --git a/fs/btrfs/tests/qgroup-tests.c b/fs/btrfs/tests/qgroup-tests.c
index 578fd045e859..eb72cf280546 100644
--- a/fs/btrfs/tests/qgroup-tests.c
+++ b/fs/btrfs/tests/qgroup-tests.c
@@ -487,9 +487,9 @@ int btrfs_test_qgroups(u32 sectorsize, u32 nodesize)
487 * *cough*backref walking code*cough* 487 * *cough*backref walking code*cough*
488 */ 488 */
489 root->node = alloc_test_extent_buffer(root->fs_info, nodesize); 489 root->node = alloc_test_extent_buffer(root->fs_info, nodesize);
490 if (!root->node) { 490 if (IS_ERR(root->node)) {
491 test_msg("Couldn't allocate dummy buffer\n"); 491 test_msg("Couldn't allocate dummy buffer\n");
492 ret = -ENOMEM; 492 ret = PTR_ERR(root->node);
493 goto out; 493 goto out;
494 } 494 }
495 btrfs_set_header_level(root->node, 0); 495 btrfs_set_header_level(root->node, 0);