summaryrefslogtreecommitdiff
path: root/extent_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'extent_io.c')
-rw-r--r--extent_io.c64
1 files changed, 33 insertions, 31 deletions
diff --git a/extent_io.c b/extent_io.c
index 592acd61..464bd07e 100644
--- a/extent_io.c
+++ b/extent_io.c
@@ -48,13 +48,14 @@ static struct extent_state *alloc_extent_state(void)
state = malloc(sizeof(*state));
if (!state)
return NULL;
+ state->cache_node.objectid = 0;
state->refs = 1;
state->state = 0;
state->xprivate = 0;
return state;
}
-static void free_extent_state(struct extent_state *state)
+static void btrfs_free_extent_state(struct extent_state *state)
{
state->refs--;
BUG_ON(state->refs < 0);
@@ -62,11 +63,17 @@ static void free_extent_state(struct extent_state *state)
free(state);
}
-void extent_io_tree_cleanup(struct extent_io_tree *tree)
+static void free_extent_state_func(struct cache_extent *cache)
{
struct extent_state *es;
+
+ es = container_of(cache, struct extent_state, cache_node);
+ btrfs_free_extent_state(es);
+}
+
+void extent_io_tree_cleanup(struct extent_io_tree *tree)
+{
struct extent_buffer *eb;
- struct cache_extent *cache;
while(!list_empty(&tree->lru)) {
eb = list_entry(tree->lru.next, struct extent_buffer, lru);
@@ -78,14 +85,8 @@ void extent_io_tree_cleanup(struct extent_io_tree *tree)
}
free_extent_buffer(eb);
}
- while (1) {
- cache = find_first_cache_extent(&tree->state, 0);
- if (!cache)
- break;
- es = container_of(cache, struct extent_state, cache_node);
- remove_cache_extent(&tree->state, &es->cache_node);
- free_extent_state(es);
- }
+
+ cache_tree_free_extents(&tree->state, free_extent_state_func);
}
static inline void update_extent_state(struct extent_state *state)
@@ -118,7 +119,7 @@ static int merge_state(struct extent_io_tree *tree,
state->start = other->start;
update_extent_state(state);
remove_cache_extent(&tree->state, &other->cache_node);
- free_extent_state(other);
+ btrfs_free_extent_state(other);
}
}
other_node = next_cache_extent(&state->cache_node);
@@ -130,7 +131,7 @@ static int merge_state(struct extent_io_tree *tree,
other->start = state->start;
update_extent_state(other);
remove_cache_extent(&tree->state, &state->cache_node);
- free_extent_state(state);
+ btrfs_free_extent_state(state);
}
}
return 0;
@@ -151,7 +152,7 @@ static int insert_state(struct extent_io_tree *tree,
state->start = start;
state->end = end;
update_extent_state(state);
- ret = insert_existing_cache_extent(&tree->state, &state->cache_node);
+ ret = insert_cache_extent(&tree->state, &state->cache_node);
BUG_ON(ret);
merge_state(tree, state);
return 0;
@@ -172,8 +173,7 @@ static int split_state(struct extent_io_tree *tree, struct extent_state *orig,
update_extent_state(prealloc);
orig->start = split;
update_extent_state(orig);
- ret = insert_existing_cache_extent(&tree->state,
- &prealloc->cache_node);
+ ret = insert_cache_extent(&tree->state, &prealloc->cache_node);
BUG_ON(ret);
return 0;
}
@@ -189,7 +189,7 @@ static int clear_state_bit(struct extent_io_tree *tree,
state->state &= ~bits;
if (state->state == 0) {
remove_cache_extent(&tree->state, &state->cache_node);
- free_extent_state(state);
+ btrfs_free_extent_state(state);
} else {
merge_state(tree, state);
}
@@ -218,7 +218,7 @@ again:
* this search will find the extents that end after
* our range starts
*/
- node = find_first_cache_extent(&tree->state, start);
+ node = search_cache_extent(&tree->state, start);
if (!node)
goto out;
state = container_of(node, struct extent_state, cache_node);
@@ -280,7 +280,7 @@ again:
goto search_again;
out:
if (prealloc)
- free_extent_state(prealloc);
+ btrfs_free_extent_state(prealloc);
return set;
search_again:
@@ -312,7 +312,7 @@ again:
* this search will find the extents that end after
* our range starts
*/
- node = find_first_cache_extent(&tree->state, start);
+ node = search_cache_extent(&tree->state, start);
if (!node) {
err = insert_state(tree, prealloc, start, end, bits);
BUG_ON(err == -EEXIST);
@@ -408,7 +408,7 @@ again:
prealloc = NULL;
out:
if (prealloc)
- free_extent_state(prealloc);
+ btrfs_free_extent_state(prealloc);
return err;
search_again:
if (start > end)
@@ -439,7 +439,7 @@ int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
* this search will find all the extents that end after
* our range starts.
*/
- node = find_first_cache_extent(&tree->state, start);
+ node = search_cache_extent(&tree->state, start);
if (!node)
goto out;
@@ -466,7 +466,7 @@ int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
struct cache_extent *node;
int bitset = 0;
- node = find_first_cache_extent(&tree->state, start);
+ node = search_cache_extent(&tree->state, start);
while (node && start <= end) {
state = container_of(node, struct extent_state, cache_node);
@@ -503,7 +503,7 @@ int set_state_private(struct extent_io_tree *tree, u64 start, u64 private)
struct extent_state *state;
int ret = 0;
- node = find_first_cache_extent(&tree->state, start);
+ node = search_cache_extent(&tree->state, start);
if (!node) {
ret = -ENOENT;
goto out;
@@ -524,7 +524,7 @@ int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
struct extent_state *state;
int ret = 0;
- node = find_first_cache_extent(&tree->state, start);
+ node = search_cache_extent(&tree->state, start);
if (!node) {
ret = -ENOENT;
goto out;
@@ -587,7 +587,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
eb->cache_node.size = blocksize;
free_some_buffers(tree);
- ret = insert_existing_cache_extent(&tree->cache, &eb->cache_node);
+ ret = insert_cache_extent(&tree->cache, &eb->cache_node);
if (ret) {
free(eb);
return NULL;
@@ -621,8 +621,9 @@ struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,
struct extent_buffer *eb = NULL;
struct cache_extent *cache;
- cache = find_cache_extent(&tree->cache, bytenr, blocksize);
- if (cache && cache->start == bytenr && cache->size == blocksize) {
+ cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
+ if (cache && cache->start == bytenr &&
+ cache->size == blocksize) {
eb = container_of(cache, struct extent_buffer, cache_node);
list_move_tail(&eb->lru, &tree->lru);
eb->refs++;
@@ -636,7 +637,7 @@ struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,
struct extent_buffer *eb = NULL;
struct cache_extent *cache;
- cache = find_first_cache_extent(&tree->cache, start);
+ cache = search_cache_extent(&tree->cache, start);
if (cache) {
eb = container_of(cache, struct extent_buffer, cache_node);
list_move_tail(&eb->lru, &tree->lru);
@@ -651,8 +652,9 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,
struct extent_buffer *eb;
struct cache_extent *cache;
- cache = find_cache_extent(&tree->cache, bytenr, blocksize);
- if (cache && cache->start == bytenr && cache->size == blocksize) {
+ cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
+ if (cache && cache->start == bytenr &&
+ cache->size == blocksize) {
eb = container_of(cache, struct extent_buffer, cache_node);
list_move_tail(&eb->lru, &tree->lru);
eb->refs++;