Lines Matching refs:sbi

130 	struct ext4_sb_info *sbi = EXT4_SB(sb);  in ext4_superblock_csum()  local
134 csum = ext4_chksum(sbi, ~0, (char *)es, offset); in ext4_superblock_csum()
346 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_journal_commit_callback() local
351 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
356 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
358 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
360 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
740 static void ext4_blkdev_remove(struct ext4_sb_info *sbi) in ext4_blkdev_remove() argument
743 bdev = sbi->journal_bdev; in ext4_blkdev_remove()
746 sbi->journal_bdev = NULL; in ext4_blkdev_remove()
755 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
760 le32_to_cpu(sbi->s_es->s_last_orphan)); in dump_orphan_list()
763 list_for_each(l, &sbi->s_orphan) { in dump_orphan_list()
775 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super() local
776 struct ext4_super_block *es = sbi->s_es; in ext4_put_super()
782 flush_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
783 destroy_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
785 if (sbi->s_journal) { in ext4_put_super()
786 err = jbd2_journal_destroy(sbi->s_journal); in ext4_put_super()
787 sbi->s_journal = NULL; in ext4_put_super()
792 ext4_es_unregister_shrinker(sbi); in ext4_put_super()
793 del_timer_sync(&sbi->s_err_report); in ext4_put_super()
801 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_put_super()
806 if (sbi->s_proc) { in ext4_put_super()
807 remove_proc_entry("options", sbi->s_proc); in ext4_put_super()
810 kobject_del(&sbi->s_kobj); in ext4_put_super()
812 for (i = 0; i < sbi->s_gdb_count; i++) in ext4_put_super()
813 brelse(sbi->s_group_desc[i]); in ext4_put_super()
814 kvfree(sbi->s_group_desc); in ext4_put_super()
815 kvfree(sbi->s_flex_groups); in ext4_put_super()
816 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_put_super()
817 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_put_super()
818 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_put_super()
819 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_put_super()
820 brelse(sbi->s_sbh); in ext4_put_super()
823 kfree(sbi->s_qf_names[i]); in ext4_put_super()
830 if (!list_empty(&sbi->s_orphan)) in ext4_put_super()
831 dump_orphan_list(sb, sbi); in ext4_put_super()
832 J_ASSERT(list_empty(&sbi->s_orphan)); in ext4_put_super()
836 if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) { in ext4_put_super()
842 sync_blockdev(sbi->journal_bdev); in ext4_put_super()
843 invalidate_bdev(sbi->journal_bdev); in ext4_put_super()
844 ext4_blkdev_remove(sbi); in ext4_put_super()
846 if (sbi->s_mb_cache) { in ext4_put_super()
847 ext4_xattr_destroy_cache(sbi->s_mb_cache); in ext4_put_super()
848 sbi->s_mb_cache = NULL; in ext4_put_super()
850 if (sbi->s_mmp_tsk) in ext4_put_super()
851 kthread_stop(sbi->s_mmp_tsk); in ext4_put_super()
857 kobject_put(&sbi->s_kobj); in ext4_put_super()
858 wait_for_completion(&sbi->s_kobj_unregister); in ext4_put_super()
859 if (sbi->s_chksum_driver) in ext4_put_super()
860 crypto_free_shash(sbi->s_chksum_driver); in ext4_put_super()
861 kfree(sbi->s_blockgroup_lock); in ext4_put_super()
862 kfree(sbi); in ext4_put_super()
1267 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_qf_name() local
1272 !sbi->s_qf_names[qtype]) { in set_qf_name()
1289 if (sbi->s_qf_names[qtype]) { in set_qf_name()
1290 if (strcmp(sbi->s_qf_names[qtype], qname) == 0) in set_qf_name()
1303 sbi->s_qf_names[qtype] = qname; in set_qf_name()
1314 struct ext4_sb_info *sbi = EXT4_SB(sb); in clear_qf_name() local
1317 sbi->s_qf_names[qtype]) { in clear_qf_name()
1322 kfree(sbi->s_qf_names[qtype]); in clear_qf_name()
1323 sbi->s_qf_names[qtype] = NULL; in clear_qf_name()
1438 struct ext4_sb_info *sbi = EXT4_SB(sb); in handle_mount_opt() local
1465 sbi->s_mount_flags |= EXT4_MF_FS_ABORTED; in handle_mount_opt()
1518 sbi->s_commit_interval = HZ * arg; in handle_mount_opt()
1520 sbi->s_max_batch_time = arg; in handle_mount_opt()
1522 sbi->s_min_batch_time = arg; in handle_mount_opt()
1530 sbi->s_inode_readahead_blks = arg; in handle_mount_opt()
1535 sbi->s_li_wait_mult = arg; in handle_mount_opt()
1537 sbi->s_max_dir_size_kb = arg; in handle_mount_opt()
1539 sbi->s_stripe = arg; in handle_mount_opt()
1546 sbi->s_resuid = uid; in handle_mount_opt()
1553 sbi->s_resgid = gid; in handle_mount_opt()
1609 sbi->s_mount_flags |= EXT4_MF_TEST_DUMMY_ENCRYPTION; in handle_mount_opt()
1618 if (!sbi->s_journal) in handle_mount_opt()
1627 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
1632 sbi->s_jquota_fmt != m->mount_opt) { in handle_mount_opt()
1644 sbi->s_jquota_fmt = m->mount_opt; in handle_mount_opt()
1663 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
1665 sbi->s_mount_opt &= ~m->mount_opt; in handle_mount_opt()
1675 struct ext4_sb_info *sbi = EXT4_SB(sb); in parse_options() local
1703 } else if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { in parse_options()
1704 if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA]) in parse_options()
1707 if (test_opt(sb, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA]) in parse_options()
1716 if (!sbi->s_jquota_fmt) { in parse_options()
1725 BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size); in parse_options()
1746 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options() local
1748 if (sbi->s_jquota_fmt) { in ext4_show_quota_options()
1751 switch (sbi->s_jquota_fmt) { in ext4_show_quota_options()
1765 if (sbi->s_qf_names[USRQUOTA]) in ext4_show_quota_options()
1766 seq_show_option(seq, "usrjquota", sbi->s_qf_names[USRQUOTA]); in ext4_show_quota_options()
1768 if (sbi->s_qf_names[GRPQUOTA]) in ext4_show_quota_options()
1769 seq_show_option(seq, "grpjquota", sbi->s_qf_names[GRPQUOTA]); in ext4_show_quota_options()
1791 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options() local
1792 struct ext4_super_block *es = sbi->s_es; in _ext4_show_options()
1793 int def_errors, def_mount_opt = nodefs ? 0 : sbi->s_def_mount_opt; in _ext4_show_options()
1800 if (sbi->s_sb_block != 1) in _ext4_show_options()
1801 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block); in _ext4_show_options()
1808 if (!(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt))) in _ext4_show_options()
1811 (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) || in _ext4_show_options()
1812 (!want_set && (sbi->s_mount_opt & m->mount_opt))) in _ext4_show_options()
1817 if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) || in _ext4_show_options()
1820 from_kuid_munged(&init_user_ns, sbi->s_resuid)); in _ext4_show_options()
1821 if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) || in _ext4_show_options()
1824 from_kgid_munged(&init_user_ns, sbi->s_resgid)); in _ext4_show_options()
1832 if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) in _ext4_show_options()
1833 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ); in _ext4_show_options()
1834 if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME) in _ext4_show_options()
1835 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time); in _ext4_show_options()
1836 if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) in _ext4_show_options()
1837 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time); in _ext4_show_options()
1840 if (nodefs || sbi->s_stripe) in _ext4_show_options()
1841 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe); in _ext4_show_options()
1842 if (EXT4_MOUNT_DATA_FLAGS & (sbi->s_mount_opt ^ def_mount_opt)) { in _ext4_show_options()
1851 sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS) in _ext4_show_options()
1853 sbi->s_inode_readahead_blks); in _ext4_show_options()
1856 (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT))) in _ext4_show_options()
1857 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult); in _ext4_show_options()
1858 if (nodefs || sbi->s_max_dir_size_kb) in _ext4_show_options()
1859 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb); in _ext4_show_options()
1897 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super() local
1907 if (!(sbi->s_mount_state & EXT4_VALID_FS)) in ext4_setup_super()
1910 else if (sbi->s_mount_state & EXT4_ERROR_FS) in ext4_setup_super()
1926 if (!sbi->s_journal) in ext4_setup_super()
1933 if (sbi->s_journal) in ext4_setup_super()
1942 sbi->s_groups_count, in ext4_setup_super()
1945 sbi->s_mount_opt, sbi->s_mount_opt2); in ext4_setup_super()
1953 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array() local
1957 if (!sbi->s_log_groups_per_flex) in ext4_alloc_flex_bg_array()
1960 size = ext4_flex_group(sbi, ngroup - 1) + 1; in ext4_alloc_flex_bg_array()
1961 if (size <= sbi->s_flex_groups_allocated) in ext4_alloc_flex_bg_array()
1972 if (sbi->s_flex_groups) { in ext4_alloc_flex_bg_array()
1973 memcpy(new_groups, sbi->s_flex_groups, in ext4_alloc_flex_bg_array()
1974 (sbi->s_flex_groups_allocated * in ext4_alloc_flex_bg_array()
1976 kvfree(sbi->s_flex_groups); in ext4_alloc_flex_bg_array()
1978 sbi->s_flex_groups = new_groups; in ext4_alloc_flex_bg_array()
1979 sbi->s_flex_groups_allocated = size / sizeof(struct flex_groups); in ext4_alloc_flex_bg_array()
1985 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info() local
1990 sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; in ext4_fill_flex_info()
1991 if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) { in ext4_fill_flex_info()
1992 sbi->s_log_groups_per_flex = 0; in ext4_fill_flex_info()
1996 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
2000 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_fill_flex_info()
2003 flex_group = ext4_flex_group(sbi, i); in ext4_fill_flex_info()
2005 &sbi->s_flex_groups[flex_group].free_inodes); in ext4_fill_flex_info()
2007 &sbi->s_flex_groups[flex_group].free_clusters); in ext4_fill_flex_info()
2009 &sbi->s_flex_groups[flex_group].used_dirs); in ext4_fill_flex_info()
2017 static __le16 ext4_group_desc_csum(struct ext4_sb_info *sbi, __u32 block_group, in ext4_group_desc_csum() argument
2024 if (ext4_has_metadata_csum(sbi->s_sb)) { in ext4_group_desc_csum()
2031 csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group, in ext4_group_desc_csum()
2033 csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp, in ext4_group_desc_csum()
2034 sbi->s_desc_size); in ext4_group_desc_csum()
2042 if (!(sbi->s_es->s_feature_ro_compat & in ext4_group_desc_csum()
2048 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid)); in ext4_group_desc_csum()
2053 if ((sbi->s_es->s_feature_incompat & in ext4_group_desc_csum()
2055 offset < le16_to_cpu(sbi->s_es->s_desc_size)) in ext4_group_desc_csum()
2057 le16_to_cpu(sbi->s_es->s_desc_size) - in ext4_group_desc_csum()
2087 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors() local
2088 ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block); in ext4_check_descriptors()
2094 ext4_group_t i, grp = sbi->s_groups_count; in ext4_check_descriptors()
2101 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_check_descriptors()
2104 if (i == sbi->s_groups_count - 1 || flexbg_flag) in ext4_check_descriptors()
2105 last_block = ext4_blocks_count(sbi->s_es) - 1; in ext4_check_descriptors()
2110 if ((grp == sbi->s_groups_count) && in ext4_check_descriptors()
2130 inode_table + sbi->s_itb_per_group - 1 > last_block) { in ext4_check_descriptors()
2140 i, le16_to_cpu(ext4_group_desc_csum(sbi, i, in ext4_check_descriptors()
2397 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc() local
2401 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg); in descriptor_loc()
2406 bg = sbi->s_desc_per_block * nr; in descriptor_loc()
2434 static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi) in ext4_get_stripe_size() argument
2436 unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride); in ext4_get_stripe_size()
2438 le32_to_cpu(sbi->s_es->s_raid_stripe_width); in ext4_get_stripe_size()
2441 if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
2442 ret = sbi->s_stripe; in ext4_get_stripe_size()
2443 else if (stripe_width <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
2445 else if (stride <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
2485 struct ext4_sb_info *sbi, in delayed_allocation_blocks_show() argument
2489 (s64) EXT4_C2B(sbi, in delayed_allocation_blocks_show()
2490 percpu_counter_sum(&sbi->s_dirtyclusters_counter))); in delayed_allocation_blocks_show()
2494 struct ext4_sb_info *sbi, char *buf) in session_write_kbytes_show() argument
2496 struct super_block *sb = sbi->s_buddy_cache->i_sb; in session_write_kbytes_show()
2502 sbi->s_sectors_written_start) >> 1); in session_write_kbytes_show()
2506 struct ext4_sb_info *sbi, char *buf) in lifetime_write_kbytes_show() argument
2508 struct super_block *sb = sbi->s_buddy_cache->i_sb; in lifetime_write_kbytes_show()
2513 (unsigned long long)(sbi->s_kbytes_written + in lifetime_write_kbytes_show()
2519 struct ext4_sb_info *sbi, in inode_readahead_blks_store() argument
2532 sbi->s_inode_readahead_blks = t; in inode_readahead_blks_store()
2537 struct ext4_sb_info *sbi, char *buf) in sbi_ui_show() argument
2539 unsigned int *ui = (unsigned int *) (((char *) sbi) + a->u.offset); in sbi_ui_show()
2545 struct ext4_sb_info *sbi, in sbi_ui_store() argument
2548 unsigned int *ui = (unsigned int *) (((char *) sbi) + a->u.offset); in sbi_ui_store()
2560 struct ext4_sb_info *sbi, char *buf) in es_ui_show() argument
2563 unsigned int *ui = (unsigned int *) (((char *) sbi->s_es) + in es_ui_show()
2570 struct ext4_sb_info *sbi, char *buf) in reserved_clusters_show() argument
2573 (unsigned long long) atomic64_read(&sbi->s_resv_clusters)); in reserved_clusters_show()
2577 struct ext4_sb_info *sbi, in reserved_clusters_store() argument
2585 ret = ext4_reserve_clusters(sbi, val); in reserved_clusters_store()
2591 struct ext4_sb_info *sbi, in trigger_test_error() argument
2603 ext4_error(sbi->s_sb, "%.*s", len, buf); in trigger_test_error()
2608 struct ext4_sb_info *sbi, char *buf) in sbi_deprecated_show() argument
2726 struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info, in ext4_attr_show() local
2730 return a->show ? a->show(a, sbi, buf) : 0; in ext4_attr_show()
2737 struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info, in ext4_attr_store() local
2741 return a->store ? a->store(a, sbi, buf, len) : 0; in ext4_attr_store()
2746 struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info, in ext4_sb_release() local
2748 complete(&sbi->s_kobj_unregister); in ext4_sb_release()
2862 struct ext4_sb_info *sbi; in print_daily_error_info() local
2865 sbi = EXT4_SB(sb); in print_daily_error_info()
2866 es = sbi->s_es; in print_daily_error_info()
2900 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ); /* Once a day */ in print_daily_error_info()
2953 struct ext4_sb_info *sbi; in ext4_remove_li_request() local
2958 sbi = elr->lr_sbi; in ext4_remove_li_request()
2961 sbi->s_li_request = NULL; in ext4_remove_li_request()
3143 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_li_request_new() local
3151 elr->lr_sbi = sbi; in ext4_li_request_new()
3167 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request() local
3173 if (sbi->s_li_request != NULL) { in ext4_register_li_request()
3178 sbi->s_li_request->lr_timeout = 0; in ext4_register_li_request()
3203 sbi->s_li_request = elr; in ext4_register_li_request()
3243 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set() local
3255 jbd2_journal_clear_features(sbi->s_journal, in set_journal_csum_feature_set()
3260 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
3265 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
3268 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
3271 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
3296 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead() local
3304 sbi->s_itb_per_group + 2); in count_overhead()
3306 first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + in count_overhead()
3313 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
3318 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
3322 if (b >= first_block && b + sbi->s_itb_per_group <= last_block) in count_overhead()
3323 for (j = 0; j < sbi->s_itb_per_group; j++, b++) { in count_overhead()
3324 int c = EXT4_B2C(sbi, b - first_block); in count_overhead()
3336 ext4_set_bit(EXT4_B2C(sbi, s++), buf); in count_overhead()
3351 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead() local
3352 struct ext4_super_block *es = sbi->s_es; in ext4_calculate_overhead()
3369 overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block)); in ext4_calculate_overhead()
3384 if (sbi->s_journal && !sbi->journal_bdev) in ext4_calculate_overhead()
3385 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_maxlen); in ext4_calculate_overhead()
3387 sbi->s_overhead = overhead; in ext4_calculate_overhead()
3424 static int ext4_reserve_clusters(struct ext4_sb_info *sbi, ext4_fsblk_t count) in ext4_reserve_clusters() argument
3426 ext4_fsblk_t clusters = ext4_blocks_count(sbi->s_es) >> in ext4_reserve_clusters()
3427 sbi->s_cluster_bits; in ext4_reserve_clusters()
3432 atomic64_set(&sbi->s_resv_clusters, count); in ext4_reserve_clusters()
3441 struct ext4_sb_info *sbi; in ext4_fill_super() local
3461 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); in ext4_fill_super()
3462 if (!sbi) in ext4_fill_super()
3465 sbi->s_blockgroup_lock = in ext4_fill_super()
3467 if (!sbi->s_blockgroup_lock) { in ext4_fill_super()
3468 kfree(sbi); in ext4_fill_super()
3471 sb->s_fs_info = sbi; in ext4_fill_super()
3472 sbi->s_sb = sb; in ext4_fill_super()
3473 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS; in ext4_fill_super()
3474 sbi->s_sb_block = sb_block; in ext4_fill_super()
3476 sbi->s_sectors_written_start = in ext4_fill_super()
3480 sbi->s_file_encryption_mode = EXT4_ENCRYPTION_MODE_AES_256_XTS; in ext4_fill_super()
3481 sbi->s_dir_encryption_mode = EXT4_ENCRYPTION_MODE_INVALID; in ext4_fill_super()
3516 sbi->s_es = es; in ext4_fill_super()
3520 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written); in ext4_fill_super()
3540 sbi->s_chksum_driver = crypto_alloc_shash("crc32c", 0, 0); in ext4_fill_super()
3541 if (IS_ERR(sbi->s_chksum_driver)) { in ext4_fill_super()
3543 ret = PTR_ERR(sbi->s_chksum_driver); in ext4_fill_super()
3544 sbi->s_chksum_driver = NULL; in ext4_fill_super()
3559 sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid, in ext4_fill_super()
3587 if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) in ext4_fill_super()
3589 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE) in ext4_fill_super()
3598 sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid)); in ext4_fill_super()
3599 sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid)); in ext4_fill_super()
3600 sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ; in ext4_fill_super()
3601 sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME; in ext4_fill_super()
3602 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; in ext4_fill_super()
3619 sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; in ext4_fill_super()
3621 if (!parse_options((char *) sbi->s_es->s_mount_opts, sb, in ext4_fill_super()
3625 sbi->s_es->s_mount_opts); in ext4_fill_super()
3627 sbi->s_def_mount_opt = sbi->s_mount_opt; in ext4_fill_super()
3714 if (sbi->s_mount_opt & EXT4_MOUNT_DAX) { in ext4_fill_super()
3752 sbi->s_es = es; in ext4_fill_super()
3762 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_fill_super()
3767 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE; in ext4_fill_super()
3768 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO; in ext4_fill_super()
3770 sbi->s_inode_size = le16_to_cpu(es->s_inode_size); in ext4_fill_super()
3771 sbi->s_first_ino = le32_to_cpu(es->s_first_ino); in ext4_fill_super()
3772 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) || in ext4_fill_super()
3773 (!is_power_of_2(sbi->s_inode_size)) || in ext4_fill_super()
3774 (sbi->s_inode_size > blocksize)) { in ext4_fill_super()
3777 sbi->s_inode_size); in ext4_fill_super()
3780 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) in ext4_fill_super()
3784 sbi->s_desc_size = le16_to_cpu(es->s_desc_size); in ext4_fill_super()
3786 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT || in ext4_fill_super()
3787 sbi->s_desc_size > EXT4_MAX_DESC_SIZE || in ext4_fill_super()
3788 !is_power_of_2(sbi->s_desc_size)) { in ext4_fill_super()
3791 sbi->s_desc_size); in ext4_fill_super()
3795 sbi->s_desc_size = EXT4_MIN_DESC_SIZE; in ext4_fill_super()
3797 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group); in ext4_fill_super()
3798 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group); in ext4_fill_super()
3802 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb); in ext4_fill_super()
3803 if (sbi->s_inodes_per_block == 0) in ext4_fill_super()
3805 sbi->s_itb_per_group = sbi->s_inodes_per_group / in ext4_fill_super()
3806 sbi->s_inodes_per_block; in ext4_fill_super()
3807 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb); in ext4_fill_super()
3808 sbi->s_sbh = bh; in ext4_fill_super()
3809 sbi->s_mount_state = le16_to_cpu(es->s_state); in ext4_fill_super()
3810 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_fill_super()
3811 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_fill_super()
3814 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]); in ext4_fill_super()
3815 sbi->s_def_hash_version = es->s_def_hash_version; in ext4_fill_super()
3819 sbi->s_hash_unsigned = 3; in ext4_fill_super()
3825 sbi->s_hash_unsigned = 3; in ext4_fill_super()
3845 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) - in ext4_fill_super()
3847 sbi->s_clusters_per_group = in ext4_fill_super()
3849 if (sbi->s_clusters_per_group > blocksize * 8) { in ext4_fill_super()
3852 sbi->s_clusters_per_group); in ext4_fill_super()
3855 if (sbi->s_blocks_per_group != in ext4_fill_super()
3856 (sbi->s_clusters_per_group * (clustersize / blocksize))) { in ext4_fill_super()
3859 sbi->s_blocks_per_group, in ext4_fill_super()
3860 sbi->s_clusters_per_group); in ext4_fill_super()
3870 if (sbi->s_blocks_per_group > blocksize * 8) { in ext4_fill_super()
3873 sbi->s_blocks_per_group); in ext4_fill_super()
3876 sbi->s_clusters_per_group = sbi->s_blocks_per_group; in ext4_fill_super()
3877 sbi->s_cluster_bits = 0; in ext4_fill_super()
3879 sbi->s_cluster_ratio = clustersize / blocksize; in ext4_fill_super()
3881 if (sbi->s_inodes_per_group > blocksize * 8) { in ext4_fill_super()
3884 sbi->s_inodes_per_group); in ext4_fill_super()
3889 if (sbi->s_blocks_per_group == clustersize << 3) in ext4_fill_super()
3936 "blocks per group %lu)", sbi->s_groups_count, in ext4_fill_super()
3942 sbi->s_groups_count = blocks_count; in ext4_fill_super()
3943 sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, in ext4_fill_super()
3945 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_fill_super()
3947 sbi->s_group_desc = ext4_kvmalloc(db_count * in ext4_fill_super()
3950 if (sbi->s_group_desc == NULL) { in ext4_fill_super()
3957 sbi->s_proc = proc_mkdir(sb->s_id, ext4_proc_root); in ext4_fill_super()
3959 if (sbi->s_proc) in ext4_fill_super()
3960 proc_create_data("options", S_IRUGO, sbi->s_proc, in ext4_fill_super()
3963 bgl_lock_init(sbi->s_blockgroup_lock); in ext4_fill_super()
3967 sbi->s_group_desc[i] = sb_bread_unmovable(sb, block); in ext4_fill_super()
3968 if (!sbi->s_group_desc[i]) { in ext4_fill_super()
3980 sbi->s_gdb_count = db_count; in ext4_fill_super()
3981 get_random_bytes(&sbi->s_next_generation, sizeof(u32)); in ext4_fill_super()
3982 spin_lock_init(&sbi->s_next_gen_lock); in ext4_fill_super()
3984 setup_timer(&sbi->s_err_report, print_daily_error_info, in ext4_fill_super()
3988 if (ext4_es_register_shrinker(sbi)) in ext4_fill_super()
3991 sbi->s_stripe = ext4_get_stripe_size(sbi); in ext4_fill_super()
3992 sbi->s_extent_max_zeroout_kb = 32; in ext4_fill_super()
4010 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ in ext4_fill_super()
4011 mutex_init(&sbi->s_orphan_lock); in ext4_fill_super()
4039 sbi->s_journal = NULL; in ext4_fill_super()
4066 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) in ext4_fill_super()
4075 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_fill_super()
4083 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); in ext4_fill_super()
4085 sbi->s_journal->j_commit_callback = ext4_journal_commit_callback; in ext4_fill_super()
4089 sbi->s_mb_cache = ext4_xattr_create_cache(sb->s_id); in ext4_fill_super()
4090 if (!sbi->s_mb_cache) { in ext4_fill_super()
4096 if (unlikely(sbi->s_mount_flags & EXT4_MF_TEST_DUMMY_ENCRYPTION) && in ext4_fill_super()
4108 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); in ext4_fill_super()
4155 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_fill_super()
4156 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_fill_super()
4160 if (sbi->s_want_extra_isize < in ext4_fill_super()
4162 sbi->s_want_extra_isize = in ext4_fill_super()
4164 if (sbi->s_want_extra_isize < in ext4_fill_super()
4166 sbi->s_want_extra_isize = in ext4_fill_super()
4171 if (EXT4_GOOD_OLD_INODE_SIZE + sbi->s_want_extra_isize > in ext4_fill_super()
4172 sbi->s_inode_size) { in ext4_fill_super()
4173 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_fill_super()
4179 err = ext4_reserve_clusters(sbi, ext4_calculate_resv_clusters(sb)); in ext4_fill_super()
4202 ext4_free_blocks_count_set(sbi->s_es, in ext4_fill_super()
4203 EXT4_C2B(sbi, block)); in ext4_fill_super()
4204 err = percpu_counter_init(&sbi->s_freeclusters_counter, block, in ext4_fill_super()
4208 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei); in ext4_fill_super()
4209 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, in ext4_fill_super()
4213 err = percpu_counter_init(&sbi->s_dirs_counter, in ext4_fill_super()
4216 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0, in ext4_fill_super()
4235 sbi->s_kobj.kset = ext4_kset; in ext4_fill_super()
4236 init_completion(&sbi->s_kobj_unregister); in ext4_fill_super()
4237 err = kobject_init_and_add(&sbi->s_kobj, &ext4_ktype, NULL, in ext4_fill_super()
4278 "Opts: %s%s%s", descr, sbi->s_es->s_mount_opts, in ext4_fill_super()
4279 *sbi->s_es->s_mount_opts ? "; " : "", orig_data); in ext4_fill_super()
4282 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ in ext4_fill_super()
4285 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
4286 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
4287 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
4299 kobject_del(&sbi->s_kobj); in ext4_fill_super()
4305 if (sbi->s_flex_groups) in ext4_fill_super()
4306 kvfree(sbi->s_flex_groups); in ext4_fill_super()
4307 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_fill_super()
4308 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_fill_super()
4309 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_fill_super()
4310 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_fill_super()
4322 if (sbi->s_journal) { in ext4_fill_super()
4323 jbd2_journal_destroy(sbi->s_journal); in ext4_fill_super()
4324 sbi->s_journal = NULL; in ext4_fill_super()
4327 ext4_es_unregister_shrinker(sbi); in ext4_fill_super()
4329 del_timer_sync(&sbi->s_err_report); in ext4_fill_super()
4330 if (sbi->s_mmp_tsk) in ext4_fill_super()
4331 kthread_stop(sbi->s_mmp_tsk); in ext4_fill_super()
4334 brelse(sbi->s_group_desc[i]); in ext4_fill_super()
4335 kvfree(sbi->s_group_desc); in ext4_fill_super()
4337 if (sbi->s_chksum_driver) in ext4_fill_super()
4338 crypto_free_shash(sbi->s_chksum_driver); in ext4_fill_super()
4339 if (sbi->s_proc) { in ext4_fill_super()
4340 remove_proc_entry("options", sbi->s_proc); in ext4_fill_super()
4345 kfree(sbi->s_qf_names[i]); in ext4_fill_super()
4347 ext4_blkdev_remove(sbi); in ext4_fill_super()
4351 kfree(sbi->s_blockgroup_lock); in ext4_fill_super()
4352 kfree(sbi); in ext4_fill_super()
4365 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params() local
4367 journal->j_commit_interval = sbi->s_commit_interval; in ext4_init_journal_params()
4368 journal->j_min_batch_time = sbi->s_min_batch_time; in ext4_init_journal_params()
4369 journal->j_max_batch_time = sbi->s_max_batch_time; in ext4_init_journal_params()
4769 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs() local
4772 flush_workqueue(sbi->rsv_conversion_wq); in ext4_sync_fs()
4783 if (sbi->s_journal) { in ext4_sync_fs()
4784 target = jbd2_get_latest_transaction(sbi->s_journal); in ext4_sync_fs()
4785 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER && in ext4_sync_fs()
4786 !jbd2_trans_will_send_data_barrier(sbi->s_journal, target)) in ext4_sync_fs()
4789 if (jbd2_journal_start_commit(sbi->s_journal, &target)) { in ext4_sync_fs()
4791 ret = jbd2_log_wait_commit(sbi->s_journal, in ext4_sync_fs()
4885 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_remount() local
4899 old_opts.s_mount_opt = sbi->s_mount_opt; in ext4_remount()
4900 old_opts.s_mount_opt2 = sbi->s_mount_opt2; in ext4_remount()
4901 old_opts.s_resuid = sbi->s_resuid; in ext4_remount()
4902 old_opts.s_resgid = sbi->s_resgid; in ext4_remount()
4903 old_opts.s_commit_interval = sbi->s_commit_interval; in ext4_remount()
4904 old_opts.s_min_batch_time = sbi->s_min_batch_time; in ext4_remount()
4905 old_opts.s_max_batch_time = sbi->s_max_batch_time; in ext4_remount()
4907 old_opts.s_jquota_fmt = sbi->s_jquota_fmt; in ext4_remount()
4909 if (sbi->s_qf_names[i]) { in ext4_remount()
4910 old_opts.s_qf_names[i] = kstrdup(sbi->s_qf_names[i], in ext4_remount()
4921 if (sbi->s_journal && sbi->s_journal->j_task->io_context) in ext4_remount()
4922 journal_ioprio = sbi->s_journal->j_task->io_context->ioprio; in ext4_remount()
4933 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM; in ext4_remount()
4957 if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_DAX) { in ext4_remount()
4960 sbi->s_mount_opt ^= EXT4_MOUNT_DAX; in ext4_remount()
4963 if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) in ext4_remount()
4969 es = sbi->s_es; in ext4_remount()
4971 if (sbi->s_journal) { in ext4_remount()
4972 ext4_init_journal_params(sb, sbi->s_journal); in ext4_remount()
4973 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); in ext4_remount()
4980 if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) { in ext4_remount()
5005 (sbi->s_mount_state & EXT4_VALID_FS)) in ext4_remount()
5006 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_remount()
5008 if (sbi->s_journal) in ext4_remount()
5022 for (g = 0; g < sbi->s_groups_count; g++) { in ext4_remount()
5029 g, le16_to_cpu(ext4_group_desc_csum(sbi, g, gdp)), in ext4_remount()
5056 if (sbi->s_journal) in ext4_remount()
5058 sbi->s_mount_state = le16_to_cpu(es->s_state); in ext4_remount()
5085 if (sbi->s_journal == NULL && !(old_sb_flags & MS_RDONLY)) in ext4_remount()
5111 sbi->s_mount_opt = old_opts.s_mount_opt; in ext4_remount()
5112 sbi->s_mount_opt2 = old_opts.s_mount_opt2; in ext4_remount()
5113 sbi->s_resuid = old_opts.s_resuid; in ext4_remount()
5114 sbi->s_resgid = old_opts.s_resgid; in ext4_remount()
5115 sbi->s_commit_interval = old_opts.s_commit_interval; in ext4_remount()
5116 sbi->s_min_batch_time = old_opts.s_min_batch_time; in ext4_remount()
5117 sbi->s_max_batch_time = old_opts.s_max_batch_time; in ext4_remount()
5119 sbi->s_jquota_fmt = old_opts.s_jquota_fmt; in ext4_remount()
5121 kfree(sbi->s_qf_names[i]); in ext4_remount()
5122 sbi->s_qf_names[i] = old_opts.s_qf_names[i]; in ext4_remount()
5132 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs() local
5133 struct ext4_super_block *es = sbi->s_es; in ext4_statfs()
5137 resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters)); in ext4_statfs()
5140 overhead = sbi->s_overhead; in ext4_statfs()
5144 buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead); in ext4_statfs()
5145 bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) - in ext4_statfs()
5146 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter); in ext4_statfs()
5148 buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0)); in ext4_statfs()
5154 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); in ext4_statfs()
5237 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_dquot_dirty() local
5241 sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { in ext4_mark_dquot_dirty()