Lines Matching refs:et
94 static void __try_update_largest_extent(struct extent_tree *et, in __try_update_largest_extent() argument
97 if (et->type != EX_READ) in __try_update_largest_extent()
99 if (en->ei.len <= et->largest.len) in __try_update_largest_extent()
102 et->largest = en->ei; in __try_update_largest_extent()
103 et->largest_updated = true; in __try_update_largest_extent()
357 struct extent_tree *et, struct extent_info *ei, in __attach_extent_node() argument
361 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __attach_extent_node()
370 en->et = et; in __attach_extent_node()
373 rb_insert_color_cached(&en->rb_node, &et->root, leftmost); in __attach_extent_node()
374 atomic_inc(&et->node_cnt); in __attach_extent_node()
380 struct extent_tree *et, struct extent_node *en) in __detach_extent_node() argument
382 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __detach_extent_node()
384 rb_erase_cached(&en->rb_node, &et->root); in __detach_extent_node()
385 atomic_dec(&et->node_cnt); in __detach_extent_node()
388 if (et->cached_en == en) in __detach_extent_node()
389 et->cached_en = NULL; in __detach_extent_node()
400 struct extent_tree *et, struct extent_node *en) in __release_extent_node() argument
402 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __release_extent_node()
409 __detach_extent_node(sbi, et, en); in __release_extent_node()
417 struct extent_tree *et; in __grab_extent_tree() local
421 et = radix_tree_lookup(&eti->extent_tree_root, ino); in __grab_extent_tree()
422 if (!et) { in __grab_extent_tree()
423 et = f2fs_kmem_cache_alloc(extent_tree_slab, GFP_NOFS); in __grab_extent_tree()
424 f2fs_radix_tree_insert(&eti->extent_tree_root, ino, et); in __grab_extent_tree()
425 memset(et, 0, sizeof(struct extent_tree)); in __grab_extent_tree()
426 et->ino = ino; in __grab_extent_tree()
427 et->type = type; in __grab_extent_tree()
428 et->root = RB_ROOT_CACHED; in __grab_extent_tree()
429 et->cached_en = NULL; in __grab_extent_tree()
430 rwlock_init(&et->lock); in __grab_extent_tree()
431 INIT_LIST_HEAD(&et->list); in __grab_extent_tree()
432 atomic_set(&et->node_cnt, 0); in __grab_extent_tree()
436 list_del_init(&et->list); in __grab_extent_tree()
441 F2FS_I(inode)->extent_tree[type] = et; in __grab_extent_tree()
443 return et; in __grab_extent_tree()
447 struct extent_tree *et) in __free_extent_tree() argument
451 unsigned int count = atomic_read(&et->node_cnt); in __free_extent_tree()
453 node = rb_first_cached(&et->root); in __free_extent_tree()
457 __release_extent_node(sbi, et, en); in __free_extent_tree()
461 return count - atomic_read(&et->node_cnt); in __free_extent_tree()
464 static void __drop_largest_extent(struct extent_tree *et, in __drop_largest_extent() argument
467 if (fofs < et->largest.fofs + et->largest.len && in __drop_largest_extent()
468 fofs + len > et->largest.fofs) { in __drop_largest_extent()
469 et->largest.len = 0; in __drop_largest_extent()
470 et->largest_updated = true; in __drop_largest_extent()
479 struct extent_tree *et; in f2fs_init_read_extent_tree() local
493 et = __grab_extent_tree(inode, EX_READ); in f2fs_init_read_extent_tree()
500 write_lock(&et->lock); in f2fs_init_read_extent_tree()
501 if (atomic_read(&et->node_cnt)) in f2fs_init_read_extent_tree()
504 en = __attach_extent_node(sbi, et, &ei, NULL, in f2fs_init_read_extent_tree()
505 &et->root.rb_root.rb_node, true); in f2fs_init_read_extent_tree()
507 et->largest = en->ei; in f2fs_init_read_extent_tree()
508 et->cached_en = en; in f2fs_init_read_extent_tree()
515 write_unlock(&et->lock); in f2fs_init_read_extent_tree()
544 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __lookup_extent_tree() local
548 if (!et) in __lookup_extent_tree()
553 read_lock(&et->lock); in __lookup_extent_tree()
556 et->largest.fofs <= pgofs && in __lookup_extent_tree()
557 et->largest.fofs + et->largest.len > pgofs) { in __lookup_extent_tree()
558 *ei = et->largest; in __lookup_extent_tree()
564 en = (struct extent_node *)f2fs_lookup_rb_tree(&et->root, in __lookup_extent_tree()
565 (struct rb_entry *)et->cached_en, pgofs); in __lookup_extent_tree()
569 if (en == et->cached_en) in __lookup_extent_tree()
578 et->cached_en = en; in __lookup_extent_tree()
584 read_unlock(&et->lock); in __lookup_extent_tree()
594 struct extent_tree *et, struct extent_info *ei, in __try_merge_extent_node() argument
598 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __try_merge_extent_node()
601 if (prev_ex && __is_back_mergeable(ei, &prev_ex->ei, et->type)) { in __try_merge_extent_node()
607 if (next_ex && __is_front_mergeable(ei, &next_ex->ei, et->type)) { in __try_merge_extent_node()
610 if (et->type == EX_READ) in __try_merge_extent_node()
613 __release_extent_node(sbi, et, prev_ex); in __try_merge_extent_node()
621 __try_update_largest_extent(et, en); in __try_merge_extent_node()
626 et->cached_en = en; in __try_merge_extent_node()
633 struct extent_tree *et, struct extent_info *ei, in __insert_extent_tree() argument
638 struct extent_tree_info *eti = &sbi->extent_tree[et->type]; in __insert_extent_tree()
651 p = f2fs_lookup_rb_tree_for_insert(sbi, &et->root, &parent, in __insert_extent_tree()
654 en = __attach_extent_node(sbi, et, ei, parent, p, leftmost); in __insert_extent_tree()
658 __try_update_largest_extent(et, en); in __insert_extent_tree()
663 et->cached_en = en; in __insert_extent_tree()
672 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __update_extent_tree_range() local
682 if (!et) in __update_extent_tree_range()
692 write_lock(&et->lock); in __update_extent_tree_range()
696 write_unlock(&et->lock); in __update_extent_tree_range()
700 prev = et->largest; in __update_extent_tree_range()
707 __drop_largest_extent(et, fofs, len); in __update_extent_tree_range()
711 en = (struct extent_node *)f2fs_lookup_rb_tree_ret(&et->root, in __update_extent_tree_range()
712 (struct rb_entry *)et->cached_en, fofs, in __update_extent_tree_range()
746 en1 = __insert_extent_tree(sbi, et, &ei, in __update_extent_tree_range()
768 __try_update_largest_extent(et, en); in __update_extent_tree_range()
770 __release_extent_node(sbi, et, en); in __update_extent_tree_range()
793 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in __update_extent_tree_range()
794 __insert_extent_tree(sbi, et, &ei, in __update_extent_tree_range()
800 et->largest.len < F2FS_MIN_EXTENT_LEN) { in __update_extent_tree_range()
801 et->largest.len = 0; in __update_extent_tree_range()
802 et->largest_updated = true; in __update_extent_tree_range()
808 __free_extent_tree(sbi, et); in __update_extent_tree_range()
810 if (et->largest_updated) { in __update_extent_tree_range()
811 et->largest_updated = false; in __update_extent_tree_range()
821 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in __update_extent_tree_range()
822 __insert_extent_tree(sbi, et, &ei, in __update_extent_tree_range()
825 write_unlock(&et->lock); in __update_extent_tree_range()
837 struct extent_tree *et = F2FS_I(inode)->extent_tree[EX_READ]; in f2fs_update_read_extent_tree_range_compressed() local
851 write_lock(&et->lock); in f2fs_update_read_extent_tree_range_compressed()
853 en = (struct extent_node *)f2fs_lookup_rb_tree_ret(&et->root, in f2fs_update_read_extent_tree_range_compressed()
854 (struct rb_entry *)et->cached_en, fofs, in f2fs_update_read_extent_tree_range_compressed()
865 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in f2fs_update_read_extent_tree_range_compressed()
866 __insert_extent_tree(sbi, et, &ei, in f2fs_update_read_extent_tree_range_compressed()
869 write_unlock(&et->lock); in f2fs_update_read_extent_tree_range_compressed()
977 struct extent_tree *et, *next; in __shrink_extent_tree() local
989 list_for_each_entry_safe(et, next, &eti->zombie_list, list) { in __shrink_extent_tree()
990 if (atomic_read(&et->node_cnt)) { in __shrink_extent_tree()
991 write_lock(&et->lock); in __shrink_extent_tree()
992 node_cnt += __free_extent_tree(sbi, et); in __shrink_extent_tree()
993 write_unlock(&et->lock); in __shrink_extent_tree()
995 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); in __shrink_extent_tree()
996 list_del_init(&et->list); in __shrink_extent_tree()
997 radix_tree_delete(&eti->extent_tree_root, et->ino); in __shrink_extent_tree()
998 kmem_cache_free(extent_tree_slab, et); in __shrink_extent_tree()
1022 et = en->et; in __shrink_extent_tree()
1023 if (!write_trylock(&et->lock)) { in __shrink_extent_tree()
1032 __detach_extent_node(sbi, et, en); in __shrink_extent_tree()
1034 write_unlock(&et->lock); in __shrink_extent_tree()
1127 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __destroy_extent_node() local
1130 if (!et || !atomic_read(&et->node_cnt)) in __destroy_extent_node()
1133 write_lock(&et->lock); in __destroy_extent_node()
1134 node_cnt = __free_extent_tree(sbi, et); in __destroy_extent_node()
1135 write_unlock(&et->lock); in __destroy_extent_node()
1149 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __drop_extent_tree() local
1155 write_lock(&et->lock); in __drop_extent_tree()
1157 __free_extent_tree(sbi, et); in __drop_extent_tree()
1160 if (et->largest.len) { in __drop_extent_tree()
1161 et->largest.len = 0; in __drop_extent_tree()
1165 write_unlock(&et->lock); in __drop_extent_tree()
1180 struct extent_tree *et = F2FS_I(inode)->extent_tree[type]; in __destroy_extent_tree() local
1183 if (!et) in __destroy_extent_tree()
1187 atomic_read(&et->node_cnt)) { in __destroy_extent_tree()
1189 list_add_tail(&et->list, &eti->zombie_list); in __destroy_extent_tree()
1200 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); in __destroy_extent_tree()
1202 kmem_cache_free(extent_tree_slab, et); in __destroy_extent_tree()