Lines Matching refs:sbi
105 static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type) in __struct_ptr() argument
108 return (unsigned char *)sbi->gc_thread; in __struct_ptr()
110 return (unsigned char *)SM_I(sbi); in __struct_ptr()
112 return (unsigned char *)NM_I(sbi); in __struct_ptr()
114 return (unsigned char *)sbi; in __struct_ptr()
119 struct f2fs_sb_info *sbi, char *buf) in f2fs_sbi_show() argument
124 ptr = __struct_ptr(sbi, a->struct_type); in f2fs_sbi_show()
134 struct f2fs_sb_info *sbi, in f2fs_sbi_store() argument
142 ptr = __struct_ptr(sbi, a->struct_type); in f2fs_sbi_store()
158 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_attr_show() local
162 return a->show ? a->show(a, sbi, buf) : 0; in f2fs_attr_show()
168 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_attr_store() local
172 return a->store ? a->store(a, sbi, buf, len) : 0; in f2fs_attr_store()
177 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_sb_release() local
179 complete(&sbi->s_kobj_unregister); in f2fs_sb_release()
260 struct f2fs_sb_info *sbi = F2FS_SB(sb); in parse_options() local
286 set_opt(sbi, BG_GC); in parse_options()
288 clear_opt(sbi, BG_GC); in parse_options()
296 set_opt(sbi, DISABLE_ROLL_FORWARD); in parse_options()
300 set_opt(sbi, DISABLE_ROLL_FORWARD); in parse_options()
305 set_opt(sbi, DISCARD); in parse_options()
308 set_opt(sbi, NOHEAP); in parse_options()
312 set_opt(sbi, XATTR_USER); in parse_options()
315 clear_opt(sbi, XATTR_USER); in parse_options()
318 set_opt(sbi, INLINE_XATTR); in parse_options()
336 set_opt(sbi, POSIX_ACL); in parse_options()
339 clear_opt(sbi, POSIX_ACL); in parse_options()
354 sbi->active_logs = arg; in parse_options()
357 set_opt(sbi, DISABLE_EXT_IDENTIFY); in parse_options()
360 set_opt(sbi, INLINE_DATA); in parse_options()
363 set_opt(sbi, INLINE_DENTRY); in parse_options()
366 set_opt(sbi, FLUSH_MERGE); in parse_options()
369 set_opt(sbi, NOBARRIER); in parse_options()
372 set_opt(sbi, FASTBOOT); in parse_options()
375 set_opt(sbi, EXTENT_CACHE); in parse_options()
378 clear_opt(sbi, INLINE_DATA); in parse_options()
459 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_put_super() local
461 if (sbi->s_proc) { in f2fs_put_super()
462 remove_proc_entry("segment_info", sbi->s_proc); in f2fs_put_super()
465 kobject_del(&sbi->s_kobj); in f2fs_put_super()
467 f2fs_destroy_stats(sbi); in f2fs_put_super()
468 stop_gc_thread(sbi); in f2fs_put_super()
475 if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) || in f2fs_put_super()
476 !is_set_ckpt_flags(F2FS_CKPT(sbi), CP_UMOUNT_FLAG)) { in f2fs_put_super()
480 write_checkpoint(sbi, &cpc); in f2fs_put_super()
487 release_dirty_inode(sbi); in f2fs_put_super()
488 release_discard_addrs(sbi); in f2fs_put_super()
490 iput(sbi->node_inode); in f2fs_put_super()
491 iput(sbi->meta_inode); in f2fs_put_super()
494 destroy_node_manager(sbi); in f2fs_put_super()
495 destroy_segment_manager(sbi); in f2fs_put_super()
497 kfree(sbi->ckpt); in f2fs_put_super()
498 kobject_put(&sbi->s_kobj); in f2fs_put_super()
499 wait_for_completion(&sbi->s_kobj_unregister); in f2fs_put_super()
502 brelse(sbi->raw_super_buf); in f2fs_put_super()
503 kfree(sbi); in f2fs_put_super()
508 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_sync_fs() local
515 cpc.reason = __get_cp_reason(sbi); in f2fs_sync_fs()
517 mutex_lock(&sbi->gc_mutex); in f2fs_sync_fs()
518 write_checkpoint(sbi, &cpc); in f2fs_sync_fs()
519 mutex_unlock(&sbi->gc_mutex); in f2fs_sync_fs()
521 f2fs_balance_fs(sbi); in f2fs_sync_fs()
547 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_statfs() local
551 total_count = le64_to_cpu(sbi->raw_super->block_count); in f2fs_statfs()
552 user_block_count = sbi->user_block_count; in f2fs_statfs()
553 start_count = le32_to_cpu(sbi->raw_super->segment0_blkaddr); in f2fs_statfs()
554 ovp_count = SM_I(sbi)->ovp_segments << sbi->log_blocks_per_seg; in f2fs_statfs()
556 buf->f_bsize = sbi->blocksize; in f2fs_statfs()
559 buf->f_bfree = buf->f_blocks - valid_user_blocks(sbi) - ovp_count; in f2fs_statfs()
560 buf->f_bavail = user_block_count - valid_user_blocks(sbi); in f2fs_statfs()
562 buf->f_files = sbi->total_node_count - F2FS_RESERVED_NODE_NUM; in f2fs_statfs()
563 buf->f_ffree = buf->f_files - valid_inode_count(sbi); in f2fs_statfs()
574 struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb); in f2fs_show_options() local
576 if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) in f2fs_show_options()
580 if (test_opt(sbi, DISABLE_ROLL_FORWARD)) in f2fs_show_options()
582 if (test_opt(sbi, DISCARD)) in f2fs_show_options()
584 if (test_opt(sbi, NOHEAP)) in f2fs_show_options()
587 if (test_opt(sbi, XATTR_USER)) in f2fs_show_options()
591 if (test_opt(sbi, INLINE_XATTR)) in f2fs_show_options()
595 if (test_opt(sbi, POSIX_ACL)) in f2fs_show_options()
600 if (test_opt(sbi, DISABLE_EXT_IDENTIFY)) in f2fs_show_options()
602 if (test_opt(sbi, INLINE_DATA)) in f2fs_show_options()
606 if (test_opt(sbi, INLINE_DENTRY)) in f2fs_show_options()
608 if (!f2fs_readonly(sbi->sb) && test_opt(sbi, FLUSH_MERGE)) in f2fs_show_options()
610 if (test_opt(sbi, NOBARRIER)) in f2fs_show_options()
612 if (test_opt(sbi, FASTBOOT)) in f2fs_show_options()
614 if (test_opt(sbi, EXTENT_CACHE)) in f2fs_show_options()
616 seq_printf(seq, ",active_logs=%u", sbi->active_logs); in f2fs_show_options()
624 struct f2fs_sb_info *sbi = F2FS_SB(sb); in segment_info_seq_show() local
626 le32_to_cpu(sbi->raw_super->segment_count_main); in segment_info_seq_show()
633 struct seg_entry *se = get_seg_entry(sbi, i); in segment_info_seq_show()
638 get_valid_blocks(sbi, i, 1)); in segment_info_seq_show()
663 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_remount() local
675 org_mount_opt = sbi->mount_opt; in f2fs_remount()
676 active_logs = sbi->active_logs; in f2fs_remount()
678 sbi->mount_opt.opt = 0; in f2fs_remount()
679 sbi->active_logs = NR_CURSEG_TYPE; in f2fs_remount()
698 if ((*flags & MS_RDONLY) || !test_opt(sbi, BG_GC)) { in f2fs_remount()
699 if (sbi->gc_thread) { in f2fs_remount()
700 stop_gc_thread(sbi); in f2fs_remount()
704 } else if (!sbi->gc_thread) { in f2fs_remount()
705 err = start_gc_thread(sbi); in f2fs_remount()
715 if ((*flags & MS_RDONLY) || !test_opt(sbi, FLUSH_MERGE)) { in f2fs_remount()
716 destroy_flush_cmd_control(sbi); in f2fs_remount()
717 } else if (!SM_I(sbi)->cmd_control_info) { in f2fs_remount()
718 err = create_flush_cmd_control(sbi); in f2fs_remount()
725 (test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0); in f2fs_remount()
729 if (start_gc_thread(sbi)) in f2fs_remount()
730 f2fs_msg(sbi->sb, KERN_WARNING, in f2fs_remount()
733 stop_gc_thread(sbi); in f2fs_remount()
736 sbi->mount_opt = org_mount_opt; in f2fs_remount()
737 sbi->active_logs = active_logs; in f2fs_remount()
760 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_nfs_get_inode() local
763 if (check_nid_range(sbi, ino)) in f2fs_nfs_get_inode()
872 static int sanity_check_ckpt(struct f2fs_sb_info *sbi) in sanity_check_ckpt() argument
875 struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); in sanity_check_ckpt()
876 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in sanity_check_ckpt()
888 if (unlikely(f2fs_cp_error(sbi))) { in sanity_check_ckpt()
889 f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck"); in sanity_check_ckpt()
895 static void init_sb_info(struct f2fs_sb_info *sbi) in init_sb_info() argument
897 struct f2fs_super_block *raw_super = sbi->raw_super; in init_sb_info()
900 sbi->log_sectors_per_block = in init_sb_info()
902 sbi->log_blocksize = le32_to_cpu(raw_super->log_blocksize); in init_sb_info()
903 sbi->blocksize = 1 << sbi->log_blocksize; in init_sb_info()
904 sbi->log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg); in init_sb_info()
905 sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; in init_sb_info()
906 sbi->segs_per_sec = le32_to_cpu(raw_super->segs_per_sec); in init_sb_info()
907 sbi->secs_per_zone = le32_to_cpu(raw_super->secs_per_zone); in init_sb_info()
908 sbi->total_sections = le32_to_cpu(raw_super->section_count); in init_sb_info()
909 sbi->total_node_count = in init_sb_info()
911 * sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; in init_sb_info()
912 sbi->root_ino_num = le32_to_cpu(raw_super->root_ino); in init_sb_info()
913 sbi->node_ino_num = le32_to_cpu(raw_super->node_ino); in init_sb_info()
914 sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino); in init_sb_info()
915 sbi->cur_victim_sec = NULL_SECNO; in init_sb_info()
916 sbi->max_victim_search = DEF_MAX_VICTIM_SEARCH; in init_sb_info()
919 atomic_set(&sbi->nr_pages[i], 0); in init_sb_info()
921 sbi->dir_level = DEF_DIR_LEVEL; in init_sb_info()
922 clear_sbi_flag(sbi, SBI_NEED_FSCK); in init_sb_info()
971 struct f2fs_sb_info *sbi; in f2fs_fill_super() local
982 sbi = kzalloc(sizeof(struct f2fs_sb_info), GFP_KERNEL); in f2fs_fill_super()
983 if (!sbi) in f2fs_fill_super()
996 sb->s_fs_info = sbi; in f2fs_fill_super()
998 sbi->active_logs = NR_CURSEG_TYPE; in f2fs_fill_super()
1000 set_opt(sbi, BG_GC); in f2fs_fill_super()
1001 set_opt(sbi, INLINE_DATA); in f2fs_fill_super()
1004 set_opt(sbi, XATTR_USER); in f2fs_fill_super()
1007 set_opt(sbi, POSIX_ACL); in f2fs_fill_super()
1022 get_random_bytes(&sbi->s_next_generation, sizeof(u32)); in f2fs_fill_super()
1030 (test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0); in f2fs_fill_super()
1034 sbi->sb = sb; in f2fs_fill_super()
1035 sbi->raw_super = raw_super; in f2fs_fill_super()
1036 sbi->raw_super_buf = raw_super_buf; in f2fs_fill_super()
1037 mutex_init(&sbi->gc_mutex); in f2fs_fill_super()
1038 mutex_init(&sbi->writepages); in f2fs_fill_super()
1039 mutex_init(&sbi->cp_mutex); in f2fs_fill_super()
1040 init_rwsem(&sbi->node_write); in f2fs_fill_super()
1041 clear_sbi_flag(sbi, SBI_POR_DOING); in f2fs_fill_super()
1042 spin_lock_init(&sbi->stat_lock); in f2fs_fill_super()
1044 init_rwsem(&sbi->read_io.io_rwsem); in f2fs_fill_super()
1045 sbi->read_io.sbi = sbi; in f2fs_fill_super()
1046 sbi->read_io.bio = NULL; in f2fs_fill_super()
1048 init_rwsem(&sbi->write_io[i].io_rwsem); in f2fs_fill_super()
1049 sbi->write_io[i].sbi = sbi; in f2fs_fill_super()
1050 sbi->write_io[i].bio = NULL; in f2fs_fill_super()
1053 init_rwsem(&sbi->cp_rwsem); in f2fs_fill_super()
1054 init_waitqueue_head(&sbi->cp_wait); in f2fs_fill_super()
1055 init_sb_info(sbi); in f2fs_fill_super()
1058 sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi)); in f2fs_fill_super()
1059 if (IS_ERR(sbi->meta_inode)) { in f2fs_fill_super()
1061 err = PTR_ERR(sbi->meta_inode); in f2fs_fill_super()
1065 err = get_valid_checkpoint(sbi); in f2fs_fill_super()
1073 if (sanity_check_ckpt(sbi)) { in f2fs_fill_super()
1078 sbi->total_valid_node_count = in f2fs_fill_super()
1079 le32_to_cpu(sbi->ckpt->valid_node_count); in f2fs_fill_super()
1080 sbi->total_valid_inode_count = in f2fs_fill_super()
1081 le32_to_cpu(sbi->ckpt->valid_inode_count); in f2fs_fill_super()
1082 sbi->user_block_count = le64_to_cpu(sbi->ckpt->user_block_count); in f2fs_fill_super()
1083 sbi->total_valid_block_count = in f2fs_fill_super()
1084 le64_to_cpu(sbi->ckpt->valid_block_count); in f2fs_fill_super()
1085 sbi->last_valid_block_count = sbi->total_valid_block_count; in f2fs_fill_super()
1086 sbi->alloc_valid_block_count = 0; in f2fs_fill_super()
1087 INIT_LIST_HEAD(&sbi->dir_inode_list); in f2fs_fill_super()
1088 spin_lock_init(&sbi->dir_inode_lock); in f2fs_fill_super()
1090 init_extent_cache_info(sbi); in f2fs_fill_super()
1092 init_ino_entry_info(sbi); in f2fs_fill_super()
1095 err = build_segment_manager(sbi); in f2fs_fill_super()
1101 err = build_node_manager(sbi); in f2fs_fill_super()
1108 build_gc_manager(sbi); in f2fs_fill_super()
1111 sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi)); in f2fs_fill_super()
1112 if (IS_ERR(sbi->node_inode)) { in f2fs_fill_super()
1114 err = PTR_ERR(sbi->node_inode); in f2fs_fill_super()
1119 recover_orphan_inodes(sbi); in f2fs_fill_super()
1122 root = f2fs_iget(sb, F2FS_ROOT_INO(sbi)); in f2fs_fill_super()
1140 err = f2fs_build_stats(sbi); in f2fs_fill_super()
1145 sbi->s_proc = proc_mkdir(sb->s_id, f2fs_proc_root); in f2fs_fill_super()
1147 if (sbi->s_proc) in f2fs_fill_super()
1148 proc_create_data("segment_info", S_IRUGO, sbi->s_proc, in f2fs_fill_super()
1151 if (test_opt(sbi, DISCARD)) { in f2fs_fill_super()
1159 sbi->s_kobj.kset = f2fs_kset; in f2fs_fill_super()
1160 init_completion(&sbi->s_kobj_unregister); in f2fs_fill_super()
1161 err = kobject_init_and_add(&sbi->s_kobj, &f2fs_ktype, NULL, in f2fs_fill_super()
1167 if (!test_opt(sbi, DISABLE_ROLL_FORWARD)) { in f2fs_fill_super()
1173 !is_set_ckpt_flags(sbi->ckpt, CP_UMOUNT_FLAG)) { in f2fs_fill_super()
1179 set_sbi_flag(sbi, SBI_NEED_FSCK); in f2fs_fill_super()
1181 err = recover_fsync_data(sbi); in f2fs_fill_super()
1194 if (test_opt(sbi, BG_GC) && !f2fs_readonly(sb)) { in f2fs_fill_super()
1196 err = start_gc_thread(sbi); in f2fs_fill_super()
1204 kobject_del(&sbi->s_kobj); in f2fs_fill_super()
1206 if (sbi->s_proc) { in f2fs_fill_super()
1207 remove_proc_entry("segment_info", sbi->s_proc); in f2fs_fill_super()
1210 f2fs_destroy_stats(sbi); in f2fs_fill_super()
1215 iput(sbi->node_inode); in f2fs_fill_super()
1217 destroy_node_manager(sbi); in f2fs_fill_super()
1219 destroy_segment_manager(sbi); in f2fs_fill_super()
1221 kfree(sbi->ckpt); in f2fs_fill_super()
1223 make_bad_inode(sbi->meta_inode); in f2fs_fill_super()
1224 iput(sbi->meta_inode); in f2fs_fill_super()
1230 kfree(sbi); in f2fs_fill_super()