Lines Matching full:et
137 static void __try_update_largest_extent(struct extent_tree *et, in __try_update_largest_extent() argument
140 if (et->type != EX_READ) in __try_update_largest_extent()
142 if (en->ei.len <= et->largest.len) in __try_update_largest_extent()
145 et->largest = en->ei; in __try_update_largest_extent()
146 et->largest_updated = true; in __try_update_largest_extent()
291 struct extent_tree *et, struct extent_info *ei, in __attach_extent_node() argument
295 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __attach_extent_node()
304 en->et = et; in __attach_extent_node()
307 rb_insert_color_cached(&en->rb_node, &et->root, leftmost); in __attach_extent_node()
308 atomic_inc(&et->node_cnt); in __attach_extent_node()
314 struct extent_tree *et, struct extent_node *en) in __detach_extent_node() argument
316 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __detach_extent_node()
318 rb_erase_cached(&en->rb_node, &et->root); in __detach_extent_node()
319 atomic_dec(&et->node_cnt); in __detach_extent_node()
322 if (et->cached_en == en) in __detach_extent_node()
323 et->cached_en = NULL; in __detach_extent_node()
334 struct extent_tree *et, struct extent_node *en) in __release_extent_node() argument
336 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __release_extent_node()
343 __detach_extent_node(sbi, et, en); in __release_extent_node()
351 struct extent_tree *et; in __grab_extent_tree() local
355 et = radix_tree_lookup(&eti->extent_tree_root, ino); in __grab_extent_tree()
356 if (!et) { in __grab_extent_tree()
357 et = f2fs_kmem_cache_alloc(extent_tree_slab, in __grab_extent_tree()
359 f2fs_radix_tree_insert(&eti->extent_tree_root, ino, et); in __grab_extent_tree()
360 memset(et, 0, sizeof(struct extent_tree)); in __grab_extent_tree()
361 et->ino = ino; in __grab_extent_tree()
362 et->type = type; in __grab_extent_tree()
363 et->root = RB_ROOT_CACHED; in __grab_extent_tree()
364 et->cached_en = NULL; in __grab_extent_tree()
365 rwlock_init(&et->lock); in __grab_extent_tree()
366 INIT_LIST_HEAD(&et->list); in __grab_extent_tree()
367 atomic_set(&et->node_cnt, 0); in __grab_extent_tree()
371 list_del_init(&et->list); in __grab_extent_tree()
376 F2FS_I(inode)->extent_tree[type] = et; in __grab_extent_tree()
378 return et; in __grab_extent_tree()
382 struct extent_tree *et, unsigned int nr_shrink) in __free_extent_tree() argument
388 node = rb_first_cached(&et->root); in __free_extent_tree()
393 __release_extent_node(sbi, et, en); in __free_extent_tree()
400 static void __drop_largest_extent(struct extent_tree *et, in __drop_largest_extent() argument
403 if (fofs < (pgoff_t)et->largest.fofs + et->largest.len && in __drop_largest_extent()
404 fofs + len > et->largest.fofs) { in __drop_largest_extent()
405 et->largest.len = 0; in __drop_largest_extent()
406 et->largest_updated = true; in __drop_largest_extent()
415 struct extent_tree *et; in f2fs_init_read_extent_tree() local
430 et = __grab_extent_tree(inode, EX_READ); in f2fs_init_read_extent_tree()
434 write_lock(&et->lock); in f2fs_init_read_extent_tree()
435 if (atomic_read(&et->node_cnt) || !ei.len) in f2fs_init_read_extent_tree()
439 et->largest = ei; in f2fs_init_read_extent_tree()
443 en = __attach_extent_node(sbi, et, &ei, NULL, in f2fs_init_read_extent_tree()
444 &et->root.rb_root.rb_node, true); in f2fs_init_read_extent_tree()
446 et->largest = en->ei; in f2fs_init_read_extent_tree()
447 et->cached_en = en; in f2fs_init_read_extent_tree()
456 et->largest.len = 0; in f2fs_init_read_extent_tree()
457 et->largest_updated = true; in f2fs_init_read_extent_tree()
459 write_unlock(&et->lock); in f2fs_init_read_extent_tree()
485 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __lookup_extent_tree() local
489 if (!et) in __lookup_extent_tree()
494 read_lock(&et->lock); in __lookup_extent_tree()
497 et->largest.fofs <= pgofs && in __lookup_extent_tree()
498 (pgoff_t)et->largest.fofs + et->largest.len > pgofs) { in __lookup_extent_tree()
499 *ei = et->largest; in __lookup_extent_tree()
510 en = __lookup_extent_node(&et->root, et->cached_en, pgofs); in __lookup_extent_tree()
514 if (en == et->cached_en) in __lookup_extent_tree()
523 et->cached_en = en; in __lookup_extent_tree()
529 read_unlock(&et->lock); in __lookup_extent_tree()
539 struct extent_tree *et, struct extent_info *ei, in __try_merge_extent_node() argument
543 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __try_merge_extent_node()
546 if (prev_ex && __is_back_mergeable(ei, &prev_ex->ei, et->type)) { in __try_merge_extent_node()
552 if (next_ex && __is_front_mergeable(ei, &next_ex->ei, et->type)) { in __try_merge_extent_node()
555 if (et->type == EX_READ) in __try_merge_extent_node()
558 __release_extent_node(sbi, et, prev_ex); in __try_merge_extent_node()
566 __try_update_largest_extent(et, en); in __try_merge_extent_node()
571 et->cached_en = en; in __try_merge_extent_node()
578 struct extent_tree *et, struct extent_info *ei, in __insert_extent_tree() argument
583 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __insert_extent_tree()
584 struct rb_node **p = &et->root.rb_root.rb_node; in __insert_extent_tree()
610 __func__, et->type, en->ei.fofs, en->ei.blk, en->ei.len, en->ei.age, in __insert_extent_tree()
618 en = __attach_extent_node(sbi, et, ei, parent, p, leftmost); in __insert_extent_tree()
622 __try_update_largest_extent(et, en); in __insert_extent_tree()
627 et->cached_en = en; in __insert_extent_tree()
636 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __destroy_extent_node() local
642 if (!et || !atomic_read(&et->node_cnt)) in __destroy_extent_node()
645 while (atomic_read(&et->node_cnt)) { in __destroy_extent_node()
646 write_lock(&et->lock); in __destroy_extent_node()
647 node_cnt += __free_extent_tree(sbi, et, nr_shrink); in __destroy_extent_node()
648 write_unlock(&et->lock); in __destroy_extent_node()
651 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); in __destroy_extent_node()
660 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __update_extent_tree_range() local
670 if (!et) in __update_extent_tree_range()
689 write_lock(&et->lock); in __update_extent_tree_range()
693 write_unlock(&et->lock); in __update_extent_tree_range()
697 prev = et->largest; in __update_extent_tree_range()
704 __drop_largest_extent(et, fofs, len); in __update_extent_tree_range()
708 en = __lookup_extent_node_ret(&et->root, in __update_extent_tree_range()
709 et->cached_en, fofs, in __update_extent_tree_range()
736 atomic_read(&et->node_cnt) < in __update_extent_tree_range()
744 en1 = __insert_extent_tree(sbi, et, &ei, in __update_extent_tree_range()
766 __try_update_largest_extent(et, en); in __update_extent_tree_range()
768 __release_extent_node(sbi, et, en); in __update_extent_tree_range()
791 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in __update_extent_tree_range()
792 __insert_extent_tree(sbi, et, &ei, in __update_extent_tree_range()
798 et->largest.len < F2FS_MIN_EXTENT_LEN) { in __update_extent_tree_range()
799 et->largest.len = 0; in __update_extent_tree_range()
800 et->largest_updated = true; in __update_extent_tree_range()
805 if (et->largest_updated) { in __update_extent_tree_range()
806 et->largest_updated = false; in __update_extent_tree_range()
816 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in __update_extent_tree_range()
817 __insert_extent_tree(sbi, et, &ei, in __update_extent_tree_range()
820 write_unlock(&et->lock); in __update_extent_tree_range()
835 struct extent_tree *et = F2FS_I(inode)->extent_tree[EX_READ]; in f2fs_update_read_extent_tree_range_compressed() local
845 /* it is safe here to check FI_NO_EXTENT w/o et->lock in ro image */ in f2fs_update_read_extent_tree_range_compressed()
849 write_lock(&et->lock); in f2fs_update_read_extent_tree_range_compressed()
851 en = __lookup_extent_node_ret(&et->root, in f2fs_update_read_extent_tree_range_compressed()
852 et->cached_en, fofs, in f2fs_update_read_extent_tree_range_compressed()
862 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in f2fs_update_read_extent_tree_range_compressed()
863 __insert_extent_tree(sbi, et, &ei, in f2fs_update_read_extent_tree_range_compressed()
866 write_unlock(&et->lock); in f2fs_update_read_extent_tree_range_compressed()
972 struct extent_tree *et, *next; in __shrink_extent_tree() local
984 list_for_each_entry_safe(et, next, &eti->zombie_list, list) { in __shrink_extent_tree()
985 if (atomic_read(&et->node_cnt)) { in __shrink_extent_tree()
986 write_lock(&et->lock); in __shrink_extent_tree()
987 node_cnt += __free_extent_tree(sbi, et, in __shrink_extent_tree()
989 write_unlock(&et->lock); in __shrink_extent_tree()
992 if (atomic_read(&et->node_cnt)) in __shrink_extent_tree()
995 list_del_init(&et->list); in __shrink_extent_tree()
996 radix_tree_delete(&eti->extent_tree_root, et->ino); in __shrink_extent_tree()
997 kmem_cache_free(extent_tree_slab, et); in __shrink_extent_tree()
1021 et = en->et; in __shrink_extent_tree()
1022 if (!write_trylock(&et->lock)) { in __shrink_extent_tree()
1031 __detach_extent_node(sbi, et, en); in __shrink_extent_tree()
1033 write_unlock(&et->lock); in __shrink_extent_tree()
1141 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __drop_extent_tree() local
1147 write_lock(&et->lock); in __drop_extent_tree()
1150 if (et->largest.len) { in __drop_extent_tree()
1151 et->largest.len = 0; in __drop_extent_tree()
1155 write_unlock(&et->lock); in __drop_extent_tree()
1173 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __destroy_extent_tree() local
1176 if (!et) in __destroy_extent_tree()
1180 atomic_read(&et->node_cnt)) { in __destroy_extent_tree()
1182 list_add_tail(&et->list, &eti->zombie_list); in __destroy_extent_tree()
1193 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); in __destroy_extent_tree()
1195 kmem_cache_free(extent_tree_slab, et); in __destroy_extent_tree()