Lines Matching full:sbi

56 	ssize_t (*show)(struct f2fs_attr *a, struct f2fs_sb_info *sbi, char *buf);
57 ssize_t (*store)(struct f2fs_attr *a, struct f2fs_sb_info *sbi,
65 struct f2fs_sb_info *sbi, char *buf);
67 static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type) in __struct_ptr() argument
70 return (unsigned char *)sbi->gc_thread; in __struct_ptr()
72 return (unsigned char *)SM_I(sbi); in __struct_ptr()
74 return (unsigned char *)SM_I(sbi)->dcc_info; in __struct_ptr()
76 return (unsigned char *)NM_I(sbi); in __struct_ptr()
78 return (unsigned char *)sbi; in __struct_ptr()
82 return (unsigned char *)&F2FS_OPTION(sbi).fault_info; in __struct_ptr()
86 return (unsigned char *)F2FS_STAT(sbi); in __struct_ptr()
89 return (unsigned char *)&sbi->cprc_info; in __struct_ptr()
91 return (unsigned char *)&sbi->am; in __struct_ptr()
96 struct f2fs_sb_info *sbi, char *buf) in dirty_segments_show() argument
99 (unsigned long long)(dirty_segments(sbi))); in dirty_segments_show()
103 struct f2fs_sb_info *sbi, char *buf) in free_segments_show() argument
106 (unsigned long long)(free_segments(sbi))); in free_segments_show()
110 struct f2fs_sb_info *sbi, char *buf) in ovp_segments_show() argument
113 (unsigned long long)(overprovision_segments(sbi))); in ovp_segments_show()
117 struct f2fs_sb_info *sbi, char *buf) in lifetime_write_kbytes_show() argument
120 (unsigned long long)(sbi->kbytes_written + in lifetime_write_kbytes_show()
121 ((f2fs_get_sectors_written(sbi) - in lifetime_write_kbytes_show()
122 sbi->sectors_written_start) >> 1))); in lifetime_write_kbytes_show()
126 struct f2fs_sb_info *sbi, char *buf) in sb_status_show() argument
128 return sysfs_emit(buf, "%lx\n", sbi->s_flag); in sb_status_show()
132 struct f2fs_sb_info *sbi, char *buf) in cp_status_show() argument
134 return sysfs_emit(buf, "%x\n", le32_to_cpu(F2FS_CKPT(sbi)->ckpt_flags)); in cp_status_show()
138 struct f2fs_sb_info *sbi, char *buf) in pending_discard_show() argument
140 if (!SM_I(sbi)->dcc_info) in pending_discard_show()
143 &SM_I(sbi)->dcc_info->discard_cmd_cnt)); in pending_discard_show()
147 struct f2fs_sb_info *sbi, char *buf) in issued_discard_show() argument
149 if (!SM_I(sbi)->dcc_info) in issued_discard_show()
152 &SM_I(sbi)->dcc_info->issued_discard)); in issued_discard_show()
156 struct f2fs_sb_info *sbi, char *buf) in queued_discard_show() argument
158 if (!SM_I(sbi)->dcc_info) in queued_discard_show()
161 &SM_I(sbi)->dcc_info->queued_discard)); in queued_discard_show()
165 struct f2fs_sb_info *sbi, char *buf) in undiscard_blks_show() argument
167 if (!SM_I(sbi)->dcc_info) in undiscard_blks_show()
170 SM_I(sbi)->dcc_info->undiscard_blks); in undiscard_blks_show()
174 struct f2fs_sb_info *sbi, char *buf) in gc_mode_show() argument
176 return sysfs_emit(buf, "%s\n", gc_mode_names[sbi->gc_mode]); in gc_mode_show()
180 struct f2fs_sb_info *sbi, char *buf) in features_show() argument
184 if (f2fs_sb_has_encrypt(sbi)) in features_show()
187 if (f2fs_sb_has_blkzoned(sbi)) in features_show()
190 if (f2fs_sb_has_extra_attr(sbi)) in features_show()
193 if (f2fs_sb_has_project_quota(sbi)) in features_show()
196 if (f2fs_sb_has_inode_chksum(sbi)) in features_show()
199 if (f2fs_sb_has_flexible_inline_xattr(sbi)) in features_show()
202 if (f2fs_sb_has_quota_ino(sbi)) in features_show()
205 if (f2fs_sb_has_inode_crtime(sbi)) in features_show()
208 if (f2fs_sb_has_lost_found(sbi)) in features_show()
211 if (f2fs_sb_has_verity(sbi)) in features_show()
214 if (f2fs_sb_has_sb_chksum(sbi)) in features_show()
217 if (f2fs_sb_has_casefold(sbi)) in features_show()
220 if (f2fs_sb_has_readonly(sbi)) in features_show()
223 if (f2fs_sb_has_compression(sbi)) in features_show()
233 struct f2fs_sb_info *sbi, char *buf) in current_reserved_blocks_show() argument
235 return sysfs_emit(buf, "%u\n", sbi->current_reserved_blocks); in current_reserved_blocks_show()
239 struct f2fs_sb_info *sbi, char *buf) in unusable_show() argument
243 if (test_opt(sbi, DISABLE_CHECKPOINT)) in unusable_show()
244 unusable = sbi->unusable_block_count; in unusable_show()
246 unusable = f2fs_get_unusable_blocks(sbi); in unusable_show()
251 struct f2fs_sb_info *sbi, char *buf) in encoding_show() argument
254 struct super_block *sb = sbi->sb; in encoding_show()
256 if (f2fs_sb_has_casefold(sbi)) in encoding_show()
266 struct f2fs_sb_info *sbi, char *buf) in mounted_time_sec_show() argument
268 return sysfs_emit(buf, "%llu\n", SIT_I(sbi)->mounted_time); in mounted_time_sec_show()
273 struct f2fs_sb_info *sbi, char *buf) in moved_blocks_foreground_show() argument
275 struct f2fs_stat_info *si = F2FS_STAT(sbi); in moved_blocks_foreground_show()
283 struct f2fs_sb_info *sbi, char *buf) in moved_blocks_background_show() argument
285 struct f2fs_stat_info *si = F2FS_STAT(sbi); in moved_blocks_background_show()
292 struct f2fs_sb_info *sbi, char *buf) in avg_vblocks_show() argument
294 struct f2fs_stat_info *si = F2FS_STAT(sbi); in avg_vblocks_show()
296 si->dirty_count = dirty_segments(sbi); in avg_vblocks_show()
297 f2fs_update_sit_info(sbi); in avg_vblocks_show()
303 struct f2fs_sb_info *sbi, char *buf) in main_blkaddr_show() argument
306 (unsigned long long)MAIN_BLKADDR(sbi)); in main_blkaddr_show()
310 struct f2fs_sb_info *sbi, char *buf) in f2fs_sbi_show() argument
315 ptr = __struct_ptr(sbi, a->struct_type); in f2fs_sbi_show()
321 sbi->raw_super->extension_list; in f2fs_sbi_show()
322 int cold_count = le32_to_cpu(sbi->raw_super->extension_count); in f2fs_sbi_show()
323 int hot_count = sbi->raw_super->hot_ext_count; in f2fs_sbi_show()
341 struct ckpt_req_control *cprc = &sbi->cprc_info; in f2fs_sbi_show()
354 return sysfs_emit(buf, "%llu\n", sbi->compr_written_block); in f2fs_sbi_show()
357 return sysfs_emit(buf, "%llu\n", sbi->compr_saved_block); in f2fs_sbi_show()
360 return sysfs_emit(buf, "%u\n", sbi->compr_new_inode); in f2fs_sbi_show()
364 return sysfs_emit(buf, "%u\n", sbi->gc_segment_mode); in f2fs_sbi_show()
368 sbi->gc_reclaimed_segs[sbi->gc_segment_mode]); in f2fs_sbi_show()
372 s64 current_write = atomic64_read(&sbi->current_atomic_write); in f2fs_sbi_show()
378 return sysfs_emit(buf, "%lld\n", sbi->peak_atomic_write); in f2fs_sbi_show()
381 return sysfs_emit(buf, "%llu\n", sbi->committed_atomic_block); in f2fs_sbi_show()
384 return sysfs_emit(buf, "%llu\n", sbi->revoked_atomic_block); in f2fs_sbi_show()
389 atomic_read(&sbi->cp_call_count[TOTAL_CALL]) - in f2fs_sbi_show()
390 atomic_read(&sbi->cp_call_count[BACKGROUND])); in f2fs_sbi_show()
393 atomic_read(&sbi->cp_call_count[BACKGROUND])); in f2fs_sbi_show()
402 struct f2fs_sb_info *sbi, in __sbi_store() argument
410 ptr = __struct_ptr(sbi, a->struct_type); in __sbi_store()
435 f2fs_down_write(&sbi->sb_lock); in __sbi_store()
437 ret = f2fs_update_extension_list(sbi, name, hot, set); in __sbi_store()
441 ret = f2fs_commit_super(sbi, false); in __sbi_store()
443 f2fs_update_extension_list(sbi, name, hot, !set); in __sbi_store()
445 f2fs_up_write(&sbi->sb_lock); in __sbi_store()
451 struct ckpt_req_control *cprc = &sbi->cprc_info; in __sbi_store()
471 if (test_opt(sbi, MERGE_CHECKPOINT)) { in __sbi_store()
493 spin_lock(&sbi->stat_lock); in __sbi_store()
494 if (t > (unsigned long)(sbi->user_block_count - in __sbi_store()
495 F2FS_OPTION(sbi).root_reserved_blocks - in __sbi_store()
496 sbi->blocks_per_seg * in __sbi_store()
497 SM_I(sbi)->additional_reserved_segments)) { in __sbi_store()
498 spin_unlock(&sbi->stat_lock); in __sbi_store()
502 sbi->current_reserved_blocks = min(sbi->reserved_blocks, in __sbi_store()
503 sbi->user_block_count - valid_user_blocks(sbi)); in __sbi_store()
504 spin_unlock(&sbi->stat_lock); in __sbi_store()
511 if (!f2fs_block_unit_discard(sbi)) in __sbi_store()
522 if (!f2fs_block_unit_discard(sbi)) in __sbi_store()
533 if (!f2fs_block_unit_discard(sbi)) in __sbi_store()
554 if (t == 0 || t > sbi->segs_per_sec) in __sbi_store()
560 sbi->gc_mode = GC_NORMAL; in __sbi_store()
562 sbi->gc_mode = GC_URGENT_HIGH; in __sbi_store()
563 if (sbi->gc_thread) { in __sbi_store()
564 sbi->gc_thread->gc_wake = true; in __sbi_store()
566 &sbi->gc_thread->gc_wait_queue_head); in __sbi_store()
567 wake_up_discard_thread(sbi, true); in __sbi_store()
570 sbi->gc_mode = GC_URGENT_LOW; in __sbi_store()
572 sbi->gc_mode = GC_URGENT_MID; in __sbi_store()
573 if (sbi->gc_thread) { in __sbi_store()
574 sbi->gc_thread->gc_wake = true; in __sbi_store()
576 &sbi->gc_thread->gc_wait_queue_head); in __sbi_store()
585 sbi->gc_mode = GC_IDLE_CB; in __sbi_store()
587 sbi->gc_mode = GC_IDLE_GREEDY; in __sbi_store()
589 if (!sbi->am.atgc_enabled) in __sbi_store()
591 sbi->gc_mode = GC_IDLE_AT; in __sbi_store()
593 sbi->gc_mode = GC_NORMAL; in __sbi_store()
599 spin_lock(&sbi->gc_remaining_trials_lock); in __sbi_store()
600 sbi->gc_remaining_trials = t; in __sbi_store()
601 spin_unlock(&sbi->gc_remaining_trials_lock); in __sbi_store()
608 sbi->iostat_enable = !!t; in __sbi_store()
609 if (!sbi->iostat_enable) in __sbi_store()
610 f2fs_reset_iostat(sbi); in __sbi_store()
617 spin_lock_irq(&sbi->iostat_lock); in __sbi_store()
618 sbi->iostat_period_ms = (unsigned int)t; in __sbi_store()
619 spin_unlock_irq(&sbi->iostat_lock); in __sbi_store()
629 sbi->compr_written_block = 0; in __sbi_store()
630 sbi->compr_saved_block = 0; in __sbi_store()
637 sbi->compr_new_inode = 0; in __sbi_store()
659 sbi->am.candidate_ratio = t; in __sbi_store()
666 sbi->am.age_weight = t; in __sbi_store()
672 sbi->gc_segment_mode = t; in __sbi_store()
681 sbi->gc_reclaimed_segs[sbi->gc_segment_mode] = 0; in __sbi_store()
687 sbi->seq_file_ra_mul = t; in __sbi_store()
695 sbi->max_fragment_chunk = t; in __sbi_store()
703 sbi->max_fragment_hole = t; in __sbi_store()
712 sbi->peak_atomic_write = 0; in __sbi_store()
719 sbi->committed_atomic_block = 0; in __sbi_store()
726 sbi->revoked_atomic_block = 0; in __sbi_store()
731 sbi->readdir_ra = !!t; in __sbi_store()
736 if (t == 0 || t >= sbi->warm_data_age_threshold) in __sbi_store()
745 if (t <= sbi->hot_data_age_threshold) in __sbi_store()
765 if (t && f2fs_lfs_mode(sbi)) in __sbi_store()
767 SM_I(sbi)->ipu_policy = (unsigned int)t; in __sbi_store()
774 sbi->dir_level = t; in __sbi_store()
784 struct f2fs_sb_info *sbi, in f2fs_sbi_store() argument
792 if (!down_read_trylock(&sbi->sb->s_umount)) in f2fs_sbi_store()
795 ret = __sbi_store(a, sbi, buf, count); in f2fs_sbi_store()
797 up_read(&sbi->sb->s_umount); in f2fs_sbi_store()
805 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_attr_show() local
809 return a->show ? a->show(a, sbi, buf) : 0; in f2fs_attr_show()
815 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_attr_store() local
819 return a->store ? a->store(a, sbi, buf, len) : 0; in f2fs_attr_store()
824 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_sb_release() local
826 complete(&sbi->s_kobj_unregister); in f2fs_sb_release()
848 struct f2fs_sb_info *sbi, char *buf) in f2fs_feature_show() argument
860 struct f2fs_sb_info *sbi, char *buf) in f2fs_sb_feature_show() argument
862 if (F2FS_HAS_FEATURE(sbi, a->id)) in f2fs_sb_feature_show()
1322 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_stat_attr_show() local
1326 return a->show ? a->show(a, sbi, buf) : 0; in f2fs_stat_attr_show()
1332 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_stat_attr_store() local
1336 return a->store ? a->store(a, sbi, buf, len) : 0; in f2fs_stat_attr_store()
1341 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_stat_kobj_release() local
1343 complete(&sbi->s_stat_kobj_unregister); in f2fs_stat_kobj_release()
1360 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_sb_feat_attr_show() local
1364 return a->show ? a->show(a, sbi, buf) : 0; in f2fs_sb_feat_attr_show()
1369 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_feature_list_kobj_release() local
1371 complete(&sbi->s_feature_list_kobj_unregister); in f2fs_feature_list_kobj_release()
1388 struct f2fs_sb_info *sbi = F2FS_SB(sb); in segment_info_seq_show() local
1390 le32_to_cpu(sbi->raw_super->segment_count_main); in segment_info_seq_show()
1397 struct seg_entry *se = get_seg_entry(sbi, i); in segment_info_seq_show()
1415 struct f2fs_sb_info *sbi = F2FS_SB(sb); in segment_bits_seq_show() local
1417 le32_to_cpu(sbi->raw_super->segment_count_main); in segment_bits_seq_show()
1424 struct seg_entry *se = get_seg_entry(sbi, i); in segment_bits_seq_show()
1439 struct f2fs_sb_info *sbi = F2FS_SB(sb); in victim_bits_seq_show() local
1440 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); in victim_bits_seq_show()
1445 for (i = 0; i < MAIN_SECS(sbi); i++) { in victim_bits_seq_show()
1449 if ((i % 10) == 9 || i == (MAIN_SECS(sbi) - 1)) in victim_bits_seq_show()
1461 struct f2fs_sb_info *sbi = F2FS_SB(sb); in discard_plist_seq_show() local
1462 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in discard_plist_seq_show()
1466 if (!f2fs_realtime_discard_enable(sbi)) in discard_plist_seq_show()
1531 int f2fs_register_sysfs(struct f2fs_sb_info *sbi) in f2fs_register_sysfs() argument
1533 struct super_block *sb = sbi->sb; in f2fs_register_sysfs()
1536 sbi->s_kobj.kset = &f2fs_kset; in f2fs_register_sysfs()
1537 init_completion(&sbi->s_kobj_unregister); in f2fs_register_sysfs()
1538 err = kobject_init_and_add(&sbi->s_kobj, &f2fs_sb_ktype, NULL, in f2fs_register_sysfs()
1543 sbi->s_stat_kobj.kset = &f2fs_kset; in f2fs_register_sysfs()
1544 init_completion(&sbi->s_stat_kobj_unregister); in f2fs_register_sysfs()
1545 err = kobject_init_and_add(&sbi->s_stat_kobj, &f2fs_stat_ktype, in f2fs_register_sysfs()
1546 &sbi->s_kobj, "stat"); in f2fs_register_sysfs()
1550 sbi->s_feature_list_kobj.kset = &f2fs_kset; in f2fs_register_sysfs()
1551 init_completion(&sbi->s_feature_list_kobj_unregister); in f2fs_register_sysfs()
1552 err = kobject_init_and_add(&sbi->s_feature_list_kobj, in f2fs_register_sysfs()
1554 &sbi->s_kobj, "feature_list"); in f2fs_register_sysfs()
1558 sbi->s_proc = proc_mkdir(sb->s_id, f2fs_proc_root); in f2fs_register_sysfs()
1559 if (!sbi->s_proc) { in f2fs_register_sysfs()
1564 proc_create_single_data("segment_info", 0444, sbi->s_proc, in f2fs_register_sysfs()
1566 proc_create_single_data("segment_bits", 0444, sbi->s_proc, in f2fs_register_sysfs()
1569 proc_create_single_data("iostat_info", 0444, sbi->s_proc, in f2fs_register_sysfs()
1572 proc_create_single_data("victim_bits", 0444, sbi->s_proc, in f2fs_register_sysfs()
1574 proc_create_single_data("discard_plist_info", 0444, sbi->s_proc, in f2fs_register_sysfs()
1578 kobject_put(&sbi->s_feature_list_kobj); in f2fs_register_sysfs()
1579 wait_for_completion(&sbi->s_feature_list_kobj_unregister); in f2fs_register_sysfs()
1581 kobject_put(&sbi->s_stat_kobj); in f2fs_register_sysfs()
1582 wait_for_completion(&sbi->s_stat_kobj_unregister); in f2fs_register_sysfs()
1584 kobject_put(&sbi->s_kobj); in f2fs_register_sysfs()
1585 wait_for_completion(&sbi->s_kobj_unregister); in f2fs_register_sysfs()
1589 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi) in f2fs_unregister_sysfs() argument
1591 remove_proc_subtree(sbi->sb->s_id, f2fs_proc_root); in f2fs_unregister_sysfs()
1593 kobject_put(&sbi->s_stat_kobj); in f2fs_unregister_sysfs()
1594 wait_for_completion(&sbi->s_stat_kobj_unregister); in f2fs_unregister_sysfs()
1595 kobject_put(&sbi->s_feature_list_kobj); in f2fs_unregister_sysfs()
1596 wait_for_completion(&sbi->s_feature_list_kobj_unregister); in f2fs_unregister_sysfs()
1598 kobject_put(&sbi->s_kobj); in f2fs_unregister_sysfs()
1599 wait_for_completion(&sbi->s_kobj_unregister); in f2fs_unregister_sysfs()