#include "../disk-io.h"
 #include "../block-group.h"
 
-static void free_extent_map_tree(struct extent_map_tree *em_tree)
+static int free_extent_map_tree(struct extent_map_tree *em_tree)
 {
        struct extent_map *em;
        struct rb_node *node;
+       int ret = 0;
 
        write_lock(&em_tree->lock);
        while (!RB_EMPTY_ROOT(&em_tree->map.rb_root)) {
 
 #ifdef CONFIG_BTRFS_DEBUG
                if (refcount_read(&em->refs) != 1) {
+                       ret = -EINVAL;
                        test_err(
 "em leak: em (start %llu len %llu block_start %llu block_len %llu) refs %d",
                                 em->start, em->len, em->block_start,
                free_extent_map(em);
        }
        write_unlock(&em_tree->lock);
+
+       return ret;
 }
 
 /*
        u64 start = 0;
        u64 len = SZ_8K;
        int ret;
+       int ret2;
 
        em = alloc_extent_map();
        if (!em) {
        }
        free_extent_map(em);
 out:
-       free_extent_map_tree(em_tree);
+       ret2 = free_extent_map_tree(em_tree);
+       if (ret == 0)
+               ret = ret2;
 
        return ret;
 }
        struct extent_map_tree *em_tree = &inode->extent_tree;
        struct extent_map *em;
        int ret;
+       int ret2;
 
        em = alloc_extent_map();
        if (!em) {
        }
        free_extent_map(em);
 out:
-       free_extent_map_tree(em_tree);
+       ret2 = free_extent_map_tree(em_tree);
+       if (ret == 0)
+               ret = ret2;
 
        return ret;
 }
        struct extent_map *em;
        u64 len = SZ_4K;
        int ret;
+       int ret2;
 
        em = alloc_extent_map();
        if (!em) {
        }
        free_extent_map(em);
 out:
-       free_extent_map_tree(em_tree);
+       ret2 = free_extent_map_tree(em_tree);
+       if (ret == 0)
+               ret = ret2;
 
        return ret;
 }
        struct extent_map *em;
        u64 len = SZ_4K;
        int ret;
+       int ret2;
 
        em = alloc_extent_map();
        if (!em) {
        }
        free_extent_map(em);
 out:
-       free_extent_map_tree(em_tree);
+       ret2 = free_extent_map_tree(em_tree);
+       if (ret == 0)
+               ret = ret2;
 
        return ret;
 }
 {
        u64 start, end;
        int ret;
+       int ret2;
 
        test_msg("Running btrfs_drop_extent_map_range tests");
 
        if (ret)
                goto out;
 out:
-       free_extent_map_tree(&inode->extent_tree);
+       ret2 = free_extent_map_tree(&inode->extent_tree);
+       if (ret == 0)
+               ret = ret2;
+
        return ret;
 }
 
        struct extent_map_tree *em_tree = &inode->extent_tree;
        struct extent_map *em = NULL;
        int ret;
+       int ret2;
 
        ret = add_compressed_extent(inode, 0, SZ_4K, 0);
        if (ret)
        ret = 0;
 out:
        free_extent_map(em);
-       free_extent_map_tree(em_tree);
+       ret2 = free_extent_map_tree(em_tree);
+       if (ret == 0)
+               ret = ret2;
+
        return ret;
 }
 
        ret2 = unpin_extent_cache(inode, 0, SZ_16K, 0);
        if (ret == 0)
                ret = ret2;
-       free_extent_map_tree(em_tree);
+       ret2 = free_extent_map_tree(em_tree);
+       if (ret == 0)
+               ret = ret2;
+
        return ret;
 }