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()
1105 struct ext4_sb_info *sbi = seq->private; in ext4_es_seq_shrinker_info_show() local
1106 struct ext4_es_stats *es_stats = &sbi->s_es_stats; in ext4_es_seq_shrinker_info_show()
1114 spin_lock(&sbi->s_es_lock); in ext4_es_seq_shrinker_info_show()
1115 list_for_each_entry(ei, &sbi->s_es_list, i_es_list) { in ext4_es_seq_shrinker_info_show()
1122 spin_unlock(&sbi->s_es_lock); in ext4_es_seq_shrinker_info_show()
1185 int ext4_es_register_shrinker(struct ext4_sb_info *sbi) in ext4_es_register_shrinker() argument
1191 INIT_LIST_HEAD(&sbi->s_es_list); in ext4_es_register_shrinker()
1192 sbi->s_es_nr_inode = 0; in ext4_es_register_shrinker()
1193 spin_lock_init(&sbi->s_es_lock); in ext4_es_register_shrinker()
1194 sbi->s_es_stats.es_stats_shrunk = 0; in ext4_es_register_shrinker()
1195 sbi->s_es_stats.es_stats_cache_hits = 0; in ext4_es_register_shrinker()
1196 sbi->s_es_stats.es_stats_cache_misses = 0; in ext4_es_register_shrinker()
1197 sbi->s_es_stats.es_stats_scan_time = 0; in ext4_es_register_shrinker()
1198 sbi->s_es_stats.es_stats_max_scan_time = 0; in ext4_es_register_shrinker()
1199 err = percpu_counter_init(&sbi->s_es_stats.es_stats_all_cnt, 0, GFP_KERNEL); in ext4_es_register_shrinker()
1202 err = percpu_counter_init(&sbi->s_es_stats.es_stats_shk_cnt, 0, GFP_KERNEL); in ext4_es_register_shrinker()
1206 sbi->s_es_shrinker.scan_objects = ext4_es_scan; in ext4_es_register_shrinker()
1207 sbi->s_es_shrinker.count_objects = ext4_es_count; in ext4_es_register_shrinker()
1208 sbi->s_es_shrinker.seeks = DEFAULT_SEEKS; in ext4_es_register_shrinker()
1209 err = register_shrinker(&sbi->s_es_shrinker); in ext4_es_register_shrinker()
1213 if (sbi->s_proc) in ext4_es_register_shrinker()
1214 proc_create_data("es_shrinker_info", S_IRUGO, sbi->s_proc, in ext4_es_register_shrinker()
1215 &ext4_es_seq_shrinker_info_fops, sbi); in ext4_es_register_shrinker()
1220 percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); in ext4_es_register_shrinker()
1222 percpu_counter_destroy(&sbi->s_es_stats.es_stats_all_cnt); in ext4_es_register_shrinker()
1226 void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi) in ext4_es_unregister_shrinker() argument
1228 if (sbi->s_proc) in ext4_es_unregister_shrinker()
1229 remove_proc_entry("es_shrinker_info", sbi->s_proc); in ext4_es_unregister_shrinker()
1230 percpu_counter_destroy(&sbi->s_es_stats.es_stats_all_cnt); in ext4_es_unregister_shrinker()
1231 percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); in ext4_es_unregister_shrinker()
1232 unregister_shrinker(&sbi->s_es_shrinker); in ext4_es_unregister_shrinker()