Lines Matching refs:sbi
149 static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
301 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_es_list_add() local
306 spin_lock(&sbi->s_es_lock); in ext4_es_list_add()
308 list_add_tail(&ei->i_es_list, &sbi->s_es_list); in ext4_es_list_add()
309 sbi->s_es_nr_inode++; in ext4_es_list_add()
311 spin_unlock(&sbi->s_es_lock); in ext4_es_list_add()
317 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_es_list_del() local
319 spin_lock(&sbi->s_es_lock); in ext4_es_list_del()
322 sbi->s_es_nr_inode--; in ext4_es_list_del()
323 WARN_ON_ONCE(sbi->s_es_nr_inode < 0); in ext4_es_list_del()
325 spin_unlock(&sbi->s_es_lock); in ext4_es_list_del()
972 static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan, in __es_shrink() argument
983 es_stats = &sbi->s_es_stats; in __es_shrink()
987 spin_lock(&sbi->s_es_lock); in __es_shrink()
988 nr_to_walk = sbi->s_es_nr_inode; in __es_shrink()
990 if (list_empty(&sbi->s_es_list)) { in __es_shrink()
991 spin_unlock(&sbi->s_es_lock); in __es_shrink()
994 ei = list_first_entry(&sbi->s_es_list, struct ext4_inode_info, in __es_shrink()
997 list_move_tail(&ei->i_es_list, &sbi->s_es_list); in __es_shrink()
1017 spin_unlock(&sbi->s_es_lock); in __es_shrink()
1024 spin_lock(&sbi->s_es_lock); in __es_shrink()
1026 spin_unlock(&sbi->s_es_lock); in __es_shrink()
1055 trace_ext4_es_shrink(sbi->s_sb, nr_shrunk, scan_time, in __es_shrink()
1064 struct ext4_sb_info *sbi; in ext4_es_count() local
1066 sbi = container_of(shrink, struct ext4_sb_info, s_es_shrinker); in ext4_es_count()
1067 nr = percpu_counter_read_positive(&sbi->s_es_stats.es_stats_shk_cnt); in ext4_es_count()
1068 trace_ext4_es_shrink_count(sbi->s_sb, sc->nr_to_scan, nr); in ext4_es_count()
1075 struct ext4_sb_info *sbi = container_of(shrink, in ext4_es_scan() local
1080 ret = percpu_counter_read_positive(&sbi->s_es_stats.es_stats_shk_cnt); in ext4_es_scan()
1081 trace_ext4_es_shrink_scan_enter(sbi->s_sb, nr_to_scan, ret); in ext4_es_scan()
1086 nr_shrunk = __es_shrink(sbi, nr_to_scan, NULL); in ext4_es_scan()
1088 trace_ext4_es_shrink_scan_exit(sbi->s_sb, nr_shrunk, ret); in ext4_es_scan()
1094 struct ext4_sb_info *sbi = EXT4_SB((struct super_block *) seq->private); in ext4_seq_es_shrinker_info_show() local
1095 struct ext4_es_stats *es_stats = &sbi->s_es_stats; in ext4_seq_es_shrinker_info_show()
1103 spin_lock(&sbi->s_es_lock); in ext4_seq_es_shrinker_info_show()
1104 list_for_each_entry(ei, &sbi->s_es_list, i_es_list) { in ext4_seq_es_shrinker_info_show()
1111 spin_unlock(&sbi->s_es_lock); in ext4_seq_es_shrinker_info_show()
1135 int ext4_es_register_shrinker(struct ext4_sb_info *sbi) in ext4_es_register_shrinker() argument
1141 INIT_LIST_HEAD(&sbi->s_es_list); in ext4_es_register_shrinker()
1142 sbi->s_es_nr_inode = 0; in ext4_es_register_shrinker()
1143 spin_lock_init(&sbi->s_es_lock); in ext4_es_register_shrinker()
1144 sbi->s_es_stats.es_stats_shrunk = 0; in ext4_es_register_shrinker()
1145 sbi->s_es_stats.es_stats_cache_hits = 0; in ext4_es_register_shrinker()
1146 sbi->s_es_stats.es_stats_cache_misses = 0; in ext4_es_register_shrinker()
1147 sbi->s_es_stats.es_stats_scan_time = 0; in ext4_es_register_shrinker()
1148 sbi->s_es_stats.es_stats_max_scan_time = 0; in ext4_es_register_shrinker()
1149 err = percpu_counter_init(&sbi->s_es_stats.es_stats_all_cnt, 0, GFP_KERNEL); in ext4_es_register_shrinker()
1152 err = percpu_counter_init(&sbi->s_es_stats.es_stats_shk_cnt, 0, GFP_KERNEL); in ext4_es_register_shrinker()
1156 sbi->s_es_shrinker.scan_objects = ext4_es_scan; in ext4_es_register_shrinker()
1157 sbi->s_es_shrinker.count_objects = ext4_es_count; in ext4_es_register_shrinker()
1158 sbi->s_es_shrinker.seeks = DEFAULT_SEEKS; in ext4_es_register_shrinker()
1159 err = register_shrinker(&sbi->s_es_shrinker); in ext4_es_register_shrinker()
1166 percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); in ext4_es_register_shrinker()
1168 percpu_counter_destroy(&sbi->s_es_stats.es_stats_all_cnt); in ext4_es_register_shrinker()
1172 void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi) in ext4_es_unregister_shrinker() argument
1174 percpu_counter_destroy(&sbi->s_es_stats.es_stats_all_cnt); in ext4_es_unregister_shrinker()
1175 percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); in ext4_es_unregister_shrinker()
1176 unregister_shrinker(&sbi->s_es_shrinker); in ext4_es_unregister_shrinker()