]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
btrfs: tests: allocate dummy fs_info and root in test_find_delalloc()
authorDavid Sterba <dsterba@suse.com>
Mon, 29 Jan 2024 18:04:33 +0000 (19:04 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 4 Mar 2024 15:24:49 +0000 (16:24 +0100)
Allocate fs_info and root to have a valid fs_info pointer in case it's
dereferenced by a helper outside of tests, like find_lock_delalloc_range().

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tests/extent-io-tests.c

index 25b3349595e00534e6fb2f7f50c27084475983ba..865d4af4b30356898acbe587ac0844956f836a57 100644 (file)
@@ -11,6 +11,7 @@
 #include "btrfs-tests.h"
 #include "../ctree.h"
 #include "../extent_io.h"
+#include "../disk-io.h"
 #include "../btrfs_inode.h"
 
 #define PROCESS_UNLOCK         (1 << 0)
@@ -105,9 +106,11 @@ static void dump_extent_io_tree(const struct extent_io_tree *tree)
        }
 }
 
-static int test_find_delalloc(u32 sectorsize)
+static int test_find_delalloc(u32 sectorsize, u32 nodesize)
 {
-       struct inode *inode;
+       struct btrfs_fs_info *fs_info;
+       struct btrfs_root *root = NULL;
+       struct inode *inode = NULL;
        struct extent_io_tree *tmp;
        struct page *page;
        struct page *locked_page = NULL;
@@ -121,12 +124,27 @@ static int test_find_delalloc(u32 sectorsize)
 
        test_msg("running find delalloc tests");
 
+       fs_info = btrfs_alloc_dummy_fs_info(nodesize, sectorsize);
+       if (!fs_info) {
+               test_std_err(TEST_ALLOC_FS_INFO);
+               return -ENOMEM;
+       }
+
+       root = btrfs_alloc_dummy_root(fs_info);
+       if (IS_ERR(root)) {
+               test_std_err(TEST_ALLOC_ROOT);
+               ret = PTR_ERR(root);
+               goto out;
+       }
+
        inode = btrfs_new_test_inode();
        if (!inode) {
                test_std_err(TEST_ALLOC_INODE);
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto out;
        }
        tmp = &BTRFS_I(inode)->io_tree;
+       BTRFS_I(inode)->root = root;
 
        /*
         * Passing NULL as we don't have fs_info but tracepoints are not used
@@ -316,6 +334,8 @@ out:
        process_page_range(inode, 0, total_dirty - 1,
                           PROCESS_UNLOCK | PROCESS_RELEASE);
        iput(inode);
+       btrfs_free_dummy_root(root);
+       btrfs_free_dummy_fs_info(fs_info);
        return ret;
 }
 
@@ -794,7 +814,7 @@ int btrfs_test_extent_io(u32 sectorsize, u32 nodesize)
 
        test_msg("running extent I/O tests");
 
-       ret = test_find_delalloc(sectorsize);
+       ret = test_find_delalloc(sectorsize, nodesize);
        if (ret)
                goto out;