Lines Matching full:tree
30 * extent_map_tree_init - initialize extent map tree
31 * @tree: tree to initialize
33 * Initialize the extent tree @tree. Should be called for each new inode
36 void extent_map_tree_init(struct extent_map_tree *tree) in extent_map_tree_init() argument
38 tree->map = RB_ROOT_CACHED; in extent_map_tree_init()
39 INIT_LIST_HEAD(&tree->modified_extents); in extent_map_tree_init()
40 rwlock_init(&tree->lock); in extent_map_tree_init()
142 * search through the tree for an extent_map with a given offset. If
235 static void try_merge_map(struct extent_map_tree *tree, struct extent_map *em) in try_merge_map() argument
241 * We can't modify an extent map that is in the tree and that is being in try_merge_map()
244 * the tree and 1 for this task (which is unpinning the extent map or in try_merge_map()
265 rb_erase_cached(&merge->rb_node, &tree->map); in try_merge_map()
277 rb_erase_cached(&merge->rb_node, &tree->map); in try_merge_map()
287 * @tree: tree to unpin the extent in
296 int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, in unpin_extent_cache() argument
303 write_lock(&tree->lock); in unpin_extent_cache()
304 em = lookup_extent_mapping(tree, start, len); in unpin_extent_cache()
321 try_merge_map(tree, em); in unpin_extent_cache()
330 write_unlock(&tree->lock); in unpin_extent_cache()
335 void clear_em_logging(struct extent_map_tree *tree, struct extent_map *em) in clear_em_logging() argument
339 try_merge_map(tree, em); in clear_em_logging()
342 static inline void setup_extent_mapping(struct extent_map_tree *tree, in setup_extent_mapping() argument
351 list_move(&em->list, &tree->modified_extents); in setup_extent_mapping()
353 try_merge_map(tree, em); in setup_extent_mapping()
388 * add_extent_mapping - add new extent map to the extent tree
389 * @tree: tree to insert new map in
392 * Insert @em into @tree or perform a simple forward/backward merge with
394 * into the tree directly, with an additional reference taken, or a
397 int add_extent_mapping(struct extent_map_tree *tree, in add_extent_mapping() argument
402 lockdep_assert_held_write(&tree->lock); in add_extent_mapping()
404 ret = tree_insert(&tree->map, em); in add_extent_mapping()
408 setup_extent_mapping(tree, em, modified); in add_extent_mapping()
418 __lookup_extent_mapping(struct extent_map_tree *tree, in __lookup_extent_mapping() argument
427 rb_node = __tree_search(&tree->map.rb_root, start, &prev, &next); in __lookup_extent_mapping()
448 * @tree: tree to lookup in
452 * Find and return the first extent_map struct in @tree that intersects the
453 * [start, len] range. There may be additional objects in the tree that
457 struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree, in lookup_extent_mapping() argument
460 return __lookup_extent_mapping(tree, start, len, 1); in lookup_extent_mapping()
465 * @tree: tree to lookup in
469 * Find and return the first extent_map struct in @tree that intersects the
474 struct extent_map *search_extent_mapping(struct extent_map_tree *tree, in search_extent_mapping() argument
477 return __lookup_extent_mapping(tree, start, len, 0); in search_extent_mapping()
481 * remove_extent_mapping - removes an extent_map from the extent tree
482 * @tree: extent tree to remove from
485 * Removes @em from @tree. No reference counts are dropped, and no checks
488 void remove_extent_mapping(struct extent_map_tree *tree, struct extent_map *em) in remove_extent_mapping() argument
491 rb_erase_cached(&em->rb_node, &tree->map); in remove_extent_mapping()
499 void replace_extent_mapping(struct extent_map_tree *tree, in replace_extent_mapping() argument
508 rb_replace_node_cached(&cur->rb_node, &new->rb_node, &tree->map); in replace_extent_mapping()
511 setup_extent_mapping(tree, new, modified); in replace_extent_mapping()
535 * Helper for btrfs_get_extent. Given an existing extent in the tree,
538 * the best fitted new extent into the tree.
579 * @em_tree - the extent tree into which we want to insert the extent mapping
604 /* it is possible that someone inserted the extent into the tree in btrfs_add_extent_mapping()
606 * an overlapping map exists in the tree in btrfs_add_extent_mapping()