Lines Matching full:sbi
465 * 1. More than sbi->s_sb_update_sec (def: 1 hour) has passed since the last
467 * 2. More than sbi->s_sb_update_kb (def: 16MB) kbs have been written since the
474 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_maybe_update_superblock() local
475 struct ext4_super_block *es = sbi->s_es; in ext4_maybe_update_superblock()
476 journal_t *journal = sbi->s_journal; in ext4_maybe_update_superblock()
490 if (likely(now - last_update < sbi->s_sb_update_sec)) in ext4_maybe_update_superblock()
493 lifetime_write_kbytes = sbi->s_kbytes_written + in ext4_maybe_update_superblock()
495 sbi->s_sectors_written_start) >> 1); in ext4_maybe_update_superblock()
505 if (diff_size > sbi->s_sb_update_kb) in ext4_maybe_update_superblock()
645 struct ext4_sb_info *sbi = EXT4_SB(sb); in save_error_info() local
651 spin_lock(&sbi->s_error_lock); in save_error_info()
652 sbi->s_add_error_count++; in save_error_info()
653 sbi->s_last_error_code = error; in save_error_info()
654 sbi->s_last_error_line = line; in save_error_info()
655 sbi->s_last_error_ino = ino; in save_error_info()
656 sbi->s_last_error_block = block; in save_error_info()
657 sbi->s_last_error_func = func; in save_error_info()
658 sbi->s_last_error_time = ktime_get_real_seconds(); in save_error_info()
659 if (!sbi->s_first_error_time) { in save_error_info()
660 sbi->s_first_error_code = error; in save_error_info()
661 sbi->s_first_error_line = line; in save_error_info()
662 sbi->s_first_error_ino = ino; in save_error_info()
663 sbi->s_first_error_block = block; in save_error_info()
664 sbi->s_first_error_func = func; in save_error_info()
665 sbi->s_first_error_time = sbi->s_last_error_time; in save_error_info()
667 spin_unlock(&sbi->s_error_lock); in save_error_info()
747 struct ext4_sb_info *sbi = container_of(work, struct ext4_sb_info, in update_super_work() local
749 journal_t *journal = sbi->s_journal; in update_super_work()
760 if (!ext4_emergency_state(sbi->s_sb) && in update_super_work()
761 !sb_rdonly(sbi->s_sb) && journal) { in update_super_work()
762 struct buffer_head *sbh = sbi->s_sbh; in update_super_work()
773 if (sbi->s_add_error_count > 0) in update_super_work()
776 ext4_update_super(sbi->s_sb); in update_super_work()
778 ext4_msg(sbi->s_sb, KERN_ERR, "previous I/O error to " in update_super_work()
791 ext4_notify_error_sysfs(sbi); in update_super_work()
800 ext4_commit_super(sbi->s_sb); in update_super_work()
801 ext4_notify_error_sysfs(sbi); in update_super_work()
1104 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_group_bitmap_corrupted() local
1115 percpu_counter_sub(&sbi->s_freeclusters_counter, in ext4_mark_group_bitmap_corrupted()
1126 percpu_counter_sub(&sbi->s_freeinodes_counter, in ext4_mark_group_bitmap_corrupted()
1162 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
1167 le32_to_cpu(sbi->s_es->s_last_orphan)); in dump_orphan_list()
1170 list_for_each(l, &sbi->s_orphan) { in dump_orphan_list()
1197 struct ext4_sb_info *sbi, in get_qf_name() argument
1200 return rcu_dereference_protected(sbi->s_qf_names[type], in get_qf_name()
1209 static int ext4_percpu_param_init(struct ext4_sb_info *sbi) in ext4_percpu_param_init() argument
1214 block = ext4_count_free_clusters(sbi->s_sb); in ext4_percpu_param_init()
1215 ext4_free_blocks_count_set(sbi->s_es, EXT4_C2B(sbi, block)); in ext4_percpu_param_init()
1216 err = percpu_counter_init(&sbi->s_freeclusters_counter, block, in ext4_percpu_param_init()
1219 unsigned long freei = ext4_count_free_inodes(sbi->s_sb); in ext4_percpu_param_init()
1220 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei); in ext4_percpu_param_init()
1221 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, in ext4_percpu_param_init()
1225 err = percpu_counter_init(&sbi->s_dirs_counter, in ext4_percpu_param_init()
1226 ext4_count_dirs(sbi->s_sb), GFP_KERNEL); in ext4_percpu_param_init()
1228 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0, in ext4_percpu_param_init()
1231 err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0, in ext4_percpu_param_init()
1234 err = percpu_init_rwsem(&sbi->s_writepages_rwsem); in ext4_percpu_param_init()
1237 ext4_msg(sbi->s_sb, KERN_ERR, "insufficient memory"); in ext4_percpu_param_init()
1242 static void ext4_percpu_param_destroy(struct ext4_sb_info *sbi) in ext4_percpu_param_destroy() argument
1244 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_percpu_param_destroy()
1245 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_percpu_param_destroy()
1246 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_percpu_param_destroy()
1247 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_percpu_param_destroy()
1248 percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit); in ext4_percpu_param_destroy()
1249 percpu_free_rwsem(&sbi->s_writepages_rwsem); in ext4_percpu_param_destroy()
1252 static void ext4_group_desc_free(struct ext4_sb_info *sbi) in ext4_group_desc_free() argument
1257 group_desc = rcu_access_pointer(sbi->s_group_desc); in ext4_group_desc_free()
1258 for (i = 0; i < sbi->s_gdb_count; i++) in ext4_group_desc_free()
1263 static void ext4_flex_groups_free(struct ext4_sb_info *sbi) in ext4_flex_groups_free() argument
1268 flex_groups = rcu_access_pointer(sbi->s_flex_groups); in ext4_flex_groups_free()
1270 for (i = 0; i < sbi->s_flex_groups_allocated; i++) in ext4_flex_groups_free()
1278 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super() local
1279 struct ext4_super_block *es = sbi->s_es; in ext4_put_super()
1286 * path which could have sbi->s_journal->j_task as NULL in ext4_put_super()
1287 * Unregister sysfs before flush sbi->s_sb_upd_work. in ext4_put_super()
1302 destroy_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
1305 if (sbi->s_journal) { in ext4_put_super()
1306 aborted = is_journal_aborted(sbi->s_journal); in ext4_put_super()
1307 err = ext4_journal_destroy(sbi, sbi->s_journal); in ext4_put_super()
1312 flush_work(&sbi->s_sb_upd_work); in ext4_put_super()
1314 ext4_es_unregister_shrinker(sbi); in ext4_put_super()
1315 timer_shutdown_sync(&sbi->s_err_report); in ext4_put_super()
1324 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_put_super()
1329 ext4_group_desc_free(sbi); in ext4_put_super()
1330 ext4_flex_groups_free(sbi); in ext4_put_super()
1332 WARN_ON_ONCE(!(sbi->s_mount_state & EXT4_ERROR_FS) && in ext4_put_super()
1333 percpu_counter_sum(&sbi->s_dirtyclusters_counter)); in ext4_put_super()
1334 ext4_percpu_param_destroy(sbi); in ext4_put_super()
1337 kfree(get_qf_name(sb, sbi, i)); in ext4_put_super()
1344 if (!list_empty(&sbi->s_orphan)) in ext4_put_super()
1345 dump_orphan_list(sb, sbi); in ext4_put_super()
1346 ASSERT(list_empty(&sbi->s_orphan)); in ext4_put_super()
1350 if (sbi->s_journal_bdev_file) { in ext4_put_super()
1356 sync_blockdev(file_bdev(sbi->s_journal_bdev_file)); in ext4_put_super()
1357 invalidate_bdev(file_bdev(sbi->s_journal_bdev_file)); in ext4_put_super()
1360 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache); in ext4_put_super()
1361 sbi->s_ea_inode_cache = NULL; in ext4_put_super()
1363 ext4_xattr_destroy_cache(sbi->s_ea_block_cache); in ext4_put_super()
1364 sbi->s_ea_block_cache = NULL; in ext4_put_super()
1366 ext4_stop_mmpd(sbi); in ext4_put_super()
1368 brelse(sbi->s_sbh); in ext4_put_super()
1374 kobject_put(&sbi->s_kobj); in ext4_put_super()
1375 wait_for_completion(&sbi->s_kobj_unregister); in ext4_put_super()
1376 kfree(sbi->s_blockgroup_lock); in ext4_put_super()
1377 fs_put_dax(sbi->s_daxdev, NULL); in ext4_put_super()
1378 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy); in ext4_put_super()
1382 kfree(sbi); in ext4_put_super()
2504 struct ext4_sb_info *sbi = EXT4_SB(sb); in parse_apply_sb_mount_options() local
2510 if (!sbi->s_es->s_mount_opts[0]) in parse_apply_sb_mount_options()
2513 if (strscpy_pad(s_mount_opts, sbi->s_es->s_mount_opts) < 0) in parse_apply_sb_mount_options()
2525 fc->s_fs_info = sbi; in parse_apply_sb_mount_options()
2561 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_apply_quota_options() local
2577 qname = rcu_replace_pointer(sbi->s_qf_names[i], qname, in ext4_apply_quota_options()
2585 sbi->s_jquota_fmt = ctx->s_jquota_fmt; in ext4_apply_quota_options()
2597 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_quota_consistency() local
2629 !!sbi->s_qf_names[i] != !!ctx->s_qf_names[i]) in ext4_check_quota_consistency()
2632 if (sbi->s_qf_names[i] && ctx->s_qf_names[i] && in ext4_check_quota_consistency()
2633 strcmp(get_qf_name(sb, sbi, i), in ext4_check_quota_consistency()
2647 if (sbi->s_jquota_fmt != ctx->s_jquota_fmt && quota_loaded) in ext4_check_quota_consistency()
2657 usr_qf_name = (get_qf_name(sb, sbi, USRQUOTA) || in ext4_check_quota_consistency()
2659 grp_qf_name = (get_qf_name(sb, sbi, GRPQUOTA) || in ext4_check_quota_consistency()
2684 if (!(ctx->spec & EXT4_SPEC_JQFMT || sbi->s_jquota_fmt)) { in ext4_check_quota_consistency()
2714 const struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_test_dummy_encryption() local
2731 if (fscrypt_dummy_policies_equal(&sbi->s_dummy_enc_policy, in ext4_check_test_dummy_encryption()
2739 if (fscrypt_is_dummy_policy_set(&sbi->s_dummy_enc_policy)) { in ext4_check_test_dummy_encryption()
2740 if (fscrypt_dummy_policies_equal(&sbi->s_dummy_enc_policy, in ext4_check_test_dummy_encryption()
2766 struct ext4_sb_info *sbi = fc->s_fs_info; in ext4_check_opt_consistency() local
2782 (sbi->s_inode_size - EXT4_GOOD_OLD_INODE_SIZE)) { in ext4_check_opt_consistency()
2794 if (!sbi->s_journal) { in ext4_check_opt_consistency()
2808 if (!sbi->s_journal && in ext4_check_opt_consistency()
2823 (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) || in ext4_check_opt_consistency()
2824 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) { in ext4_check_opt_consistency()
2830 (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) || in ext4_check_opt_consistency()
2831 (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS))) { in ext4_check_opt_consistency()
2834 ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) || in ext4_check_opt_consistency()
2835 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) || in ext4_check_opt_consistency()
2836 !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE))) { in ext4_check_opt_consistency()
2847 struct ext4_sb_info *sbi = fc->s_fs_info; in ext4_apply_options() local
2849 sbi->s_mount_opt &= ~ctx->mask_s_mount_opt; in ext4_apply_options()
2850 sbi->s_mount_opt |= ctx->vals_s_mount_opt; in ext4_apply_options()
2851 sbi->s_mount_opt2 &= ~ctx->mask_s_mount_opt2; in ext4_apply_options()
2852 sbi->s_mount_opt2 |= ctx->vals_s_mount_opt2; in ext4_apply_options()
2856 #define APPLY(X) ({ if (ctx->spec & EXT4_SPEC_##X) sbi->X = ctx->X; }) in ext4_apply_options()
2908 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options() local
2911 if (sbi->s_jquota_fmt) { in ext4_show_quota_options()
2914 switch (sbi->s_jquota_fmt) { in ext4_show_quota_options()
2929 usr_qf_name = rcu_dereference(sbi->s_qf_names[USRQUOTA]); in ext4_show_quota_options()
2930 grp_qf_name = rcu_dereference(sbi->s_qf_names[GRPQUOTA]); in ext4_show_quota_options()
2957 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options() local
2958 struct ext4_super_block *es = sbi->s_es; in _ext4_show_options()
2966 if (sbi->s_sb_block != 1) in _ext4_show_options()
2967 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block); in _ext4_show_options()
2979 mount_opt = sbi->s_mount_opt2; in _ext4_show_options()
2980 def_mount_opt = sbi->s_def_mount_opt2; in _ext4_show_options()
2982 mount_opt = sbi->s_mount_opt; in _ext4_show_options()
2983 def_mount_opt = sbi->s_def_mount_opt; in _ext4_show_options()
2996 if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) || in _ext4_show_options()
2999 from_kuid_munged(&init_user_ns, sbi->s_resuid)); in _ext4_show_options()
3000 if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) || in _ext4_show_options()
3003 from_kgid_munged(&init_user_ns, sbi->s_resgid)); in _ext4_show_options()
3011 if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) in _ext4_show_options()
3012 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ); in _ext4_show_options()
3013 if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME) in _ext4_show_options()
3014 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time); in _ext4_show_options()
3015 if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) in _ext4_show_options()
3016 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time); in _ext4_show_options()
3019 if (nodefs || sbi->s_stripe) in _ext4_show_options()
3020 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe); in _ext4_show_options()
3022 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) { in _ext4_show_options()
3031 sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS) in _ext4_show_options()
3033 sbi->s_inode_readahead_blks); in _ext4_show_options()
3036 (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT))) in _ext4_show_options()
3037 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult); in _ext4_show_options()
3038 if (nodefs || sbi->s_max_dir_size_kb) in _ext4_show_options()
3039 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb); in _ext4_show_options()
3059 if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD && in _ext4_show_options()
3062 } else if (sbi->s_groups_count < MB_DEFAULT_LINEAR_SCAN_THRESHOLD && in _ext4_show_options()
3099 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super() local
3110 if (!(sbi->s_mount_state & EXT4_VALID_FS)) in ext4_setup_super()
3113 else if (sbi->s_mount_state & EXT4_ERROR_FS) in ext4_setup_super()
3129 if (!sbi->s_journal) in ext4_setup_super()
3135 if (sbi->s_journal) { in ext4_setup_super()
3147 sbi->s_groups_count, in ext4_setup_super()
3150 sbi->s_mount_opt, sbi->s_mount_opt2); in ext4_setup_super()
3156 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array() local
3160 if (!sbi->s_log_groups_per_flex) in ext4_alloc_flex_bg_array()
3163 size = ext4_flex_group(sbi, ngroup - 1) + 1; in ext4_alloc_flex_bg_array()
3164 if (size <= sbi->s_flex_groups_allocated) in ext4_alloc_flex_bg_array()
3168 sizeof(*sbi->s_flex_groups)), GFP_KERNEL); in ext4_alloc_flex_bg_array()
3174 for (i = sbi->s_flex_groups_allocated; i < size; i++) { in ext4_alloc_flex_bg_array()
3179 for (j = sbi->s_flex_groups_allocated; j < i; j++) in ext4_alloc_flex_bg_array()
3188 old_groups = rcu_dereference(sbi->s_flex_groups); in ext4_alloc_flex_bg_array()
3191 (sbi->s_flex_groups_allocated * in ext4_alloc_flex_bg_array()
3194 rcu_assign_pointer(sbi->s_flex_groups, new_groups); in ext4_alloc_flex_bg_array()
3195 sbi->s_flex_groups_allocated = size; in ext4_alloc_flex_bg_array()
3203 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info() local
3209 sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; in ext4_fill_flex_info()
3210 if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) { in ext4_fill_flex_info()
3211 sbi->s_log_groups_per_flex = 0; in ext4_fill_flex_info()
3215 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
3219 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_fill_flex_info()
3222 flex_group = ext4_flex_group(sbi, i); in ext4_fill_flex_info()
3223 fg = sbi_array_rcu_deref(sbi, s_flex_groups, flex_group); in ext4_fill_flex_info()
3241 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_csum() local
3243 if (ext4_has_feature_metadata_csum(sbi->s_sb)) { in ext4_group_desc_csum()
3248 csum32 = ext4_chksum(sbi->s_csum_seed, (__u8 *)&le_group, in ext4_group_desc_csum()
3254 if (offset < sbi->s_desc_size) in ext4_group_desc_csum()
3256 sbi->s_desc_size - offset); in ext4_group_desc_csum()
3266 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid)); in ext4_group_desc_csum()
3271 if (ext4_has_feature_64bit(sb) && offset < sbi->s_desc_size) in ext4_group_desc_csum()
3273 sbi->s_desc_size - offset); in ext4_group_desc_csum()
3302 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors() local
3303 ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block); in ext4_check_descriptors()
3310 ext4_group_t i, grp = sbi->s_groups_count; in ext4_check_descriptors()
3317 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_check_descriptors()
3320 if (i == sbi->s_groups_count - 1 || flexbg_flag) in ext4_check_descriptors()
3321 last_block = ext4_blocks_count(sbi->s_es) - 1; in ext4_check_descriptors()
3326 if ((grp == sbi->s_groups_count) && in ext4_check_descriptors()
3391 inode_table + sbi->s_itb_per_group - 1 > last_block) { in ext4_check_descriptors()
3544 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc() local
3548 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg); in descriptor_loc()
3552 bg = sbi->s_desc_per_block * nr; in descriptor_loc()
3563 le32_to_cpu(sbi->s_es->s_first_data_block) == 0) in descriptor_loc()
3571 * @sbi: In memory super block info
3580 static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi) in ext4_get_stripe_size() argument
3582 unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride); in ext4_get_stripe_size()
3584 le32_to_cpu(sbi->s_es->s_raid_stripe_width); in ext4_get_stripe_size()
3587 if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3588 ret = sbi->s_stripe; in ext4_get_stripe_size()
3589 else if (stripe_width && stripe_width <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3591 else if (stride && stride <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3680 struct ext4_sb_info *sbi = timer_container_of(sbi, t, s_err_report); in print_daily_error_info() local
3681 struct super_block *sb = sbi->s_sb; in print_daily_error_info()
3682 struct ext4_super_block *es = sbi->s_es; in print_daily_error_info()
3719 if (sbi->s_err_report_sec) in print_daily_error_info()
3720 mod_timer(&sbi->s_err_report, jiffies + secs_to_jiffies(sbi->s_err_report_sec)); in print_daily_error_info()
4033 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request() local
4035 ext4_group_t ngroups = sbi->s_groups_count; in ext4_register_li_request()
4039 if (sbi->s_li_request != NULL) { in ext4_register_li_request()
4044 sbi->s_li_request->lr_timeout = 0; in ext4_register_li_request()
4069 sbi->s_li_request = elr; in ext4_register_li_request()
4109 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set() local
4121 jbd2_journal_clear_features(sbi->s_journal, in set_journal_csum_feature_set()
4126 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
4131 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
4134 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
4137 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
4162 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead() local
4171 (has_super ? le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) : 0) + in count_overhead()
4172 sbi->s_itb_per_group + 2); in count_overhead()
4174 first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + in count_overhead()
4181 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
4186 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
4190 if (b >= first_block && b + sbi->s_itb_per_group <= last_block) in count_overhead()
4191 for (j = 0; j < sbi->s_itb_per_group; j++, b++) { in count_overhead()
4192 int c = EXT4_B2C(sbi, b - first_block); in count_overhead()
4211 ext4_set_bit(EXT4_B2C(sbi, s++), buf); in count_overhead()
4220 * Compute the overhead and stash it in sbi->s_overhead
4224 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead() local
4225 struct ext4_super_block *es = sbi->s_es; in ext4_calculate_overhead()
4244 overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block)); in ext4_calculate_overhead()
4263 if (sbi->s_journal && !sbi->s_journal_bdev_file) in ext4_calculate_overhead()
4264 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_total_len); in ext4_calculate_overhead()
4265 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) { in ext4_calculate_overhead()
4270 overhead += EXT4_NUM_B2C(sbi, j_blocks); in ext4_calculate_overhead()
4276 sbi->s_overhead = overhead; in ext4_calculate_overhead()
4285 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_resv_clusters() local
4303 resv_clusters = (ext4_blocks_count(sbi->s_es) >> in ext4_set_resv_clusters()
4304 sbi->s_cluster_bits); in ext4_set_resv_clusters()
4309 atomic64_set(&sbi->s_resv_clusters, resv_clusters); in ext4_set_resv_clusters()
4335 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_csum_trigger() local
4337 sbi->s_journal_triggers[type].sb = sb; in ext4_setup_csum_trigger()
4338 sbi->s_journal_triggers[type].tr_triggers.t_frozen = trigger; in ext4_setup_csum_trigger()
4341 static void ext4_free_sbi(struct ext4_sb_info *sbi) in ext4_free_sbi() argument
4343 if (!sbi) in ext4_free_sbi()
4346 kfree(sbi->s_blockgroup_lock); in ext4_free_sbi()
4347 fs_put_dax(sbi->s_daxdev, NULL); in ext4_free_sbi()
4348 kfree(sbi); in ext4_free_sbi()
4353 struct ext4_sb_info *sbi; in ext4_alloc_sbi() local
4355 sbi = kzalloc_obj(*sbi); in ext4_alloc_sbi()
4356 if (!sbi) in ext4_alloc_sbi()
4359 sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off, in ext4_alloc_sbi()
4362 sbi->s_blockgroup_lock = in ext4_alloc_sbi()
4365 if (!sbi->s_blockgroup_lock) in ext4_alloc_sbi()
4368 sb->s_fs_info = sbi; in ext4_alloc_sbi()
4369 sbi->s_sb = sb; in ext4_alloc_sbi()
4370 return sbi; in ext4_alloc_sbi()
4372 fs_put_dax(sbi->s_daxdev, NULL); in ext4_alloc_sbi()
4373 kfree(sbi); in ext4_alloc_sbi()
4436 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_handle_clustersize() local
4437 struct ext4_super_block *es = sbi->s_es; in ext4_handle_clustersize()
4449 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) - in ext4_handle_clustersize()
4458 if (sbi->s_blocks_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4461 sbi->s_blocks_per_group); in ext4_handle_clustersize()
4464 sbi->s_cluster_bits = 0; in ext4_handle_clustersize()
4466 sbi->s_clusters_per_group = le32_to_cpu(es->s_clusters_per_group); in ext4_handle_clustersize()
4467 if (sbi->s_clusters_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4469 sbi->s_clusters_per_group); in ext4_handle_clustersize()
4472 if (sbi->s_blocks_per_group != in ext4_handle_clustersize()
4473 (sbi->s_clusters_per_group * (clustersize / sb->s_blocksize))) { in ext4_handle_clustersize()
4476 sbi->s_blocks_per_group, sbi->s_clusters_per_group); in ext4_handle_clustersize()
4479 sbi->s_cluster_ratio = clustersize / sb->s_blocksize; in ext4_handle_clustersize()
4482 if (sbi->s_blocks_per_group == clustersize << 3) in ext4_handle_clustersize()
4497 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_atomic_write_init() local
4507 sbi->s_awu_min = max(sb->s_blocksize, in ext4_atomic_write_init()
4509 sbi->s_awu_max = min(clustersize, in ext4_atomic_write_init()
4511 if (sbi->s_awu_min && sbi->s_awu_max && in ext4_atomic_write_init()
4512 sbi->s_awu_min <= sbi->s_awu_max) { in ext4_atomic_write_init()
4514 sbi->s_awu_min, sbi->s_awu_max); in ext4_atomic_write_init()
4516 sbi->s_awu_min = 0; in ext4_atomic_write_init()
4517 sbi->s_awu_max = 0; in ext4_atomic_write_init()
4523 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fast_commit_init() local
4526 atomic_set(&sbi->s_fc_subtid, 0); in ext4_fast_commit_init()
4527 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_MAIN]); in ext4_fast_commit_init()
4528 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_STAGING]); in ext4_fast_commit_init()
4529 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_MAIN]); in ext4_fast_commit_init()
4530 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]); in ext4_fast_commit_init()
4531 sbi->s_fc_bytes = 0; in ext4_fast_commit_init()
4533 sbi->s_fc_ineligible_tid = 0; in ext4_fast_commit_init()
4534 mutex_init(&sbi->s_fc_lock); in ext4_fast_commit_init()
4535 memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats)); in ext4_fast_commit_init()
4536 sbi->s_fc_replay_state.fc_regions = NULL; in ext4_fast_commit_init()
4537 sbi->s_fc_replay_state.fc_regions_size = 0; in ext4_fast_commit_init()
4538 sbi->s_fc_replay_state.fc_regions_used = 0; in ext4_fast_commit_init()
4539 sbi->s_fc_replay_state.fc_regions_valid = 0; in ext4_fast_commit_init()
4540 sbi->s_fc_replay_state.fc_modified_inodes = NULL; in ext4_fast_commit_init()
4541 sbi->s_fc_replay_state.fc_modified_inodes_size = 0; in ext4_fast_commit_init()
4542 sbi->s_fc_replay_state.fc_modified_inodes_used = 0; in ext4_fast_commit_init()
4548 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_inode_info_init() local
4551 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE; in ext4_inode_info_init()
4552 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO; in ext4_inode_info_init()
4554 sbi->s_inode_size = le16_to_cpu(es->s_inode_size); in ext4_inode_info_init()
4555 sbi->s_first_ino = le32_to_cpu(es->s_first_ino); in ext4_inode_info_init()
4556 if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) { in ext4_inode_info_init()
4558 sbi->s_first_ino); in ext4_inode_info_init()
4561 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) || in ext4_inode_info_init()
4562 (!is_power_of_2(sbi->s_inode_size)) || in ext4_inode_info_init()
4563 (sbi->s_inode_size > sb->s_blocksize)) { in ext4_inode_info_init()
4566 sbi->s_inode_size); in ext4_inode_info_init()
4576 if (sbi->s_inode_size >= offsetof(struct ext4_inode, i_atime_extra) + in ext4_inode_info_init()
4587 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_inode_info_init()
4588 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_inode_info_init()
4591 unsigned v, max = (sbi->s_inode_size - in ext4_inode_info_init()
4600 if (sbi->s_want_extra_isize < v) in ext4_inode_info_init()
4601 sbi->s_want_extra_isize = v; in ext4_inode_info_init()
4609 if (sbi->s_want_extra_isize < v) in ext4_inode_info_init()
4610 sbi->s_want_extra_isize = v; in ext4_inode_info_init()
4667 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_metadata_csum() local
4693 sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed); in ext4_init_metadata_csum()
4696 sbi->s_csum_seed = ext4_chksum(~0, es->s_uuid, in ext4_init_metadata_csum()
4705 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_feature_compatibility() local
4776 if (sbi->s_daxdev) { in ext4_check_feature_compatibility()
4778 set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags); in ext4_check_feature_compatibility()
4783 if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) { in ext4_check_feature_compatibility()
4789 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) { in ext4_check_feature_compatibility()
4808 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_geometry() local
4812 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (sb->s_blocksize / 4)) { in ext4_check_geometry()
4815 le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks)); in ext4_check_geometry()
4851 (sbi->s_cluster_ratio == 1)) { in ext4_check_geometry()
4870 sbi->s_groups_count = blocks_count; in ext4_check_geometry()
4871 sbi->s_blockfile_groups = min(sbi->s_groups_count, in ext4_check_geometry()
4873 if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) != in ext4_check_geometry()
4877 ((u64)sbi->s_groups_count * sbi->s_inodes_per_group)); in ext4_check_geometry()
4889 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_init() local
4894 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_group_desc_init()
4905 rcu_assign_pointer(sbi->s_group_desc, in ext4_group_desc_init()
4907 if (sbi->s_group_desc == NULL) { in ext4_group_desc_init()
4912 bgl_lock_init(sbi->s_blockgroup_lock); in ext4_group_desc_init()
4928 sbi->s_gdb_count = i; in ext4_group_desc_init()
4932 rcu_dereference(sbi->s_group_desc)[i] = bh; in ext4_group_desc_init() local
4935 sbi->s_gdb_count = db_count; in ext4_group_desc_init()
4948 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_load_and_init_journal() local
4985 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_load_and_init_journal()
4987 sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA; in ext4_load_and_init_journal()
4990 sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA; in ext4_load_and_init_journal()
4997 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_load_and_init_journal()
5014 set_task_ioprio(sbi->s_journal->j_task, ctx->journal_ioprio); in ext4_load_and_init_journal()
5016 sbi->s_journal->j_submit_inode_data_buffers = in ext4_load_and_init_journal()
5018 sbi->s_journal->j_finish_inode_data_buffers = in ext4_load_and_init_journal()
5024 ext4_journal_destroy(sbi, sbi->s_journal); in ext4_load_and_init_journal()
5063 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_has_journal_option() local
5069 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) in ext4_has_journal_option()
5072 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) in ext4_has_journal_option()
5088 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_max_mapping_order() local
5091 sbi->s_max_folio_order = sbi->s_min_folio_order; in ext4_set_max_mapping_order()
5093 sbi->s_max_folio_order = EXT4_MAX_PAGECACHE_ORDER(sb); in ext4_set_max_mapping_order()
5117 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_load_super() local
5136 logical_sb_block = sbi->s_sb_block * EXT4_MIN_BLOCK_SIZE; in ext4_load_super()
5139 logical_sb_block = sbi->s_sb_block; in ext4_load_super()
5152 sbi->s_es = es; in ext4_load_super()
5198 logical_sb_block = sbi->s_sb_block * EXT4_MIN_BLOCK_SIZE; in ext4_load_super()
5208 sbi->s_es = es; in ext4_load_super()
5215 sbi->s_min_folio_order = get_order(blocksize); in ext4_load_super()
5217 sbi->s_sbh = bh; in ext4_load_super()
5226 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_hash_info_init() local
5227 struct ext4_super_block *es = sbi->s_es; in ext4_hash_info_init()
5230 sbi->s_def_hash_version = es->s_def_hash_version; in ext4_hash_info_init()
5232 if (sbi->s_def_hash_version > DX_HASH_LAST) { in ext4_hash_info_init()
5236 } else if (sbi->s_def_hash_version == DX_HASH_SIPHASH) { in ext4_hash_info_init()
5243 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]); in ext4_hash_info_init()
5248 sbi->s_hash_unsigned = 3; in ext4_hash_info_init()
5254 sbi->s_hash_unsigned = 3; in ext4_hash_info_init()
5267 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_block_group_meta_init() local
5268 struct ext4_super_block *es = sbi->s_es; in ext4_block_group_meta_init()
5272 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_block_group_meta_init()
5276 sbi->s_desc_size = le16_to_cpu(es->s_desc_size); in ext4_block_group_meta_init()
5278 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT || in ext4_block_group_meta_init()
5279 sbi->s_desc_size > EXT4_MAX_DESC_SIZE || in ext4_block_group_meta_init()
5280 !is_power_of_2(sbi->s_desc_size)) { in ext4_block_group_meta_init()
5283 sbi->s_desc_size); in ext4_block_group_meta_init()
5287 sbi->s_desc_size = EXT4_MIN_DESC_SIZE; in ext4_block_group_meta_init()
5289 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group); in ext4_block_group_meta_init()
5290 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group); in ext4_block_group_meta_init()
5292 sbi->s_inodes_per_block = sb->s_blocksize / EXT4_INODE_SIZE(sb); in ext4_block_group_meta_init()
5293 if (sbi->s_inodes_per_block == 0 || sbi->s_blocks_per_group == 0) { in ext4_block_group_meta_init()
5298 if (sbi->s_inodes_per_group < sbi->s_inodes_per_block || in ext4_block_group_meta_init()
5299 sbi->s_inodes_per_group > sb->s_blocksize * 8) { in ext4_block_group_meta_init()
5301 sbi->s_inodes_per_group); in ext4_block_group_meta_init()
5304 sbi->s_itb_per_group = sbi->s_inodes_per_group / in ext4_block_group_meta_init()
5305 sbi->s_inodes_per_block; in ext4_block_group_meta_init()
5306 sbi->s_desc_per_block = sb->s_blocksize / EXT4_DESC_SIZE(sb); in ext4_block_group_meta_init()
5307 sbi->s_mount_state = le16_to_cpu(es->s_state) & ~EXT4_FC_REPLAY; in ext4_block_group_meta_init()
5308 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_block_group_meta_init()
5309 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_block_group_meta_init()
5321 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_is_stripe_incompatible() local
5322 return (stripe > 0 && sbi->s_cluster_ratio > 1 && in ext4_is_stripe_incompatible()
5323 stripe % sbi->s_cluster_ratio != 0); in ext4_is_stripe_incompatible()
5329 struct ext4_sb_info *sbi = EXT4_SB(sb); in __ext4_fill_super() local
5342 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS; in __ext4_fill_super()
5343 sbi->s_sectors_written_start = in __ext4_fill_super()
5350 es = sbi->s_es; in __ext4_fill_super()
5351 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written); in __ext4_fill_super()
5359 sbi->s_resuid = make_kuid(&init_user_ns, ext4_get_resuid(es)); in __ext4_fill_super()
5360 sbi->s_resgid = make_kgid(&init_user_ns, ext4_get_resuid(es)); in __ext4_fill_super()
5361 sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ; in __ext4_fill_super()
5362 sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME; in __ext4_fill_super()
5363 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; in __ext4_fill_super()
5364 sbi->s_sb_update_kb = EXT4_DEF_SB_UPDATE_INTERVAL_KB; in __ext4_fill_super()
5365 sbi->s_sb_update_sec = EXT4_DEF_SB_UPDATE_INTERVAL_SEC; in __ext4_fill_super()
5371 sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; in __ext4_fill_super()
5381 sbi->s_def_mount_opt = sbi->s_mount_opt; in __ext4_fill_super()
5382 sbi->s_def_mount_opt2 = sbi->s_mount_opt2; in __ext4_fill_super()
5428 timer_setup(&sbi->s_err_report, print_daily_error_info, 0); in __ext4_fill_super()
5429 spin_lock_init(&sbi->s_error_lock); in __ext4_fill_super()
5430 mutex_init(&sbi->s_error_notify_mutex); in __ext4_fill_super()
5431 INIT_WORK(&sbi->s_sb_upd_work, update_super_work); in __ext4_fill_super()
5437 err = ext4_es_register_shrinker(sbi); in __ext4_fill_super()
5441 sbi->s_stripe = ext4_get_stripe_size(sbi); in __ext4_fill_super()
5442 if (ext4_is_stripe_incompatible(sb, sbi->s_stripe)) { in __ext4_fill_super()
5446 sbi->s_stripe, sbi->s_cluster_ratio); in __ext4_fill_super()
5447 sbi->s_stripe = 0; in __ext4_fill_super()
5449 sbi->s_extent_max_zeroout_kb = 32; in __ext4_fill_super()
5474 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ in __ext4_fill_super()
5475 mutex_init(&sbi->s_orphan_lock); in __ext4_fill_super()
5477 spin_lock_init(&sbi->s_bdev_wb_lock); in __ext4_fill_super()
5522 sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM; in __ext4_fill_super()
5526 sbi->s_journal = NULL; in __ext4_fill_super()
5531 sbi->s_ea_block_cache = ext4_xattr_create_cache(); in __ext4_fill_super()
5532 if (!sbi->s_ea_block_cache) { in __ext4_fill_super()
5540 sbi->s_ea_inode_cache = ext4_xattr_create_cache(); in __ext4_fill_super()
5541 if (!sbi->s_ea_inode_cache) { in __ext4_fill_super()
5554 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); in __ext4_fill_super()
5556 if (sbi->s_overhead > ext4_blocks_count(es)) in __ext4_fill_super()
5557 sbi->s_overhead = 0; in __ext4_fill_super()
5564 sbi->s_overhead = 0; in __ext4_fill_super()
5565 if (sbi->s_overhead == 0) { in __ext4_fill_super()
5636 if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD) in __ext4_fill_super()
5642 err = ext4_percpu_param_init(sbi); in __ext4_fill_super()
5657 if (sbi->s_journal) in __ext4_fill_super()
5658 sbi->s_journal->j_commit_callback = in __ext4_fill_super()
5691 &sbi->s_bdev_wb_err); in __ext4_fill_super()
5717 sbi->s_err_report_sec = 5*60; /* first time 5 minutes */ in __ext4_fill_super()
5718 mod_timer(&sbi->s_err_report, in __ext4_fill_super()
5719 jiffies + secs_to_jiffies(sbi->s_err_report_sec)); in __ext4_fill_super()
5721 sbi->s_err_report_sec = 24*60*60; /* Once a day */ in __ext4_fill_super()
5724 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10); in __ext4_fill_super()
5725 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10); in __ext4_fill_super()
5726 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10); in __ext4_fill_super()
5727 atomic_set(&sbi->s_warning_count, 0); in __ext4_fill_super()
5728 atomic_set(&sbi->s_msg_count, 0); in __ext4_fill_super()
5745 ext4_flex_groups_free(sbi); in __ext4_fill_super()
5747 ext4_percpu_param_destroy(sbi); in __ext4_fill_super()
5758 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache); in __ext4_fill_super()
5759 sbi->s_ea_inode_cache = NULL; in __ext4_fill_super()
5761 ext4_xattr_destroy_cache(sbi->s_ea_block_cache); in __ext4_fill_super()
5762 sbi->s_ea_block_cache = NULL; in __ext4_fill_super()
5764 if (sbi->s_journal) { in __ext4_fill_super()
5765 ext4_journal_destroy(sbi, sbi->s_journal); in __ext4_fill_super()
5768 ext4_es_unregister_shrinker(sbi); in __ext4_fill_super()
5770 /* flush s_sb_upd_work before sbi destroy */ in __ext4_fill_super()
5771 flush_work(&sbi->s_sb_upd_work); in __ext4_fill_super()
5772 ext4_stop_mmpd(sbi); in __ext4_fill_super()
5773 timer_delete_sync(&sbi->s_err_report); in __ext4_fill_super()
5774 ext4_group_desc_free(sbi); in __ext4_fill_super()
5782 kfree(get_qf_name(sb, sbi, i)); in __ext4_fill_super()
5784 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy); in __ext4_fill_super()
5785 brelse(sbi->s_sbh); in __ext4_fill_super()
5786 if (sbi->s_journal_bdev_file) { in __ext4_fill_super()
5787 invalidate_bdev(file_bdev(sbi->s_journal_bdev_file)); in __ext4_fill_super()
5788 bdev_fput(sbi->s_journal_bdev_file); in __ext4_fill_super()
5799 struct ext4_sb_info *sbi; in ext4_fill_super() local
5803 sbi = ext4_alloc_sbi(sb); in ext4_fill_super()
5804 if (!sbi) in ext4_fill_super()
5807 fc->s_fs_info = sbi; in ext4_fill_super()
5812 sbi->s_sb_block = 1; /* Default super block location */ in ext4_fill_super()
5814 sbi->s_sb_block = ctx->s_sb_block; in ext4_fill_super()
5820 if (sbi->s_journal) { in ext4_fill_super()
5841 ext4_free_sbi(sbi); in ext4_fill_super()
5858 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params() local
5860 journal->j_commit_interval = sbi->s_commit_interval; in ext4_init_journal_params()
5861 journal->j_min_batch_time = sbi->s_min_batch_time; in ext4_init_journal_params()
5862 journal->j_max_batch_time = sbi->s_max_batch_time; in ext4_init_journal_params()
6208 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_update_super() local
6209 struct ext4_super_block *es = sbi->s_es; in ext4_update_super()
6210 struct buffer_head *sbh = sbi->s_sbh; in ext4_update_super()
6226 cpu_to_le64(sbi->s_kbytes_written + in ext4_update_super()
6228 sbi->s_sectors_written_start) >> 1)); in ext4_update_super()
6229 if (percpu_counter_initialized(&sbi->s_freeclusters_counter)) in ext4_update_super()
6231 EXT4_C2B(sbi, percpu_counter_sum_positive( in ext4_update_super()
6232 &sbi->s_freeclusters_counter))); in ext4_update_super()
6233 if (percpu_counter_initialized(&sbi->s_freeinodes_counter)) in ext4_update_super()
6236 &sbi->s_freeinodes_counter)); in ext4_update_super()
6238 spin_lock(&sbi->s_error_lock); in ext4_update_super()
6239 if (sbi->s_add_error_count > 0) { in ext4_update_super()
6244 sbi->s_first_error_time); in ext4_update_super()
6246 sbi->s_first_error_func, 0); in ext4_update_super()
6248 cpu_to_le32(sbi->s_first_error_line); in ext4_update_super()
6250 cpu_to_le32(sbi->s_first_error_ino); in ext4_update_super()
6252 cpu_to_le64(sbi->s_first_error_block); in ext4_update_super()
6254 ext4_errno_to_code(sbi->s_first_error_code); in ext4_update_super()
6258 sbi->s_last_error_time); in ext4_update_super()
6259 strtomem_pad(es->s_last_error_func, sbi->s_last_error_func, 0); in ext4_update_super()
6260 es->s_last_error_line = cpu_to_le32(sbi->s_last_error_line); in ext4_update_super()
6261 es->s_last_error_ino = cpu_to_le32(sbi->s_last_error_ino); in ext4_update_super()
6262 es->s_last_error_block = cpu_to_le64(sbi->s_last_error_block); in ext4_update_super()
6264 ext4_errno_to_code(sbi->s_last_error_code); in ext4_update_super()
6267 * started already and sbi->s_err_report_sec is not zero in ext4_update_super()
6269 if (!es->s_error_count && !sbi->s_err_report_sec) in ext4_update_super()
6270 mod_timer(&sbi->s_err_report, in ext4_update_super()
6271 jiffies + secs_to_jiffies(sbi->s_err_report_sec)); in ext4_update_super()
6272 le32_add_cpu(&es->s_error_count, sbi->s_add_error_count); in ext4_update_super()
6273 sbi->s_add_error_count = 0; in ext4_update_super()
6275 spin_unlock(&sbi->s_error_lock); in ext4_update_super()
6427 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs() local
6434 flush_workqueue(sbi->rsv_conversion_wq); in ext4_sync_fs()
6445 if (sbi->s_journal) { in ext4_sync_fs()
6446 target = jbd2_get_latest_transaction(sbi->s_journal); in ext4_sync_fs()
6447 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER && in ext4_sync_fs()
6448 !jbd2_trans_will_send_data_barrier(sbi->s_journal, target)) in ext4_sync_fs()
6451 if (jbd2_journal_start_commit(sbi->s_journal, &target)) { in ext4_sync_fs()
6453 ret = jbd2_log_wait_commit(sbi->s_journal, in ext4_sync_fs()
6547 struct ext4_sb_info *sbi = EXT4_SB(sb); in __ext4_remount() local
6562 old_opts.s_mount_opt = sbi->s_mount_opt; in __ext4_remount()
6563 old_opts.s_mount_opt2 = sbi->s_mount_opt2; in __ext4_remount()
6564 old_opts.s_resuid = sbi->s_resuid; in __ext4_remount()
6565 old_opts.s_resgid = sbi->s_resgid; in __ext4_remount()
6566 old_opts.s_commit_interval = sbi->s_commit_interval; in __ext4_remount()
6567 old_opts.s_min_batch_time = sbi->s_min_batch_time; in __ext4_remount()
6568 old_opts.s_max_batch_time = sbi->s_max_batch_time; in __ext4_remount()
6570 old_opts.s_jquota_fmt = sbi->s_jquota_fmt; in __ext4_remount()
6572 if (sbi->s_qf_names[i]) { in __ext4_remount()
6573 char *qf_name = get_qf_name(sb, sbi, i); in __ext4_remount()
6585 if (sbi->s_journal && sbi->s_journal->j_task->io_context) in __ext4_remount()
6587 sbi->s_journal->j_task->io_context->ioprio; in __ext4_remount()
6598 ctx->s_stripe, sbi->s_cluster_ratio); in __ext4_remount()
6617 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM; in __ext4_remount()
6642 if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_NO_MBCACHE) { in __ext4_remount()
6658 es = sbi->s_es; in __ext4_remount()
6660 if (sbi->s_journal) { in __ext4_remount()
6661 ext4_init_journal_params(sb, sbi->s_journal); in __ext4_remount()
6662 set_task_ioprio(sbi->s_journal->j_task, ctx->journal_ioprio); in __ext4_remount()
6666 flush_work(&sbi->s_sb_upd_work); in __ext4_remount()
6694 (sbi->s_mount_state & EXT4_VALID_FS)) in __ext4_remount()
6695 es->s_state = cpu_to_le16(sbi->s_mount_state); in __ext4_remount()
6697 if (sbi->s_journal) { in __ext4_remount()
6715 for (g = 0; g < sbi->s_groups_count; g++) { in __ext4_remount()
6749 if (sbi->s_journal) { in __ext4_remount()
6754 sbi->s_mount_state = (le16_to_cpu(es->s_state) & in __ext4_remount()
6779 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) { in __ext4_remount()
6785 if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) { in __ext4_remount()
6805 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6821 ext4_stop_mmpd(sbi); in __ext4_remount()
6844 sbi->s_mount_opt = old_opts.s_mount_opt; in __ext4_remount()
6845 sbi->s_mount_opt2 = old_opts.s_mount_opt2; in __ext4_remount()
6846 sbi->s_resuid = old_opts.s_resuid; in __ext4_remount()
6847 sbi->s_resgid = old_opts.s_resgid; in __ext4_remount()
6848 sbi->s_commit_interval = old_opts.s_commit_interval; in __ext4_remount()
6849 sbi->s_min_batch_time = old_opts.s_min_batch_time; in __ext4_remount()
6850 sbi->s_max_batch_time = old_opts.s_max_batch_time; in __ext4_remount()
6853 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6856 sbi->s_jquota_fmt = old_opts.s_jquota_fmt; in __ext4_remount()
6858 to_free[i] = get_qf_name(sb, sbi, i); in __ext4_remount()
6859 rcu_assign_pointer(sbi->s_qf_names[i], old_opts.s_qf_names[i]); in __ext4_remount()
6866 ext4_stop_mmpd(sbi); in __ext4_remount()
6946 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs() local
6947 struct ext4_super_block *es = sbi->s_es; in ext4_statfs()
6950 resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters)); in ext4_statfs()
6953 overhead = sbi->s_overhead; in ext4_statfs()
6957 buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead); in ext4_statfs()
6958 bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) - in ext4_statfs()
6959 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter); in ext4_statfs()
6961 buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0)); in ext4_statfs()
6967 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); in ext4_statfs()
7481 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_kill_sb() local
7482 struct file *bdev_file = sbi ? sbi->s_journal_bdev_file : NULL; in ext4_kill_sb()