Lines Matching refs:sbi

122 	struct ext4_sb_info *sbi = EXT4_SB(sb);  in ext4_superblock_csum()  local
126 csum = ext4_chksum(sbi, ~0, (char *)es, offset); in ext4_superblock_csum()
338 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_journal_commit_callback() local
343 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
348 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
350 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
352 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
759 static void ext4_blkdev_remove(struct ext4_sb_info *sbi) in ext4_blkdev_remove() argument
762 bdev = sbi->journal_bdev; in ext4_blkdev_remove()
765 sbi->journal_bdev = NULL; in ext4_blkdev_remove()
774 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
779 le32_to_cpu(sbi->s_es->s_last_orphan)); in dump_orphan_list()
782 list_for_each(l, &sbi->s_orphan) { in dump_orphan_list()
794 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super() local
795 struct ext4_super_block *es = sbi->s_es; in ext4_put_super()
801 flush_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
802 destroy_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
804 if (sbi->s_journal) { in ext4_put_super()
805 err = jbd2_journal_destroy(sbi->s_journal); in ext4_put_super()
806 sbi->s_journal = NULL; in ext4_put_super()
812 ext4_es_unregister_shrinker(sbi); in ext4_put_super()
813 del_timer_sync(&sbi->s_err_report); in ext4_put_super()
821 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_put_super()
826 for (i = 0; i < sbi->s_gdb_count; i++) in ext4_put_super()
827 brelse(sbi->s_group_desc[i]); in ext4_put_super()
828 kvfree(sbi->s_group_desc); in ext4_put_super()
829 kvfree(sbi->s_flex_groups); in ext4_put_super()
830 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_put_super()
831 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_put_super()
832 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_put_super()
833 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_put_super()
834 brelse(sbi->s_sbh); in ext4_put_super()
837 kfree(sbi->s_qf_names[i]); in ext4_put_super()
844 if (!list_empty(&sbi->s_orphan)) in ext4_put_super()
845 dump_orphan_list(sb, sbi); in ext4_put_super()
846 J_ASSERT(list_empty(&sbi->s_orphan)); in ext4_put_super()
850 if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) { in ext4_put_super()
856 sync_blockdev(sbi->journal_bdev); in ext4_put_super()
857 invalidate_bdev(sbi->journal_bdev); in ext4_put_super()
858 ext4_blkdev_remove(sbi); in ext4_put_super()
860 if (sbi->s_mb_cache) { in ext4_put_super()
861 ext4_xattr_destroy_cache(sbi->s_mb_cache); in ext4_put_super()
862 sbi->s_mb_cache = NULL; in ext4_put_super()
864 if (sbi->s_mmp_tsk) in ext4_put_super()
865 kthread_stop(sbi->s_mmp_tsk); in ext4_put_super()
871 kobject_put(&sbi->s_kobj); in ext4_put_super()
872 wait_for_completion(&sbi->s_kobj_unregister); in ext4_put_super()
873 if (sbi->s_chksum_driver) in ext4_put_super()
874 crypto_free_shash(sbi->s_chksum_driver); in ext4_put_super()
875 kfree(sbi->s_blockgroup_lock); in ext4_put_super()
876 kfree(sbi); in ext4_put_super()
1284 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_qf_name() local
1289 !sbi->s_qf_names[qtype]) { in set_qf_name()
1306 if (sbi->s_qf_names[qtype]) { in set_qf_name()
1307 if (strcmp(sbi->s_qf_names[qtype], qname) == 0) in set_qf_name()
1320 sbi->s_qf_names[qtype] = qname; in set_qf_name()
1331 struct ext4_sb_info *sbi = EXT4_SB(sb); in clear_qf_name() local
1334 sbi->s_qf_names[qtype]) { in clear_qf_name()
1339 kfree(sbi->s_qf_names[qtype]); in clear_qf_name()
1340 sbi->s_qf_names[qtype] = NULL; in clear_qf_name()
1455 struct ext4_sb_info *sbi = EXT4_SB(sb); in handle_mount_opt() local
1482 sbi->s_mount_flags |= EXT4_MF_FS_ABORTED; in handle_mount_opt()
1541 sbi->s_commit_interval = HZ * arg; in handle_mount_opt()
1543 sbi->s_max_batch_time = arg; in handle_mount_opt()
1545 sbi->s_min_batch_time = arg; in handle_mount_opt()
1553 sbi->s_inode_readahead_blks = arg; in handle_mount_opt()
1558 sbi->s_li_wait_mult = arg; in handle_mount_opt()
1560 sbi->s_max_dir_size_kb = arg; in handle_mount_opt()
1562 sbi->s_stripe = arg; in handle_mount_opt()
1569 sbi->s_resuid = uid; in handle_mount_opt()
1576 sbi->s_resgid = gid; in handle_mount_opt()
1632 sbi->s_mount_flags |= EXT4_MF_TEST_DUMMY_ENCRYPTION; in handle_mount_opt()
1641 if (!sbi->s_journal) in handle_mount_opt()
1650 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
1655 sbi->s_jquota_fmt != m->mount_opt) { in handle_mount_opt()
1666 sbi->s_jquota_fmt = m->mount_opt; in handle_mount_opt()
1672 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
1689 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
1691 sbi->s_mount_opt &= ~m->mount_opt; in handle_mount_opt()
1701 struct ext4_sb_info *sbi = EXT4_SB(sb); in parse_options() local
1729 } else if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { in parse_options()
1730 if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA]) in parse_options()
1733 if (test_opt(sb, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA]) in parse_options()
1742 if (!sbi->s_jquota_fmt) { in parse_options()
1751 BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size); in parse_options()
1772 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options() local
1774 if (sbi->s_jquota_fmt) { in ext4_show_quota_options()
1777 switch (sbi->s_jquota_fmt) { in ext4_show_quota_options()
1791 if (sbi->s_qf_names[USRQUOTA]) in ext4_show_quota_options()
1792 seq_show_option(seq, "usrjquota", sbi->s_qf_names[USRQUOTA]); in ext4_show_quota_options()
1794 if (sbi->s_qf_names[GRPQUOTA]) in ext4_show_quota_options()
1795 seq_show_option(seq, "grpjquota", sbi->s_qf_names[GRPQUOTA]); in ext4_show_quota_options()
1817 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options() local
1818 struct ext4_super_block *es = sbi->s_es; in _ext4_show_options()
1819 int def_errors, def_mount_opt = nodefs ? 0 : sbi->s_def_mount_opt; in _ext4_show_options()
1826 if (sbi->s_sb_block != 1) in _ext4_show_options()
1827 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block); in _ext4_show_options()
1834 if (!(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt))) in _ext4_show_options()
1837 (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) || in _ext4_show_options()
1838 (!want_set && (sbi->s_mount_opt & m->mount_opt))) in _ext4_show_options()
1843 if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) || in _ext4_show_options()
1846 from_kuid_munged(&init_user_ns, sbi->s_resuid)); in _ext4_show_options()
1847 if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) || in _ext4_show_options()
1850 from_kgid_munged(&init_user_ns, sbi->s_resgid)); in _ext4_show_options()
1858 if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) in _ext4_show_options()
1859 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ); in _ext4_show_options()
1860 if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME) in _ext4_show_options()
1861 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time); in _ext4_show_options()
1862 if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) in _ext4_show_options()
1863 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time); in _ext4_show_options()
1866 if (nodefs || sbi->s_stripe) in _ext4_show_options()
1867 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe); in _ext4_show_options()
1868 if (EXT4_MOUNT_DATA_FLAGS & (sbi->s_mount_opt ^ def_mount_opt)) { in _ext4_show_options()
1877 sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS) in _ext4_show_options()
1879 sbi->s_inode_readahead_blks); in _ext4_show_options()
1882 (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT))) in _ext4_show_options()
1883 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult); in _ext4_show_options()
1884 if (nodefs || sbi->s_max_dir_size_kb) in _ext4_show_options()
1885 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb); in _ext4_show_options()
1910 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super() local
1920 if (!(sbi->s_mount_state & EXT4_VALID_FS)) in ext4_setup_super()
1923 else if (sbi->s_mount_state & EXT4_ERROR_FS) in ext4_setup_super()
1939 if (!sbi->s_journal) in ext4_setup_super()
1946 if (sbi->s_journal) in ext4_setup_super()
1955 sbi->s_groups_count, in ext4_setup_super()
1958 sbi->s_mount_opt, sbi->s_mount_opt2); in ext4_setup_super()
1966 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array() local
1970 if (!sbi->s_log_groups_per_flex) in ext4_alloc_flex_bg_array()
1973 size = ext4_flex_group(sbi, ngroup - 1) + 1; in ext4_alloc_flex_bg_array()
1974 if (size <= sbi->s_flex_groups_allocated) in ext4_alloc_flex_bg_array()
1985 if (sbi->s_flex_groups) { in ext4_alloc_flex_bg_array()
1986 memcpy(new_groups, sbi->s_flex_groups, in ext4_alloc_flex_bg_array()
1987 (sbi->s_flex_groups_allocated * in ext4_alloc_flex_bg_array()
1989 kvfree(sbi->s_flex_groups); in ext4_alloc_flex_bg_array()
1991 sbi->s_flex_groups = new_groups; in ext4_alloc_flex_bg_array()
1992 sbi->s_flex_groups_allocated = size / sizeof(struct flex_groups); in ext4_alloc_flex_bg_array()
1998 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info() local
2003 sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; in ext4_fill_flex_info()
2004 if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) { in ext4_fill_flex_info()
2005 sbi->s_log_groups_per_flex = 0; in ext4_fill_flex_info()
2009 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
2013 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_fill_flex_info()
2016 flex_group = ext4_flex_group(sbi, i); in ext4_fill_flex_info()
2018 &sbi->s_flex_groups[flex_group].free_inodes); in ext4_fill_flex_info()
2020 &sbi->s_flex_groups[flex_group].free_clusters); in ext4_fill_flex_info()
2022 &sbi->s_flex_groups[flex_group].used_dirs); in ext4_fill_flex_info()
2036 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_csum() local
2038 if (ext4_has_metadata_csum(sbi->s_sb)) { in ext4_group_desc_csum()
2045 csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group, in ext4_group_desc_csum()
2047 csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp, in ext4_group_desc_csum()
2048 sbi->s_desc_size); in ext4_group_desc_csum()
2061 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid)); in ext4_group_desc_csum()
2067 offset < le16_to_cpu(sbi->s_es->s_desc_size)) in ext4_group_desc_csum()
2069 le16_to_cpu(sbi->s_es->s_desc_size) - in ext4_group_desc_csum()
2098 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors() local
2099 ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block); in ext4_check_descriptors()
2105 ext4_group_t i, grp = sbi->s_groups_count; in ext4_check_descriptors()
2112 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_check_descriptors()
2115 if (i == sbi->s_groups_count - 1 || flexbg_flag) in ext4_check_descriptors()
2116 last_block = ext4_blocks_count(sbi->s_es) - 1; in ext4_check_descriptors()
2121 if ((grp == sbi->s_groups_count) && in ext4_check_descriptors()
2141 inode_table + sbi->s_itb_per_group - 1 > last_block) { in ext4_check_descriptors()
2408 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc() local
2412 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg); in descriptor_loc()
2416 bg = sbi->s_desc_per_block * nr; in descriptor_loc()
2444 static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi) in ext4_get_stripe_size() argument
2446 unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride); in ext4_get_stripe_size()
2448 le32_to_cpu(sbi->s_es->s_raid_stripe_width); in ext4_get_stripe_size()
2451 if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
2452 ret = sbi->s_stripe; in ext4_get_stripe_size()
2453 else if (stripe_width <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
2455 else if (stride <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
2541 struct ext4_sb_info *sbi; in print_daily_error_info() local
2544 sbi = EXT4_SB(sb); in print_daily_error_info()
2545 es = sbi->s_es; in print_daily_error_info()
2579 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ); /* Once a day */ in print_daily_error_info()
2632 struct ext4_sb_info *sbi; in ext4_remove_li_request() local
2637 sbi = elr->lr_sbi; in ext4_remove_li_request()
2640 sbi->s_li_request = NULL; in ext4_remove_li_request()
2822 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_li_request_new() local
2830 elr->lr_sbi = sbi; in ext4_li_request_new()
2846 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request() local
2852 if (sbi->s_li_request != NULL) { in ext4_register_li_request()
2857 sbi->s_li_request->lr_timeout = 0; in ext4_register_li_request()
2882 sbi->s_li_request = elr; in ext4_register_li_request()
2922 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set() local
2934 jbd2_journal_clear_features(sbi->s_journal, in set_journal_csum_feature_set()
2939 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
2944 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
2947 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
2950 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
2975 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead() local
2983 sbi->s_itb_per_group + 2); in count_overhead()
2985 first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + in count_overhead()
2992 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
2997 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
3001 if (b >= first_block && b + sbi->s_itb_per_group <= last_block) in count_overhead()
3002 for (j = 0; j < sbi->s_itb_per_group; j++, b++) { in count_overhead()
3003 int c = EXT4_B2C(sbi, b - first_block); in count_overhead()
3015 ext4_set_bit(EXT4_B2C(sbi, s++), buf); in count_overhead()
3030 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead() local
3031 struct ext4_super_block *es = sbi->s_es; in ext4_calculate_overhead()
3048 overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block)); in ext4_calculate_overhead()
3063 if (sbi->s_journal && !sbi->journal_bdev) in ext4_calculate_overhead()
3064 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_maxlen); in ext4_calculate_overhead()
3066 sbi->s_overhead = overhead; in ext4_calculate_overhead()
3075 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_resv_clusters() local
3093 resv_clusters = (ext4_blocks_count(sbi->s_es) >> in ext4_set_resv_clusters()
3094 sbi->s_cluster_bits); in ext4_set_resv_clusters()
3099 atomic64_set(&sbi->s_resv_clusters, resv_clusters); in ext4_set_resv_clusters()
3107 struct ext4_sb_info *sbi; in ext4_fill_super() local
3126 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); in ext4_fill_super()
3127 if (!sbi) in ext4_fill_super()
3130 sbi->s_blockgroup_lock = in ext4_fill_super()
3132 if (!sbi->s_blockgroup_lock) { in ext4_fill_super()
3133 kfree(sbi); in ext4_fill_super()
3136 sb->s_fs_info = sbi; in ext4_fill_super()
3137 sbi->s_sb = sb; in ext4_fill_super()
3138 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS; in ext4_fill_super()
3139 sbi->s_sb_block = sb_block; in ext4_fill_super()
3141 sbi->s_sectors_written_start = in ext4_fill_super()
3175 sbi->s_es = es; in ext4_fill_super()
3179 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written); in ext4_fill_super()
3197 sbi->s_chksum_driver = crypto_alloc_shash("crc32c", 0, 0); in ext4_fill_super()
3198 if (IS_ERR(sbi->s_chksum_driver)) { in ext4_fill_super()
3200 ret = PTR_ERR(sbi->s_chksum_driver); in ext4_fill_super()
3201 sbi->s_chksum_driver = NULL; in ext4_fill_super()
3217 sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed); in ext4_fill_super()
3219 sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid, in ext4_fill_super()
3247 if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) in ext4_fill_super()
3249 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE) in ext4_fill_super()
3258 sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid)); in ext4_fill_super()
3259 sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid)); in ext4_fill_super()
3260 sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ; in ext4_fill_super()
3261 sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME; in ext4_fill_super()
3262 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; in ext4_fill_super()
3279 sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; in ext4_fill_super()
3281 if (!parse_options((char *) sbi->s_es->s_mount_opts, sb, in ext4_fill_super()
3285 sbi->s_es->s_mount_opts); in ext4_fill_super()
3287 sbi->s_def_mount_opt = sbi->s_mount_opt; in ext4_fill_super()
3375 if (sbi->s_mount_opt & EXT4_MOUNT_DAX) { in ext4_fill_super()
3412 sbi->s_es = es; in ext4_fill_super()
3421 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_fill_super()
3426 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE; in ext4_fill_super()
3427 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO; in ext4_fill_super()
3429 sbi->s_inode_size = le16_to_cpu(es->s_inode_size); in ext4_fill_super()
3430 sbi->s_first_ino = le32_to_cpu(es->s_first_ino); in ext4_fill_super()
3431 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) || in ext4_fill_super()
3432 (!is_power_of_2(sbi->s_inode_size)) || in ext4_fill_super()
3433 (sbi->s_inode_size > blocksize)) { in ext4_fill_super()
3436 sbi->s_inode_size); in ext4_fill_super()
3439 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) in ext4_fill_super()
3443 sbi->s_desc_size = le16_to_cpu(es->s_desc_size); in ext4_fill_super()
3445 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT || in ext4_fill_super()
3446 sbi->s_desc_size > EXT4_MAX_DESC_SIZE || in ext4_fill_super()
3447 !is_power_of_2(sbi->s_desc_size)) { in ext4_fill_super()
3450 sbi->s_desc_size); in ext4_fill_super()
3454 sbi->s_desc_size = EXT4_MIN_DESC_SIZE; in ext4_fill_super()
3456 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group); in ext4_fill_super()
3457 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group); in ext4_fill_super()
3461 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb); in ext4_fill_super()
3462 if (sbi->s_inodes_per_block == 0) in ext4_fill_super()
3464 sbi->s_itb_per_group = sbi->s_inodes_per_group / in ext4_fill_super()
3465 sbi->s_inodes_per_block; in ext4_fill_super()
3466 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb); in ext4_fill_super()
3467 sbi->s_sbh = bh; in ext4_fill_super()
3468 sbi->s_mount_state = le16_to_cpu(es->s_state); in ext4_fill_super()
3469 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_fill_super()
3470 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_fill_super()
3473 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]); in ext4_fill_super()
3474 sbi->s_def_hash_version = es->s_def_hash_version; in ext4_fill_super()
3478 sbi->s_hash_unsigned = 3; in ext4_fill_super()
3484 sbi->s_hash_unsigned = 3; in ext4_fill_super()
3503 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) - in ext4_fill_super()
3505 sbi->s_clusters_per_group = in ext4_fill_super()
3507 if (sbi->s_clusters_per_group > blocksize * 8) { in ext4_fill_super()
3510 sbi->s_clusters_per_group); in ext4_fill_super()
3513 if (sbi->s_blocks_per_group != in ext4_fill_super()
3514 (sbi->s_clusters_per_group * (clustersize / blocksize))) { in ext4_fill_super()
3517 sbi->s_blocks_per_group, in ext4_fill_super()
3518 sbi->s_clusters_per_group); in ext4_fill_super()
3528 if (sbi->s_blocks_per_group > blocksize * 8) { in ext4_fill_super()
3531 sbi->s_blocks_per_group); in ext4_fill_super()
3534 sbi->s_clusters_per_group = sbi->s_blocks_per_group; in ext4_fill_super()
3535 sbi->s_cluster_bits = 0; in ext4_fill_super()
3537 sbi->s_cluster_ratio = clustersize / blocksize; in ext4_fill_super()
3539 if (sbi->s_inodes_per_group > blocksize * 8) { in ext4_fill_super()
3542 sbi->s_inodes_per_group); in ext4_fill_super()
3547 if (sbi->s_blocks_per_group == clustersize << 3) in ext4_fill_super()
3594 "blocks per group %lu)", sbi->s_groups_count, in ext4_fill_super()
3600 sbi->s_groups_count = blocks_count; in ext4_fill_super()
3601 sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, in ext4_fill_super()
3603 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_fill_super()
3605 sbi->s_group_desc = ext4_kvmalloc(db_count * in ext4_fill_super()
3608 if (sbi->s_group_desc == NULL) { in ext4_fill_super()
3614 bgl_lock_init(sbi->s_blockgroup_lock); in ext4_fill_super()
3618 sbi->s_group_desc[i] = sb_bread_unmovable(sb, block); in ext4_fill_super()
3619 if (!sbi->s_group_desc[i]) { in ext4_fill_super()
3632 sbi->s_gdb_count = db_count; in ext4_fill_super()
3633 get_random_bytes(&sbi->s_next_generation, sizeof(u32)); in ext4_fill_super()
3634 spin_lock_init(&sbi->s_next_gen_lock); in ext4_fill_super()
3636 setup_timer(&sbi->s_err_report, print_daily_error_info, in ext4_fill_super()
3640 if (ext4_es_register_shrinker(sbi)) in ext4_fill_super()
3643 sbi->s_stripe = ext4_get_stripe_size(sbi); in ext4_fill_super()
3644 sbi->s_extent_max_zeroout_kb = 32; in ext4_fill_super()
3662 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ in ext4_fill_super()
3663 mutex_init(&sbi->s_orphan_lock); in ext4_fill_super()
3698 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) { in ext4_fill_super()
3701 sbi->s_commit_interval / HZ); in ext4_fill_super()
3705 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) { in ext4_fill_super()
3710 sbi->s_def_mount_opt &= EXT4_MOUNT_JOURNAL_CHECKSUM; in ext4_fill_super()
3713 sbi->s_journal = NULL; in ext4_fill_super()
3740 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) in ext4_fill_super()
3749 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_fill_super()
3757 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); in ext4_fill_super()
3759 sbi->s_journal->j_commit_callback = ext4_journal_commit_callback; in ext4_fill_super()
3763 sbi->s_mb_cache = ext4_xattr_create_cache(sb->s_id); in ext4_fill_super()
3764 if (!sbi->s_mb_cache) { in ext4_fill_super()
3770 if ((DUMMY_ENCRYPTION_ENABLED(sbi) || ext4_has_feature_encrypt(sb)) && in ext4_fill_super()
3777 if (DUMMY_ENCRYPTION_ENABLED(sbi) && !(sb->s_flags & MS_RDONLY) && in ext4_fill_super()
3788 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); in ext4_fill_super()
3835 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_fill_super()
3836 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_fill_super()
3839 if (sbi->s_want_extra_isize < in ext4_fill_super()
3841 sbi->s_want_extra_isize = in ext4_fill_super()
3843 if (sbi->s_want_extra_isize < in ext4_fill_super()
3845 sbi->s_want_extra_isize = in ext4_fill_super()
3850 if (EXT4_GOOD_OLD_INODE_SIZE + sbi->s_want_extra_isize > in ext4_fill_super()
3851 sbi->s_inode_size) { in ext4_fill_super()
3852 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_fill_super()
3876 ext4_free_blocks_count_set(sbi->s_es, in ext4_fill_super()
3877 EXT4_C2B(sbi, block)); in ext4_fill_super()
3878 err = percpu_counter_init(&sbi->s_freeclusters_counter, block, in ext4_fill_super()
3882 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei); in ext4_fill_super()
3883 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, in ext4_fill_super()
3887 err = percpu_counter_init(&sbi->s_dirs_counter, in ext4_fill_super()
3890 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0, in ext4_fill_super()
3949 "Opts: %s%s%s", descr, sbi->s_es->s_mount_opts, in ext4_fill_super()
3950 *sbi->s_es->s_mount_opts ? "; " : "", orig_data); in ext4_fill_super()
3953 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ in ext4_fill_super()
3956 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
3957 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
3958 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
3976 if (sbi->s_flex_groups) in ext4_fill_super()
3977 kvfree(sbi->s_flex_groups); in ext4_fill_super()
3978 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_fill_super()
3979 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_fill_super()
3980 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_fill_super()
3981 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_fill_super()
3993 if (sbi->s_journal) { in ext4_fill_super()
3994 jbd2_journal_destroy(sbi->s_journal); in ext4_fill_super()
3995 sbi->s_journal = NULL; in ext4_fill_super()
3998 ext4_es_unregister_shrinker(sbi); in ext4_fill_super()
4000 del_timer_sync(&sbi->s_err_report); in ext4_fill_super()
4001 if (sbi->s_mmp_tsk) in ext4_fill_super()
4002 kthread_stop(sbi->s_mmp_tsk); in ext4_fill_super()
4005 brelse(sbi->s_group_desc[i]); in ext4_fill_super()
4006 kvfree(sbi->s_group_desc); in ext4_fill_super()
4008 if (sbi->s_chksum_driver) in ext4_fill_super()
4009 crypto_free_shash(sbi->s_chksum_driver); in ext4_fill_super()
4012 kfree(sbi->s_qf_names[i]); in ext4_fill_super()
4014 ext4_blkdev_remove(sbi); in ext4_fill_super()
4018 kfree(sbi->s_blockgroup_lock); in ext4_fill_super()
4019 kfree(sbi); in ext4_fill_super()
4032 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params() local
4034 journal->j_commit_interval = sbi->s_commit_interval; in ext4_init_journal_params()
4035 journal->j_min_batch_time = sbi->s_min_batch_time; in ext4_init_journal_params()
4036 journal->j_max_batch_time = sbi->s_max_batch_time; in ext4_init_journal_params()
4437 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs() local
4440 flush_workqueue(sbi->rsv_conversion_wq); in ext4_sync_fs()
4451 if (sbi->s_journal) { in ext4_sync_fs()
4452 target = jbd2_get_latest_transaction(sbi->s_journal); in ext4_sync_fs()
4453 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER && in ext4_sync_fs()
4454 !jbd2_trans_will_send_data_barrier(sbi->s_journal, target)) in ext4_sync_fs()
4457 if (jbd2_journal_start_commit(sbi->s_journal, &target)) { in ext4_sync_fs()
4459 ret = jbd2_log_wait_commit(sbi->s_journal, in ext4_sync_fs()
4553 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_remount() local
4567 old_opts.s_mount_opt = sbi->s_mount_opt; in ext4_remount()
4568 old_opts.s_mount_opt2 = sbi->s_mount_opt2; in ext4_remount()
4569 old_opts.s_resuid = sbi->s_resuid; in ext4_remount()
4570 old_opts.s_resgid = sbi->s_resgid; in ext4_remount()
4571 old_opts.s_commit_interval = sbi->s_commit_interval; in ext4_remount()
4572 old_opts.s_min_batch_time = sbi->s_min_batch_time; in ext4_remount()
4573 old_opts.s_max_batch_time = sbi->s_max_batch_time; in ext4_remount()
4575 old_opts.s_jquota_fmt = sbi->s_jquota_fmt; in ext4_remount()
4577 if (sbi->s_qf_names[i]) { in ext4_remount()
4578 old_opts.s_qf_names[i] = kstrdup(sbi->s_qf_names[i], in ext4_remount()
4589 if (sbi->s_journal && sbi->s_journal->j_task->io_context) in ext4_remount()
4590 journal_ioprio = sbi->s_journal->j_task->io_context->ioprio; in ext4_remount()
4601 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM; in ext4_remount()
4625 if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_DAX) { in ext4_remount()
4628 sbi->s_mount_opt ^= EXT4_MOUNT_DAX; in ext4_remount()
4631 if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) in ext4_remount()
4637 es = sbi->s_es; in ext4_remount()
4639 if (sbi->s_journal) { in ext4_remount()
4640 ext4_init_journal_params(sb, sbi->s_journal); in ext4_remount()
4641 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); in ext4_remount()
4648 if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) { in ext4_remount()
4673 (sbi->s_mount_state & EXT4_VALID_FS)) in ext4_remount()
4674 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_remount()
4676 if (sbi->s_journal) in ext4_remount()
4689 for (g = 0; g < sbi->s_groups_count; g++) { in ext4_remount()
4723 if (sbi->s_journal) in ext4_remount()
4725 sbi->s_mount_state = le16_to_cpu(es->s_state); in ext4_remount()
4751 if (sbi->s_journal == NULL && !(old_sb_flags & MS_RDONLY)) in ext4_remount()
4776 sbi->s_mount_opt = old_opts.s_mount_opt; in ext4_remount()
4777 sbi->s_mount_opt2 = old_opts.s_mount_opt2; in ext4_remount()
4778 sbi->s_resuid = old_opts.s_resuid; in ext4_remount()
4779 sbi->s_resgid = old_opts.s_resgid; in ext4_remount()
4780 sbi->s_commit_interval = old_opts.s_commit_interval; in ext4_remount()
4781 sbi->s_min_batch_time = old_opts.s_min_batch_time; in ext4_remount()
4782 sbi->s_max_batch_time = old_opts.s_max_batch_time; in ext4_remount()
4784 sbi->s_jquota_fmt = old_opts.s_jquota_fmt; in ext4_remount()
4786 kfree(sbi->s_qf_names[i]); in ext4_remount()
4787 sbi->s_qf_names[i] = old_opts.s_qf_names[i]; in ext4_remount()
4797 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs() local
4798 struct ext4_super_block *es = sbi->s_es; in ext4_statfs()
4802 resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters)); in ext4_statfs()
4805 overhead = sbi->s_overhead; in ext4_statfs()
4809 buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead); in ext4_statfs()
4810 bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) - in ext4_statfs()
4811 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter); in ext4_statfs()
4813 buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0)); in ext4_statfs()
4819 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); in ext4_statfs()
4902 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_dquot_dirty() local
4906 sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { in ext4_mark_dquot_dirty()