Lines Matching refs:tree
87 #define btrfs_debug_check_extent_io_range(tree, start, end) \ argument
88 __btrfs_debug_check_extent_io_range(__func__, (tree), (start), (end))
90 struct extent_io_tree *tree, u64 start, u64 end) in __btrfs_debug_check_extent_io_range() argument
92 struct inode *inode = tree->private_data; in __btrfs_debug_check_extent_io_range()
120 struct extent_io_tree *tree; member
152 struct extent_io_tree *tree = bio->bi_private; in submit_one_bio() local
156 if (tree->ops) in submit_one_bio()
157 ret = tree->ops->submit_bio_hook(tree->private_data, bio, in submit_one_bio()
251 struct extent_io_tree *tree, unsigned int owner, in extent_io_tree_init() argument
254 tree->fs_info = fs_info; in extent_io_tree_init()
255 tree->state = RB_ROOT; in extent_io_tree_init()
256 tree->ops = NULL; in extent_io_tree_init()
257 tree->dirty_bytes = 0; in extent_io_tree_init()
258 spin_lock_init(&tree->lock); in extent_io_tree_init()
259 tree->private_data = private_data; in extent_io_tree_init()
260 tree->owner = owner; in extent_io_tree_init()
263 void extent_io_tree_release(struct extent_io_tree *tree) in extent_io_tree_release() argument
265 spin_lock(&tree->lock); in extent_io_tree_release()
272 while (!RB_EMPTY_ROOT(&tree->state)) { in extent_io_tree_release()
276 node = rb_first(&tree->state); in extent_io_tree_release()
278 rb_erase(&state->rb_node, &tree->state); in extent_io_tree_release()
287 cond_resched_lock(&tree->lock); in extent_io_tree_release()
289 spin_unlock(&tree->lock); in extent_io_tree_release()
380 static struct rb_node *__etree_search(struct extent_io_tree *tree, u64 offset, in __etree_search() argument
386 struct rb_root *root = &tree->state; in __etree_search()
433 tree_search_for_insert(struct extent_io_tree *tree, in tree_search_for_insert() argument
441 ret = __etree_search(tree, offset, &next, NULL, p_ret, parent_ret); in tree_search_for_insert()
447 static inline struct rb_node *tree_search(struct extent_io_tree *tree, in tree_search() argument
450 return tree_search_for_insert(tree, offset, NULL, NULL); in tree_search()
462 static void merge_state(struct extent_io_tree *tree, in merge_state() argument
476 if (tree->private_data && in merge_state()
477 is_data_inode(tree->private_data)) in merge_state()
478 btrfs_merge_delalloc_extent(tree->private_data, in merge_state()
481 rb_erase(&other->rb_node, &tree->state); in merge_state()
491 if (tree->private_data && in merge_state()
492 is_data_inode(tree->private_data)) in merge_state()
493 btrfs_merge_delalloc_extent(tree->private_data, in merge_state()
496 rb_erase(&other->rb_node, &tree->state); in merge_state()
503 static void set_state_bits(struct extent_io_tree *tree,
517 static int insert_state(struct extent_io_tree *tree, in insert_state() argument
526 btrfs_err(tree->fs_info, in insert_state()
533 set_state_bits(tree, state, bits, changeset); in insert_state()
535 node = tree_insert(&tree->state, NULL, end, &state->rb_node, p, parent); in insert_state()
539 btrfs_err(tree->fs_info, in insert_state()
544 merge_state(tree, state); in insert_state()
562 static int split_state(struct extent_io_tree *tree, struct extent_state *orig, in split_state() argument
567 if (tree->private_data && is_data_inode(tree->private_data)) in split_state()
568 btrfs_split_delalloc_extent(tree->private_data, orig, split); in split_state()
575 node = tree_insert(&tree->state, &orig->rb_node, prealloc->end, in split_state()
600 static struct extent_state *clear_state_bit(struct extent_io_tree *tree, in clear_state_bit() argument
611 WARN_ON(range > tree->dirty_bytes); in clear_state_bit()
612 tree->dirty_bytes -= range; in clear_state_bit()
615 if (tree->private_data && is_data_inode(tree->private_data)) in clear_state_bit()
616 btrfs_clear_delalloc_extent(tree->private_data, state, bits); in clear_state_bit()
626 rb_erase(&state->rb_node, &tree->state); in clear_state_bit()
633 merge_state(tree, state); in clear_state_bit()
648 static void extent_io_tree_panic(struct extent_io_tree *tree, int err) in extent_io_tree_panic() argument
650 struct inode *inode = tree->private_data; in extent_io_tree_panic()
668 int __clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in __clear_extent_bit() argument
681 btrfs_debug_check_extent_io_range(tree, start, end); in __clear_extent_bit()
682 trace_btrfs_clear_extent_bit(tree, start, end - start + 1, bits); in __clear_extent_bit()
704 spin_lock(&tree->lock); in __clear_extent_bit()
727 node = tree_search(tree, start); in __clear_extent_bit()
762 err = split_state(tree, state, prealloc, start); in __clear_extent_bit()
764 extent_io_tree_panic(tree, err); in __clear_extent_bit()
770 state = clear_state_bit(tree, state, &bits, wake, in __clear_extent_bit()
785 err = split_state(tree, state, prealloc, end + 1); in __clear_extent_bit()
787 extent_io_tree_panic(tree, err); in __clear_extent_bit()
792 clear_state_bit(tree, prealloc, &bits, wake, changeset); in __clear_extent_bit()
798 state = clear_state_bit(tree, state, &bits, wake, changeset); in __clear_extent_bit()
809 spin_unlock(&tree->lock); in __clear_extent_bit()
815 spin_unlock(&tree->lock); in __clear_extent_bit()
823 static void wait_on_state(struct extent_io_tree *tree, in wait_on_state() argument
825 __releases(tree->lock) in wait_on_state()
826 __acquires(tree->lock) in wait_on_state()
830 spin_unlock(&tree->lock); in wait_on_state()
832 spin_lock(&tree->lock); in wait_on_state()
841 static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in wait_extent_bit() argument
847 btrfs_debug_check_extent_io_range(tree, start, end); in wait_extent_bit()
849 spin_lock(&tree->lock); in wait_extent_bit()
856 node = tree_search(tree, start); in wait_extent_bit()
869 wait_on_state(tree, state); in wait_extent_bit()
878 if (!cond_resched_lock(&tree->lock)) { in wait_extent_bit()
884 spin_unlock(&tree->lock); in wait_extent_bit()
887 static void set_state_bits(struct extent_io_tree *tree, in set_state_bits() argument
894 if (tree->private_data && is_data_inode(tree->private_data)) in set_state_bits()
895 btrfs_set_delalloc_extent(tree->private_data, state, bits); in set_state_bits()
899 tree->dirty_bytes += range; in set_state_bits()
937 __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in __set_extent_bit() argument
951 btrfs_debug_check_extent_io_range(tree, start, end); in __set_extent_bit()
952 trace_btrfs_set_extent_bit(tree, start, end - start + 1, bits); in __set_extent_bit()
966 spin_lock(&tree->lock); in __set_extent_bit()
979 node = tree_search_for_insert(tree, start, &p, &parent); in __set_extent_bit()
983 err = insert_state(tree, prealloc, start, end, in __set_extent_bit()
986 extent_io_tree_panic(tree, err); in __set_extent_bit()
1010 set_state_bits(tree, state, &bits, changeset); in __set_extent_bit()
1012 merge_state(tree, state); in __set_extent_bit()
1048 err = split_state(tree, state, prealloc, start); in __set_extent_bit()
1050 extent_io_tree_panic(tree, err); in __set_extent_bit()
1056 set_state_bits(tree, state, &bits, changeset); in __set_extent_bit()
1058 merge_state(tree, state); in __set_extent_bit()
1090 err = insert_state(tree, prealloc, start, this_end, in __set_extent_bit()
1093 extent_io_tree_panic(tree, err); in __set_extent_bit()
1115 err = split_state(tree, state, prealloc, end + 1); in __set_extent_bit()
1117 extent_io_tree_panic(tree, err); in __set_extent_bit()
1119 set_state_bits(tree, prealloc, &bits, changeset); in __set_extent_bit()
1121 merge_state(tree, prealloc); in __set_extent_bit()
1129 spin_unlock(&tree->lock); in __set_extent_bit()
1135 spin_unlock(&tree->lock); in __set_extent_bit()
1143 int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bit() argument
1147 return __set_extent_bit(tree, start, end, bits, 0, failed_start, in set_extent_bit()
1170 int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in convert_extent_bit() argument
1184 btrfs_debug_check_extent_io_range(tree, start, end); in convert_extent_bit()
1185 trace_btrfs_convert_extent_bit(tree, start, end - start + 1, bits, in convert_extent_bit()
1202 spin_lock(&tree->lock); in convert_extent_bit()
1216 node = tree_search_for_insert(tree, start, &p, &parent); in convert_extent_bit()
1223 err = insert_state(tree, prealloc, start, end, in convert_extent_bit()
1226 extent_io_tree_panic(tree, err); in convert_extent_bit()
1243 set_state_bits(tree, state, &bits, NULL); in convert_extent_bit()
1245 state = clear_state_bit(tree, state, &clear_bits, 0, NULL); in convert_extent_bit()
1277 err = split_state(tree, state, prealloc, start); in convert_extent_bit()
1279 extent_io_tree_panic(tree, err); in convert_extent_bit()
1284 set_state_bits(tree, state, &bits, NULL); in convert_extent_bit()
1286 state = clear_state_bit(tree, state, &clear_bits, 0, in convert_extent_bit()
1321 err = insert_state(tree, prealloc, start, this_end, in convert_extent_bit()
1324 extent_io_tree_panic(tree, err); in convert_extent_bit()
1343 err = split_state(tree, state, prealloc, end + 1); in convert_extent_bit()
1345 extent_io_tree_panic(tree, err); in convert_extent_bit()
1347 set_state_bits(tree, prealloc, &bits, NULL); in convert_extent_bit()
1349 clear_state_bit(tree, prealloc, &clear_bits, 0, NULL); in convert_extent_bit()
1357 spin_unlock(&tree->lock); in convert_extent_bit()
1363 spin_unlock(&tree->lock); in convert_extent_bit()
1371 int set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in set_record_extent_bits() argument
1382 return __set_extent_bit(tree, start, end, bits, 0, NULL, NULL, GFP_NOFS, in set_record_extent_bits()
1386 int set_extent_bits_nowait(struct extent_io_tree *tree, u64 start, u64 end, in set_extent_bits_nowait() argument
1389 return __set_extent_bit(tree, start, end, bits, 0, NULL, NULL, in set_extent_bits_nowait()
1393 int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, in clear_extent_bit() argument
1397 return __clear_extent_bit(tree, start, end, bits, wake, delete, in clear_extent_bit()
1401 int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in clear_record_extent_bits() argument
1410 return __clear_extent_bit(tree, start, end, bits, 0, 0, NULL, GFP_NOFS, in clear_record_extent_bits()
1418 int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, in lock_extent_bits() argument
1425 err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, in lock_extent_bits()
1429 wait_extent_bit(tree, failed_start, end, EXTENT_LOCKED); in lock_extent_bits()
1438 int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end) in try_lock_extent() argument
1443 err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, EXTENT_LOCKED, in try_lock_extent()
1447 clear_extent_bit(tree, start, failed_start - 1, in try_lock_extent()
1490 find_first_extent_bit_state(struct extent_io_tree *tree, in find_first_extent_bit_state() argument
1500 node = tree_search(tree, start); in find_first_extent_bit_state()
1524 int find_first_extent_bit(struct extent_io_tree *tree, u64 start, in find_first_extent_bit() argument
1531 spin_lock(&tree->lock); in find_first_extent_bit()
1547 state = find_first_extent_bit_state(tree, start, bits); in find_first_extent_bit()
1556 spin_unlock(&tree->lock); in find_first_extent_bit()
1575 void find_first_clear_extent_bit(struct extent_io_tree *tree, u64 start, in find_first_clear_extent_bit() argument
1581 spin_lock(&tree->lock); in find_first_clear_extent_bit()
1585 node = __etree_search(tree, start, &next, &prev, NULL, NULL); in find_first_clear_extent_bit()
1670 spin_unlock(&tree->lock); in find_first_clear_extent_bit()
1679 static noinline bool find_delalloc_range(struct extent_io_tree *tree, in find_delalloc_range() argument
1689 spin_lock(&tree->lock); in find_delalloc_range()
1695 node = tree_search(tree, cur_start); in find_delalloc_range()
1728 spin_unlock(&tree->lock); in find_delalloc_range()
1786 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in find_lock_delalloc_range() local
1799 found = find_delalloc_range(tree, &delalloc_start, &delalloc_end, in find_lock_delalloc_range()
1843 lock_extent_bits(tree, delalloc_start, delalloc_end, &cached_state); in find_lock_delalloc_range()
1846 ret = test_range_bit(tree, delalloc_start, delalloc_end, in find_lock_delalloc_range()
1849 unlock_extent_cached(tree, delalloc_start, delalloc_end, in find_lock_delalloc_range()
1958 u64 count_range_bits(struct extent_io_tree *tree, in count_range_bits() argument
1972 spin_lock(&tree->lock); in count_range_bits()
1974 total_bytes = tree->dirty_bytes; in count_range_bits()
1981 node = tree_search(tree, cur_start); in count_range_bits()
2009 spin_unlock(&tree->lock); in count_range_bits()
2017 static noinline int set_state_failrec(struct extent_io_tree *tree, u64 start, in set_state_failrec() argument
2024 spin_lock(&tree->lock); in set_state_failrec()
2029 node = tree_search(tree, start); in set_state_failrec()
2041 spin_unlock(&tree->lock); in set_state_failrec()
2045 static noinline int get_state_failrec(struct extent_io_tree *tree, u64 start, in get_state_failrec() argument
2052 spin_lock(&tree->lock); in get_state_failrec()
2057 node = tree_search(tree, start); in get_state_failrec()
2069 spin_unlock(&tree->lock); in get_state_failrec()
2079 int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, in test_range_bit() argument
2086 spin_lock(&tree->lock); in test_range_bit()
2091 node = tree_search(tree, start); in test_range_bit()
2125 spin_unlock(&tree->lock); in test_range_bit()
2133 static void check_page_uptodate(struct extent_io_tree *tree, struct page *page) in check_page_uptodate() argument
2137 if (test_range_bit(tree, start, end, EXTENT_UPTODATE, 1, NULL)) in check_page_uptodate()
2380 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in btrfs_get_io_failure_record() local
2438 ret = set_extent_bits(tree, start, end, EXTENT_DAMAGED); in btrfs_get_io_failure_record()
2569 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in bio_readpage_error() local
2585 free_io_failure(failure_tree, tree, failrec); in bio_readpage_error()
2603 status = tree->ops->submit_bio_hook(tree->private_data, bio, failrec->this_mirror, in bio_readpage_error()
2606 free_io_failure(failure_tree, tree, failrec); in bio_readpage_error()
2681 endio_readpage_release_extent(struct extent_io_tree *tree, u64 start, u64 len, in endio_readpage_release_extent() argument
2687 if (uptodate && tree->track_uptodate) in endio_readpage_release_extent()
2688 set_extent_uptodate(tree, start, end, &cached, GFP_ATOMIC); in endio_readpage_release_extent()
2689 unlock_extent_cached_atomic(tree, start, end, &cached); in endio_readpage_release_extent()
2708 struct extent_io_tree *tree, *failure_tree; in end_bio_extent_readpage() local
2731 tree = &BTRFS_I(inode)->io_tree; in end_bio_extent_readpage()
2756 ret = tree->ops->readpage_end_io_hook(io_bio, offset, in end_bio_extent_readpage()
2763 failure_tree, tree, start, in end_bio_extent_readpage()
2821 endio_readpage_release_extent(tree, in end_bio_extent_readpage()
2827 endio_readpage_release_extent(tree, start, in end_bio_extent_readpage()
2835 endio_readpage_release_extent(tree, extent_start, in end_bio_extent_readpage()
2843 endio_readpage_release_extent(tree, extent_start, extent_len, in end_bio_extent_readpage()
2930 static int submit_extent_page(unsigned int opf, struct extent_io_tree *tree, in submit_extent_page() argument
2959 ASSERT(tree->ops); in submit_extent_page()
2983 bio->bi_private = tree; in submit_extent_page()
3051 static int __do_readpage(struct extent_io_tree *tree, in __do_readpage() argument
3082 unlock_extent(tree, start, end); in __do_readpage()
3112 set_extent_uptodate(tree, cur, cur + iosize - 1, in __do_readpage()
3114 unlock_extent_cached(tree, cur, in __do_readpage()
3122 unlock_extent(tree, cur, end); in __do_readpage()
3205 set_extent_uptodate(tree, cur, cur + iosize - 1, in __do_readpage()
3207 unlock_extent_cached(tree, cur, in __do_readpage()
3214 if (test_range_bit(tree, cur, cur_end, in __do_readpage()
3216 check_page_uptodate(tree, page); in __do_readpage()
3217 unlock_extent(tree, cur, cur + iosize - 1); in __do_readpage()
3227 unlock_extent(tree, cur, cur + iosize - 1); in __do_readpage()
3233 ret = submit_extent_page(REQ_OP_READ | read_flags, tree, NULL, in __do_readpage()
3245 unlock_extent(tree, cur, cur + iosize - 1); in __do_readpage()
3260 static inline void contiguous_readpages(struct extent_io_tree *tree, in contiguous_readpages() argument
3271 btrfs_lock_and_flush_ordered_range(tree, inode, start, end, NULL); in contiguous_readpages()
3274 __do_readpage(tree, pages[index], btrfs_get_extent, em_cached, in contiguous_readpages()
3280 static int __extent_read_full_page(struct extent_io_tree *tree, in __extent_read_full_page() argument
3292 btrfs_lock_and_flush_ordered_range(tree, inode, start, end, NULL); in __extent_read_full_page()
3294 ret = __do_readpage(tree, page, get_extent, NULL, bio, mirror_num, in __extent_read_full_page()
3299 int extent_read_full_page(struct extent_io_tree *tree, struct page *page, in extent_read_full_page() argument
3306 ret = __extent_read_full_page(tree, page, get_extent, &bio, mirror_num, in extent_read_full_page()
3414 struct extent_io_tree *tree = epd->tree; in __extent_writepage_io() local
3514 btrfs_set_range_writeback(tree, cur, cur + iosize - 1); in __extent_writepage_io()
3521 ret = submit_extent_page(REQ_OP_WRITE | write_flags, tree, wbc, in __extent_writepage_io()
3853 struct extent_io_tree *tree = &BTRFS_I(fs_info->btree_inode)->io_tree; in write_one_eb() local
3886 ret = submit_extent_page(REQ_OP_WRITE | write_flags, tree, wbc, in write_one_eb()
3919 struct extent_io_tree *tree = &BTRFS_I(mapping->host)->io_tree; in btree_write_cache_pages() local
3923 .tree = tree, in btree_write_cache_pages()
4205 .tree = &BTRFS_I(page->mapping->host)->io_tree, in extent_write_full_page()
4227 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in extent_write_locked_range() local
4234 .tree = tree, in extent_write_locked_range()
4273 .tree = &BTRFS_I(mapping->host)->io_tree, in extent_writepages()
4295 struct extent_io_tree *tree = &BTRFS_I(mapping->host)->io_tree; in extent_readpages() local
4322 contiguous_readpages(tree, pagepool, nr, contig_start, in extent_readpages()
4341 int extent_invalidatepage(struct extent_io_tree *tree, in extent_invalidatepage() argument
4353 lock_extent_bits(tree, start, end, &cached_state); in extent_invalidatepage()
4355 clear_extent_bit(tree, start, end, EXTENT_LOCKED | EXTENT_DELALLOC | in extent_invalidatepage()
4365 static int try_release_extent_state(struct extent_io_tree *tree, in try_release_extent_state() argument
4372 if (test_range_bit(tree, start, end, EXTENT_LOCKED, 0, NULL)) { in try_release_extent_state()
4379 ret = __clear_extent_bit(tree, start, end, in try_release_extent_state()
4405 struct extent_io_tree *tree = &btrfs_inode->io_tree; in try_release_extent_mapping() local
4425 if (!test_range_bit(tree, em->start, in try_release_extent_mapping()
4441 return try_release_extent_state(tree, page, mask); in try_release_extent_mapping()
5413 struct extent_io_tree *tree = &BTRFS_I(eb->fs_info->btree_inode)->io_tree; in read_extent_buffer_pages() local
5461 err = __extent_read_full_page(tree, page, in read_extent_buffer_pages()