Lines Matching refs:tree
57 #define btrfs_debug_check_extent_io_range(tree, start, end) \ argument
58 __btrfs_debug_check_extent_io_range(__func__, (tree), (start), (end))
60 struct extent_io_tree *tree, in __btrfs_debug_check_extent_io_range() argument
63 const struct btrfs_inode *inode = tree->inode; in __btrfs_debug_check_extent_io_range()
66 if (tree->owner != IO_TREE_INODE_IO) in __btrfs_debug_check_extent_io_range()
84 const struct btrfs_inode *btrfs_extent_io_tree_to_inode(const struct extent_io_tree *tree) in btrfs_extent_io_tree_to_inode() argument
86 if (tree->owner == IO_TREE_INODE_IO) in btrfs_extent_io_tree_to_inode()
87 return tree->inode; in btrfs_extent_io_tree_to_inode()
92 const struct btrfs_fs_info *btrfs_extent_io_tree_to_fs_info(const struct extent_io_tree *tree) in btrfs_extent_io_tree_to_fs_info() argument
94 if (tree->owner == IO_TREE_INODE_IO) in btrfs_extent_io_tree_to_fs_info()
95 return tree->inode->root->fs_info; in btrfs_extent_io_tree_to_fs_info()
96 return tree->fs_info; in btrfs_extent_io_tree_to_fs_info()
100 struct extent_io_tree *tree, unsigned int owner) in btrfs_extent_io_tree_init() argument
102 tree->state = RB_ROOT; in btrfs_extent_io_tree_init()
103 spin_lock_init(&tree->lock); in btrfs_extent_io_tree_init()
104 tree->fs_info = fs_info; in btrfs_extent_io_tree_init()
105 tree->owner = owner; in btrfs_extent_io_tree_init()
115 void btrfs_extent_io_tree_release(struct extent_io_tree *tree) in btrfs_extent_io_tree_release() argument
121 spin_lock(&tree->lock); in btrfs_extent_io_tree_release()
122 root = tree->state; in btrfs_extent_io_tree_release()
123 tree->state = RB_ROOT; in btrfs_extent_io_tree_release()
135 cond_resched_lock(&tree->lock); in btrfs_extent_io_tree_release()
141 ASSERT(RB_EMPTY_ROOT(&tree->state)); in btrfs_extent_io_tree_release()
142 spin_unlock(&tree->lock); in btrfs_extent_io_tree_release()
237 static inline struct extent_state *tree_search_for_insert(struct extent_io_tree *tree, in tree_search_for_insert() argument
242 struct rb_root *root = &tree->state; in tree_search_for_insert()
287 static struct extent_state *tree_search_prev_next(struct extent_io_tree *tree, in tree_search_prev_next() argument
292 struct rb_root *root = &tree->state; in tree_search_prev_next()
327 static inline struct extent_state *tree_search(struct extent_io_tree *tree, u64 offset) in tree_search() argument
329 return tree_search_for_insert(tree, offset, NULL, NULL); in tree_search()
332 static void __cold extent_io_tree_panic(const struct extent_io_tree *tree, in extent_io_tree_panic() argument
337 btrfs_panic(btrfs_extent_io_tree_to_fs_info(tree), err, in extent_io_tree_panic()
342 static void merge_prev_state(struct extent_io_tree *tree, struct extent_state *state) in merge_prev_state() argument
348 if (tree->owner == IO_TREE_INODE_IO) in merge_prev_state()
349 btrfs_merge_delalloc_extent(tree->inode, state, prev); in merge_prev_state()
351 rb_erase(&prev->rb_node, &tree->state); in merge_prev_state()
357 static void merge_next_state(struct extent_io_tree *tree, struct extent_state *state) in merge_next_state() argument
363 if (tree->owner == IO_TREE_INODE_IO) in merge_next_state()
364 btrfs_merge_delalloc_extent(tree->inode, state, next); in merge_next_state()
366 rb_erase(&next->rb_node, &tree->state); in merge_next_state()
381 static void merge_state(struct extent_io_tree *tree, struct extent_state *state) in merge_state() argument
386 merge_prev_state(tree, state); in merge_state()
387 merge_next_state(tree, state); in merge_state()
390 static void set_state_bits(struct extent_io_tree *tree, in set_state_bits() argument
397 if (tree->owner == IO_TREE_INODE_IO) in set_state_bits()
398 btrfs_set_delalloc_extent(tree->inode, state, bits); in set_state_bits()
420 static struct extent_state *insert_state(struct extent_io_tree *tree, in insert_state() argument
431 set_state_bits(tree, state, bits, changeset); in insert_state()
433 node = &tree->state.rb_node; in insert_state()
443 if (tree->owner == IO_TREE_INODE_IO) in insert_state()
444 btrfs_merge_delalloc_extent(tree->inode, in insert_state()
447 merge_prev_state(tree, entry); in insert_state()
455 if (tree->owner == IO_TREE_INODE_IO) in insert_state()
456 btrfs_merge_delalloc_extent(tree->inode, in insert_state()
459 merge_next_state(tree, entry); in insert_state()
470 rb_insert_color(&state->rb_node, &tree->state); in insert_state()
478 static void insert_state_fast(struct extent_io_tree *tree, in insert_state_fast() argument
483 set_state_bits(tree, state, bits, changeset); in insert_state_fast()
485 rb_insert_color(&state->rb_node, &tree->state); in insert_state_fast()
486 merge_state(tree, state); in insert_state_fast()
503 static int split_state(struct extent_io_tree *tree, struct extent_state *orig, in split_state() argument
509 if (tree->owner == IO_TREE_INODE_IO) in split_state()
510 btrfs_split_delalloc_extent(tree->inode, orig, split); in split_state()
536 rb_insert_color(&prealloc->rb_node, &tree->state); in split_state()
560 static struct extent_state *clear_state_bit(struct extent_io_tree *tree, in clear_state_bit() argument
569 if (tree->owner == IO_TREE_INODE_IO) in clear_state_bit()
570 btrfs_clear_delalloc_extent(tree->inode, state, bits); in clear_state_bit()
580 rb_erase(&state->rb_node, &tree->state); in clear_state_bit()
587 merge_state(tree, state); in clear_state_bit()
612 int btrfs_clear_extent_bit_changeset(struct extent_io_tree *tree, u64 start, u64 end, in btrfs_clear_extent_bit_changeset() argument
627 btrfs_debug_check_extent_io_range(tree, start, end); in btrfs_clear_extent_bit_changeset()
628 trace_btrfs_clear_extent_bit(tree, start, end - start + 1, bits); in btrfs_clear_extent_bit_changeset()
650 spin_lock(&tree->lock); in btrfs_clear_extent_bit_changeset()
671 state = tree_search(tree, start); in btrfs_clear_extent_bit_changeset()
705 ret = split_state(tree, state, prealloc, start); in btrfs_clear_extent_bit_changeset()
708 extent_io_tree_panic(tree, state, "split", ret); in btrfs_clear_extent_bit_changeset()
712 state = clear_state_bit(tree, state, bits, wake, end, in btrfs_clear_extent_bit_changeset()
733 ret = split_state(tree, state, prealloc, end + 1); in btrfs_clear_extent_bit_changeset()
735 extent_io_tree_panic(tree, state, "split", ret); in btrfs_clear_extent_bit_changeset()
743 clear_state_bit(tree, prealloc, bits, wake, end, changeset); in btrfs_clear_extent_bit_changeset()
749 state = clear_state_bit(tree, state, bits, wake, end, changeset); in btrfs_clear_extent_bit_changeset()
758 spin_unlock(&tree->lock); in btrfs_clear_extent_bit_changeset()
764 spin_unlock(&tree->lock); in btrfs_clear_extent_bit_changeset()
776 static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in wait_extent_bit() argument
781 btrfs_debug_check_extent_io_range(tree, start, end); in wait_extent_bit()
783 spin_lock(&tree->lock); in wait_extent_bit()
800 state = tree_search(tree, start); in wait_extent_bit()
813 spin_unlock(&tree->lock); in wait_extent_bit()
815 spin_lock(&tree->lock); in wait_extent_bit()
825 if (!cond_resched_lock(&tree->lock)) { in wait_extent_bit()
837 spin_unlock(&tree->lock); in wait_extent_bit()
863 static struct extent_state *find_first_extent_bit_state(struct extent_io_tree *tree, in find_first_extent_bit_state() argument
872 state = tree_search(tree, start); in find_first_extent_bit_state()
889 bool btrfs_find_first_extent_bit(struct extent_io_tree *tree, u64 start, in btrfs_find_first_extent_bit() argument
896 spin_lock(&tree->lock); in btrfs_find_first_extent_bit()
921 state = find_first_extent_bit_state(tree, start, bits); in btrfs_find_first_extent_bit()
930 spin_unlock(&tree->lock); in btrfs_find_first_extent_bit()
953 bool btrfs_find_contiguous_extent_bit(struct extent_io_tree *tree, u64 start, in btrfs_find_contiguous_extent_bit() argument
959 ASSERT(!btrfs_fs_incompat(btrfs_extent_io_tree_to_fs_info(tree), NO_HOLES)); in btrfs_find_contiguous_extent_bit()
961 spin_lock(&tree->lock); in btrfs_find_contiguous_extent_bit()
962 state = find_first_extent_bit_state(tree, start, bits); in btrfs_find_contiguous_extent_bit()
973 spin_unlock(&tree->lock); in btrfs_find_contiguous_extent_bit()
983 bool btrfs_find_delalloc_range(struct extent_io_tree *tree, u64 *start, in btrfs_find_delalloc_range() argument
992 spin_lock(&tree->lock); in btrfs_find_delalloc_range()
998 state = tree_search(tree, cur_start); in btrfs_find_delalloc_range()
1028 spin_unlock(&tree->lock); in btrfs_find_delalloc_range()
1046 static int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bit() argument
1063 btrfs_debug_check_extent_io_range(tree, start, end); in set_extent_bit()
1064 trace_btrfs_set_extent_bit(tree, start, end - start + 1, bits); in set_extent_bit()
1085 spin_lock(&tree->lock); in set_extent_bit()
1096 state = tree_search_for_insert(tree, start, &p, &parent); in set_extent_bit()
1103 insert_state_fast(tree, prealloc, p, parent, bits, changeset); in set_extent_bit()
1126 set_state_bits(tree, state, bits, changeset); in set_extent_bit()
1128 merge_state(tree, state); in set_extent_bit()
1174 ret = split_state(tree, state, prealloc, start); in set_extent_bit()
1176 extent_io_tree_panic(tree, state, "split", ret); in set_extent_bit()
1182 set_state_bits(tree, state, bits, changeset); in set_extent_bit()
1184 merge_state(tree, state); in set_extent_bit()
1218 inserted_state = insert_state(tree, prealloc, bits, changeset); in set_extent_bit()
1221 extent_io_tree_panic(tree, prealloc, "insert", ret); in set_extent_bit()
1264 ret = split_state(tree, state, prealloc, end + 1); in set_extent_bit()
1266 extent_io_tree_panic(tree, state, "split", ret); in set_extent_bit()
1271 set_state_bits(tree, prealloc, bits, changeset); in set_extent_bit()
1273 merge_state(tree, prealloc); in set_extent_bit()
1281 spin_unlock(&tree->lock); in set_extent_bit()
1287 spin_unlock(&tree->lock); in set_extent_bit()
1294 int btrfs_set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in btrfs_set_extent_bit() argument
1297 return set_extent_bit(tree, start, end, bits, NULL, NULL, cached_state, NULL); in btrfs_set_extent_bit()
1318 int btrfs_convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in btrfs_convert_extent_bit() argument
1331 btrfs_debug_check_extent_io_range(tree, start, end); in btrfs_convert_extent_bit()
1332 trace_btrfs_convert_extent_bit(tree, start, end - start + 1, bits, in btrfs_convert_extent_bit()
1349 spin_lock(&tree->lock); in btrfs_convert_extent_bit()
1361 state = tree_search_for_insert(tree, start, &p, &parent); in btrfs_convert_extent_bit()
1370 insert_state_fast(tree, prealloc, p, parent, bits, NULL); in btrfs_convert_extent_bit()
1386 set_state_bits(tree, state, bits, NULL); in btrfs_convert_extent_bit()
1388 state = clear_state_bit(tree, state, clear_bits, 0, end, NULL); in btrfs_convert_extent_bit()
1418 ret = split_state(tree, state, prealloc, start); in btrfs_convert_extent_bit()
1421 extent_io_tree_panic(tree, state, "split", ret); in btrfs_convert_extent_bit()
1425 set_state_bits(tree, state, bits, NULL); in btrfs_convert_extent_bit()
1427 state = clear_state_bit(tree, state, clear_bits, 0, end, NULL); in btrfs_convert_extent_bit()
1462 inserted_state = insert_state(tree, prealloc, bits, NULL); in btrfs_convert_extent_bit()
1465 extent_io_tree_panic(tree, prealloc, "insert", ret); in btrfs_convert_extent_bit()
1503 ret = split_state(tree, state, prealloc, end + 1); in btrfs_convert_extent_bit()
1505 extent_io_tree_panic(tree, state, "split", ret); in btrfs_convert_extent_bit()
1510 set_state_bits(tree, prealloc, bits, NULL); in btrfs_convert_extent_bit()
1512 clear_state_bit(tree, prealloc, clear_bits, 0, end, NULL); in btrfs_convert_extent_bit()
1520 spin_unlock(&tree->lock); in btrfs_convert_extent_bit()
1526 spin_unlock(&tree->lock); in btrfs_convert_extent_bit()
1547 void btrfs_find_first_clear_extent_bit(struct extent_io_tree *tree, u64 start, in btrfs_find_first_clear_extent_bit() argument
1553 spin_lock(&tree->lock); in btrfs_find_first_clear_extent_bit()
1557 state = tree_search_prev_next(tree, start, &prev, &next); in btrfs_find_first_clear_extent_bit()
1637 spin_unlock(&tree->lock); in btrfs_find_first_clear_extent_bit()
1665 u64 btrfs_count_range_bits(struct extent_io_tree *tree, in btrfs_count_range_bits() argument
1680 spin_lock(&tree->lock); in btrfs_count_range_bits()
1715 state = tree_search(tree, cur_start); in btrfs_count_range_bits()
1745 spin_unlock(&tree->lock); in btrfs_count_range_bits()
1753 bool btrfs_test_range_bit_exists(struct extent_io_tree *tree, u64 start, u64 end, u32 bit) in btrfs_test_range_bit_exists() argument
1760 spin_lock(&tree->lock); in btrfs_test_range_bit_exists()
1761 state = tree_search(tree, start); in btrfs_test_range_bit_exists()
1775 spin_unlock(&tree->lock); in btrfs_test_range_bit_exists()
1779 void btrfs_get_range_bits(struct extent_io_tree *tree, u64 start, u64 end, u32 *bits, in btrfs_get_range_bits() argument
1793 spin_lock(&tree->lock); in btrfs_get_range_bits()
1794 state = tree_search(tree, start); in btrfs_get_range_bits()
1810 spin_unlock(&tree->lock); in btrfs_get_range_bits()
1816 bool btrfs_test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, u32 bit, in btrfs_test_range_bit() argument
1825 spin_lock(&tree->lock); in btrfs_test_range_bit()
1830 state = tree_search(tree, start); in btrfs_test_range_bit()
1853 spin_unlock(&tree->lock); in btrfs_test_range_bit()
1858 int btrfs_set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in btrfs_set_record_extent_bits() argument
1868 return set_extent_bit(tree, start, end, bits, NULL, NULL, NULL, changeset); in btrfs_set_record_extent_bits()
1871 int btrfs_clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in btrfs_clear_record_extent_bits() argument
1880 return btrfs_clear_extent_bit_changeset(tree, start, end, bits, NULL, changeset); in btrfs_clear_record_extent_bits()
1883 bool btrfs_try_lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in btrfs_try_lock_extent_bits() argument
1889 ret = set_extent_bit(tree, start, end, bits, &failed_start, NULL, cached, NULL); in btrfs_try_lock_extent_bits()
1892 btrfs_clear_extent_bit(tree, start, failed_start - 1, in btrfs_try_lock_extent_bits()
1903 int btrfs_lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, u32 bits, in btrfs_lock_extent_bits() argument
1910 ret = set_extent_bit(tree, start, end, bits, &failed_start, in btrfs_lock_extent_bits()
1914 btrfs_clear_extent_bit(tree, start, failed_start - 1, in btrfs_lock_extent_bits()
1917 wait_extent_bit(tree, failed_start, end, bits, &failed_state); in btrfs_lock_extent_bits()
1918 ret = set_extent_bit(tree, start, end, bits, &failed_start, in btrfs_lock_extent_bits()
1929 struct extent_state *btrfs_next_extent_state(struct extent_io_tree *tree, in btrfs_next_extent_state() argument
1934 spin_lock(&tree->lock); in btrfs_next_extent_state()
1939 spin_unlock(&tree->lock); in btrfs_next_extent_state()