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 struct inode *inode = tree->private_data; in extent_io_tree_panic()
697 int __clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in __clear_extent_bit() argument
710 btrfs_debug_check_extent_io_range(tree, start, end); in __clear_extent_bit()
711 trace_btrfs_clear_extent_bit(tree, start, end - start + 1, bits); in __clear_extent_bit()
733 spin_lock(&tree->lock); in __clear_extent_bit()
756 node = tree_search(tree, start); in __clear_extent_bit()
791 err = split_state(tree, state, prealloc, start); in __clear_extent_bit()
793 extent_io_tree_panic(tree, err); in __clear_extent_bit()
799 state = clear_state_bit(tree, state, &bits, wake, in __clear_extent_bit()
814 err = split_state(tree, state, prealloc, end + 1); in __clear_extent_bit()
816 extent_io_tree_panic(tree, err); in __clear_extent_bit()
821 clear_state_bit(tree, prealloc, &bits, wake, changeset); in __clear_extent_bit()
827 state = clear_state_bit(tree, state, &bits, wake, changeset); in __clear_extent_bit()
838 spin_unlock(&tree->lock); in __clear_extent_bit()
844 spin_unlock(&tree->lock); in __clear_extent_bit()
852 static void wait_on_state(struct extent_io_tree *tree, in wait_on_state() argument
854 __releases(tree->lock) in wait_on_state()
855 __acquires(tree->lock) in wait_on_state()
859 spin_unlock(&tree->lock); in wait_on_state()
861 spin_lock(&tree->lock); in wait_on_state()
870 static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in wait_extent_bit() argument
876 btrfs_debug_check_extent_io_range(tree, start, end); in wait_extent_bit()
878 spin_lock(&tree->lock); in wait_extent_bit()
885 node = tree_search(tree, start); in wait_extent_bit()
898 wait_on_state(tree, state); in wait_extent_bit()
907 if (!cond_resched_lock(&tree->lock)) { in wait_extent_bit()
913 spin_unlock(&tree->lock); in wait_extent_bit()
916 static void set_state_bits(struct extent_io_tree *tree, in set_state_bits() argument
923 if (tree->private_data && is_data_inode(tree->private_data)) in set_state_bits()
924 btrfs_set_delalloc_extent(tree->private_data, state, bits); in set_state_bits()
928 tree->dirty_bytes += range; in set_state_bits()
966 __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in __set_extent_bit() argument
980 btrfs_debug_check_extent_io_range(tree, start, end); in __set_extent_bit()
981 trace_btrfs_set_extent_bit(tree, start, end - start + 1, bits); in __set_extent_bit()
995 spin_lock(&tree->lock); in __set_extent_bit()
1008 node = tree_search_for_insert(tree, start, &p, &parent); in __set_extent_bit()
1012 err = insert_state(tree, prealloc, start, end, in __set_extent_bit()
1015 extent_io_tree_panic(tree, err); in __set_extent_bit()
1039 set_state_bits(tree, state, &bits, changeset); in __set_extent_bit()
1041 merge_state(tree, state); in __set_extent_bit()
1087 err = split_state(tree, state, prealloc, start); in __set_extent_bit()
1089 extent_io_tree_panic(tree, err); in __set_extent_bit()
1095 set_state_bits(tree, state, &bits, changeset); in __set_extent_bit()
1097 merge_state(tree, state); in __set_extent_bit()
1129 err = insert_state(tree, prealloc, start, this_end, in __set_extent_bit()
1132 extent_io_tree_panic(tree, err); in __set_extent_bit()
1154 err = split_state(tree, state, prealloc, end + 1); in __set_extent_bit()
1156 extent_io_tree_panic(tree, err); in __set_extent_bit()
1158 set_state_bits(tree, prealloc, &bits, changeset); in __set_extent_bit()
1160 merge_state(tree, prealloc); in __set_extent_bit()
1168 spin_unlock(&tree->lock); in __set_extent_bit()
1174 spin_unlock(&tree->lock); in __set_extent_bit()
1182 int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bit() argument
1186 return __set_extent_bit(tree, start, end, bits, 0, failed_start, in set_extent_bit()
1209 int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in convert_extent_bit() argument
1223 btrfs_debug_check_extent_io_range(tree, start, end); in convert_extent_bit()
1224 trace_btrfs_convert_extent_bit(tree, start, end - start + 1, bits, in convert_extent_bit()
1241 spin_lock(&tree->lock); in convert_extent_bit()
1255 node = tree_search_for_insert(tree, start, &p, &parent); in convert_extent_bit()
1262 err = insert_state(tree, prealloc, start, end, in convert_extent_bit()
1265 extent_io_tree_panic(tree, err); in convert_extent_bit()
1282 set_state_bits(tree, state, &bits, NULL); in convert_extent_bit()
1284 state = clear_state_bit(tree, state, &clear_bits, 0, NULL); in convert_extent_bit()
1316 err = split_state(tree, state, prealloc, start); in convert_extent_bit()
1318 extent_io_tree_panic(tree, err); in convert_extent_bit()
1323 set_state_bits(tree, state, &bits, NULL); in convert_extent_bit()
1325 state = clear_state_bit(tree, state, &clear_bits, 0, in convert_extent_bit()
1360 err = insert_state(tree, prealloc, start, this_end, in convert_extent_bit()
1363 extent_io_tree_panic(tree, err); in convert_extent_bit()
1382 err = split_state(tree, state, prealloc, end + 1); in convert_extent_bit()
1384 extent_io_tree_panic(tree, err); in convert_extent_bit()
1386 set_state_bits(tree, prealloc, &bits, NULL); in convert_extent_bit()
1388 clear_state_bit(tree, prealloc, &clear_bits, 0, NULL); in convert_extent_bit()
1396 spin_unlock(&tree->lock); in convert_extent_bit()
1402 spin_unlock(&tree->lock); in convert_extent_bit()
1410 int set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in set_record_extent_bits() argument
1421 return __set_extent_bit(tree, start, end, bits, 0, NULL, NULL, GFP_NOFS, in set_record_extent_bits()
1425 int set_extent_bits_nowait(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bits_nowait() argument
1428 return __set_extent_bit(tree, start, end, bits, 0, NULL, NULL, in set_extent_bits_nowait()
1432 int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in clear_extent_bit() argument
1436 return __clear_extent_bit(tree, start, end, bits, wake, delete, in clear_extent_bit()
1440 int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in clear_record_extent_bits() argument
1449 return __clear_extent_bit(tree, start, end, bits, 0, 0, NULL, GFP_NOFS, in clear_record_extent_bits()
1457 int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in lock_extent_bits() argument
1464 err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, in lock_extent_bits()
1468 wait_extent_bit(tree, failed_start, end, EXTENT_LOCKED); in lock_extent_bits()
1477 int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end) in try_lock_extent() argument
1482 err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, EXTENT_LOCKED, in try_lock_extent()
1486 clear_extent_bit(tree, start, failed_start - 1, in try_lock_extent()
1529 find_first_extent_bit_state(struct extent_io_tree *tree, in find_first_extent_bit_state() argument
1539 node = tree_search(tree, start); in find_first_extent_bit_state()
1563 int find_first_extent_bit(struct extent_io_tree *tree, u64 start, in find_first_extent_bit() argument
1570 spin_lock(&tree->lock); in find_first_extent_bit()
1586 state = find_first_extent_bit_state(tree, start, bits); in find_first_extent_bit()
1595 spin_unlock(&tree->lock); in find_first_extent_bit()
1614 int find_contiguous_extent_bit(struct extent_io_tree *tree, u64 start, in find_contiguous_extent_bit() argument
1620 spin_lock(&tree->lock); in find_contiguous_extent_bit()
1621 state = find_first_extent_bit_state(tree, start, bits); in find_contiguous_extent_bit()
1632 spin_unlock(&tree->lock); in find_contiguous_extent_bit()
1651 void find_first_clear_extent_bit(struct extent_io_tree *tree, u64 start, in find_first_clear_extent_bit() argument
1657 spin_lock(&tree->lock); in find_first_clear_extent_bit()
1661 node = __etree_search(tree, start, &next, &prev, NULL, NULL); in find_first_clear_extent_bit()
1750 spin_unlock(&tree->lock); in find_first_clear_extent_bit()
1759 bool btrfs_find_delalloc_range(struct extent_io_tree *tree, u64 *start, in btrfs_find_delalloc_range() argument
1769 spin_lock(&tree->lock); in btrfs_find_delalloc_range()
1775 node = tree_search(tree, cur_start); in btrfs_find_delalloc_range()
1808 spin_unlock(&tree->lock); in btrfs_find_delalloc_range()
1866 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in find_lock_delalloc_range() local
1879 found = btrfs_find_delalloc_range(tree, &delalloc_start, &delalloc_end, in find_lock_delalloc_range()
1923 lock_extent_bits(tree, delalloc_start, delalloc_end, &cached_state); in find_lock_delalloc_range()
1926 ret = test_range_bit(tree, delalloc_start, delalloc_end, in find_lock_delalloc_range()
1929 unlock_extent_cached(tree, delalloc_start, delalloc_end, in find_lock_delalloc_range()
2038 u64 count_range_bits(struct extent_io_tree *tree, in count_range_bits() argument
2052 spin_lock(&tree->lock); in count_range_bits()
2054 total_bytes = tree->dirty_bytes; in count_range_bits()
2061 node = tree_search(tree, cur_start); in count_range_bits()
2089 spin_unlock(&tree->lock); in count_range_bits()
2097 int set_state_failrec(struct extent_io_tree *tree, u64 start, in set_state_failrec() argument
2104 spin_lock(&tree->lock); in set_state_failrec()
2109 node = tree_search(tree, start); in set_state_failrec()
2121 spin_unlock(&tree->lock); in set_state_failrec()
2125 struct io_failure_record *get_state_failrec(struct extent_io_tree *tree, u64 start) in get_state_failrec() argument
2131 spin_lock(&tree->lock); in get_state_failrec()
2136 node = tree_search(tree, start); in get_state_failrec()
2149 spin_unlock(&tree->lock); in get_state_failrec()
2159 int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, in test_range_bit() argument
2166 spin_lock(&tree->lock); in test_range_bit()
2171 node = tree_search(tree, start); in test_range_bit()
2205 spin_unlock(&tree->lock); in test_range_bit()
2213 static void check_page_uptodate(struct extent_io_tree *tree, struct page *page) in check_page_uptodate() argument
2217 if (test_range_bit(tree, start, end, EXTENT_UPTODATE, 1, NULL)) in check_page_uptodate()
2460 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_get_io_failure_record() local
2529 ret = set_extent_bits(tree, start, end, EXTENT_DAMAGED); in btrfs_get_io_failure_record()
2652 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_submit_read_repair() local
2674 free_io_failure(failure_tree, tree, failrec); in btrfs_submit_read_repair()
2706 free_io_failure(failure_tree, tree, failrec); in btrfs_submit_read_repair()
2779 endio_readpage_release_extent(struct extent_io_tree *tree, u64 start, u64 len, in endio_readpage_release_extent() argument
2785 if (uptodate && tree->track_uptodate) in endio_readpage_release_extent()
2786 set_extent_uptodate(tree, start, end, &cached, GFP_ATOMIC); in endio_readpage_release_extent()
2787 unlock_extent_cached_atomic(tree, start, end, &cached); in endio_readpage_release_extent()
2806 struct extent_io_tree *tree, *failure_tree; in end_bio_extent_readpage() local
2827 tree = &BTRFS_I(inode)->io_tree; in end_bio_extent_readpage()
2862 failure_tree, tree, start, in end_bio_extent_readpage()
2921 endio_readpage_release_extent(tree, in end_bio_extent_readpage()
2927 endio_readpage_release_extent(tree, start, in end_bio_extent_readpage()
2935 endio_readpage_release_extent(tree, extent_start, in end_bio_extent_readpage()
2943 endio_readpage_release_extent(tree, extent_start, extent_len, in end_bio_extent_readpage()
3043 struct extent_io_tree *tree = &BTRFS_I(page->mapping->host)->io_tree; in submit_extent_page() local
3079 bio->bi_private = tree; in submit_extent_page()
3164 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_do_readpage() local
3171 unlock_extent(tree, start, end); in btrfs_do_readpage()
3201 set_extent_uptodate(tree, cur, cur + iosize - 1, in btrfs_do_readpage()
3203 unlock_extent_cached(tree, cur, in btrfs_do_readpage()
3211 unlock_extent(tree, cur, end); in btrfs_do_readpage()
3293 set_extent_uptodate(tree, cur, cur + iosize - 1, in btrfs_do_readpage()
3295 unlock_extent_cached(tree, cur, in btrfs_do_readpage()
3302 if (test_range_bit(tree, cur, cur_end, in btrfs_do_readpage()
3304 check_page_uptodate(tree, page); in btrfs_do_readpage()
3305 unlock_extent(tree, cur, cur + iosize - 1); in btrfs_do_readpage()
3315 unlock_extent(tree, cur, cur + iosize - 1); in btrfs_do_readpage()
3333 unlock_extent(tree, cur, cur + iosize - 1); in btrfs_do_readpage()
3464 struct extent_io_tree *tree = &inode->io_tree; in __extent_writepage_io() local
3542 btrfs_set_range_writeback(tree, cur, cur + iosize - 1); in __extent_writepage_io()
4377 int extent_invalidatepage(struct extent_io_tree *tree, in extent_invalidatepage() argument
4389 lock_extent_bits(tree, start, end, &cached_state); in extent_invalidatepage()
4391 clear_extent_bit(tree, start, end, EXTENT_LOCKED | EXTENT_DELALLOC | in extent_invalidatepage()
4401 static int try_release_extent_state(struct extent_io_tree *tree, in try_release_extent_state() argument
4408 if (test_range_bit(tree, start, end, EXTENT_LOCKED, 0, NULL)) { in try_release_extent_state()
4415 ret = __clear_extent_bit(tree, start, end, in try_release_extent_state()
4441 struct extent_io_tree *tree = &btrfs_inode->io_tree; in try_release_extent_mapping() local
4464 if (test_range_bit(tree, em->start, in try_release_extent_mapping()
4512 return try_release_extent_state(tree, page, mask); in try_release_extent_mapping()