btrfs: tests: don't leak fs_info in extent_io bitmap tests
authorDavid Sterba <dsterba@suse.com>
Fri, 15 Mar 2019 15:46:55 +0000 (16:46 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 29 Apr 2019 17:02:25 +0000 (19:02 +0200)
The fs_info is not freed at the end of the function and leaks. The
function is called twice so there can be up to 2x sizeof(struct
btrfs_fs_info) of leaked memory.  Fortunatelly this affects only testing
builds, the size could be 16k with several debugging features enabled.

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

index 74f69df7a7e1942855098c9d8cdc382790f1c094..24003e97e7977bb6c73618fa8c82cb0f2fce3c80 100644 (file)
@@ -378,8 +378,8 @@ static int test_eb_bitmaps(u32 sectorsize, u32 nodesize)
 {
        struct btrfs_fs_info *fs_info;
        unsigned long len;
-       unsigned long *bitmap;
-       struct extent_buffer *eb;
+       unsigned long *bitmap = NULL;
+       struct extent_buffer *eb = NULL;
        int ret;
 
        test_msg("running extent buffer bitmap tests");
@@ -400,14 +400,15 @@ static int test_eb_bitmaps(u32 sectorsize, u32 nodesize)
        bitmap = kmalloc(len, GFP_KERNEL);
        if (!bitmap) {
                test_err("couldn't allocate test bitmap");
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto out;
        }
 
        eb = __alloc_dummy_extent_buffer(fs_info, 0, len);
        if (!eb) {
                test_err("couldn't allocate test extent buffer");
-               kfree(bitmap);
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto out;
        }
 
        ret = __test_eb_bitmaps(bitmap, eb, len);
@@ -419,14 +420,15 @@ static int test_eb_bitmaps(u32 sectorsize, u32 nodesize)
        eb = __alloc_dummy_extent_buffer(NULL, nodesize / 2, len);
        if (!eb) {
                test_err("couldn't allocate test extent buffer");
-               kfree(bitmap);
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto out;
        }
 
        ret = __test_eb_bitmaps(bitmap, eb, len);
 out:
        free_extent_buffer(eb);
        kfree(bitmap);
+       btrfs_free_dummy_fs_info(fs_info);
        return ret;
 }