Lines Matching full:sbi
61 struct rb_node **f2fs_lookup_rb_tree_ext(struct f2fs_sb_info *sbi, in f2fs_lookup_rb_tree_ext() argument
84 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi, in f2fs_lookup_rb_tree_for_insert() argument
102 f2fs_bug_on(sbi, 1); in f2fs_lookup_rb_tree_for_insert()
191 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi, in f2fs_check_rb_tree_consistence() argument
211 f2fs_info(sbi, "inconsistent rbtree, " in f2fs_check_rb_tree_consistence()
220 f2fs_info(sbi, "inconsistent rbtree, cur(%u, %u) next(%u, %u)", in f2fs_check_rb_tree_consistence()
235 static struct extent_node *__attach_extent_node(struct f2fs_sb_info *sbi, in __attach_extent_node() argument
242 en = f2fs_kmem_cache_alloc(extent_node_slab, GFP_ATOMIC, false, sbi); in __attach_extent_node()
253 atomic_inc(&sbi->total_ext_node); in __attach_extent_node()
257 static void __detach_extent_node(struct f2fs_sb_info *sbi, in __detach_extent_node() argument
262 atomic_dec(&sbi->total_ext_node); in __detach_extent_node()
275 static void __release_extent_node(struct f2fs_sb_info *sbi, in __release_extent_node() argument
278 spin_lock(&sbi->extent_lock); in __release_extent_node()
279 f2fs_bug_on(sbi, list_empty(&en->list)); in __release_extent_node()
281 spin_unlock(&sbi->extent_lock); in __release_extent_node()
283 __detach_extent_node(sbi, et, en); in __release_extent_node()
288 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in __grab_extent_tree() local
292 mutex_lock(&sbi->extent_tree_lock); in __grab_extent_tree()
293 et = radix_tree_lookup(&sbi->extent_tree_root, ino); in __grab_extent_tree()
297 f2fs_radix_tree_insert(&sbi->extent_tree_root, ino, et); in __grab_extent_tree()
305 atomic_inc(&sbi->total_ext_tree); in __grab_extent_tree()
307 atomic_dec(&sbi->total_zombie_tree); in __grab_extent_tree()
310 mutex_unlock(&sbi->extent_tree_lock); in __grab_extent_tree()
318 static struct extent_node *__init_extent_tree(struct f2fs_sb_info *sbi, in __init_extent_tree() argument
324 en = __attach_extent_node(sbi, et, ei, NULL, p, true); in __init_extent_tree()
333 static unsigned int __free_extent_tree(struct f2fs_sb_info *sbi, in __free_extent_tree() argument
344 __release_extent_node(sbi, et, en); in __free_extent_tree()
364 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in __f2fs_init_extent_tree() local
392 en = __init_extent_tree(sbi, et, &ei); in __f2fs_init_extent_tree()
394 spin_lock(&sbi->extent_lock); in __f2fs_init_extent_tree()
395 list_add_tail(&en->list, &sbi->extent_list); in __f2fs_init_extent_tree()
396 spin_unlock(&sbi->extent_lock); in __f2fs_init_extent_tree()
413 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_lookup_extent_tree() local
418 f2fs_bug_on(sbi, !et); in f2fs_lookup_extent_tree()
428 stat_inc_largest_node_hit(sbi); in f2fs_lookup_extent_tree()
438 stat_inc_cached_node_hit(sbi); in f2fs_lookup_extent_tree()
440 stat_inc_rbtree_node_hit(sbi); in f2fs_lookup_extent_tree()
443 spin_lock(&sbi->extent_lock); in f2fs_lookup_extent_tree()
445 list_move_tail(&en->list, &sbi->extent_list); in f2fs_lookup_extent_tree()
448 spin_unlock(&sbi->extent_lock); in f2fs_lookup_extent_tree()
451 stat_inc_total_hit(sbi); in f2fs_lookup_extent_tree()
458 static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi, in __try_merge_extent_node() argument
476 __release_extent_node(sbi, et, prev_ex); in __try_merge_extent_node()
486 spin_lock(&sbi->extent_lock); in __try_merge_extent_node()
488 list_move_tail(&en->list, &sbi->extent_list); in __try_merge_extent_node()
491 spin_unlock(&sbi->extent_lock); in __try_merge_extent_node()
495 static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi, in __insert_extent_tree() argument
513 p = f2fs_lookup_rb_tree_for_insert(sbi, &et->root, &parent, in __insert_extent_tree()
516 en = __attach_extent_node(sbi, et, ei, parent, p, leftmost); in __insert_extent_tree()
523 spin_lock(&sbi->extent_lock); in __insert_extent_tree()
524 list_add_tail(&en->list, &sbi->extent_list); in __insert_extent_tree()
526 spin_unlock(&sbi->extent_lock); in __insert_extent_tree()
533 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_update_extent_tree_range() local
584 f2fs_bug_on(sbi, pos >= org_end); in f2fs_update_extent_tree_range()
597 en1 = __insert_extent_tree(sbi, et, &ei, in f2fs_update_extent_tree_range()
619 __release_extent_node(sbi, et, en); in f2fs_update_extent_tree_range()
637 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in f2fs_update_extent_tree_range()
638 __insert_extent_tree(sbi, et, &ei, in f2fs_update_extent_tree_range()
652 __free_extent_tree(sbi, et); in f2fs_update_extent_tree_range()
670 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_update_extent_tree_range_compressed() local
698 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) in f2fs_update_extent_tree_range_compressed()
699 __insert_extent_tree(sbi, et, &ei, in f2fs_update_extent_tree_range_compressed()
706 unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink) in f2fs_shrink_extent_tree() argument
713 if (!test_opt(sbi, EXTENT_CACHE)) in f2fs_shrink_extent_tree()
716 if (!atomic_read(&sbi->total_zombie_tree)) in f2fs_shrink_extent_tree()
719 if (!mutex_trylock(&sbi->extent_tree_lock)) in f2fs_shrink_extent_tree()
723 list_for_each_entry_safe(et, next, &sbi->zombie_list, list) { in f2fs_shrink_extent_tree()
726 node_cnt += __free_extent_tree(sbi, et); in f2fs_shrink_extent_tree()
729 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); in f2fs_shrink_extent_tree()
731 radix_tree_delete(&sbi->extent_tree_root, et->ino); in f2fs_shrink_extent_tree()
733 atomic_dec(&sbi->total_ext_tree); in f2fs_shrink_extent_tree()
734 atomic_dec(&sbi->total_zombie_tree); in f2fs_shrink_extent_tree()
741 mutex_unlock(&sbi->extent_tree_lock); in f2fs_shrink_extent_tree()
745 if (!mutex_trylock(&sbi->extent_tree_lock)) in f2fs_shrink_extent_tree()
750 spin_lock(&sbi->extent_lock); in f2fs_shrink_extent_tree()
752 if (list_empty(&sbi->extent_list)) in f2fs_shrink_extent_tree()
754 en = list_first_entry(&sbi->extent_list, in f2fs_shrink_extent_tree()
759 list_move_tail(&en->list, &sbi->extent_list); in f2fs_shrink_extent_tree()
764 spin_unlock(&sbi->extent_lock); in f2fs_shrink_extent_tree()
766 __detach_extent_node(sbi, et, en); in f2fs_shrink_extent_tree()
770 spin_lock(&sbi->extent_lock); in f2fs_shrink_extent_tree()
772 spin_unlock(&sbi->extent_lock); in f2fs_shrink_extent_tree()
775 mutex_unlock(&sbi->extent_tree_lock); in f2fs_shrink_extent_tree()
777 trace_f2fs_shrink_extent_tree(sbi, node_cnt, tree_cnt); in f2fs_shrink_extent_tree()
784 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_destroy_extent_node() local
792 node_cnt = __free_extent_tree(sbi, et); in f2fs_destroy_extent_node()
800 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_drop_extent_tree() local
810 __free_extent_tree(sbi, et); in f2fs_drop_extent_tree()
822 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_destroy_extent_tree() local
831 mutex_lock(&sbi->extent_tree_lock); in f2fs_destroy_extent_tree()
832 list_add_tail(&et->list, &sbi->zombie_list); in f2fs_destroy_extent_tree()
833 atomic_inc(&sbi->total_zombie_tree); in f2fs_destroy_extent_tree()
834 mutex_unlock(&sbi->extent_tree_lock); in f2fs_destroy_extent_tree()
842 mutex_lock(&sbi->extent_tree_lock); in f2fs_destroy_extent_tree()
843 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); in f2fs_destroy_extent_tree()
844 radix_tree_delete(&sbi->extent_tree_root, inode->i_ino); in f2fs_destroy_extent_tree()
846 atomic_dec(&sbi->total_ext_tree); in f2fs_destroy_extent_tree()
847 mutex_unlock(&sbi->extent_tree_lock); in f2fs_destroy_extent_tree()
891 void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi) in f2fs_init_extent_cache_info() argument
893 INIT_RADIX_TREE(&sbi->extent_tree_root, GFP_NOIO); in f2fs_init_extent_cache_info()
894 mutex_init(&sbi->extent_tree_lock); in f2fs_init_extent_cache_info()
895 INIT_LIST_HEAD(&sbi->extent_list); in f2fs_init_extent_cache_info()
896 spin_lock_init(&sbi->extent_lock); in f2fs_init_extent_cache_info()
897 atomic_set(&sbi->total_ext_tree, 0); in f2fs_init_extent_cache_info()
898 INIT_LIST_HEAD(&sbi->zombie_list); in f2fs_init_extent_cache_info()
899 atomic_set(&sbi->total_zombie_tree, 0); in f2fs_init_extent_cache_info()
900 atomic_set(&sbi->total_ext_node, 0); in f2fs_init_extent_cache_info()