#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;
}