Lines Matching refs:tree
103 #define btrfs_debug_check_extent_io_range(tree, start, end) \ argument
104 __btrfs_debug_check_extent_io_range(__func__, (tree), (start), (end))
106 struct extent_io_tree *tree, u64 start, u64 end) in __btrfs_debug_check_extent_io_range() argument
108 struct inode *inode = tree->private_data; in __btrfs_debug_check_extent_io_range()
167 struct extent_io_tree *tree = bio->bi_private; in submit_one_bio() local
171 if (is_data_inode(tree->private_data)) in submit_one_bio()
172 ret = btrfs_submit_data_bio(tree->private_data, bio, mirror_num, in submit_one_bio()
175 ret = btrfs_submit_metadata_bio(tree->private_data, bio, in submit_one_bio()
279 struct extent_io_tree *tree, unsigned int owner, in extent_io_tree_init() argument
282 tree->fs_info = fs_info; in extent_io_tree_init()
283 tree->state = RB_ROOT; in extent_io_tree_init()
284 tree->dirty_bytes = 0; in extent_io_tree_init()
285 spin_lock_init(&tree->lock); in extent_io_tree_init()
286 tree->private_data = private_data; in extent_io_tree_init()
287 tree->owner = owner; in extent_io_tree_init()
289 lockdep_set_class(&tree->lock, &file_extent_tree_class); in extent_io_tree_init()
292 void extent_io_tree_release(struct extent_io_tree *tree) in extent_io_tree_release() argument
294 spin_lock(&tree->lock); in extent_io_tree_release()
301 while (!RB_EMPTY_ROOT(&tree->state)) { in extent_io_tree_release()
305 node = rb_first(&tree->state); in extent_io_tree_release()
307 rb_erase(&state->rb_node, &tree->state); in extent_io_tree_release()
316 cond_resched_lock(&tree->lock); in extent_io_tree_release()
318 spin_unlock(&tree->lock); in extent_io_tree_release()
409 static struct rb_node *__etree_search(struct extent_io_tree *tree, u64 offset, in __etree_search() argument
415 struct rb_root *root = &tree->state; in __etree_search()
462 tree_search_for_insert(struct extent_io_tree *tree, in tree_search_for_insert() argument
470 ret = __etree_search(tree, offset, &next, NULL, p_ret, parent_ret); in tree_search_for_insert()
476 static inline struct rb_node *tree_search(struct extent_io_tree *tree, in tree_search() argument
479 return tree_search_for_insert(tree, offset, NULL, NULL); in tree_search()
491 static void merge_state(struct extent_io_tree *tree, in merge_state() argument
505 if (tree->private_data && in merge_state()
506 is_data_inode(tree->private_data)) in merge_state()
507 btrfs_merge_delalloc_extent(tree->private_data, in merge_state()
510 rb_erase(&other->rb_node, &tree->state); in merge_state()
520 if (tree->private_data && in merge_state()
521 is_data_inode(tree->private_data)) in merge_state()
522 btrfs_merge_delalloc_extent(tree->private_data, in merge_state()
525 rb_erase(&other->rb_node, &tree->state); in merge_state()
532 static void set_state_bits(struct extent_io_tree *tree,
546 static int insert_state(struct extent_io_tree *tree, in insert_state() argument
555 btrfs_err(tree->fs_info, in insert_state()
562 set_state_bits(tree, state, bits, changeset); in insert_state()
564 node = tree_insert(&tree->state, NULL, end, &state->rb_node, p, parent); in insert_state()
568 btrfs_err(tree->fs_info, in insert_state()
573 merge_state(tree, state); in insert_state()
591 static int split_state(struct extent_io_tree *tree, struct extent_state *orig, in split_state() argument
596 if (tree->private_data && is_data_inode(tree->private_data)) in split_state()
597 btrfs_split_delalloc_extent(tree->private_data, orig, split); in split_state()
604 node = tree_insert(&tree->state, &orig->rb_node, prealloc->end, in split_state()
629 static struct extent_state *clear_state_bit(struct extent_io_tree *tree, in clear_state_bit() argument
640 WARN_ON(range > tree->dirty_bytes); in clear_state_bit()
641 tree->dirty_bytes -= range; in clear_state_bit()
644 if (tree->private_data && is_data_inode(tree->private_data)) in clear_state_bit()
645 btrfs_clear_delalloc_extent(tree->private_data, state, bits); in clear_state_bit()
655 rb_erase(&state->rb_node, &tree->state); in clear_state_bit()
662 merge_state(tree, state); in clear_state_bit()
677 static void extent_io_tree_panic(struct extent_io_tree *tree, int err) in extent_io_tree_panic() argument
679 btrfs_panic(tree->fs_info, err, in extent_io_tree_panic()
695 int __clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in __clear_extent_bit() argument
708 btrfs_debug_check_extent_io_range(tree, start, end); in __clear_extent_bit()
709 trace_btrfs_clear_extent_bit(tree, start, end - start + 1, bits); in __clear_extent_bit()
731 spin_lock(&tree->lock); in __clear_extent_bit()
754 node = tree_search(tree, start); in __clear_extent_bit()
789 err = split_state(tree, state, prealloc, start); in __clear_extent_bit()
791 extent_io_tree_panic(tree, err); in __clear_extent_bit()
797 state = clear_state_bit(tree, state, &bits, wake, in __clear_extent_bit()
812 err = split_state(tree, state, prealloc, end + 1); in __clear_extent_bit()
814 extent_io_tree_panic(tree, err); in __clear_extent_bit()
819 clear_state_bit(tree, prealloc, &bits, wake, changeset); in __clear_extent_bit()
825 state = clear_state_bit(tree, state, &bits, wake, changeset); in __clear_extent_bit()
836 spin_unlock(&tree->lock); in __clear_extent_bit()
842 spin_unlock(&tree->lock); in __clear_extent_bit()
850 static void wait_on_state(struct extent_io_tree *tree, in wait_on_state() argument
852 __releases(tree->lock) in wait_on_state()
853 __acquires(tree->lock) in wait_on_state()
857 spin_unlock(&tree->lock); in wait_on_state()
859 spin_lock(&tree->lock); in wait_on_state()
868 static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in wait_extent_bit() argument
874 btrfs_debug_check_extent_io_range(tree, start, end); in wait_extent_bit()
876 spin_lock(&tree->lock); in wait_extent_bit()
883 node = tree_search(tree, start); in wait_extent_bit()
896 wait_on_state(tree, state); in wait_extent_bit()
905 if (!cond_resched_lock(&tree->lock)) { in wait_extent_bit()
911 spin_unlock(&tree->lock); in wait_extent_bit()
914 static void set_state_bits(struct extent_io_tree *tree, in set_state_bits() argument
921 if (tree->private_data && is_data_inode(tree->private_data)) in set_state_bits()
922 btrfs_set_delalloc_extent(tree->private_data, state, bits); in set_state_bits()
926 tree->dirty_bytes += range; in set_state_bits()
964 __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in __set_extent_bit() argument
978 btrfs_debug_check_extent_io_range(tree, start, end); in __set_extent_bit()
979 trace_btrfs_set_extent_bit(tree, start, end - start + 1, bits); in __set_extent_bit()
993 spin_lock(&tree->lock); in __set_extent_bit()
1006 node = tree_search_for_insert(tree, start, &p, &parent); in __set_extent_bit()
1010 err = insert_state(tree, prealloc, start, end, in __set_extent_bit()
1013 extent_io_tree_panic(tree, err); in __set_extent_bit()
1037 set_state_bits(tree, state, &bits, changeset); in __set_extent_bit()
1039 merge_state(tree, state); in __set_extent_bit()
1085 err = split_state(tree, state, prealloc, start); in __set_extent_bit()
1087 extent_io_tree_panic(tree, err); in __set_extent_bit()
1093 set_state_bits(tree, state, &bits, changeset); in __set_extent_bit()
1095 merge_state(tree, state); in __set_extent_bit()
1127 err = insert_state(tree, prealloc, start, this_end, in __set_extent_bit()
1130 extent_io_tree_panic(tree, err); in __set_extent_bit()
1152 err = split_state(tree, state, prealloc, end + 1); in __set_extent_bit()
1154 extent_io_tree_panic(tree, err); in __set_extent_bit()
1156 set_state_bits(tree, prealloc, &bits, changeset); in __set_extent_bit()
1158 merge_state(tree, prealloc); in __set_extent_bit()
1166 spin_unlock(&tree->lock); in __set_extent_bit()
1172 spin_unlock(&tree->lock); in __set_extent_bit()
1180 int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bit() argument
1184 return __set_extent_bit(tree, start, end, bits, 0, failed_start, in set_extent_bit()
1207 int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in convert_extent_bit() argument
1221 btrfs_debug_check_extent_io_range(tree, start, end); in convert_extent_bit()
1222 trace_btrfs_convert_extent_bit(tree, start, end - start + 1, bits, in convert_extent_bit()
1239 spin_lock(&tree->lock); in convert_extent_bit()
1253 node = tree_search_for_insert(tree, start, &p, &parent); in convert_extent_bit()
1260 err = insert_state(tree, prealloc, start, end, in convert_extent_bit()
1263 extent_io_tree_panic(tree, err); in convert_extent_bit()
1280 set_state_bits(tree, state, &bits, NULL); in convert_extent_bit()
1282 state = clear_state_bit(tree, state, &clear_bits, 0, NULL); in convert_extent_bit()
1314 err = split_state(tree, state, prealloc, start); in convert_extent_bit()
1316 extent_io_tree_panic(tree, err); in convert_extent_bit()
1321 set_state_bits(tree, state, &bits, NULL); in convert_extent_bit()
1323 state = clear_state_bit(tree, state, &clear_bits, 0, in convert_extent_bit()
1358 err = insert_state(tree, prealloc, start, this_end, in convert_extent_bit()
1361 extent_io_tree_panic(tree, err); in convert_extent_bit()
1380 err = split_state(tree, state, prealloc, end + 1); in convert_extent_bit()
1382 extent_io_tree_panic(tree, err); in convert_extent_bit()
1384 set_state_bits(tree, prealloc, &bits, NULL); in convert_extent_bit()
1386 clear_state_bit(tree, prealloc, &clear_bits, 0, NULL); in convert_extent_bit()
1394 spin_unlock(&tree->lock); in convert_extent_bit()
1400 spin_unlock(&tree->lock); in convert_extent_bit()
1408 int set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in set_record_extent_bits() argument
1419 return __set_extent_bit(tree, start, end, bits, 0, NULL, NULL, GFP_NOFS, in set_record_extent_bits()
1423 int set_extent_bits_nowait(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bits_nowait() argument
1426 return __set_extent_bit(tree, start, end, bits, 0, NULL, NULL, in set_extent_bits_nowait()
1430 int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in clear_extent_bit() argument
1434 return __clear_extent_bit(tree, start, end, bits, wake, delete, in clear_extent_bit()
1438 int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in clear_record_extent_bits() argument
1447 return __clear_extent_bit(tree, start, end, bits, 0, 0, NULL, GFP_NOFS, in clear_record_extent_bits()
1455 int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in lock_extent_bits() argument
1462 err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, in lock_extent_bits()
1466 wait_extent_bit(tree, failed_start, end, EXTENT_LOCKED); in lock_extent_bits()
1475 int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end) in try_lock_extent() argument
1480 err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, EXTENT_LOCKED, in try_lock_extent()
1484 clear_extent_bit(tree, start, failed_start - 1, in try_lock_extent()
1527 find_first_extent_bit_state(struct extent_io_tree *tree, in find_first_extent_bit_state() argument
1537 node = tree_search(tree, start); in find_first_extent_bit_state()
1561 int find_first_extent_bit(struct extent_io_tree *tree, u64 start, in find_first_extent_bit() argument
1568 spin_lock(&tree->lock); in find_first_extent_bit()
1584 state = find_first_extent_bit_state(tree, start, bits); in find_first_extent_bit()
1593 spin_unlock(&tree->lock); in find_first_extent_bit()
1612 int find_contiguous_extent_bit(struct extent_io_tree *tree, u64 start, in find_contiguous_extent_bit() argument
1618 spin_lock(&tree->lock); in find_contiguous_extent_bit()
1619 state = find_first_extent_bit_state(tree, start, bits); in find_contiguous_extent_bit()
1630 spin_unlock(&tree->lock); in find_contiguous_extent_bit()
1649 void find_first_clear_extent_bit(struct extent_io_tree *tree, u64 start, in find_first_clear_extent_bit() argument
1655 spin_lock(&tree->lock); in find_first_clear_extent_bit()
1659 node = __etree_search(tree, start, &next, &prev, NULL, NULL); in find_first_clear_extent_bit()
1748 spin_unlock(&tree->lock); in find_first_clear_extent_bit()
1757 bool btrfs_find_delalloc_range(struct extent_io_tree *tree, u64 *start, in btrfs_find_delalloc_range() argument
1767 spin_lock(&tree->lock); in btrfs_find_delalloc_range()
1773 node = tree_search(tree, cur_start); in btrfs_find_delalloc_range()
1806 spin_unlock(&tree->lock); in btrfs_find_delalloc_range()
1864 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in find_lock_delalloc_range() local
1877 found = btrfs_find_delalloc_range(tree, &delalloc_start, &delalloc_end, in find_lock_delalloc_range()
1921 lock_extent_bits(tree, delalloc_start, delalloc_end, &cached_state); in find_lock_delalloc_range()
1924 ret = test_range_bit(tree, delalloc_start, delalloc_end, in find_lock_delalloc_range()
1927 unlock_extent_cached(tree, delalloc_start, delalloc_end, in find_lock_delalloc_range()
2036 u64 count_range_bits(struct extent_io_tree *tree, in count_range_bits() argument
2050 spin_lock(&tree->lock); in count_range_bits()
2052 total_bytes = tree->dirty_bytes; in count_range_bits()
2059 node = tree_search(tree, cur_start); in count_range_bits()
2087 spin_unlock(&tree->lock); in count_range_bits()
2095 int set_state_failrec(struct extent_io_tree *tree, u64 start, in set_state_failrec() argument
2102 spin_lock(&tree->lock); in set_state_failrec()
2107 node = tree_search(tree, start); in set_state_failrec()
2119 spin_unlock(&tree->lock); in set_state_failrec()
2123 struct io_failure_record *get_state_failrec(struct extent_io_tree *tree, u64 start) in get_state_failrec() argument
2129 spin_lock(&tree->lock); in get_state_failrec()
2134 node = tree_search(tree, start); in get_state_failrec()
2147 spin_unlock(&tree->lock); in get_state_failrec()
2157 int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, in test_range_bit() argument
2164 spin_lock(&tree->lock); in test_range_bit()
2169 node = tree_search(tree, start); in test_range_bit()
2203 spin_unlock(&tree->lock); in test_range_bit()
2211 static void check_page_uptodate(struct extent_io_tree *tree, struct page *page) in check_page_uptodate() argument
2215 if (test_range_bit(tree, start, end, EXTENT_UPTODATE, 1, NULL)) in check_page_uptodate()
2458 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_get_io_failure_record() local
2527 ret = set_extent_bits(tree, start, end, EXTENT_DAMAGED); in btrfs_get_io_failure_record()
2650 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_submit_read_repair() local
2672 free_io_failure(failure_tree, tree, failrec); in btrfs_submit_read_repair()
2704 free_io_failure(failure_tree, tree, failrec); in btrfs_submit_read_repair()
2777 endio_readpage_release_extent(struct extent_io_tree *tree, u64 start, u64 len, in endio_readpage_release_extent() argument
2783 if (uptodate && tree->track_uptodate) in endio_readpage_release_extent()
2784 set_extent_uptodate(tree, start, end, &cached, GFP_ATOMIC); in endio_readpage_release_extent()
2785 unlock_extent_cached_atomic(tree, start, end, &cached); in endio_readpage_release_extent()
2804 struct extent_io_tree *tree, *failure_tree; in end_bio_extent_readpage() local
2825 tree = &BTRFS_I(inode)->io_tree; in end_bio_extent_readpage()
2860 failure_tree, tree, start, in end_bio_extent_readpage()
2919 endio_readpage_release_extent(tree, in end_bio_extent_readpage()
2925 endio_readpage_release_extent(tree, start, in end_bio_extent_readpage()
2933 endio_readpage_release_extent(tree, extent_start, in end_bio_extent_readpage()
2941 endio_readpage_release_extent(tree, extent_start, extent_len, in end_bio_extent_readpage()
3041 struct extent_io_tree *tree = &BTRFS_I(page->mapping->host)->io_tree; in submit_extent_page() local
3077 bio->bi_private = tree; in submit_extent_page()
3162 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_do_readpage() local
3169 unlock_extent(tree, start, end); in btrfs_do_readpage()
3199 set_extent_uptodate(tree, cur, cur + iosize - 1, in btrfs_do_readpage()
3201 unlock_extent_cached(tree, cur, in btrfs_do_readpage()
3209 unlock_extent(tree, cur, end); in btrfs_do_readpage()
3291 set_extent_uptodate(tree, cur, cur + iosize - 1, in btrfs_do_readpage()
3293 unlock_extent_cached(tree, cur, in btrfs_do_readpage()
3300 if (test_range_bit(tree, cur, cur_end, in btrfs_do_readpage()
3302 check_page_uptodate(tree, page); in btrfs_do_readpage()
3303 unlock_extent(tree, cur, cur + iosize - 1); in btrfs_do_readpage()
3313 unlock_extent(tree, cur, cur + iosize - 1); in btrfs_do_readpage()
3331 unlock_extent(tree, cur, cur + iosize - 1); in btrfs_do_readpage()
3462 struct extent_io_tree *tree = &inode->io_tree; in __extent_writepage_io() local
3540 btrfs_set_range_writeback(tree, cur, cur + iosize - 1); in __extent_writepage_io()
4381 int extent_invalidatepage(struct extent_io_tree *tree, in extent_invalidatepage() argument
4393 lock_extent_bits(tree, start, end, &cached_state); in extent_invalidatepage()
4395 clear_extent_bit(tree, start, end, EXTENT_LOCKED | EXTENT_DELALLOC | in extent_invalidatepage()
4405 static int try_release_extent_state(struct extent_io_tree *tree, in try_release_extent_state() argument
4412 if (test_range_bit(tree, start, end, EXTENT_LOCKED, 0, NULL)) { in try_release_extent_state()
4419 ret = __clear_extent_bit(tree, start, end, in try_release_extent_state()
4445 struct extent_io_tree *tree = &btrfs_inode->io_tree; in try_release_extent_mapping() local
4468 if (test_range_bit(tree, em->start, in try_release_extent_mapping()
4516 return try_release_extent_state(tree, page, mask); in try_release_extent_mapping()