Btrfs: New data=ordered implementation
[deliverable/linux.git] / fs / btrfs / extent_map.c
index f5a04eb9a2acfbcef78ff6bb1d7ce40d4d0a1b90..81123277c2b8f7854d2e3ba9c2d03440b957a507 100644 (file)
@@ -206,10 +206,11 @@ int add_extent_mapping(struct extent_map_tree *tree,
        struct extent_map *merge = NULL;
        struct rb_node *rb;
 
+       BUG_ON(spin_trylock(&tree->lock));
        rb = tree_insert(&tree->map, em->start, &em->rb_node);
        if (rb) {
-               merge = rb_entry(rb, struct extent_map, rb_node);
                ret = -EEXIST;
+               free_extent_map(merge);
                goto out;
        }
        atomic_inc(&em->refs);
@@ -268,6 +269,7 @@ struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
        struct rb_node *next = NULL;
        u64 end = range_end(start, len);
 
+       BUG_ON(spin_trylock(&tree->lock));
        em = tree->last;
        if (em && end > em->start && start < extent_map_end(em))
                goto found;
@@ -318,6 +320,7 @@ int remove_extent_mapping(struct extent_map_tree *tree, struct extent_map *em)
 {
        int ret = 0;
 
+       BUG_ON(spin_trylock(&tree->lock));
        rb_erase(&em->rb_node, &tree->map);
        em->in_tree = 0;
        if (tree->last == em)
This page took 0.036329 seconds and 5 git commands to generate.