Lines Matching full:sb
70 static void ext4_update_super(struct super_block *sb);
71 static int ext4_commit_super(struct super_block *sb);
72 static int ext4_mark_recovery_complete(struct super_block *sb,
74 static int ext4_clear_journal_err(struct super_block *sb,
76 static int ext4_sync_fs(struct super_block *sb, int wait);
78 static int ext4_unfreeze(struct super_block *sb);
79 static int ext4_freeze(struct super_block *sb);
80 static inline int ext2_feature_set_ok(struct super_block *sb);
81 static inline int ext3_feature_set_ok(struct super_block *sb);
82 static void ext4_unregister_li_request(struct super_block *sb);
84 static struct inode *ext4_get_journal_inode(struct super_block *sb,
88 struct super_block *sb);
89 static void ext4_apply_options(struct fs_context *fc, struct super_block *sb);
95 static void ext4_kill_sb(struct super_block *sb);
143 #define IS_EXT2_SB(sb) ((sb)->s_type == &ext2_fs_type) argument
145 #define IS_EXT2_SB(sb) (0) argument
159 #define IS_EXT3_SB(sb) ((sb)->s_type == &ext3_fs_type) argument
229 static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb, in __ext4_sb_bread_gfp() argument
236 bh = sb_getblk_gfp(sb, block, gfp); in __ext4_sb_bread_gfp()
250 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block, in ext4_sb_bread() argument
253 gfp_t gfp = mapping_gfp_constraint(sb->s_bdev->bd_mapping, in ext4_sb_bread()
256 return __ext4_sb_bread_gfp(sb, block, op_flags, gfp); in ext4_sb_bread()
259 struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb, in ext4_sb_bread_unmovable() argument
262 gfp_t gfp = mapping_gfp_constraint(sb->s_bdev->bd_mapping, in ext4_sb_bread_unmovable()
265 return __ext4_sb_bread_gfp(sb, block, 0, gfp); in ext4_sb_bread_unmovable()
268 void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block) in ext4_sb_breadahead_unmovable() argument
270 struct buffer_head *bh = bdev_getblk(sb->s_bdev, block, in ext4_sb_breadahead_unmovable()
271 sb->s_blocksize, GFP_NOWAIT | __GFP_NOWARN); in ext4_sb_breadahead_unmovable()
280 static int ext4_verify_csum_type(struct super_block *sb, in ext4_verify_csum_type() argument
283 if (!ext4_has_feature_metadata_csum(sb)) in ext4_verify_csum_type()
289 __le32 ext4_superblock_csum(struct super_block *sb, in ext4_superblock_csum() argument
292 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_superblock_csum()
301 static int ext4_superblock_csum_verify(struct super_block *sb, in ext4_superblock_csum_verify() argument
304 if (!ext4_has_feature_metadata_csum(sb)) in ext4_superblock_csum_verify()
307 return es->s_checksum == ext4_superblock_csum(sb, es); in ext4_superblock_csum_verify()
310 void ext4_superblock_csum_set(struct super_block *sb) in ext4_superblock_csum_set() argument
312 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_superblock_csum_set()
314 if (!ext4_has_feature_metadata_csum(sb)) in ext4_superblock_csum_set()
317 es->s_checksum = ext4_superblock_csum(sb, es); in ext4_superblock_csum_set()
320 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, in ext4_block_bitmap() argument
324 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_block_bitmap()
328 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, in ext4_inode_bitmap() argument
332 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_bitmap()
336 ext4_fsblk_t ext4_inode_table(struct super_block *sb, in ext4_inode_table() argument
340 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_table()
344 __u32 ext4_free_group_clusters(struct super_block *sb, in ext4_free_group_clusters() argument
348 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_group_clusters()
352 __u32 ext4_free_inodes_count(struct super_block *sb, in ext4_free_inodes_count() argument
356 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_inodes_count()
360 __u32 ext4_used_dirs_count(struct super_block *sb, in ext4_used_dirs_count() argument
364 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_used_dirs_count()
368 __u32 ext4_itable_unused_count(struct super_block *sb, in ext4_itable_unused_count() argument
372 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_itable_unused_count()
376 void ext4_block_bitmap_set(struct super_block *sb, in ext4_block_bitmap_set() argument
380 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_block_bitmap_set()
384 void ext4_inode_bitmap_set(struct super_block *sb, in ext4_inode_bitmap_set() argument
388 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_bitmap_set()
392 void ext4_inode_table_set(struct super_block *sb, in ext4_inode_table_set() argument
396 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_table_set()
400 void ext4_free_group_clusters_set(struct super_block *sb, in ext4_free_group_clusters_set() argument
404 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_group_clusters_set()
408 void ext4_free_inodes_set(struct super_block *sb, in ext4_free_inodes_set() argument
412 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_inodes_set()
416 void ext4_used_dirs_set(struct super_block *sb, in ext4_used_dirs_set() argument
420 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_used_dirs_set()
424 void ext4_itable_unused_set(struct super_block *sb, in ext4_itable_unused_set() argument
428 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_itable_unused_set()
462 * @sb: The superblock
464 static void ext4_maybe_update_superblock(struct super_block *sb) in ext4_maybe_update_superblock() argument
466 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_maybe_update_superblock()
474 if (ext4_emergency_state(sb) || sb_rdonly(sb) || in ext4_maybe_update_superblock()
475 !(sb->s_flags & SB_ACTIVE) || !journal || in ext4_maybe_update_superblock()
486 ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) - in ext4_maybe_update_superblock()
498 schedule_work(&EXT4_SB(sb)->s_sb_upd_work); in ext4_maybe_update_superblock()
503 struct super_block *sb = journal->j_private; in ext4_journal_commit_callback() local
507 ext4_process_freed_data(sb, txn->t_tid); in ext4_journal_commit_callback()
508 ext4_maybe_update_superblock(sb); in ext4_journal_commit_callback()
635 static void save_error_info(struct super_block *sb, int error, in save_error_info() argument
639 struct ext4_sb_info *sbi = EXT4_SB(sb); in save_error_info()
684 static void ext4_handle_error(struct super_block *sb, bool force_ro, int error, in ext4_handle_error() argument
688 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_handle_error()
689 bool continue_fs = !force_ro && test_opt(sb, ERRORS_CONT); in ext4_handle_error()
691 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_handle_error()
692 if (test_opt(sb, WARN_ON_ERROR)) in ext4_handle_error()
695 if (!continue_fs && !ext4_emergency_ro(sb) && journal) in ext4_handle_error()
698 if (!bdev_read_only(sb->s_bdev)) { in ext4_handle_error()
699 save_error_info(sb, error, ino, block, func, line); in ext4_handle_error()
706 * here in that case, just update the sb directly as the last in ext4_handle_error()
710 !ext4_test_mount_flag(sb, EXT4_MF_JOURNAL_DESTROY)) in ext4_handle_error()
711 schedule_work(&EXT4_SB(sb)->s_sb_upd_work); in ext4_handle_error()
713 ext4_commit_super(sb); in ext4_handle_error()
721 if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) { in ext4_handle_error()
723 sb->s_id); in ext4_handle_error()
726 if (ext4_emergency_ro(sb) || continue_fs) in ext4_handle_error()
729 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in ext4_handle_error()
731 * We don't set SB_RDONLY because that requires sb->s_umount in ext4_handle_error()
736 set_bit(EXT4_FLAGS_EMERGENCY_RO, &EXT4_SB(sb)->s_ext4_flags); in ext4_handle_error()
748 * through the journal to avoid collisions of other journalled sb in update_super_work()
791 * Write through journal failed. Write sb directly to get error info in update_super_work()
798 #define ext4_error_ratelimit(sb) \ argument
799 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
802 void __ext4_error(struct super_block *sb, const char *function, in __ext4_error() argument
809 if (unlikely(ext4_emergency_state(sb))) in __ext4_error()
812 trace_ext4_error(sb, function, line); in __ext4_error()
813 if (ext4_error_ratelimit(sb)) { in __ext4_error()
819 sb->s_id, function, line, current->comm, &vaf); in __ext4_error()
822 fsnotify_sb_error(sb, NULL, error ? error : EFSCORRUPTED); in __ext4_error()
824 ext4_handle_error(sb, force_ro, error, 0, block, function, line); in __ext4_error()
900 const char *ext4_decode_error(struct super_block *sb, int errno, in ext4_decode_error() argument
919 if (!sb || (EXT4_SB(sb)->s_journal && in ext4_decode_error()
920 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT)) in ext4_decode_error()
943 void __ext4_std_error(struct super_block *sb, const char *function, in __ext4_std_error() argument
949 if (unlikely(ext4_emergency_state(sb))) in __ext4_std_error()
955 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb)) in __ext4_std_error()
958 if (ext4_error_ratelimit(sb)) { in __ext4_std_error()
959 errstr = ext4_decode_error(sb, errno, nbuf); in __ext4_std_error()
961 sb->s_id, function, line, errstr); in __ext4_std_error()
963 fsnotify_sb_error(sb, NULL, errno ? errno : EFSCORRUPTED); in __ext4_std_error()
965 ext4_handle_error(sb, false, -errno, 0, 0, function, line); in __ext4_std_error()
968 void __ext4_msg(struct super_block *sb, in __ext4_msg() argument
974 if (sb) { in __ext4_msg()
975 atomic_inc(&EXT4_SB(sb)->s_msg_count); in __ext4_msg()
976 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), in __ext4_msg()
984 if (sb) in __ext4_msg()
985 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in __ext4_msg()
991 static int ext4_warning_ratelimit(struct super_block *sb) in ext4_warning_ratelimit() argument
993 atomic_inc(&EXT4_SB(sb)->s_warning_count); in ext4_warning_ratelimit()
994 return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), in ext4_warning_ratelimit()
998 void __ext4_warning(struct super_block *sb, const char *function, in __ext4_warning() argument
1004 if (!ext4_warning_ratelimit(sb)) in __ext4_warning()
1011 sb->s_id, function, line, &vaf); in __ext4_warning()
1034 struct super_block *sb, ext4_group_t grp, in __ext4_grp_locked_error() argument
1043 if (unlikely(ext4_emergency_state(sb))) in __ext4_grp_locked_error()
1046 trace_ext4_error(sb, function, line); in __ext4_grp_locked_error()
1047 if (ext4_error_ratelimit(sb)) { in __ext4_grp_locked_error()
1052 sb->s_id, function, line, grp); in __ext4_grp_locked_error()
1062 if (test_opt(sb, ERRORS_CONT)) { in __ext4_grp_locked_error()
1063 if (test_opt(sb, WARN_ON_ERROR)) in __ext4_grp_locked_error()
1065 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in __ext4_grp_locked_error()
1066 if (!bdev_read_only(sb->s_bdev)) { in __ext4_grp_locked_error()
1067 save_error_info(sb, EFSCORRUPTED, ino, block, function, in __ext4_grp_locked_error()
1069 schedule_work(&EXT4_SB(sb)->s_sb_upd_work); in __ext4_grp_locked_error()
1073 ext4_unlock_group(sb, grp); in __ext4_grp_locked_error()
1074 ext4_handle_error(sb, false, EFSCORRUPTED, ino, block, function, line); in __ext4_grp_locked_error()
1086 ext4_lock_group(sb, grp); in __ext4_grp_locked_error()
1090 void ext4_mark_group_bitmap_corrupted(struct super_block *sb, in ext4_mark_group_bitmap_corrupted() argument
1094 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_group_bitmap_corrupted()
1095 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in ext4_mark_group_bitmap_corrupted()
1096 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL); in ext4_mark_group_bitmap_corrupted()
1115 count = ext4_free_inodes_count(sb, gdp); in ext4_mark_group_bitmap_corrupted()
1122 void ext4_update_dynamic_rev(struct super_block *sb) in ext4_update_dynamic_rev() argument
1124 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_update_dynamic_rev()
1129 ext4_warning(sb, in ext4_update_dynamic_rev()
1152 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
1156 ext4_msg(sb, KERN_ERR, "sb orphan head is %d", in dump_orphan_list()
1171 static int ext4_quota_off(struct super_block *sb, int type);
1173 static inline void ext4_quotas_off(struct super_block *sb, int type) in ext4_quotas_off() argument
1179 ext4_quota_off(sb, type); in ext4_quotas_off()
1186 static inline char *get_qf_name(struct super_block *sb, in get_qf_name() argument
1191 lockdep_is_held(&sb->s_umount)); in get_qf_name()
1194 static inline void ext4_quotas_off(struct super_block *sb, int type) in ext4_quotas_off() argument
1270 static void ext4_put_super(struct super_block *sb) in ext4_put_super() argument
1272 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super()
1287 ext4_unregister_sysfs(sb); in ext4_put_super()
1290 ext4_msg(sb, KERN_INFO, "unmounting filesystem %pU.", in ext4_put_super()
1291 &sb->s_uuid); in ext4_put_super()
1293 ext4_unregister_li_request(sb); in ext4_put_super()
1294 ext4_quotas_off(sb, EXT4_MAXQUOTAS); in ext4_put_super()
1297 ext4_release_orphan_info(sb); in ext4_put_super()
1303 ext4_abort(sb, -err, "Couldn't clean up the journal"); in ext4_put_super()
1310 ext4_release_system_zone(sb); in ext4_put_super()
1311 ext4_mb_release(sb); in ext4_put_super()
1312 ext4_ext_release(sb); in ext4_put_super()
1314 if (!ext4_emergency_state(sb) && !sb_rdonly(sb)) { in ext4_put_super()
1316 ext4_clear_feature_journal_needs_recovery(sb); in ext4_put_super()
1317 ext4_clear_feature_orphan_present(sb); in ext4_put_super()
1320 ext4_commit_super(sb); in ext4_put_super()
1331 kfree(get_qf_name(sb, sbi, i)); in ext4_put_super()
1339 dump_orphan_list(sb, sbi); in ext4_put_super()
1342 sync_blockdev(sb->s_bdev); in ext4_put_super()
1343 invalidate_bdev(sb->s_bdev); in ext4_put_super()
1363 sb->s_fs_info = NULL; in ext4_put_super()
1374 utf8_unload(sb->s_encoding); in ext4_put_super()
1384 static struct inode *ext4_alloc_inode(struct super_block *sb) in ext4_alloc_inode() argument
1388 ei = alloc_inode_sb(sb, ext4_inode_cachep, GFP_NOFS); in ext4_alloc_inode()
1463 static void ext4_shutdown(struct super_block *sb) in ext4_shutdown() argument
1465 ext4_force_shutdown(sb, EXT4_GOING_FLAGS_NOLOGFLUSH); in ext4_shutdown()
1520 static struct inode *ext4_nfs_get_inode(struct super_block *sb, in ext4_nfs_get_inode() argument
1529 inode = ext4_iget(sb, ino, EXT4_IGET_HANDLE); in ext4_nfs_get_inode()
1540 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid, in ext4_fh_to_dentry() argument
1543 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, in ext4_fh_to_dentry()
1547 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid, in ext4_fh_to_parent() argument
1550 return generic_fh_to_parent(sb, fid, fh_len, fh_type, in ext4_fh_to_parent()
1572 static int ext4_write_info(struct super_block *sb, int type);
1573 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1575 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1577 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1579 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
1722 fsparam_u32 ("sb", Opt_sb),
2461 static int parse_apply_sb_mount_options(struct super_block *sb, in parse_apply_sb_mount_options() argument
2464 struct ext4_sb_info *sbi = EXT4_SB(sb); in parse_apply_sb_mount_options()
2494 ret = ext4_check_opt_consistency(fc, sb); in parse_apply_sb_mount_options()
2497 ext4_msg(sb, KERN_WARNING, in parse_apply_sb_mount_options()
2509 ext4_apply_options(fc, sb); in parse_apply_sb_mount_options()
2522 struct super_block *sb) in ext4_apply_quota_options() argument
2525 bool quota_feature = ext4_has_feature_quota(sb); in ext4_apply_quota_options()
2527 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_apply_quota_options()
2541 set_opt(sb, QUOTA); in ext4_apply_quota_options()
2544 lockdep_is_held(&sb->s_umount)); in ext4_apply_quota_options()
2559 struct super_block *sb) in ext4_check_quota_consistency() argument
2563 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_quota_consistency()
2564 bool quota_feature = ext4_has_feature_quota(sb); in ext4_check_quota_consistency()
2565 bool quota_loaded = sb_any_quota_loaded(sb); in ext4_check_quota_consistency()
2575 !ext4_has_feature_project(sb)) { in ext4_check_quota_consistency()
2599 strcmp(get_qf_name(sb, sbi, i), in ext4_check_quota_consistency()
2623 usr_qf_name = (get_qf_name(sb, sbi, USRQUOTA) || in ext4_check_quota_consistency()
2625 grp_qf_name = (get_qf_name(sb, sbi, GRPQUOTA) || in ext4_check_quota_consistency()
2629 test_opt(sb, USRQUOTA)); in ext4_check_quota_consistency()
2632 test_opt(sb, GRPQUOTA)); in ext4_check_quota_consistency()
2677 struct super_block *sb) in ext4_check_test_dummy_encryption() argument
2680 const struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_test_dummy_encryption()
2685 if (!ext4_has_feature_encrypt(sb)) { in ext4_check_test_dummy_encryption()
2717 struct super_block *sb) in ext4_apply_test_dummy_encryption() argument
2721 fscrypt_is_dummy_policy_set(&EXT4_SB(sb)->s_dummy_enc_policy)) in ext4_apply_test_dummy_encryption()
2723 EXT4_SB(sb)->s_dummy_enc_policy = ctx->dummy_enc_policy; in ext4_apply_test_dummy_encryption()
2725 ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled"); in ext4_apply_test_dummy_encryption()
2729 struct super_block *sb) in ext4_check_opt_consistency() argument
2736 if ((ctx->opt_flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) { in ext4_check_opt_consistency()
2741 if ((ctx->opt_flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) { in ext4_check_opt_consistency()
2755 err = ext4_check_test_dummy_encryption(fc, sb); in ext4_check_opt_consistency()
2766 test_opt(sb, DATA_FLAGS)) { in ext4_check_opt_consistency()
2782 (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)) { in ext4_check_opt_consistency()
2807 return ext4_check_quota_consistency(fc, sb); in ext4_check_opt_consistency()
2810 static void ext4_apply_options(struct fs_context *fc, struct super_block *sb) in ext4_apply_options() argument
2819 sb->s_flags &= ~ctx->mask_s_flags; in ext4_apply_options()
2820 sb->s_flags |= ctx->vals_s_flags; in ext4_apply_options()
2838 ext4_apply_quota_options(fc, sb); in ext4_apply_options()
2839 ext4_apply_test_dummy_encryption(ctx, sb); in ext4_apply_options()
2871 struct super_block *sb) in ext4_show_quota_options() argument
2874 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options()
2918 * - if the per-sb default is different from the global default
2920 static int _ext4_show_options(struct seq_file *seq, struct super_block *sb, in _ext4_show_options() argument
2923 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options()
2933 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block); in _ext4_show_options()
2971 if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO) in _ext4_show_options()
2973 if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE) in _ext4_show_options()
2975 if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC) in _ext4_show_options()
2987 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in _ext4_show_options()
2989 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in _ext4_show_options()
2991 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) in _ext4_show_options()
2999 if (test_opt(sb, INIT_INODE_TABLE) && (nodefs || in _ext4_show_options()
3004 if (test_opt(sb, DATA_ERR_ABORT)) in _ext4_show_options()
3007 fscrypt_show_test_dummy_encryption(seq, sep, sb); in _ext4_show_options()
3009 if (sb->s_flags & SB_INLINECRYPT) in _ext4_show_options()
3012 if (test_opt(sb, DAX_ALWAYS)) { in _ext4_show_options()
3013 if (IS_EXT2_SB(sb)) in _ext4_show_options()
3017 } else if (test_opt2(sb, DAX_NEVER)) { in _ext4_show_options()
3019 } else if (test_opt2(sb, DAX_INODE)) { in _ext4_show_options()
3024 !test_opt2(sb, MB_OPTIMIZE_SCAN)) { in _ext4_show_options()
3027 test_opt2(sb, MB_OPTIMIZE_SCAN)) { in _ext4_show_options()
3031 if (nodefs && !test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS)) in _ext4_show_options()
3034 if (ext4_emergency_ro(sb)) in _ext4_show_options()
3037 if (ext4_forced_shutdown(sb)) in _ext4_show_options()
3040 ext4_show_quota_options(seq, sb); in _ext4_show_options()
3051 struct super_block *sb = seq->private; in ext4_seq_options_show() local
3054 seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw"); in ext4_seq_options_show()
3055 rc = _ext4_show_options(seq, sb, 1); in ext4_seq_options_show()
3060 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, in ext4_setup_super() argument
3063 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super()
3067 ext4_msg(sb, KERN_ERR, "revision level too high, " in ext4_setup_super()
3075 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, " in ext4_setup_super()
3078 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
3084 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
3090 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
3100 ext4_set_feature_journal_needs_recovery(sb); in ext4_setup_super()
3101 if (ext4_has_feature_orphan_file(sb)) in ext4_setup_super()
3102 ext4_set_feature_orphan_present(sb); in ext4_setup_super()
3105 err = ext4_commit_super(sb); in ext4_setup_super()
3107 if (test_opt(sb, DEBUG)) in ext4_setup_super()
3110 sb->s_blocksize, in ext4_setup_super()
3112 EXT4_BLOCKS_PER_GROUP(sb), in ext4_setup_super()
3113 EXT4_INODES_PER_GROUP(sb), in ext4_setup_super()
3118 int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup) in ext4_alloc_flex_bg_array() argument
3120 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array()
3134 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
3146 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
3165 static int ext4_fill_flex_info(struct super_block *sb) in ext4_fill_flex_info() argument
3167 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info()
3179 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
3184 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_fill_flex_info()
3188 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes); in ext4_fill_flex_info()
3189 atomic64_add(ext4_free_group_clusters(sb, gdp), in ext4_fill_flex_info()
3191 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs); in ext4_fill_flex_info()
3199 static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum() argument
3205 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_csum()
3227 if (!ext4_has_feature_gdt_csum(sb)) in ext4_group_desc_csum()
3235 if (ext4_has_feature_64bit(sb) && offset < sbi->s_desc_size) in ext4_group_desc_csum()
3243 int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_verify() argument
3246 if (ext4_has_group_desc_csum(sb) && in ext4_group_desc_csum_verify()
3247 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp))) in ext4_group_desc_csum_verify()
3253 void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_set() argument
3256 if (!ext4_has_group_desc_csum(sb)) in ext4_group_desc_csum_set()
3258 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp); in ext4_group_desc_csum_set()
3262 static int ext4_check_descriptors(struct super_block *sb, in ext4_check_descriptors() argument
3266 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors()
3269 ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0); in ext4_check_descriptors()
3276 if (ext4_has_feature_flex_bg(sb)) in ext4_check_descriptors()
3282 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_check_descriptors()
3288 (EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_descriptors()
3294 block_bitmap = ext4_block_bitmap(sb, gdp); in ext4_check_descriptors()
3296 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3299 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3304 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3307 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3311 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3316 inode_bitmap = ext4_inode_bitmap(sb, gdp); in ext4_check_descriptors()
3318 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3321 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3326 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3329 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3333 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3338 inode_table = ext4_inode_table(sb, gdp); in ext4_check_descriptors()
3340 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3343 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3348 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3351 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3356 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3361 ext4_lock_group(sb, i); in ext4_check_descriptors()
3362 if (!ext4_group_desc_csum_verify(sb, i, gdp)) { in ext4_check_descriptors()
3363 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3365 i, le16_to_cpu(ext4_group_desc_csum(sb, i, in ext4_check_descriptors()
3367 if (!sb_rdonly(sb)) { in ext4_check_descriptors()
3368 ext4_unlock_group(sb, i); in ext4_check_descriptors()
3372 ext4_unlock_group(sb, i); in ext4_check_descriptors()
3374 first_block += EXT4_BLOCKS_PER_GROUP(sb); in ext4_check_descriptors()
3505 static ext4_fsblk_t descriptor_loc(struct super_block *sb, in descriptor_loc() argument
3508 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc()
3514 if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg) in descriptor_loc()
3517 if (ext4_bg_has_super(sb, bg)) in descriptor_loc()
3526 if (sb->s_blocksize == 1024 && nr == 0 && in descriptor_loc()
3530 return (has_super + ext4_group_first_block_no(sb, bg)); in descriptor_loc()
3576 int ext4_feature_set_ok(struct super_block *sb, int readonly) in ext4_feature_set_ok() argument
3578 if (ext4_has_unknown_ext4_incompat_features(sb)) { in ext4_feature_set_ok()
3579 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3582 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) & in ext4_feature_set_ok()
3587 if (!IS_ENABLED(CONFIG_UNICODE) && ext4_has_feature_casefold(sb)) { in ext4_feature_set_ok()
3588 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3597 if (ext4_has_feature_readonly(sb)) { in ext4_feature_set_ok()
3598 ext4_msg(sb, KERN_INFO, "filesystem is read-only"); in ext4_feature_set_ok()
3599 sb->s_flags |= SB_RDONLY; in ext4_feature_set_ok()
3604 if (ext4_has_unknown_ext4_ro_compat_features(sb)) { in ext4_feature_set_ok()
3605 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of " in ext4_feature_set_ok()
3607 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) & in ext4_feature_set_ok()
3611 if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) { in ext4_feature_set_ok()
3612 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3619 if (!readonly && (ext4_has_feature_quota(sb) || in ext4_feature_set_ok()
3620 ext4_has_feature_project(sb))) { in ext4_feature_set_ok()
3621 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3636 struct super_block *sb = sbi->s_sb; in print_daily_error_info() local
3641 ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u", in print_daily_error_info()
3645 sb->s_id, in print_daily_error_info()
3660 sb->s_id, in print_daily_error_info()
3680 struct super_block *sb = elr->lr_super; in ext4_run_li_request() local
3681 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; in ext4_run_li_request()
3685 int nr = EXT4_SB(sb)->s_mb_prefetch; in ext4_run_li_request()
3689 elr->lr_next_group = ext4_mb_prefetch(sb, group, nr, &prefetch_ios); in ext4_run_li_request()
3690 ext4_mb_prefetch_fini(sb, elr->lr_next_group, nr); in ext4_run_li_request()
3691 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group, nr); in ext4_run_li_request()
3695 !ext4_emergency_state(sb) && !sb_rdonly(sb) && in ext4_run_li_request()
3696 test_opt(sb, INIT_INODE_TABLE)) { in ext4_run_li_request()
3706 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_run_li_request()
3721 ret = ext4_init_inode_table(sb, group, in ext4_run_li_request()
3723 trace_ext4_lazy_itable_init(sb, group); in ext4_run_li_request()
3748 static void ext4_unregister_li_request(struct super_block *sb) in ext4_unregister_li_request() argument
3757 ext4_remove_li_request(EXT4_SB(sb)->s_li_request); in ext4_unregister_li_request()
3811 * We hold sb->s_umount, sb can not in ext4_lazyinit_thread()
3918 static ext4_group_t ext4_has_uninit_itable(struct super_block *sb) in ext4_has_uninit_itable() argument
3920 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count; in ext4_has_uninit_itable()
3923 if (!ext4_has_group_desc_csum(sb)) in ext4_has_uninit_itable()
3927 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_has_uninit_itable()
3956 static struct ext4_li_request *ext4_li_request_new(struct super_block *sb, in ext4_li_request_new() argument
3965 elr->lr_super = sb; in ext4_li_request_new()
3967 if (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS)) { in ext4_li_request_new()
3983 int ext4_register_li_request(struct super_block *sb, in ext4_register_li_request() argument
3986 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request()
4001 if (ext4_emergency_state(sb) || sb_rdonly(sb) || in ext4_register_li_request()
4002 (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS) && in ext4_register_li_request()
4003 (first_not_zeroed == ngroups || !test_opt(sb, INIT_INODE_TABLE)))) in ext4_register_li_request()
4006 elr = ext4_li_request_new(sb, first_not_zeroed); in ext4_register_li_request()
4058 static int set_journal_csum_feature_set(struct super_block *sb) in set_journal_csum_feature_set() argument
4062 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set()
4064 if (ext4_has_feature_metadata_csum(sb)) { in set_journal_csum_feature_set()
4078 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in set_journal_csum_feature_set()
4083 } else if (test_opt(sb, JOURNAL_CHECKSUM)) { in set_journal_csum_feature_set()
4112 static int count_overhead(struct super_block *sb, ext4_group_t grp, in count_overhead() argument
4115 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead()
4118 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in count_overhead()
4120 int has_super = ext4_bg_has_super(sb, grp); in count_overhead()
4122 if (!ext4_has_feature_bigalloc(sb)) in count_overhead()
4123 return (has_super + ext4_bg_num_gdb(sb, grp) + in count_overhead()
4128 (grp * EXT4_BLOCKS_PER_GROUP(sb)); in count_overhead()
4129 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1; in count_overhead()
4131 gdp = ext4_get_group_desc(sb, i, NULL); in count_overhead()
4132 b = ext4_block_bitmap(sb, gdp); in count_overhead()
4137 b = ext4_inode_bitmap(sb, gdp); in count_overhead()
4142 b = ext4_inode_table(sb, gdp); in count_overhead()
4152 if (ext4_bg_has_super(sb, grp)) { in count_overhead()
4156 j = ext4_bg_num_gdb(sb, grp); in count_overhead()
4157 if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) { in count_overhead()
4158 ext4_error(sb, "Invalid number of block group " in count_overhead()
4160 j = EXT4_BLOCKS_PER_GROUP(sb) - s; in count_overhead()
4168 return EXT4_CLUSTERS_PER_GROUP(sb) - in count_overhead()
4169 ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8); in count_overhead()
4175 int ext4_calculate_overhead(struct super_block *sb) in ext4_calculate_overhead() argument
4177 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead()
4181 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_calculate_overhead()
4205 blks = count_overhead(sb, i, buf); in ext4_calculate_overhead()
4218 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) { in ext4_calculate_overhead()
4220 j_inode = ext4_get_journal_inode(sb, j_inum); in ext4_calculate_overhead()
4222 j_blocks = j_inode->i_size >> sb->s_blocksize_bits; in ext4_calculate_overhead()
4226 ext4_msg(sb, KERN_ERR, "can't get journal size"); in ext4_calculate_overhead()
4235 static void ext4_set_resv_clusters(struct super_block *sb) in ext4_set_resv_clusters() argument
4238 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_resv_clusters()
4246 if (!ext4_has_feature_extents(sb)) in ext4_set_resv_clusters()
4265 static const char *ext4_quota_mode(struct super_block *sb) in ext4_quota_mode() argument
4268 if (!ext4_quota_capable(sb)) in ext4_quota_mode()
4271 if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb)) in ext4_quota_mode()
4280 static void ext4_setup_csum_trigger(struct super_block *sb, in ext4_setup_csum_trigger() argument
4288 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_csum_trigger()
4290 sbi->s_journal_triggers[type].sb = sb; in ext4_setup_csum_trigger()
4304 static struct ext4_sb_info *ext4_alloc_sbi(struct super_block *sb) in ext4_alloc_sbi() argument
4312 sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off, in ext4_alloc_sbi()
4321 sb->s_fs_info = sbi; in ext4_alloc_sbi()
4322 sbi->s_sb = sb; in ext4_alloc_sbi()
4330 static void ext4_set_def_opts(struct super_block *sb, in ext4_set_def_opts() argument
4337 set_opt(sb, INIT_INODE_TABLE); in ext4_set_def_opts()
4339 set_opt(sb, DEBUG); in ext4_set_def_opts()
4341 set_opt(sb, GRPID); in ext4_set_def_opts()
4343 set_opt(sb, NO_UID32); in ext4_set_def_opts()
4345 set_opt(sb, XATTR_USER); in ext4_set_def_opts()
4347 set_opt(sb, POSIX_ACL); in ext4_set_def_opts()
4349 if (ext4_has_feature_fast_commit(sb)) in ext4_set_def_opts()
4350 set_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_set_def_opts()
4352 if (ext4_has_feature_metadata_csum(sb)) in ext4_set_def_opts()
4353 set_opt(sb, JOURNAL_CHECKSUM); in ext4_set_def_opts()
4356 set_opt(sb, JOURNAL_DATA); in ext4_set_def_opts()
4358 set_opt(sb, ORDERED_DATA); in ext4_set_def_opts()
4360 set_opt(sb, WRITEBACK_DATA); in ext4_set_def_opts()
4363 set_opt(sb, ERRORS_PANIC); in ext4_set_def_opts()
4365 set_opt(sb, ERRORS_CONT); in ext4_set_def_opts()
4367 set_opt(sb, ERRORS_RO); in ext4_set_def_opts()
4369 set_opt(sb, BLOCK_VALIDITY); in ext4_set_def_opts()
4371 set_opt(sb, DISCARD); in ext4_set_def_opts()
4374 set_opt(sb, BARRIER); in ext4_set_def_opts()
4380 if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) && in ext4_set_def_opts()
4382 set_opt(sb, DELALLOC); in ext4_set_def_opts()
4384 if (sb->s_blocksize <= PAGE_SIZE) in ext4_set_def_opts()
4385 set_opt(sb, DIOREAD_NOLOCK); in ext4_set_def_opts()
4388 static int ext4_handle_clustersize(struct super_block *sb) in ext4_handle_clustersize() argument
4390 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_handle_clustersize()
4396 if (ext4_has_feature_bigalloc(sb)) { in ext4_handle_clustersize()
4397 if (clustersize < sb->s_blocksize) { in ext4_handle_clustersize()
4398 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4400 "block size (%lu)", clustersize, sb->s_blocksize); in ext4_handle_clustersize()
4406 if (clustersize != sb->s_blocksize) { in ext4_handle_clustersize()
4407 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4409 "block size (%lu)", clustersize, sb->s_blocksize); in ext4_handle_clustersize()
4412 if (sbi->s_blocks_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4413 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4421 if (sbi->s_clusters_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4422 ext4_msg(sb, KERN_ERR, "#clusters per group too big: %lu", in ext4_handle_clustersize()
4427 (sbi->s_clusters_per_group * (clustersize / sb->s_blocksize))) { in ext4_handle_clustersize()
4428 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4433 sbi->s_cluster_ratio = clustersize / sb->s_blocksize; in ext4_handle_clustersize()
4437 set_opt2(sb, STD_GROUP_SIZE); in ext4_handle_clustersize()
4444 * @sb: super block
4447 static void ext4_atomic_write_init(struct super_block *sb) in ext4_atomic_write_init() argument
4449 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_atomic_write_init()
4450 struct block_device *bdev = sb->s_bdev; in ext4_atomic_write_init()
4455 if (!ext4_has_feature_extents(sb)) in ext4_atomic_write_init()
4458 sbi->s_awu_min = max(sb->s_blocksize, in ext4_atomic_write_init()
4460 sbi->s_awu_max = min(sb->s_blocksize, in ext4_atomic_write_init()
4464 ext4_msg(sb, KERN_NOTICE, "Supports (experimental) DIO atomic writes awu_min: %u, awu_max: %u", in ext4_atomic_write_init()
4472 static void ext4_fast_commit_init(struct super_block *sb) in ext4_fast_commit_init() argument
4474 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fast_commit_init()
4483 ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE); in ext4_fast_commit_init()
4496 static int ext4_inode_info_init(struct super_block *sb, in ext4_inode_info_init() argument
4499 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_inode_info_init()
4508 ext4_msg(sb, KERN_ERR, "invalid first ino: %u", in ext4_inode_info_init()
4514 (sbi->s_inode_size > sb->s_blocksize)) { in ext4_inode_info_init()
4515 ext4_msg(sb, KERN_ERR, in ext4_inode_info_init()
4518 ext4_msg(sb, KERN_ERR, "blocksize: %lu", sb->s_blocksize); in ext4_inode_info_init()
4529 sb->s_time_gran = 1; in ext4_inode_info_init()
4530 sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX; in ext4_inode_info_init()
4532 sb->s_time_gran = NSEC_PER_SEC; in ext4_inode_info_init()
4533 sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX; in ext4_inode_info_init()
4535 sb->s_time_min = EXT4_TIMESTAMP_MIN; in ext4_inode_info_init()
4541 if (ext4_has_feature_extra_isize(sb)) { in ext4_inode_info_init()
4547 ext4_msg(sb, KERN_ERR, in ext4_inode_info_init()
4556 ext4_msg(sb, KERN_ERR, in ext4_inode_info_init()
4569 static int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es) in ext4_encoding_init() argument
4575 if (!ext4_has_feature_casefold(sb) || sb->s_encoding) in ext4_encoding_init()
4580 ext4_msg(sb, KERN_ERR, in ext4_encoding_init()
4587 ext4_msg(sb, KERN_ERR, in ext4_encoding_init()
4597 ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: " in ext4_encoding_init()
4604 sb->s_encoding = encoding; in ext4_encoding_init()
4605 sb->s_encoding_flags = encoding_flags; in ext4_encoding_init()
4610 static inline int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es) in ext4_encoding_init() argument
4616 static int ext4_init_metadata_csum(struct super_block *sb, struct ext4_super_block *es) in ext4_init_metadata_csum() argument
4618 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_metadata_csum()
4621 if (ext4_has_feature_metadata_csum(sb) && in ext4_init_metadata_csum()
4622 ext4_has_feature_gdt_csum(sb)) in ext4_init_metadata_csum()
4623 ext4_warning(sb, "metadata_csum and uninit_bg are " in ext4_init_metadata_csum()
4627 if (!ext4_verify_csum_type(sb, es)) { in ext4_init_metadata_csum()
4628 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_init_metadata_csum()
4632 ext4_setup_csum_trigger(sb, EXT4_JTR_ORPHAN_FILE, in ext4_init_metadata_csum()
4636 if (!ext4_superblock_csum_verify(sb, es)) { in ext4_init_metadata_csum()
4637 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_init_metadata_csum()
4643 if (ext4_has_feature_csum_seed(sb)) in ext4_init_metadata_csum()
4645 else if (ext4_has_feature_metadata_csum(sb) || in ext4_init_metadata_csum()
4646 ext4_has_feature_ea_inode(sb)) in ext4_init_metadata_csum()
4652 static int ext4_check_feature_compatibility(struct super_block *sb, in ext4_check_feature_compatibility() argument
4656 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_feature_compatibility()
4659 (ext4_has_compat_features(sb) || in ext4_check_feature_compatibility()
4660 ext4_has_ro_compat_features(sb) || in ext4_check_feature_compatibility()
4661 ext4_has_incompat_features(sb))) in ext4_check_feature_compatibility()
4662 ext4_msg(sb, KERN_WARNING, in ext4_check_feature_compatibility()
4667 set_opt2(sb, HURD_COMPAT); in ext4_check_feature_compatibility()
4668 if (ext4_has_feature_64bit(sb)) { in ext4_check_feature_compatibility()
4669 ext4_msg(sb, KERN_ERR, in ext4_check_feature_compatibility()
4678 if (ext4_has_feature_ea_inode(sb)) { in ext4_check_feature_compatibility()
4679 ext4_msg(sb, KERN_ERR, in ext4_check_feature_compatibility()
4685 if (IS_EXT2_SB(sb)) { in ext4_check_feature_compatibility()
4686 if (ext2_feature_set_ok(sb)) in ext4_check_feature_compatibility()
4687 ext4_msg(sb, KERN_INFO, "mounting ext2 file system " in ext4_check_feature_compatibility()
4694 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_check_feature_compatibility()
4696 ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due " in ext4_check_feature_compatibility()
4702 if (IS_EXT3_SB(sb)) { in ext4_check_feature_compatibility()
4703 if (ext3_feature_set_ok(sb)) in ext4_check_feature_compatibility()
4704 ext4_msg(sb, KERN_INFO, "mounting ext3 file system " in ext4_check_feature_compatibility()
4711 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_check_feature_compatibility()
4713 ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due " in ext4_check_feature_compatibility()
4724 if (!ext4_feature_set_ok(sb, (sb_rdonly(sb)))) in ext4_check_feature_compatibility()
4728 if (sb->s_blocksize == PAGE_SIZE) in ext4_check_feature_compatibility()
4731 ext4_msg(sb, KERN_ERR, "unsupported blocksize for DAX\n"); in ext4_check_feature_compatibility()
4735 if (ext4_has_feature_inline_data(sb)) { in ext4_check_feature_compatibility()
4736 ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem" in ext4_check_feature_compatibility()
4741 ext4_msg(sb, KERN_ERR, in ext4_check_feature_compatibility()
4747 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { in ext4_check_feature_compatibility()
4748 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d", in ext4_check_feature_compatibility()
4756 static int ext4_check_geometry(struct super_block *sb, in ext4_check_geometry() argument
4759 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_geometry()
4763 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (sb->s_blocksize / 4)) { in ext4_check_geometry()
4764 ext4_msg(sb, KERN_ERR, in ext4_check_geometry()
4773 err = generic_check_addressable(sb->s_blocksize_bits, in ext4_check_geometry()
4776 ext4_msg(sb, KERN_ERR, "filesystem" in ext4_check_geometry()
4782 blocks_count = sb_bdev_nr_blocks(sb); in ext4_check_geometry()
4784 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu " in ext4_check_geometry()
4795 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_check_geometry()
4803 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_check_geometry()
4810 EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_geometry()
4811 do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb)); in ext4_check_geometry()
4812 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) { in ext4_check_geometry()
4813 ext4_msg(sb, KERN_WARNING, "groups count too large: %llu " in ext4_check_geometry()
4818 EXT4_BLOCKS_PER_GROUP(sb)); in ext4_check_geometry()
4823 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); in ext4_check_geometry()
4826 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu", in ext4_check_geometry()
4835 static int ext4_group_desc_init(struct super_block *sb, in ext4_group_desc_init() argument
4840 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_init()
4845 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_group_desc_init()
4846 EXT4_DESC_PER_BLOCK(sb); in ext4_group_desc_init()
4847 if (ext4_has_feature_meta_bg(sb)) { in ext4_group_desc_init()
4849 ext4_msg(sb, KERN_WARNING, in ext4_group_desc_init()
4861 ext4_msg(sb, KERN_ERR, "not enough memory"); in ext4_group_desc_init()
4869 block = descriptor_loc(sb, logical_sb_block, i); in ext4_group_desc_init()
4870 ext4_sb_breadahead_unmovable(sb, block); in ext4_group_desc_init()
4876 block = descriptor_loc(sb, logical_sb_block, i); in ext4_group_desc_init()
4877 bh = ext4_sb_bread_unmovable(sb, block); in ext4_group_desc_init()
4879 ext4_msg(sb, KERN_ERR, in ext4_group_desc_init()
4889 if (!ext4_check_descriptors(sb, logical_sb_block, first_not_zeroed)) { in ext4_group_desc_init()
4890 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!"); in ext4_group_desc_init()
4897 static int ext4_load_and_init_journal(struct super_block *sb, in ext4_load_and_init_journal() argument
4901 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_load_and_init_journal()
4904 err = ext4_load_journal(sb, es, ctx->journal_devnum); in ext4_load_and_init_journal()
4908 if (ext4_has_feature_64bit(sb) && in ext4_load_and_init_journal()
4909 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_load_and_init_journal()
4911 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature"); in ext4_load_and_init_journal()
4915 if (!set_journal_csum_feature_set(sb)) { in ext4_load_and_init_journal()
4916 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum " in ext4_load_and_init_journal()
4921 if (test_opt2(sb, JOURNAL_FAST_COMMIT) && in ext4_load_and_init_journal()
4922 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_load_and_init_journal()
4924 ext4_msg(sb, KERN_ERR, in ext4_load_and_init_journal()
4931 switch (test_opt(sb, DATA_FLAGS)) { in ext4_load_and_init_journal()
4939 set_opt(sb, ORDERED_DATA); in ext4_load_and_init_journal()
4942 set_opt(sb, JOURNAL_DATA); in ext4_load_and_init_journal()
4951 ext4_msg(sb, KERN_ERR, "Journal does not support " in ext4_load_and_init_journal()
4960 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA && in ext4_load_and_init_journal()
4961 test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_load_and_init_journal()
4962 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_load_and_init_journal()
4981 static int ext4_check_journal_data_mode(struct super_block *sb) in ext4_check_journal_data_mode() argument
4983 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in ext4_check_journal_data_mode()
4988 clear_opt(sb, DIOREAD_NOLOCK); in ext4_check_journal_data_mode()
4989 clear_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_check_journal_data_mode()
4990 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in ext4_check_journal_data_mode()
4991 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_check_journal_data_mode()
4995 if (test_opt(sb, DAX_ALWAYS)) { in ext4_check_journal_data_mode()
4996 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_check_journal_data_mode()
5000 if (ext4_has_feature_encrypt(sb)) { in ext4_check_journal_data_mode()
5001 ext4_msg(sb, KERN_WARNING, in ext4_check_journal_data_mode()
5005 if (test_opt(sb, DELALLOC)) in ext4_check_journal_data_mode()
5006 clear_opt(sb, DELALLOC); in ext4_check_journal_data_mode()
5008 sb->s_iflags |= SB_I_CGROUPWB; in ext4_check_journal_data_mode()
5014 static const char *ext4_has_journal_option(struct super_block *sb) in ext4_has_journal_option() argument
5016 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_has_journal_option()
5018 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) in ext4_has_journal_option()
5020 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) in ext4_has_journal_option()
5027 if (test_opt(sb, DATA_ERR_ABORT)) in ext4_has_journal_option()
5032 static int ext4_load_super(struct super_block *sb, ext4_fsblk_t *lsb, in ext4_load_super() argument
5035 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_load_super()
5043 blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE); in ext4_load_super()
5045 ext4_msg(sb, KERN_ERR, "unable to set blocksize"); in ext4_load_super()
5060 bh = ext4_sb_bread_unmovable(sb, logical_sb_block); in ext4_load_super()
5062 ext4_msg(sb, KERN_ERR, "unable to read superblock"); in ext4_load_super()
5071 sb->s_magic = le16_to_cpu(es->s_magic); in ext4_load_super()
5072 if (sb->s_magic != EXT4_SUPER_MAGIC) { in ext4_load_super()
5074 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); in ext4_load_super()
5080 ext4_msg(sb, KERN_ERR, in ext4_load_super()
5087 ext4_msg(sb, KERN_ERR, in ext4_load_super()
5099 if (sb->s_blocksize == blocksize) { in ext4_load_super()
5112 if (!sb_set_blocksize(sb, blocksize)) { in ext4_load_super()
5113 ext4_msg(sb, KERN_ERR, "bad block size %d", in ext4_load_super()
5121 bh = ext4_sb_bread_unmovable(sb, logical_sb_block); in ext4_load_super()
5123 ext4_msg(sb, KERN_ERR, "Can't read superblock on 2nd try"); in ext4_load_super()
5131 ext4_msg(sb, KERN_ERR, "Magic mismatch, very weird!"); in ext4_load_super()
5142 static int ext4_hash_info_init(struct super_block *sb) in ext4_hash_info_init() argument
5144 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_hash_info_init()
5151 ext4_msg(sb, KERN_ERR, in ext4_hash_info_init()
5155 ext4_msg(sb, KERN_ERR, in ext4_hash_info_init()
5163 if (ext4_has_feature_dir_index(sb)) { in ext4_hash_info_init()
5169 if (!sb_rdonly(sb)) in ext4_hash_info_init()
5174 if (!sb_rdonly(sb)) in ext4_hash_info_init()
5183 static int ext4_block_group_meta_init(struct super_block *sb, int silent) in ext4_block_group_meta_init() argument
5185 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_block_group_meta_init()
5189 has_huge_files = ext4_has_feature_huge_file(sb); in ext4_block_group_meta_init()
5190 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_block_group_meta_init()
5192 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files); in ext4_block_group_meta_init()
5195 if (ext4_has_feature_64bit(sb)) { in ext4_block_group_meta_init()
5199 ext4_msg(sb, KERN_ERR, in ext4_block_group_meta_init()
5210 sbi->s_inodes_per_block = sb->s_blocksize / EXT4_INODE_SIZE(sb); in ext4_block_group_meta_init()
5213 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); in ext4_block_group_meta_init()
5217 sbi->s_inodes_per_group > sb->s_blocksize * 8) { in ext4_block_group_meta_init()
5218 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n", in ext4_block_group_meta_init()
5224 sbi->s_desc_per_block = sb->s_blocksize / EXT4_DESC_SIZE(sb); in ext4_block_group_meta_init()
5226 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_block_group_meta_init()
5227 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_block_group_meta_init()
5237 static bool ext4_is_stripe_incompatible(struct super_block *sb, unsigned long stripe) in ext4_is_stripe_incompatible() argument
5239 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_is_stripe_incompatible()
5244 static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb) in __ext4_fill_super() argument
5247 struct ext4_sb_info *sbi = EXT4_SB(sb); in __ext4_fill_super()
5262 part_stat_read(sb->s_bdev, sectors[STAT_WRITE]); in __ext4_fill_super()
5264 err = ext4_load_super(sb, &logical_sb_block, silent); in __ext4_fill_super()
5271 err = ext4_init_metadata_csum(sb, es); in __ext4_fill_super()
5275 ext4_set_def_opts(sb, es); in __ext4_fill_super()
5291 err = ext4_inode_info_init(sb, es); in __ext4_fill_super()
5295 err = parse_apply_sb_mount_options(sb, ctx); in __ext4_fill_super()
5302 err = ext4_check_opt_consistency(fc, sb); in __ext4_fill_super()
5306 ext4_apply_options(fc, sb); in __ext4_fill_super()
5308 err = ext4_encoding_init(sb, es); in __ext4_fill_super()
5312 err = ext4_check_journal_data_mode(sb); in __ext4_fill_super()
5316 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in __ext4_fill_super()
5317 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in __ext4_fill_super()
5320 sb->s_flags |= SB_I_VERSION; in __ext4_fill_super()
5323 sb->s_iflags |= SB_I_ALLOW_HSM; in __ext4_fill_super()
5325 err = ext4_check_feature_compatibility(sb, es, silent); in __ext4_fill_super()
5329 err = ext4_block_group_meta_init(sb, silent); in __ext4_fill_super()
5333 err = ext4_hash_info_init(sb); in __ext4_fill_super()
5337 err = ext4_handle_clustersize(sb); in __ext4_fill_super()
5341 err = ext4_check_geometry(sb, es); in __ext4_fill_super()
5349 err = ext4_group_desc_init(sb, es, logical_sb_block, &first_not_zeroed); in __ext4_fill_super()
5358 if (ext4_is_stripe_incompatible(sb, sbi->s_stripe)) { in __ext4_fill_super()
5359 ext4_msg(sb, KERN_WARNING, in __ext4_fill_super()
5370 sb->s_op = &ext4_sops; in __ext4_fill_super()
5371 sb->s_export_op = &ext4_export_ops; in __ext4_fill_super()
5372 sb->s_xattr = ext4_xattr_handlers; in __ext4_fill_super()
5374 sb->s_cop = &ext4_cryptops; in __ext4_fill_super()
5377 sb->s_vop = &ext4_verityops; in __ext4_fill_super()
5380 sb->dq_op = &ext4_quota_operations; in __ext4_fill_super()
5381 if (ext4_has_feature_quota(sb)) in __ext4_fill_super()
5382 sb->s_qcop = &dquot_quotactl_sysfile_ops; in __ext4_fill_super()
5384 sb->s_qcop = &ext4_qctl_operations; in __ext4_fill_super()
5385 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; in __ext4_fill_super()
5387 super_set_uuid(sb, es->s_uuid, sizeof(es->s_uuid)); in __ext4_fill_super()
5388 super_set_sysfs_name_bdev(sb); in __ext4_fill_super()
5395 ext4_atomic_write_init(sb); in __ext4_fill_super()
5396 ext4_fast_commit_init(sb); in __ext4_fill_super()
5398 sb->s_root = NULL; in __ext4_fill_super()
5401 ext4_has_feature_orphan_present(sb) || in __ext4_fill_super()
5402 ext4_has_feature_journal_needs_recovery(sb)); in __ext4_fill_super()
5404 if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb)) { in __ext4_fill_super()
5405 err = ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)); in __ext4_fill_super()
5415 if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) { in __ext4_fill_super()
5416 err = ext4_load_and_init_journal(sb, es, ctx); in __ext4_fill_super()
5419 } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) && in __ext4_fill_super()
5420 ext4_has_feature_journal_needs_recovery(sb)) { in __ext4_fill_super()
5421 ext4_msg(sb, KERN_ERR, "required journal recovery " in __ext4_fill_super()
5428 journal_option = ext4_has_journal_option(sb); in __ext4_fill_super()
5430 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5437 clear_opt(sb, JOURNAL_CHECKSUM); in __ext4_fill_super()
5438 clear_opt(sb, DATA_FLAGS); in __ext4_fill_super()
5439 clear_opt2(sb, JOURNAL_FAST_COMMIT); in __ext4_fill_super()
5444 if (!test_opt(sb, NO_MBCACHE)) { in __ext4_fill_super()
5447 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5453 if (ext4_has_feature_ea_inode(sb)) { in __ext4_fill_super()
5456 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5477 if (!ext4_has_feature_bigalloc(sb)) in __ext4_fill_super()
5480 err = ext4_calculate_overhead(sb); in __ext4_fill_super()
5489 EXT4_SB(sb)->rsv_conversion_wq = in __ext4_fill_super()
5491 if (!EXT4_SB(sb)->rsv_conversion_wq) { in __ext4_fill_super()
5502 root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL); in __ext4_fill_super()
5504 ext4_msg(sb, KERN_ERR, "get root inode failed"); in __ext4_fill_super()
5510 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck"); in __ext4_fill_super()
5516 generic_set_sb_d_ops(sb); in __ext4_fill_super()
5517 sb->s_root = d_make_root(root); in __ext4_fill_super()
5518 if (!sb->s_root) { in __ext4_fill_super()
5519 ext4_msg(sb, KERN_ERR, "get root dentry failed"); in __ext4_fill_super()
5524 err = ext4_setup_super(sb, es, sb_rdonly(sb)); in __ext4_fill_super()
5526 sb->s_flags |= SB_RDONLY; in __ext4_fill_super()
5530 ext4_set_resv_clusters(sb); in __ext4_fill_super()
5532 if (test_opt(sb, BLOCK_VALIDITY)) { in __ext4_fill_super()
5533 err = ext4_setup_system_zone(sb); in __ext4_fill_super()
5535 ext4_msg(sb, KERN_ERR, "failed to initialize system " in __ext4_fill_super()
5540 ext4_fc_replay_cleanup(sb); in __ext4_fill_super()
5542 ext4_ext_init(sb); in __ext4_fill_super()
5551 set_opt2(sb, MB_OPTIMIZE_SCAN); in __ext4_fill_super()
5553 clear_opt2(sb, MB_OPTIMIZE_SCAN); in __ext4_fill_super()
5556 err = ext4_mb_init(sb); in __ext4_fill_super()
5558 ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)", in __ext4_fill_super()
5575 if (ext4_has_feature_flex_bg(sb)) in __ext4_fill_super()
5576 if (!ext4_fill_flex_info(sb)) { in __ext4_fill_super()
5577 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5584 err = ext4_register_li_request(sb, first_not_zeroed); in __ext4_fill_super()
5588 err = ext4_init_orphan_info(sb); in __ext4_fill_super()
5593 if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) { in __ext4_fill_super()
5594 err = ext4_enable_quotas(sb); in __ext4_fill_super()
5604 errseq_check_and_advance(&sb->s_bdev->bd_mapping->wb_err, in __ext4_fill_super()
5606 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS; in __ext4_fill_super()
5607 ext4_orphan_cleanup(sb, es); in __ext4_fill_super()
5608 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS; in __ext4_fill_super()
5616 ext4_superblock_csum_set(sb); in __ext4_fill_super()
5618 ext4_msg(sb, KERN_INFO, "recovery complete"); in __ext4_fill_super()
5619 err = ext4_mark_recovery_complete(sb, es); in __ext4_fill_super()
5624 if (test_opt(sb, DISCARD) && !bdev_max_discard_sectors(sb->s_bdev)) { in __ext4_fill_super()
5625 ext4_msg(sb, KERN_WARNING, in __ext4_fill_super()
5627 clear_opt(sb, DISCARD); in __ext4_fill_super()
5641 err = ext4_register_sysfs(sb); in __ext4_fill_super()
5648 ext4_quotas_off(sb, EXT4_MAXQUOTAS); in __ext4_fill_super()
5650 ext4_release_orphan_info(sb); in __ext4_fill_super()
5652 ext4_unregister_li_request(sb); in __ext4_fill_super()
5654 ext4_mb_release(sb); in __ext4_fill_super()
5658 ext4_ext_release(sb); in __ext4_fill_super()
5659 ext4_release_system_zone(sb); in __ext4_fill_super()
5661 dput(sb->s_root); in __ext4_fill_super()
5662 sb->s_root = NULL; in __ext4_fill_super()
5664 ext4_msg(sb, KERN_ERR, "mount failed"); in __ext4_fill_super()
5665 if (EXT4_SB(sb)->rsv_conversion_wq) in __ext4_fill_super()
5666 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq); in __ext4_fill_super()
5687 utf8_unload(sb->s_encoding); in __ext4_fill_super()
5692 kfree(get_qf_name(sb, sbi, i)); in __ext4_fill_super()
5701 invalidate_bdev(sb->s_bdev); in __ext4_fill_super()
5702 sb->s_fs_info = NULL; in __ext4_fill_super()
5706 static int ext4_fill_super(struct super_block *sb, struct fs_context *fc) in ext4_fill_super() argument
5713 sbi = ext4_alloc_sbi(sb); in ext4_fill_super()
5720 strreplace(sb->s_id, '/', '!'); in ext4_fill_super()
5726 ret = __ext4_fill_super(fc, sb); in ext4_fill_super()
5731 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in ext4_fill_super()
5733 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in ext4_fill_super()
5741 ext4_msg(sb, KERN_INFO, "mounted filesystem %pU %s with%s. " in ext4_fill_super()
5742 "Quota mode: %s.", &sb->s_uuid, in ext4_fill_super()
5743 sb_rdonly(sb) ? "ro" : "r/w", descr, in ext4_fill_super()
5744 ext4_quota_mode(sb)); in ext4_fill_super()
5747 ext4_update_overhead(sb, false); in ext4_fill_super()
5766 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal) in ext4_init_journal_params() argument
5768 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params()
5773 ext4_fc_init(sb, journal); in ext4_init_journal_params()
5776 if (test_opt(sb, BARRIER)) in ext4_init_journal_params()
5788 static struct inode *ext4_get_journal_inode(struct super_block *sb, in ext4_get_journal_inode() argument
5798 journal_inode = ext4_iget(sb, journal_inum, EXT4_IGET_SPECIAL); in ext4_get_journal_inode()
5800 ext4_msg(sb, KERN_ERR, "no journal found"); in ext4_get_journal_inode()
5806 ext4_msg(sb, KERN_ERR, "journal inode is deleted"); in ext4_get_journal_inode()
5810 ext4_msg(sb, KERN_ERR, "invalid journal inode"); in ext4_get_journal_inode()
5842 static journal_t *ext4_open_inode_journal(struct super_block *sb, in ext4_open_inode_journal() argument
5848 journal_inode = ext4_get_journal_inode(sb, journal_inum); in ext4_open_inode_journal()
5854 ext4_msg(sb, KERN_ERR, "Could not load journal inode"); in ext4_open_inode_journal()
5858 journal->j_private = sb; in ext4_open_inode_journal()
5860 ext4_init_journal_params(sb, journal); in ext4_open_inode_journal()
5864 static struct file *ext4_get_journal_blkdev(struct super_block *sb, in ext4_get_journal_blkdev() argument
5879 sb, &fs_holder_ops); in ext4_get_journal_blkdev()
5881 ext4_msg(sb, KERN_ERR, in ext4_get_journal_blkdev()
5888 blocksize = sb->s_blocksize; in ext4_get_journal_blkdev()
5891 ext4_msg(sb, KERN_ERR, in ext4_get_journal_blkdev()
5902 ext4_msg(sb, KERN_ERR, "couldn't read superblock of " in ext4_get_journal_blkdev()
5912 ext4_msg(sb, KERN_ERR, "external journal has bad superblock"); in ext4_get_journal_blkdev()
5919 es->s_checksum != ext4_superblock_csum(sb, es)) { in ext4_get_journal_blkdev()
5920 ext4_msg(sb, KERN_ERR, "external journal has corrupt superblock"); in ext4_get_journal_blkdev()
5925 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { in ext4_get_journal_blkdev()
5926 ext4_msg(sb, KERN_ERR, "journal UUID does not match"); in ext4_get_journal_blkdev()
5943 static journal_t *ext4_open_dev_journal(struct super_block *sb, in ext4_open_dev_journal() argument
5952 bdev_file = ext4_get_journal_blkdev(sb, j_dev, &j_start, &j_len); in ext4_open_dev_journal()
5956 journal = jbd2_journal_init_dev(file_bdev(bdev_file), sb->s_bdev, j_start, in ext4_open_dev_journal()
5957 j_len, sb->s_blocksize); in ext4_open_dev_journal()
5959 ext4_msg(sb, KERN_ERR, "failed to create device journal"); in ext4_open_dev_journal()
5964 ext4_msg(sb, KERN_ERR, "External journal has more than one " in ext4_open_dev_journal()
5970 journal->j_private = sb; in ext4_open_dev_journal()
5971 EXT4_SB(sb)->s_journal_bdev_file = bdev_file; in ext4_open_dev_journal()
5972 ext4_init_journal_params(sb, journal); in ext4_open_dev_journal()
5976 ext4_journal_destroy(EXT4_SB(sb), journal); in ext4_open_dev_journal()
5982 static int ext4_load_journal(struct super_block *sb, in ext4_load_journal() argument
5993 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_load_journal()
5998 ext4_msg(sb, KERN_INFO, "external journal device major/minor " in ext4_load_journal()
6005 ext4_msg(sb, KERN_ERR, in ext4_load_journal()
6011 journal = ext4_open_inode_journal(sb, journal_inum); in ext4_load_journal()
6015 journal = ext4_open_dev_journal(sb, journal_dev); in ext4_load_journal()
6021 really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro; in ext4_load_journal()
6023 if (journal_dev_ro && !sb_rdonly(sb)) { in ext4_load_journal()
6024 ext4_msg(sb, KERN_ERR, in ext4_load_journal()
6035 if (ext4_has_feature_journal_needs_recovery(sb)) { in ext4_load_journal()
6036 if (sb_rdonly(sb)) { in ext4_load_journal()
6037 ext4_msg(sb, KERN_INFO, "INFO: recovery " in ext4_load_journal()
6040 ext4_msg(sb, KERN_ERR, "write access " in ext4_load_journal()
6046 ext4_msg(sb, KERN_INFO, "write access will " in ext4_load_journal()
6052 ext4_msg(sb, KERN_INFO, "barriers disabled"); in ext4_load_journal()
6054 if (!ext4_has_feature_journal_needs_recovery(sb)) in ext4_load_journal()
6073 es->s_state |= cpu_to_le16(EXT4_SB(sb)->s_mount_state & in ext4_load_journal()
6080 err2 = ext4_commit_super(sb); in ext4_load_journal()
6086 ext4_msg(sb, KERN_ERR, "error loading journal"); in ext4_load_journal()
6090 EXT4_SB(sb)->s_journal = journal; in ext4_load_journal()
6091 err = ext4_clear_journal_err(sb, es); in ext4_load_journal()
6093 ext4_journal_destroy(EXT4_SB(sb), journal); in ext4_load_journal()
6100 ext4_commit_super(sb); in ext4_load_journal()
6105 ext4_commit_super(sb); in ext4_load_journal()
6111 ext4_journal_destroy(EXT4_SB(sb), journal); in ext4_load_journal()
6115 /* Copy state of EXT4_SB(sb) into buffer for on-disk superblock */
6116 static void ext4_update_super(struct super_block *sb) in ext4_update_super() argument
6118 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_update_super()
6133 if (!sb_rdonly(sb)) in ext4_update_super()
6137 ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) - in ext4_update_super()
6186 ext4_superblock_csum_set(sb); in ext4_update_super()
6190 static int ext4_commit_super(struct super_block *sb) in ext4_commit_super() argument
6192 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; in ext4_commit_super()
6197 ext4_update_super(sb); in ext4_commit_super()
6215 ext4_msg(sb, KERN_ERR, "previous I/O error to " in ext4_commit_super()
6225 (test_opt(sb, BARRIER) ? REQ_FUA : 0), sbh); in ext4_commit_super()
6228 ext4_msg(sb, KERN_ERR, "I/O error while writing " in ext4_commit_super()
6242 static int ext4_mark_recovery_complete(struct super_block *sb, in ext4_mark_recovery_complete() argument
6246 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_mark_recovery_complete()
6248 if (!ext4_has_feature_journal(sb)) { in ext4_mark_recovery_complete()
6250 ext4_error(sb, "Journal got removed while the fs was " in ext4_mark_recovery_complete()
6261 if (sb_rdonly(sb) && (ext4_has_feature_journal_needs_recovery(sb) || in ext4_mark_recovery_complete()
6262 ext4_has_feature_orphan_present(sb))) { in ext4_mark_recovery_complete()
6263 if (!ext4_orphan_file_empty(sb)) { in ext4_mark_recovery_complete()
6264 ext4_error(sb, "Orphan file not empty on read-only fs."); in ext4_mark_recovery_complete()
6268 ext4_clear_feature_journal_needs_recovery(sb); in ext4_mark_recovery_complete()
6269 ext4_clear_feature_orphan_present(sb); in ext4_mark_recovery_complete()
6270 ext4_commit_super(sb); in ext4_mark_recovery_complete()
6282 static int ext4_clear_journal_err(struct super_block *sb, in ext4_clear_journal_err() argument
6289 if (!ext4_has_feature_journal(sb)) { in ext4_clear_journal_err()
6290 ext4_error(sb, "Journal got removed while the fs was mounted!"); in ext4_clear_journal_err()
6294 journal = EXT4_SB(sb)->s_journal; in ext4_clear_journal_err()
6305 errstr = ext4_decode_error(sb, j_errno, nbuf); in ext4_clear_journal_err()
6306 ext4_warning(sb, "Filesystem error recorded " in ext4_clear_journal_err()
6309 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_clear_journal_err()
6311 j_errno = ext4_commit_super(sb); in ext4_clear_journal_err()
6314 ext4_warning(sb, "Marked fs in need of filesystem check."); in ext4_clear_journal_err()
6326 int ext4_force_commit(struct super_block *sb) in ext4_force_commit() argument
6328 return ext4_journal_force_commit(EXT4_SB(sb)->s_journal); in ext4_force_commit()
6331 static int ext4_sync_fs(struct super_block *sb, int wait) in ext4_sync_fs() argument
6336 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs()
6338 ret = ext4_emergency_state(sb); in ext4_sync_fs()
6342 trace_ext4_sync_fs(sb, wait); in ext4_sync_fs()
6348 dquot_writeback_dquots(sb, -1); in ext4_sync_fs()
6365 } else if (wait && test_opt(sb, BARRIER)) in ext4_sync_fs()
6369 err = blkdev_issue_flush(sb->s_bdev); in ext4_sync_fs()
6385 static int ext4_freeze(struct super_block *sb) in ext4_freeze() argument
6388 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_freeze()
6403 ext4_clear_feature_journal_needs_recovery(sb); in ext4_freeze()
6404 if (ext4_orphan_file_empty(sb)) in ext4_freeze()
6405 ext4_clear_feature_orphan_present(sb); in ext4_freeze()
6408 error = ext4_commit_super(sb); in ext4_freeze()
6420 static int ext4_unfreeze(struct super_block *sb) in ext4_unfreeze() argument
6422 if (ext4_emergency_state(sb)) in ext4_unfreeze()
6425 if (EXT4_SB(sb)->s_journal) { in ext4_unfreeze()
6427 ext4_set_feature_journal_needs_recovery(sb); in ext4_unfreeze()
6428 if (ext4_has_feature_orphan_file(sb)) in ext4_unfreeze()
6429 ext4_set_feature_orphan_present(sb); in ext4_unfreeze()
6432 ext4_commit_super(sb); in ext4_unfreeze()
6452 static int __ext4_remount(struct fs_context *fc, struct super_block *sb) in __ext4_remount() argument
6456 struct ext4_sb_info *sbi = EXT4_SB(sb); in __ext4_remount()
6470 old_sb_flags = sb->s_flags; in __ext4_remount()
6482 char *qf_name = get_qf_name(sb, sbi, i); in __ext4_remount()
6503 ext4_is_stripe_incompatible(sb, ctx->s_stripe)) { in __ext4_remount()
6504 ext4_msg(sb, KERN_WARNING, in __ext4_remount()
6518 alloc_ctx = ext4_writepages_down_write(sb); in __ext4_remount()
6519 ext4_apply_options(fc, sb); in __ext4_remount()
6520 ext4_writepages_up_write(sb, alloc_ctx); in __ext4_remount()
6523 test_opt(sb, JOURNAL_CHECKSUM)) { in __ext4_remount()
6524 ext4_msg(sb, KERN_ERR, "changing journal_checksum " in __ext4_remount()
6529 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in __ext4_remount()
6530 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in __ext4_remount()
6531 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_remount()
6536 if (test_opt(sb, DIOREAD_NOLOCK)) { in __ext4_remount()
6537 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_remount()
6542 } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) { in __ext4_remount()
6543 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in __ext4_remount()
6544 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_remount()
6552 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount"); in __ext4_remount()
6558 !test_opt(sb, DELALLOC)) { in __ext4_remount()
6559 ext4_msg(sb, KERN_ERR, "can't disable delalloc during remount"); in __ext4_remount()
6564 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in __ext4_remount()
6565 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in __ext4_remount()
6570 ext4_init_journal_params(sb, sbi->s_journal); in __ext4_remount()
6577 if ((bool)(fc->sb_flags & SB_RDONLY) != sb_rdonly(sb)) { in __ext4_remount()
6578 if (ext4_emergency_state(sb)) { in __ext4_remount()
6584 err = sync_filesystem(sb); in __ext4_remount()
6587 err = dquot_suspend(sb, -1); in __ext4_remount()
6595 sb->s_flags |= SB_RDONLY; in __ext4_remount()
6611 ext4_mark_recovery_complete(sb, es); in __ext4_remount()
6615 if (ext4_has_feature_readonly(sb) || in __ext4_remount()
6616 !ext4_feature_set_ok(sb, 0)) { in __ext4_remount()
6626 ext4_get_group_desc(sb, g, NULL); in __ext4_remount()
6628 if (!ext4_group_desc_csum_verify(sb, g, gdp)) { in __ext4_remount()
6629 ext4_msg(sb, KERN_ERR, in __ext4_remount()
6631 g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)), in __ext4_remount()
6643 if (es->s_last_orphan || !ext4_orphan_file_empty(sb)) { in __ext4_remount()
6644 ext4_msg(sb, KERN_WARNING, "Couldn't " in __ext4_remount()
6659 err = ext4_clear_journal_err(sb, es); in __ext4_remount()
6666 err = ext4_setup_super(sb, es, 0); in __ext4_remount()
6670 sb->s_flags &= ~SB_RDONLY; in __ext4_remount()
6671 if (ext4_has_feature_mmp(sb)) { in __ext4_remount()
6672 err = ext4_multi_mount_protect(sb, in __ext4_remount()
6688 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) { in __ext4_remount()
6689 err = ext4_setup_system_zone(sb); in __ext4_remount()
6695 err = ext4_commit_super(sb); in __ext4_remount()
6702 if (sb_any_quota_suspended(sb)) in __ext4_remount()
6703 dquot_resume(sb, -1); in __ext4_remount()
6704 else if (ext4_has_feature_quota(sb)) { in __ext4_remount()
6705 err = ext4_enable_quotas(sb); in __ext4_remount()
6714 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6715 ext4_release_system_zone(sb); in __ext4_remount()
6721 if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE)) in __ext4_remount()
6722 ext4_unregister_li_request(sb); in __ext4_remount()
6725 first_not_zeroed = ext4_has_uninit_itable(sb); in __ext4_remount()
6726 ext4_register_li_request(sb, first_not_zeroed); in __ext4_remount()
6729 if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb)) in __ext4_remount()
6737 if (test_opt2(sb, ABORT)) in __ext4_remount()
6738 ext4_abort(sb, ESHUTDOWN, "Abort forced by user"); in __ext4_remount()
6747 if (sb_rdonly(sb) && !(old_sb_flags & SB_RDONLY) && in __ext4_remount()
6748 sb_any_quota_suspended(sb)) in __ext4_remount()
6749 dquot_resume(sb, -1); in __ext4_remount()
6751 alloc_ctx = ext4_writepages_down_write(sb); in __ext4_remount()
6752 sb->s_flags = old_sb_flags; in __ext4_remount()
6760 ext4_writepages_up_write(sb, alloc_ctx); in __ext4_remount()
6762 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6763 ext4_release_system_zone(sb); in __ext4_remount()
6767 to_free[i] = get_qf_name(sb, sbi, i); in __ext4_remount()
6774 if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb)) in __ext4_remount()
6781 struct super_block *sb = fc->root->d_sb; in ext4_reconfigure() local
6783 bool old_ro = sb_rdonly(sb); in ext4_reconfigure()
6785 fc->s_fs_info = EXT4_SB(sb); in ext4_reconfigure()
6787 ret = ext4_check_opt_consistency(fc, sb); in ext4_reconfigure()
6791 ret = __ext4_remount(fc, sb); in ext4_reconfigure()
6795 ext4_msg(sb, KERN_INFO, "re-mounted %pU%s.", in ext4_reconfigure()
6796 &sb->s_uuid, in ext4_reconfigure()
6797 (old_ro != sb_rdonly(sb)) ? (sb_rdonly(sb) ? " ro" : " r/w") : ""); in ext4_reconfigure()
6803 static int ext4_statfs_project(struct super_block *sb, in ext4_statfs_project() argument
6812 dquot = dqget(sb, qid); in ext4_statfs_project()
6819 limit >>= sb->s_blocksize_bits; in ext4_statfs_project()
6825 dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits; in ext4_statfs_project()
6854 struct super_block *sb = dentry->d_sb; in ext4_statfs() local
6855 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs()
6861 if (!test_opt(sb, MINIX_DF)) in ext4_statfs()
6865 buf->f_bsize = sb->s_blocksize; in ext4_statfs()
6882 sb_has_quota_limits_enabled(sb, PRJQUOTA)) in ext4_statfs()
6883 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf); in ext4_statfs()
6984 struct super_block *sb = dquot->dq_sb; in ext4_mark_dquot_dirty() local
6986 if (ext4_is_quota_journalled(sb)) { in ext4_mark_dquot_dirty()
6994 static int ext4_write_info(struct super_block *sb, int type) in ext4_write_info() argument
7000 handle = ext4_journal_start_sb(sb, EXT4_HT_QUOTA, 2); in ext4_write_info()
7003 ret = dquot_commit_info(sb, type); in ext4_write_info()
7027 static int ext4_quota_on(struct super_block *sb, int type, int format_id, in ext4_quota_on() argument
7032 if (!test_opt(sb, QUOTA)) in ext4_quota_on()
7036 if (path->dentry->d_sb != sb) in ext4_quota_on()
7044 if (EXT4_SB(sb)->s_qf_names[type]) { in ext4_quota_on()
7046 if (path->dentry->d_parent != sb->s_root) in ext4_quota_on()
7047 ext4_msg(sb, KERN_WARNING, in ext4_quota_on()
7050 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY; in ext4_quota_on()
7056 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY; in ext4_quota_on()
7060 err = dquot_quota_on(sb, type, format_id, path); in ext4_quota_on()
7082 dquot_quota_off(sb, type); in ext4_quota_on()
7104 static int ext4_quota_enable(struct super_block *sb, int type, int format_id, in ext4_quota_enable() argument
7110 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_quota_enable()
7111 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_quota_enable()
7112 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_quota_enable()
7115 BUG_ON(!ext4_has_feature_quota(sb)); in ext4_quota_enable()
7121 ext4_error(sb, "Bad quota inum: %lu, type: %d", in ext4_quota_enable()
7126 qf_inode = ext4_iget(sb, qf_inums[type], EXT4_IGET_SPECIAL); in ext4_quota_enable()
7128 ext4_error(sb, "Bad quota inode: %lu, type: %d", in ext4_quota_enable()
7145 int ext4_enable_quotas(struct super_block *sb) in ext4_enable_quotas() argument
7149 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_enable_quotas()
7150 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_enable_quotas()
7151 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_enable_quotas()
7154 test_opt(sb, USRQUOTA), in ext4_enable_quotas()
7155 test_opt(sb, GRPQUOTA), in ext4_enable_quotas()
7156 test_opt(sb, PRJQUOTA), in ext4_enable_quotas()
7159 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY; in ext4_enable_quotas()
7162 err = ext4_quota_enable(sb, type, QFMT_VFS_V1, in ext4_enable_quotas()
7166 ext4_warning(sb, in ext4_enable_quotas()
7172 ext4_quotas_off(sb, type); in ext4_enable_quotas()
7180 static int ext4_quota_off(struct super_block *sb, int type) in ext4_quota_off() argument
7182 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_off()
7188 if (test_opt(sb, DELALLOC)) in ext4_quota_off()
7189 sync_filesystem(sb); in ext4_quota_off()
7194 err = dquot_quota_off(sb, type); in ext4_quota_off()
7195 if (err || ext4_has_feature_quota(sb)) in ext4_quota_off()
7202 if (sb_rdonly(sb)) in ext4_quota_off()
7228 return dquot_quota_off(sb, type); in ext4_quota_off()
7235 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data, in ext4_quota_read() argument
7238 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_read()
7239 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_read()
7240 int offset = off & (sb->s_blocksize - 1); in ext4_quota_read()
7252 tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread); in ext4_quota_read()
7271 static ssize_t ext4_quota_write(struct super_block *sb, int type, in ext4_quota_write() argument
7274 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_write()
7275 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_write()
7276 int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1); in ext4_quota_write()
7282 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
7291 if (sb->s_blocksize - offset < len) { in ext4_quota_write()
7292 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
7309 err = ext4_journal_get_write_access(handle, sb, bh, EXT4_JTR_NONE); in ext4_quota_write()
7346 static inline int ext2_feature_set_ok(struct super_block *sb) in ext2_feature_set_ok() argument
7348 if (ext4_has_unknown_ext2_incompat_features(sb)) in ext2_feature_set_ok()
7350 if (sb_rdonly(sb)) in ext2_feature_set_ok()
7352 if (ext4_has_unknown_ext2_ro_compat_features(sb)) in ext2_feature_set_ok()
7359 static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; } in ext2_feature_set_ok() argument
7375 static inline int ext3_feature_set_ok(struct super_block *sb) in ext3_feature_set_ok() argument
7377 if (ext4_has_unknown_ext3_incompat_features(sb)) in ext3_feature_set_ok()
7379 if (!ext4_has_feature_journal(sb)) in ext3_feature_set_ok()
7381 if (sb_rdonly(sb)) in ext3_feature_set_ok()
7383 if (ext4_has_unknown_ext3_ro_compat_features(sb)) in ext3_feature_set_ok()
7388 static void ext4_kill_sb(struct super_block *sb) in ext4_kill_sb() argument
7390 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_kill_sb()
7393 kill_block_super(sb); in ext4_kill_sb()