Lines Matching refs:sbi

114 static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)  in __struct_ptr()  argument
117 return (unsigned char *)sbi->gc_thread; in __struct_ptr()
119 return (unsigned char *)SM_I(sbi); in __struct_ptr()
121 return (unsigned char *)NM_I(sbi); in __struct_ptr()
123 return (unsigned char *)sbi; in __struct_ptr()
128 struct f2fs_sb_info *sbi, char *buf) in f2fs_sbi_show() argument
133 ptr = __struct_ptr(sbi, a->struct_type); in f2fs_sbi_show()
143 struct f2fs_sb_info *sbi, in f2fs_sbi_store() argument
151 ptr = __struct_ptr(sbi, a->struct_type); in f2fs_sbi_store()
167 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_attr_show() local
171 return a->show ? a->show(a, sbi, buf) : 0; in f2fs_attr_show()
177 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_attr_store() local
181 return a->store ? a->store(a, sbi, buf, len) : 0; in f2fs_attr_store()
186 struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info, in f2fs_sb_release() local
188 complete(&sbi->s_kobj_unregister); in f2fs_sb_release()
273 struct f2fs_sb_info *sbi = F2FS_SB(sb); in parse_options() local
300 set_opt(sbi, BG_GC); in parse_options()
301 clear_opt(sbi, FORCE_FG_GC); in parse_options()
303 clear_opt(sbi, BG_GC); in parse_options()
304 clear_opt(sbi, FORCE_FG_GC); in parse_options()
306 set_opt(sbi, BG_GC); in parse_options()
307 set_opt(sbi, FORCE_FG_GC); in parse_options()
315 set_opt(sbi, DISABLE_ROLL_FORWARD); in parse_options()
319 set_opt(sbi, DISABLE_ROLL_FORWARD); in parse_options()
326 set_opt(sbi, DISCARD); in parse_options()
334 set_opt(sbi, NOHEAP); in parse_options()
338 set_opt(sbi, XATTR_USER); in parse_options()
341 clear_opt(sbi, XATTR_USER); in parse_options()
344 set_opt(sbi, INLINE_XATTR); in parse_options()
362 set_opt(sbi, POSIX_ACL); in parse_options()
365 clear_opt(sbi, POSIX_ACL); in parse_options()
380 sbi->active_logs = arg; in parse_options()
383 set_opt(sbi, DISABLE_EXT_IDENTIFY); in parse_options()
386 set_opt(sbi, INLINE_DATA); in parse_options()
389 set_opt(sbi, INLINE_DENTRY); in parse_options()
392 set_opt(sbi, FLUSH_MERGE); in parse_options()
395 set_opt(sbi, NOBARRIER); in parse_options()
398 set_opt(sbi, FASTBOOT); in parse_options()
401 set_opt(sbi, EXTENT_CACHE); in parse_options()
404 clear_opt(sbi, EXTENT_CACHE); in parse_options()
407 clear_opt(sbi, INLINE_DATA); in parse_options()
518 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_put_super() local
520 if (sbi->s_proc) { in f2fs_put_super()
521 remove_proc_entry("segment_info", sbi->s_proc); in f2fs_put_super()
524 kobject_del(&sbi->s_kobj); in f2fs_put_super()
526 stop_gc_thread(sbi); in f2fs_put_super()
529 mutex_lock(&sbi->umount_mutex); in f2fs_put_super()
536 if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) || in f2fs_put_super()
537 !is_set_ckpt_flags(F2FS_CKPT(sbi), CP_UMOUNT_FLAG)) { in f2fs_put_super()
541 write_checkpoint(sbi, &cpc); in f2fs_put_super()
545 f2fs_destroy_stats(sbi); in f2fs_put_super()
551 release_dirty_inode(sbi); in f2fs_put_super()
552 release_discard_addrs(sbi); in f2fs_put_super()
554 f2fs_leave_shrinker(sbi); in f2fs_put_super()
555 mutex_unlock(&sbi->umount_mutex); in f2fs_put_super()
557 iput(sbi->node_inode); in f2fs_put_super()
558 iput(sbi->meta_inode); in f2fs_put_super()
561 destroy_node_manager(sbi); in f2fs_put_super()
562 destroy_segment_manager(sbi); in f2fs_put_super()
564 kfree(sbi->ckpt); in f2fs_put_super()
565 kobject_put(&sbi->s_kobj); in f2fs_put_super()
566 wait_for_completion(&sbi->s_kobj_unregister); in f2fs_put_super()
569 brelse(sbi->raw_super_buf); in f2fs_put_super()
570 kfree(sbi); in f2fs_put_super()
575 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_sync_fs() local
582 cpc.reason = __get_cp_reason(sbi); in f2fs_sync_fs()
584 mutex_lock(&sbi->gc_mutex); in f2fs_sync_fs()
585 write_checkpoint(sbi, &cpc); in f2fs_sync_fs()
586 mutex_unlock(&sbi->gc_mutex); in f2fs_sync_fs()
588 f2fs_balance_fs(sbi); in f2fs_sync_fs()
614 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_statfs() local
618 total_count = le64_to_cpu(sbi->raw_super->block_count); in f2fs_statfs()
619 user_block_count = sbi->user_block_count; in f2fs_statfs()
620 start_count = le32_to_cpu(sbi->raw_super->segment0_blkaddr); in f2fs_statfs()
621 ovp_count = SM_I(sbi)->ovp_segments << sbi->log_blocks_per_seg; in f2fs_statfs()
623 buf->f_bsize = sbi->blocksize; in f2fs_statfs()
626 buf->f_bfree = buf->f_blocks - valid_user_blocks(sbi) - ovp_count; in f2fs_statfs()
627 buf->f_bavail = user_block_count - valid_user_blocks(sbi); in f2fs_statfs()
629 buf->f_files = sbi->total_node_count - F2FS_RESERVED_NODE_NUM; in f2fs_statfs()
630 buf->f_ffree = buf->f_files - valid_inode_count(sbi); in f2fs_statfs()
641 struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb); in f2fs_show_options() local
643 if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) { in f2fs_show_options()
644 if (test_opt(sbi, FORCE_FG_GC)) in f2fs_show_options()
651 if (test_opt(sbi, DISABLE_ROLL_FORWARD)) in f2fs_show_options()
653 if (test_opt(sbi, DISCARD)) in f2fs_show_options()
655 if (test_opt(sbi, NOHEAP)) in f2fs_show_options()
658 if (test_opt(sbi, XATTR_USER)) in f2fs_show_options()
662 if (test_opt(sbi, INLINE_XATTR)) in f2fs_show_options()
666 if (test_opt(sbi, POSIX_ACL)) in f2fs_show_options()
671 if (test_opt(sbi, DISABLE_EXT_IDENTIFY)) in f2fs_show_options()
673 if (test_opt(sbi, INLINE_DATA)) in f2fs_show_options()
677 if (test_opt(sbi, INLINE_DENTRY)) in f2fs_show_options()
679 if (!f2fs_readonly(sbi->sb) && test_opt(sbi, FLUSH_MERGE)) in f2fs_show_options()
681 if (test_opt(sbi, NOBARRIER)) in f2fs_show_options()
683 if (test_opt(sbi, FASTBOOT)) in f2fs_show_options()
685 if (test_opt(sbi, EXTENT_CACHE)) in f2fs_show_options()
689 seq_printf(seq, ",active_logs=%u", sbi->active_logs); in f2fs_show_options()
697 struct f2fs_sb_info *sbi = F2FS_SB(sb); in segment_info_seq_show() local
699 le32_to_cpu(sbi->raw_super->segment_count_main); in segment_info_seq_show()
706 struct seg_entry *se = get_seg_entry(sbi, i); in segment_info_seq_show()
711 get_valid_blocks(sbi, i, 1)); in segment_info_seq_show()
734 static void default_options(struct f2fs_sb_info *sbi) in default_options() argument
737 sbi->active_logs = NR_CURSEG_TYPE; in default_options()
739 set_opt(sbi, BG_GC); in default_options()
740 set_opt(sbi, INLINE_DATA); in default_options()
741 set_opt(sbi, EXTENT_CACHE); in default_options()
744 set_opt(sbi, XATTR_USER); in default_options()
747 set_opt(sbi, POSIX_ACL); in default_options()
753 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_remount() local
758 bool no_extent_cache = !test_opt(sbi, EXTENT_CACHE); in f2fs_remount()
766 org_mount_opt = sbi->mount_opt; in f2fs_remount()
767 active_logs = sbi->active_logs; in f2fs_remount()
769 sbi->mount_opt.opt = 0; in f2fs_remount()
770 default_options(sbi); in f2fs_remount()
785 if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) { in f2fs_remount()
787 f2fs_msg(sbi->sb, KERN_WARNING, in f2fs_remount()
797 if ((*flags & MS_RDONLY) || !test_opt(sbi, BG_GC)) { in f2fs_remount()
798 if (sbi->gc_thread) { in f2fs_remount()
799 stop_gc_thread(sbi); in f2fs_remount()
803 } else if (!sbi->gc_thread) { in f2fs_remount()
804 err = start_gc_thread(sbi); in f2fs_remount()
814 if ((*flags & MS_RDONLY) || !test_opt(sbi, FLUSH_MERGE)) { in f2fs_remount()
815 destroy_flush_cmd_control(sbi); in f2fs_remount()
816 } else if (!SM_I(sbi)->cmd_control_info) { in f2fs_remount()
817 err = create_flush_cmd_control(sbi); in f2fs_remount()
824 (test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0); in f2fs_remount()
828 if (start_gc_thread(sbi)) in f2fs_remount()
829 f2fs_msg(sbi->sb, KERN_WARNING, in f2fs_remount()
832 stop_gc_thread(sbi); in f2fs_remount()
835 sbi->mount_opt = org_mount_opt; in f2fs_remount()
836 sbi->active_logs = active_logs; in f2fs_remount()
859 struct f2fs_sb_info *sbi = F2FS_SB(sb); in f2fs_nfs_get_inode() local
862 if (check_nid_range(sbi, ino)) in f2fs_nfs_get_inode()
971 static int sanity_check_ckpt(struct f2fs_sb_info *sbi) in sanity_check_ckpt() argument
974 struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); in sanity_check_ckpt()
975 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in sanity_check_ckpt()
987 if (unlikely(f2fs_cp_error(sbi))) { in sanity_check_ckpt()
988 f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck"); in sanity_check_ckpt()
994 static void init_sb_info(struct f2fs_sb_info *sbi) in init_sb_info() argument
996 struct f2fs_super_block *raw_super = sbi->raw_super; in init_sb_info()
999 sbi->log_sectors_per_block = in init_sb_info()
1001 sbi->log_blocksize = le32_to_cpu(raw_super->log_blocksize); in init_sb_info()
1002 sbi->blocksize = 1 << sbi->log_blocksize; in init_sb_info()
1003 sbi->log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg); in init_sb_info()
1004 sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; in init_sb_info()
1005 sbi->segs_per_sec = le32_to_cpu(raw_super->segs_per_sec); in init_sb_info()
1006 sbi->secs_per_zone = le32_to_cpu(raw_super->secs_per_zone); in init_sb_info()
1007 sbi->total_sections = le32_to_cpu(raw_super->section_count); in init_sb_info()
1008 sbi->total_node_count = in init_sb_info()
1010 * sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; in init_sb_info()
1011 sbi->root_ino_num = le32_to_cpu(raw_super->root_ino); in init_sb_info()
1012 sbi->node_ino_num = le32_to_cpu(raw_super->node_ino); in init_sb_info()
1013 sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino); in init_sb_info()
1014 sbi->cur_victim_sec = NULL_SECNO; in init_sb_info()
1015 sbi->max_victim_search = DEF_MAX_VICTIM_SEARCH; in init_sb_info()
1018 atomic_set(&sbi->nr_pages[i], 0); in init_sb_info()
1020 sbi->dir_level = DEF_DIR_LEVEL; in init_sb_info()
1021 sbi->cp_interval = DEF_CP_INTERVAL; in init_sb_info()
1022 clear_sbi_flag(sbi, SBI_NEED_FSCK); in init_sb_info()
1024 INIT_LIST_HEAD(&sbi->s_list); in init_sb_info()
1025 mutex_init(&sbi->umount_mutex); in init_sb_info()
1099 int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover) in f2fs_commit_super() argument
1101 struct buffer_head *sbh = sbi->raw_super_buf; in f2fs_commit_super()
1127 struct f2fs_sb_info *sbi; in f2fs_fill_super() local
1143 sbi = kzalloc(sizeof(struct f2fs_sb_info), GFP_KERNEL); in f2fs_fill_super()
1144 if (!sbi) in f2fs_fill_super()
1157 sb->s_fs_info = sbi; in f2fs_fill_super()
1158 default_options(sbi); in f2fs_fill_super()
1172 get_random_bytes(&sbi->s_next_generation, sizeof(u32)); in f2fs_fill_super()
1180 (test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0); in f2fs_fill_super()
1184 sbi->sb = sb; in f2fs_fill_super()
1185 sbi->raw_super = raw_super; in f2fs_fill_super()
1186 sbi->raw_super_buf = raw_super_buf; in f2fs_fill_super()
1187 mutex_init(&sbi->gc_mutex); in f2fs_fill_super()
1188 mutex_init(&sbi->writepages); in f2fs_fill_super()
1189 mutex_init(&sbi->cp_mutex); in f2fs_fill_super()
1190 init_rwsem(&sbi->node_write); in f2fs_fill_super()
1193 set_sbi_flag(sbi, SBI_POR_DOING); in f2fs_fill_super()
1194 spin_lock_init(&sbi->stat_lock); in f2fs_fill_super()
1196 init_rwsem(&sbi->read_io.io_rwsem); in f2fs_fill_super()
1197 sbi->read_io.sbi = sbi; in f2fs_fill_super()
1198 sbi->read_io.bio = NULL; in f2fs_fill_super()
1200 init_rwsem(&sbi->write_io[i].io_rwsem); in f2fs_fill_super()
1201 sbi->write_io[i].sbi = sbi; in f2fs_fill_super()
1202 sbi->write_io[i].bio = NULL; in f2fs_fill_super()
1205 init_rwsem(&sbi->cp_rwsem); in f2fs_fill_super()
1206 init_waitqueue_head(&sbi->cp_wait); in f2fs_fill_super()
1207 init_sb_info(sbi); in f2fs_fill_super()
1210 sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi)); in f2fs_fill_super()
1211 if (IS_ERR(sbi->meta_inode)) { in f2fs_fill_super()
1213 err = PTR_ERR(sbi->meta_inode); in f2fs_fill_super()
1217 err = get_valid_checkpoint(sbi); in f2fs_fill_super()
1225 if (sanity_check_ckpt(sbi)) { in f2fs_fill_super()
1230 sbi->total_valid_node_count = in f2fs_fill_super()
1231 le32_to_cpu(sbi->ckpt->valid_node_count); in f2fs_fill_super()
1232 sbi->total_valid_inode_count = in f2fs_fill_super()
1233 le32_to_cpu(sbi->ckpt->valid_inode_count); in f2fs_fill_super()
1234 sbi->user_block_count = le64_to_cpu(sbi->ckpt->user_block_count); in f2fs_fill_super()
1235 sbi->total_valid_block_count = in f2fs_fill_super()
1236 le64_to_cpu(sbi->ckpt->valid_block_count); in f2fs_fill_super()
1237 sbi->last_valid_block_count = sbi->total_valid_block_count; in f2fs_fill_super()
1238 sbi->alloc_valid_block_count = 0; in f2fs_fill_super()
1239 INIT_LIST_HEAD(&sbi->dir_inode_list); in f2fs_fill_super()
1240 spin_lock_init(&sbi->dir_inode_lock); in f2fs_fill_super()
1242 init_extent_cache_info(sbi); in f2fs_fill_super()
1244 init_ino_entry_info(sbi); in f2fs_fill_super()
1247 err = build_segment_manager(sbi); in f2fs_fill_super()
1253 err = build_node_manager(sbi); in f2fs_fill_super()
1260 build_gc_manager(sbi); in f2fs_fill_super()
1263 sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi)); in f2fs_fill_super()
1264 if (IS_ERR(sbi->node_inode)) { in f2fs_fill_super()
1266 err = PTR_ERR(sbi->node_inode); in f2fs_fill_super()
1270 f2fs_join_shrinker(sbi); in f2fs_fill_super()
1273 err = recover_orphan_inodes(sbi); in f2fs_fill_super()
1278 root = f2fs_iget(sb, F2FS_ROOT_INO(sbi)); in f2fs_fill_super()
1296 err = f2fs_build_stats(sbi); in f2fs_fill_super()
1301 sbi->s_proc = proc_mkdir(sb->s_id, f2fs_proc_root); in f2fs_fill_super()
1303 if (sbi->s_proc) in f2fs_fill_super()
1304 proc_create_data("segment_info", S_IRUGO, sbi->s_proc, in f2fs_fill_super()
1307 sbi->s_kobj.kset = f2fs_kset; in f2fs_fill_super()
1308 init_completion(&sbi->s_kobj_unregister); in f2fs_fill_super()
1309 err = kobject_init_and_add(&sbi->s_kobj, &f2fs_ktype, NULL, in f2fs_fill_super()
1315 if (!test_opt(sbi, DISABLE_ROLL_FORWARD)) { in f2fs_fill_super()
1321 !is_set_ckpt_flags(sbi->ckpt, CP_UMOUNT_FLAG)) { in f2fs_fill_super()
1327 set_sbi_flag(sbi, SBI_NEED_FSCK); in f2fs_fill_super()
1329 err = recover_fsync_data(sbi); in f2fs_fill_super()
1338 clear_sbi_flag(sbi, SBI_POR_DOING); in f2fs_fill_super()
1344 if (test_opt(sbi, BG_GC) && !f2fs_readonly(sb)) { in f2fs_fill_super()
1346 err = start_gc_thread(sbi); in f2fs_fill_super()
1355 f2fs_commit_super(sbi, true); in f2fs_fill_super()
1358 sbi->cp_expires = round_jiffies_up(jiffies); in f2fs_fill_super()
1363 kobject_del(&sbi->s_kobj); in f2fs_fill_super()
1365 if (sbi->s_proc) { in f2fs_fill_super()
1366 remove_proc_entry("segment_info", sbi->s_proc); in f2fs_fill_super()
1369 f2fs_destroy_stats(sbi); in f2fs_fill_super()
1374 mutex_lock(&sbi->umount_mutex); in f2fs_fill_super()
1375 f2fs_leave_shrinker(sbi); in f2fs_fill_super()
1376 iput(sbi->node_inode); in f2fs_fill_super()
1377 mutex_unlock(&sbi->umount_mutex); in f2fs_fill_super()
1379 destroy_node_manager(sbi); in f2fs_fill_super()
1381 destroy_segment_manager(sbi); in f2fs_fill_super()
1383 kfree(sbi->ckpt); in f2fs_fill_super()
1385 make_bad_inode(sbi->meta_inode); in f2fs_fill_super()
1386 iput(sbi->meta_inode); in f2fs_fill_super()
1392 kfree(sbi); in f2fs_fill_super()