Lines Matching full:tree
29 * extent_map_tree_init - initialize extent map tree
30 * @tree: tree to initialize
32 * Initialize the extent tree @tree. Should be called for each new inode
35 void extent_map_tree_init(struct extent_map_tree *tree) in extent_map_tree_init() argument
37 tree->map = RB_ROOT; in extent_map_tree_init()
38 INIT_LIST_HEAD(&tree->modified_extents); in extent_map_tree_init()
39 rwlock_init(&tree->lock); in extent_map_tree_init()
138 * search through the tree for an extent_map with a given offset. If
226 static void try_merge_map(struct extent_map_tree *tree, struct extent_map *em) in try_merge_map() argument
232 * We can't modify an extent map that is in the tree and that is being in try_merge_map()
235 * the tree and 1 for this task (which is unpinning the extent map or in try_merge_map()
256 rb_erase(&merge->rb_node, &tree->map); in try_merge_map()
268 rb_erase(&merge->rb_node, &tree->map); in try_merge_map()
278 * @tree: tree to unpin the extent in
287 int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, in unpin_extent_cache() argument
294 write_lock(&tree->lock); in unpin_extent_cache()
295 em = lookup_extent_mapping(tree, start, len); in unpin_extent_cache()
312 try_merge_map(tree, em); in unpin_extent_cache()
321 write_unlock(&tree->lock); in unpin_extent_cache()
326 void clear_em_logging(struct extent_map_tree *tree, struct extent_map *em) in clear_em_logging() argument
330 try_merge_map(tree, em); in clear_em_logging()
333 static inline void setup_extent_mapping(struct extent_map_tree *tree, in setup_extent_mapping() argument
342 list_move(&em->list, &tree->modified_extents); in setup_extent_mapping()
344 try_merge_map(tree, em); in setup_extent_mapping()
348 * add_extent_mapping - add new extent map to the extent tree
349 * @tree: tree to insert new map in
352 * Insert @em into @tree or perform a simple forward/backward merge with
354 * into the tree directly, with an additional reference taken, or a
357 int add_extent_mapping(struct extent_map_tree *tree, in add_extent_mapping() argument
362 ret = tree_insert(&tree->map, em); in add_extent_mapping()
366 setup_extent_mapping(tree, em, modified); in add_extent_mapping()
372 __lookup_extent_mapping(struct extent_map_tree *tree, in __lookup_extent_mapping() argument
381 rb_node = __tree_search(&tree->map, start, &prev, &next); in __lookup_extent_mapping()
402 * @tree: tree to lookup in
406 * Find and return the first extent_map struct in @tree that intersects the
407 * [start, len] range. There may be additional objects in the tree that
411 struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree, in lookup_extent_mapping() argument
414 return __lookup_extent_mapping(tree, start, len, 1); in lookup_extent_mapping()
419 * @tree: tree to lookup in
423 * Find and return the first extent_map struct in @tree that intersects the
428 struct extent_map *search_extent_mapping(struct extent_map_tree *tree, in search_extent_mapping() argument
431 return __lookup_extent_mapping(tree, start, len, 0); in search_extent_mapping()
435 * remove_extent_mapping - removes an extent_map from the extent tree
436 * @tree: extent tree to remove from
439 * Removes @em from @tree. No reference counts are dropped, and no checks
442 int remove_extent_mapping(struct extent_map_tree *tree, struct extent_map *em) in remove_extent_mapping() argument
447 rb_erase(&em->rb_node, &tree->map); in remove_extent_mapping()
454 void replace_extent_mapping(struct extent_map_tree *tree, in replace_extent_mapping() argument
463 rb_replace_node(&cur->rb_node, &new->rb_node, &tree->map); in replace_extent_mapping()
466 setup_extent_mapping(tree, new, modified); in replace_extent_mapping()
489 /* helper for btfs_get_extent. Given an existing extent in the tree,
492 * the best fitted new extent into the tree.
533 * @em_tree - the extent tree into which we want to insert the extent mapping
558 /* it is possible that someone inserted the extent into the tree in btrfs_add_extent_mapping()
560 * an overlapping map exists in the tree in btrfs_add_extent_mapping()