Lines Matching refs: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);
83 static void ext4_unregister_li_request(struct super_block *sb);
85 static struct inode *ext4_get_journal_inode(struct super_block *sb,
89 struct super_block *sb);
90 static void ext4_apply_options(struct fs_context *fc, struct super_block *sb);
143 #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type) argument
145 #define IS_EXT2_SB(sb) (0) argument
159 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type) argument
222 static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb, in __ext4_sb_bread_gfp() argument
229 bh = sb_getblk_gfp(sb, block, gfp); in __ext4_sb_bread_gfp()
243 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block, in ext4_sb_bread() argument
246 return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE); in ext4_sb_bread()
249 struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb, in ext4_sb_bread_unmovable() argument
252 return __ext4_sb_bread_gfp(sb, block, 0, 0); in ext4_sb_bread_unmovable()
255 void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block) in ext4_sb_breadahead_unmovable() argument
257 struct buffer_head *bh = sb_getblk_gfp(sb, block, 0); in ext4_sb_breadahead_unmovable()
266 static int ext4_verify_csum_type(struct super_block *sb, in ext4_verify_csum_type() argument
269 if (!ext4_has_feature_metadata_csum(sb)) in ext4_verify_csum_type()
275 __le32 ext4_superblock_csum(struct super_block *sb, in ext4_superblock_csum() argument
278 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_superblock_csum()
287 static int ext4_superblock_csum_verify(struct super_block *sb, in ext4_superblock_csum_verify() argument
290 if (!ext4_has_metadata_csum(sb)) in ext4_superblock_csum_verify()
293 return es->s_checksum == ext4_superblock_csum(sb, es); in ext4_superblock_csum_verify()
296 void ext4_superblock_csum_set(struct super_block *sb) in ext4_superblock_csum_set() argument
298 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_superblock_csum_set()
300 if (!ext4_has_metadata_csum(sb)) in ext4_superblock_csum_set()
303 es->s_checksum = ext4_superblock_csum(sb, es); in ext4_superblock_csum_set()
306 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, in ext4_block_bitmap() argument
310 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_block_bitmap()
314 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, in ext4_inode_bitmap() argument
318 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_bitmap()
322 ext4_fsblk_t ext4_inode_table(struct super_block *sb, in ext4_inode_table() argument
326 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_table()
330 __u32 ext4_free_group_clusters(struct super_block *sb, in ext4_free_group_clusters() argument
334 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_group_clusters()
338 __u32 ext4_free_inodes_count(struct super_block *sb, in ext4_free_inodes_count() argument
342 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_inodes_count()
346 __u32 ext4_used_dirs_count(struct super_block *sb, in ext4_used_dirs_count() argument
350 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_used_dirs_count()
354 __u32 ext4_itable_unused_count(struct super_block *sb, in ext4_itable_unused_count() argument
358 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_itable_unused_count()
362 void ext4_block_bitmap_set(struct super_block *sb, in ext4_block_bitmap_set() argument
366 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_block_bitmap_set()
370 void ext4_inode_bitmap_set(struct super_block *sb, in ext4_inode_bitmap_set() argument
374 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_bitmap_set()
378 void ext4_inode_table_set(struct super_block *sb, in ext4_inode_table_set() argument
382 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_table_set()
386 void ext4_free_group_clusters_set(struct super_block *sb, in ext4_free_group_clusters_set() argument
390 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_group_clusters_set()
394 void ext4_free_inodes_set(struct super_block *sb, in ext4_free_inodes_set() argument
398 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_inodes_set()
402 void ext4_used_dirs_set(struct super_block *sb, in ext4_used_dirs_set() argument
406 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_used_dirs_set()
410 void ext4_itable_unused_set(struct super_block *sb, in ext4_itable_unused_set() argument
414 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_itable_unused_set()
444 static int block_device_ejected(struct super_block *sb) in block_device_ejected() argument
446 struct inode *bd_inode = sb->s_bdev->bd_inode; in block_device_ejected()
454 struct super_block *sb = journal->j_private; in ext4_journal_commit_callback() local
455 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_journal_commit_callback()
461 ext4_process_freed_data(sb, txn->t_tid); in ext4_journal_commit_callback()
469 jce->jce_func(sb, jce, error); in ext4_journal_commit_callback()
600 static void save_error_info(struct super_block *sb, int error, in save_error_info() argument
604 struct ext4_sb_info *sbi = EXT4_SB(sb); in save_error_info()
649 static void ext4_handle_error(struct super_block *sb, bool force_ro, int error, in ext4_handle_error() argument
653 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_handle_error()
654 bool continue_fs = !force_ro && test_opt(sb, ERRORS_CONT); in ext4_handle_error()
656 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_handle_error()
657 if (test_opt(sb, WARN_ON_ERROR)) in ext4_handle_error()
660 if (!continue_fs && !sb_rdonly(sb)) { in ext4_handle_error()
661 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED); in ext4_handle_error()
666 if (!bdev_read_only(sb->s_bdev)) { in ext4_handle_error()
667 save_error_info(sb, error, ino, block, func, line); in ext4_handle_error()
675 schedule_work(&EXT4_SB(sb)->s_error_work); in ext4_handle_error()
677 ext4_commit_super(sb); in ext4_handle_error()
685 if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) { in ext4_handle_error()
687 sb->s_id); in ext4_handle_error()
690 if (sb_rdonly(sb) || continue_fs) in ext4_handle_error()
693 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in ext4_handle_error()
699 sb->s_flags |= SB_RDONLY; in ext4_handle_error()
751 #define ext4_error_ratelimit(sb) \ argument
752 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
755 void __ext4_error(struct super_block *sb, const char *function, in __ext4_error() argument
762 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_error()
765 trace_ext4_error(sb, function, line); in __ext4_error()
766 if (ext4_error_ratelimit(sb)) { in __ext4_error()
772 sb->s_id, function, line, current->comm, &vaf); in __ext4_error()
775 fsnotify_sb_error(sb, NULL, error ? error : EFSCORRUPTED); in __ext4_error()
777 ext4_handle_error(sb, force_ro, error, 0, block, function, line); in __ext4_error()
853 const char *ext4_decode_error(struct super_block *sb, int errno, in ext4_decode_error() argument
872 if (!sb || (EXT4_SB(sb)->s_journal && in ext4_decode_error()
873 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT)) in ext4_decode_error()
896 void __ext4_std_error(struct super_block *sb, const char *function, in __ext4_std_error() argument
902 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_std_error()
908 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb)) in __ext4_std_error()
911 if (ext4_error_ratelimit(sb)) { in __ext4_std_error()
912 errstr = ext4_decode_error(sb, errno, nbuf); in __ext4_std_error()
914 sb->s_id, function, line, errstr); in __ext4_std_error()
916 fsnotify_sb_error(sb, NULL, errno ? errno : EFSCORRUPTED); in __ext4_std_error()
918 ext4_handle_error(sb, false, -errno, 0, 0, function, line); in __ext4_std_error()
921 void __ext4_msg(struct super_block *sb, in __ext4_msg() argument
927 if (sb) { in __ext4_msg()
928 atomic_inc(&EXT4_SB(sb)->s_msg_count); in __ext4_msg()
929 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), in __ext4_msg()
937 if (sb) in __ext4_msg()
938 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in __ext4_msg()
944 static int ext4_warning_ratelimit(struct super_block *sb) in ext4_warning_ratelimit() argument
946 atomic_inc(&EXT4_SB(sb)->s_warning_count); in ext4_warning_ratelimit()
947 return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), in ext4_warning_ratelimit()
951 void __ext4_warning(struct super_block *sb, const char *function, in __ext4_warning() argument
957 if (!ext4_warning_ratelimit(sb)) in __ext4_warning()
964 sb->s_id, function, line, &vaf); in __ext4_warning()
987 struct super_block *sb, ext4_group_t grp, in __ext4_grp_locked_error() argument
996 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_grp_locked_error()
999 trace_ext4_error(sb, function, line); in __ext4_grp_locked_error()
1000 if (ext4_error_ratelimit(sb)) { in __ext4_grp_locked_error()
1005 sb->s_id, function, line, grp); in __ext4_grp_locked_error()
1015 if (test_opt(sb, ERRORS_CONT)) { in __ext4_grp_locked_error()
1016 if (test_opt(sb, WARN_ON_ERROR)) in __ext4_grp_locked_error()
1018 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in __ext4_grp_locked_error()
1019 if (!bdev_read_only(sb->s_bdev)) { in __ext4_grp_locked_error()
1020 save_error_info(sb, EFSCORRUPTED, ino, block, function, in __ext4_grp_locked_error()
1022 schedule_work(&EXT4_SB(sb)->s_error_work); in __ext4_grp_locked_error()
1026 ext4_unlock_group(sb, grp); in __ext4_grp_locked_error()
1027 ext4_handle_error(sb, false, EFSCORRUPTED, ino, block, function, line); in __ext4_grp_locked_error()
1039 ext4_lock_group(sb, grp); in __ext4_grp_locked_error()
1043 void ext4_mark_group_bitmap_corrupted(struct super_block *sb, in ext4_mark_group_bitmap_corrupted() argument
1047 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_group_bitmap_corrupted()
1048 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in ext4_mark_group_bitmap_corrupted()
1049 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL); in ext4_mark_group_bitmap_corrupted()
1066 count = ext4_free_inodes_count(sb, gdp); in ext4_mark_group_bitmap_corrupted()
1073 void ext4_update_dynamic_rev(struct super_block *sb) in ext4_update_dynamic_rev() argument
1075 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_update_dynamic_rev()
1080 ext4_warning(sb, in ext4_update_dynamic_rev()
1101 static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb) in ext4_blkdev_get() argument
1105 bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb); in ext4_blkdev_get()
1111 ext4_msg(sb, KERN_ERR, in ext4_blkdev_get()
1140 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
1144 ext4_msg(sb, KERN_ERR, "sb orphan head is %d", in dump_orphan_list()
1159 static int ext4_quota_off(struct super_block *sb, int type);
1161 static inline void ext4_quota_off_umount(struct super_block *sb) in ext4_quota_off_umount() argument
1167 ext4_quota_off(sb, type); in ext4_quota_off_umount()
1174 static inline char *get_qf_name(struct super_block *sb, in get_qf_name() argument
1179 lockdep_is_held(&sb->s_umount)); in get_qf_name()
1182 static inline void ext4_quota_off_umount(struct super_block *sb) in ext4_quota_off_umount() argument
1187 static void ext4_put_super(struct super_block *sb) in ext4_put_super() argument
1189 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super()
1206 ext4_unregister_sysfs(sb); in ext4_put_super()
1209 ext4_msg(sb, KERN_INFO, "unmounting filesystem."); in ext4_put_super()
1211 ext4_unregister_li_request(sb); in ext4_put_super()
1212 ext4_quota_off_umount(sb); in ext4_put_super()
1216 ext4_release_orphan_info(sb); in ext4_put_super()
1223 ext4_abort(sb, -err, "Couldn't clean up the journal"); in ext4_put_super()
1229 ext4_release_system_zone(sb); in ext4_put_super()
1230 ext4_mb_release(sb); in ext4_put_super()
1231 ext4_ext_release(sb); in ext4_put_super()
1233 if (!sb_rdonly(sb) && !aborted) { in ext4_put_super()
1234 ext4_clear_feature_journal_needs_recovery(sb); in ext4_put_super()
1235 ext4_clear_feature_orphan_present(sb); in ext4_put_super()
1238 if (!sb_rdonly(sb)) in ext4_put_super()
1239 ext4_commit_super(sb); in ext4_put_super()
1261 kfree(get_qf_name(sb, sbi, i)); in ext4_put_super()
1269 dump_orphan_list(sb, sbi); in ext4_put_super()
1272 sync_blockdev(sb->s_bdev); in ext4_put_super()
1273 invalidate_bdev(sb->s_bdev); in ext4_put_super()
1274 if (sbi->s_journal_bdev && sbi->s_journal_bdev != sb->s_bdev) { in ext4_put_super()
1294 sb->s_fs_info = NULL; in ext4_put_super()
1307 utf8_unload(sb->s_encoding); in ext4_put_super()
1317 static struct inode *ext4_alloc_inode(struct super_block *sb) in ext4_alloc_inode() argument
1321 ei = alloc_inode_sb(sb, ext4_inode_cachep, GFP_NOFS); in ext4_alloc_inode()
1448 static struct inode *ext4_nfs_get_inode(struct super_block *sb, in ext4_nfs_get_inode() argument
1457 inode = ext4_iget(sb, ino, EXT4_IGET_HANDLE); in ext4_nfs_get_inode()
1468 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid, in ext4_fh_to_dentry() argument
1471 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, in ext4_fh_to_dentry()
1475 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid, in ext4_fh_to_parent() argument
1478 return generic_fh_to_parent(sb, fid, fh_len, fh_type, in ext4_fh_to_parent()
1500 static int ext4_write_info(struct super_block *sb, int type);
1501 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1503 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1505 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1507 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
2417 static int parse_apply_sb_mount_options(struct super_block *sb, in parse_apply_sb_mount_options() argument
2420 struct ext4_sb_info *sbi = EXT4_SB(sb); in parse_apply_sb_mount_options()
2450 ret = ext4_check_opt_consistency(fc, sb); in parse_apply_sb_mount_options()
2453 ext4_msg(sb, KERN_WARNING, in parse_apply_sb_mount_options()
2465 ext4_apply_options(fc, sb); in parse_apply_sb_mount_options()
2478 struct super_block *sb) in ext4_apply_quota_options() argument
2481 bool quota_feature = ext4_has_feature_quota(sb); in ext4_apply_quota_options()
2483 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_apply_quota_options()
2497 set_opt(sb, QUOTA); in ext4_apply_quota_options()
2500 lockdep_is_held(&sb->s_umount)); in ext4_apply_quota_options()
2515 struct super_block *sb) in ext4_check_quota_consistency() argument
2519 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_quota_consistency()
2520 bool quota_feature = ext4_has_feature_quota(sb); in ext4_check_quota_consistency()
2521 bool quota_loaded = sb_any_quota_loaded(sb); in ext4_check_quota_consistency()
2531 !ext4_has_feature_project(sb)) { in ext4_check_quota_consistency()
2555 strcmp(get_qf_name(sb, sbi, i), in ext4_check_quota_consistency()
2579 usr_qf_name = (get_qf_name(sb, sbi, USRQUOTA) || in ext4_check_quota_consistency()
2581 grp_qf_name = (get_qf_name(sb, sbi, GRPQUOTA) || in ext4_check_quota_consistency()
2585 test_opt(sb, USRQUOTA)); in ext4_check_quota_consistency()
2588 test_opt(sb, GRPQUOTA)); in ext4_check_quota_consistency()
2633 struct super_block *sb) in ext4_check_test_dummy_encryption() argument
2636 const struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_test_dummy_encryption()
2642 if (!ext4_has_feature_encrypt(sb)) { in ext4_check_test_dummy_encryption()
2676 err = fscrypt_add_test_dummy_key(sb, &ctx->dummy_enc_policy); in ext4_check_test_dummy_encryption()
2684 struct super_block *sb) in ext4_apply_test_dummy_encryption() argument
2688 fscrypt_is_dummy_policy_set(&EXT4_SB(sb)->s_dummy_enc_policy)) in ext4_apply_test_dummy_encryption()
2690 EXT4_SB(sb)->s_dummy_enc_policy = ctx->dummy_enc_policy; in ext4_apply_test_dummy_encryption()
2692 ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled"); in ext4_apply_test_dummy_encryption()
2696 struct super_block *sb) in ext4_check_opt_consistency() argument
2703 if ((ctx->opt_flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) { in ext4_check_opt_consistency()
2708 if ((ctx->opt_flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) { in ext4_check_opt_consistency()
2731 err = ext4_check_test_dummy_encryption(fc, sb); in ext4_check_opt_consistency()
2742 test_opt(sb, DATA_FLAGS)) { in ext4_check_opt_consistency()
2751 (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)) { in ext4_check_opt_consistency()
2776 return ext4_check_quota_consistency(fc, sb); in ext4_check_opt_consistency()
2779 static void ext4_apply_options(struct fs_context *fc, struct super_block *sb) in ext4_apply_options() argument
2790 sb->s_flags &= ~ctx->mask_s_flags; in ext4_apply_options()
2791 sb->s_flags |= ctx->vals_s_flags; in ext4_apply_options()
2809 ext4_apply_quota_options(fc, sb); in ext4_apply_options()
2810 ext4_apply_test_dummy_encryption(ctx, sb); in ext4_apply_options()
2842 struct super_block *sb) in ext4_show_quota_options() argument
2845 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options()
2891 static int _ext4_show_options(struct seq_file *seq, struct super_block *sb, in _ext4_show_options() argument
2894 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options()
2929 if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO) in _ext4_show_options()
2931 if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE) in _ext4_show_options()
2933 if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC) in _ext4_show_options()
2945 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in _ext4_show_options()
2947 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in _ext4_show_options()
2949 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) in _ext4_show_options()
2957 if (test_opt(sb, INIT_INODE_TABLE) && (nodefs || in _ext4_show_options()
2962 if (test_opt(sb, DATA_ERR_ABORT)) in _ext4_show_options()
2965 fscrypt_show_test_dummy_encryption(seq, sep, sb); in _ext4_show_options()
2967 if (sb->s_flags & SB_INLINECRYPT) in _ext4_show_options()
2970 if (test_opt(sb, DAX_ALWAYS)) { in _ext4_show_options()
2971 if (IS_EXT2_SB(sb)) in _ext4_show_options()
2975 } else if (test_opt2(sb, DAX_NEVER)) { in _ext4_show_options()
2977 } else if (test_opt2(sb, DAX_INODE)) { in _ext4_show_options()
2982 !test_opt2(sb, MB_OPTIMIZE_SCAN)) { in _ext4_show_options()
2985 test_opt2(sb, MB_OPTIMIZE_SCAN)) { in _ext4_show_options()
2989 ext4_show_quota_options(seq, sb); in _ext4_show_options()
3000 struct super_block *sb = seq->private; in ext4_seq_options_show() local
3003 seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw"); in ext4_seq_options_show()
3004 rc = _ext4_show_options(seq, sb, 1); in ext4_seq_options_show()
3009 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, in ext4_setup_super() argument
3012 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super()
3016 ext4_msg(sb, KERN_ERR, "revision level too high, " in ext4_setup_super()
3024 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, " in ext4_setup_super()
3027 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
3033 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
3039 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
3049 ext4_set_feature_journal_needs_recovery(sb); in ext4_setup_super()
3050 if (ext4_has_feature_orphan_file(sb)) in ext4_setup_super()
3051 ext4_set_feature_orphan_present(sb); in ext4_setup_super()
3054 err = ext4_commit_super(sb); in ext4_setup_super()
3056 if (test_opt(sb, DEBUG)) in ext4_setup_super()
3059 sb->s_blocksize, in ext4_setup_super()
3061 EXT4_BLOCKS_PER_GROUP(sb), in ext4_setup_super()
3062 EXT4_INODES_PER_GROUP(sb), in ext4_setup_super()
3067 int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup) in ext4_alloc_flex_bg_array() argument
3069 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array()
3083 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
3095 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
3114 static int ext4_fill_flex_info(struct super_block *sb) in ext4_fill_flex_info() argument
3116 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info()
3128 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
3133 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_fill_flex_info()
3137 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes); in ext4_fill_flex_info()
3138 atomic64_add(ext4_free_group_clusters(sb, gdp), in ext4_fill_flex_info()
3140 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs); in ext4_fill_flex_info()
3148 static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum() argument
3154 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_csum()
3176 if (!ext4_has_feature_gdt_csum(sb)) in ext4_group_desc_csum()
3184 if (ext4_has_feature_64bit(sb) && in ext4_group_desc_csum()
3194 int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_verify() argument
3197 if (ext4_has_group_desc_csum(sb) && in ext4_group_desc_csum_verify()
3198 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp))) in ext4_group_desc_csum_verify()
3204 void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_set() argument
3207 if (!ext4_has_group_desc_csum(sb)) in ext4_group_desc_csum_set()
3209 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp); in ext4_group_desc_csum_set()
3213 static int ext4_check_descriptors(struct super_block *sb, in ext4_check_descriptors() argument
3217 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors()
3220 ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0); in ext4_check_descriptors()
3227 if (ext4_has_feature_flex_bg(sb)) in ext4_check_descriptors()
3233 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_check_descriptors()
3239 (EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_descriptors()
3245 block_bitmap = ext4_block_bitmap(sb, gdp); in ext4_check_descriptors()
3247 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3250 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3255 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3258 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3262 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3267 inode_bitmap = ext4_inode_bitmap(sb, gdp); in ext4_check_descriptors()
3269 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3272 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3277 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3280 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3284 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3289 inode_table = ext4_inode_table(sb, gdp); in ext4_check_descriptors()
3291 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3294 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3299 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3302 if (!sb_rdonly(sb)) in ext4_check_descriptors()
3307 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3312 ext4_lock_group(sb, i); in ext4_check_descriptors()
3313 if (!ext4_group_desc_csum_verify(sb, i, gdp)) { in ext4_check_descriptors()
3314 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
3316 i, le16_to_cpu(ext4_group_desc_csum(sb, i, in ext4_check_descriptors()
3318 if (!sb_rdonly(sb)) { in ext4_check_descriptors()
3319 ext4_unlock_group(sb, i); in ext4_check_descriptors()
3323 ext4_unlock_group(sb, i); in ext4_check_descriptors()
3325 first_block += EXT4_BLOCKS_PER_GROUP(sb); in ext4_check_descriptors()
3456 static ext4_fsblk_t descriptor_loc(struct super_block *sb, in descriptor_loc() argument
3459 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc()
3465 if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg) in descriptor_loc()
3468 if (ext4_bg_has_super(sb, bg)) in descriptor_loc()
3477 if (sb->s_blocksize == 1024 && nr == 0 && in descriptor_loc()
3481 return (has_super + ext4_group_first_block_no(sb, bg)); in descriptor_loc()
3527 int ext4_feature_set_ok(struct super_block *sb, int readonly) in ext4_feature_set_ok() argument
3529 if (ext4_has_unknown_ext4_incompat_features(sb)) { in ext4_feature_set_ok()
3530 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3533 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) & in ext4_feature_set_ok()
3539 if (ext4_has_feature_casefold(sb)) { in ext4_feature_set_ok()
3540 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3550 if (ext4_has_feature_readonly(sb)) { in ext4_feature_set_ok()
3551 ext4_msg(sb, KERN_INFO, "filesystem is read-only"); in ext4_feature_set_ok()
3552 sb->s_flags |= SB_RDONLY; in ext4_feature_set_ok()
3557 if (ext4_has_unknown_ext4_ro_compat_features(sb)) { in ext4_feature_set_ok()
3558 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of " in ext4_feature_set_ok()
3560 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) & in ext4_feature_set_ok()
3564 if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) { in ext4_feature_set_ok()
3565 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3572 if (!readonly && (ext4_has_feature_quota(sb) || in ext4_feature_set_ok()
3573 ext4_has_feature_project(sb))) { in ext4_feature_set_ok()
3574 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3589 struct super_block *sb = sbi->s_sb; in print_daily_error_info() local
3594 ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u", in print_daily_error_info()
3598 sb->s_id, in print_daily_error_info()
3613 sb->s_id, in print_daily_error_info()
3633 struct super_block *sb = elr->lr_super; in ext4_run_li_request() local
3634 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; in ext4_run_li_request()
3641 elr->lr_next_group = ext4_mb_prefetch(sb, group, in ext4_run_li_request()
3642 EXT4_SB(sb)->s_mb_prefetch, &prefetch_ios); in ext4_run_li_request()
3644 ext4_mb_prefetch_fini(sb, elr->lr_next_group, in ext4_run_li_request()
3646 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group, in ext4_run_li_request()
3651 !sb_rdonly(sb) && test_opt(sb, INIT_INODE_TABLE)) { in ext4_run_li_request()
3661 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_run_li_request()
3676 ret = ext4_init_inode_table(sb, group, in ext4_run_li_request()
3678 trace_ext4_lazy_itable_init(sb, group); in ext4_run_li_request()
3703 static void ext4_unregister_li_request(struct super_block *sb) in ext4_unregister_li_request() argument
3712 ext4_remove_li_request(EXT4_SB(sb)->s_li_request); in ext4_unregister_li_request()
3867 static ext4_group_t ext4_has_uninit_itable(struct super_block *sb) in ext4_has_uninit_itable() argument
3869 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count; in ext4_has_uninit_itable()
3872 if (!ext4_has_group_desc_csum(sb)) in ext4_has_uninit_itable()
3876 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_has_uninit_itable()
3905 static struct ext4_li_request *ext4_li_request_new(struct super_block *sb, in ext4_li_request_new() argument
3914 elr->lr_super = sb; in ext4_li_request_new()
3916 if (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS)) { in ext4_li_request_new()
3933 int ext4_register_li_request(struct super_block *sb, in ext4_register_li_request() argument
3936 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request()
3951 if (sb_rdonly(sb) || in ext4_register_li_request()
3952 (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS) && in ext4_register_li_request()
3953 (first_not_zeroed == ngroups || !test_opt(sb, INIT_INODE_TABLE)))) in ext4_register_li_request()
3956 elr = ext4_li_request_new(sb, first_not_zeroed); in ext4_register_li_request()
4008 static int set_journal_csum_feature_set(struct super_block *sb) in set_journal_csum_feature_set() argument
4012 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set()
4014 if (ext4_has_metadata_csum(sb)) { in set_journal_csum_feature_set()
4028 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in set_journal_csum_feature_set()
4033 } else if (test_opt(sb, JOURNAL_CHECKSUM)) { in set_journal_csum_feature_set()
4062 static int count_overhead(struct super_block *sb, ext4_group_t grp, in count_overhead() argument
4065 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead()
4068 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in count_overhead()
4070 int has_super = ext4_bg_has_super(sb, grp); in count_overhead()
4072 if (!ext4_has_feature_bigalloc(sb)) in count_overhead()
4073 return (has_super + ext4_bg_num_gdb(sb, grp) + in count_overhead()
4078 (grp * EXT4_BLOCKS_PER_GROUP(sb)); in count_overhead()
4079 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1; in count_overhead()
4081 gdp = ext4_get_group_desc(sb, i, NULL); in count_overhead()
4082 b = ext4_block_bitmap(sb, gdp); in count_overhead()
4087 b = ext4_inode_bitmap(sb, gdp); in count_overhead()
4092 b = ext4_inode_table(sb, gdp); in count_overhead()
4102 if (ext4_bg_has_super(sb, grp)) { in count_overhead()
4106 j = ext4_bg_num_gdb(sb, grp); in count_overhead()
4107 if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) { in count_overhead()
4108 ext4_error(sb, "Invalid number of block group " in count_overhead()
4110 j = EXT4_BLOCKS_PER_GROUP(sb) - s; in count_overhead()
4118 return EXT4_CLUSTERS_PER_GROUP(sb) - in count_overhead()
4119 ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8); in count_overhead()
4125 int ext4_calculate_overhead(struct super_block *sb) in ext4_calculate_overhead() argument
4127 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead()
4131 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_calculate_overhead()
4155 blks = count_overhead(sb, i, buf); in ext4_calculate_overhead()
4168 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) { in ext4_calculate_overhead()
4170 j_inode = ext4_get_journal_inode(sb, j_inum); in ext4_calculate_overhead()
4172 j_blocks = j_inode->i_size >> sb->s_blocksize_bits; in ext4_calculate_overhead()
4176 ext4_msg(sb, KERN_ERR, "can't get journal size"); in ext4_calculate_overhead()
4185 static void ext4_set_resv_clusters(struct super_block *sb) in ext4_set_resv_clusters() argument
4188 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_resv_clusters()
4196 if (!ext4_has_feature_extents(sb)) in ext4_set_resv_clusters()
4215 static const char *ext4_quota_mode(struct super_block *sb) in ext4_quota_mode() argument
4218 if (!ext4_quota_capable(sb)) in ext4_quota_mode()
4221 if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb)) in ext4_quota_mode()
4230 static void ext4_setup_csum_trigger(struct super_block *sb, in ext4_setup_csum_trigger() argument
4238 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_csum_trigger()
4240 sbi->s_journal_triggers[type].sb = sb; in ext4_setup_csum_trigger()
4254 static struct ext4_sb_info *ext4_alloc_sbi(struct super_block *sb) in ext4_alloc_sbi() argument
4262 sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off, in ext4_alloc_sbi()
4271 sb->s_fs_info = sbi; in ext4_alloc_sbi()
4272 sbi->s_sb = sb; in ext4_alloc_sbi()
4280 static void ext4_set_def_opts(struct super_block *sb, in ext4_set_def_opts() argument
4287 set_opt(sb, INIT_INODE_TABLE); in ext4_set_def_opts()
4289 set_opt(sb, DEBUG); in ext4_set_def_opts()
4291 set_opt(sb, GRPID); in ext4_set_def_opts()
4293 set_opt(sb, NO_UID32); in ext4_set_def_opts()
4295 set_opt(sb, XATTR_USER); in ext4_set_def_opts()
4297 set_opt(sb, POSIX_ACL); in ext4_set_def_opts()
4299 if (ext4_has_feature_fast_commit(sb)) in ext4_set_def_opts()
4300 set_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_set_def_opts()
4302 if (ext4_has_metadata_csum(sb)) in ext4_set_def_opts()
4303 set_opt(sb, JOURNAL_CHECKSUM); in ext4_set_def_opts()
4306 set_opt(sb, JOURNAL_DATA); in ext4_set_def_opts()
4308 set_opt(sb, ORDERED_DATA); in ext4_set_def_opts()
4310 set_opt(sb, WRITEBACK_DATA); in ext4_set_def_opts()
4313 set_opt(sb, ERRORS_PANIC); in ext4_set_def_opts()
4315 set_opt(sb, ERRORS_CONT); in ext4_set_def_opts()
4317 set_opt(sb, ERRORS_RO); in ext4_set_def_opts()
4319 set_opt(sb, BLOCK_VALIDITY); in ext4_set_def_opts()
4321 set_opt(sb, DISCARD); in ext4_set_def_opts()
4324 set_opt(sb, BARRIER); in ext4_set_def_opts()
4330 if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) && in ext4_set_def_opts()
4332 set_opt(sb, DELALLOC); in ext4_set_def_opts()
4334 if (sb->s_blocksize == PAGE_SIZE) in ext4_set_def_opts()
4335 set_opt(sb, DIOREAD_NOLOCK); in ext4_set_def_opts()
4338 static int ext4_handle_clustersize(struct super_block *sb) in ext4_handle_clustersize() argument
4340 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_handle_clustersize()
4346 if (ext4_has_feature_bigalloc(sb)) { in ext4_handle_clustersize()
4347 if (clustersize < sb->s_blocksize) { in ext4_handle_clustersize()
4348 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4350 "block size (%lu)", clustersize, sb->s_blocksize); in ext4_handle_clustersize()
4357 if (sbi->s_clusters_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4358 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4364 (sbi->s_clusters_per_group * (clustersize / sb->s_blocksize))) { in ext4_handle_clustersize()
4365 ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and " in ext4_handle_clustersize()
4372 if (clustersize != sb->s_blocksize) { in ext4_handle_clustersize()
4373 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4375 "block size (%lu)", clustersize, sb->s_blocksize); in ext4_handle_clustersize()
4378 if (sbi->s_blocks_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4379 ext4_msg(sb, KERN_ERR, in ext4_handle_clustersize()
4387 sbi->s_cluster_ratio = clustersize / sb->s_blocksize; in ext4_handle_clustersize()
4391 set_opt2(sb, STD_GROUP_SIZE); in ext4_handle_clustersize()
4396 static void ext4_fast_commit_init(struct super_block *sb) in ext4_fast_commit_init() argument
4398 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fast_commit_init()
4407 ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE); in ext4_fast_commit_init()
4420 static int ext4_inode_info_init(struct super_block *sb, in ext4_inode_info_init() argument
4423 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_inode_info_init()
4432 ext4_msg(sb, KERN_ERR, "invalid first ino: %u", in ext4_inode_info_init()
4438 (sbi->s_inode_size > sb->s_blocksize)) { in ext4_inode_info_init()
4439 ext4_msg(sb, KERN_ERR, in ext4_inode_info_init()
4442 ext4_msg(sb, KERN_ERR, "blocksize: %lu", sb->s_blocksize); in ext4_inode_info_init()
4453 sb->s_time_gran = 1; in ext4_inode_info_init()
4454 sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX; in ext4_inode_info_init()
4456 sb->s_time_gran = NSEC_PER_SEC; in ext4_inode_info_init()
4457 sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX; in ext4_inode_info_init()
4459 sb->s_time_min = EXT4_TIMESTAMP_MIN; in ext4_inode_info_init()
4465 if (ext4_has_feature_extra_isize(sb)) { in ext4_inode_info_init()
4471 ext4_msg(sb, KERN_ERR, in ext4_inode_info_init()
4480 ext4_msg(sb, KERN_ERR, in ext4_inode_info_init()
4493 static int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es) in ext4_encoding_init() argument
4499 if (!ext4_has_feature_casefold(sb) || sb->s_encoding) in ext4_encoding_init()
4504 ext4_msg(sb, KERN_ERR, in ext4_encoding_init()
4511 ext4_msg(sb, KERN_ERR, in ext4_encoding_init()
4521 ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: " in ext4_encoding_init()
4528 sb->s_encoding = encoding; in ext4_encoding_init()
4529 sb->s_encoding_flags = encoding_flags; in ext4_encoding_init()
4534 static inline int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es) in ext4_encoding_init() argument
4540 static int ext4_init_metadata_csum(struct super_block *sb, struct ext4_super_block *es) in ext4_init_metadata_csum() argument
4542 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_metadata_csum()
4545 if (ext4_has_feature_metadata_csum(sb) && in ext4_init_metadata_csum()
4546 ext4_has_feature_gdt_csum(sb)) in ext4_init_metadata_csum()
4547 ext4_warning(sb, "metadata_csum and uninit_bg are " in ext4_init_metadata_csum()
4551 if (!ext4_verify_csum_type(sb, es)) { in ext4_init_metadata_csum()
4552 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_init_metadata_csum()
4556 ext4_setup_csum_trigger(sb, EXT4_JTR_ORPHAN_FILE, in ext4_init_metadata_csum()
4563 ext4_msg(sb, KERN_ERR, "Cannot load crc32c driver."); in ext4_init_metadata_csum()
4569 if (!ext4_superblock_csum_verify(sb, es)) { in ext4_init_metadata_csum()
4570 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_init_metadata_csum()
4576 if (ext4_has_feature_csum_seed(sb)) in ext4_init_metadata_csum()
4578 else if (ext4_has_metadata_csum(sb) || ext4_has_feature_ea_inode(sb)) in ext4_init_metadata_csum()
4584 static int ext4_check_feature_compatibility(struct super_block *sb, in ext4_check_feature_compatibility() argument
4589 (ext4_has_compat_features(sb) || in ext4_check_feature_compatibility()
4590 ext4_has_ro_compat_features(sb) || in ext4_check_feature_compatibility()
4591 ext4_has_incompat_features(sb))) in ext4_check_feature_compatibility()
4592 ext4_msg(sb, KERN_WARNING, in ext4_check_feature_compatibility()
4597 set_opt2(sb, HURD_COMPAT); in ext4_check_feature_compatibility()
4598 if (ext4_has_feature_64bit(sb)) { in ext4_check_feature_compatibility()
4599 ext4_msg(sb, KERN_ERR, in ext4_check_feature_compatibility()
4608 if (ext4_has_feature_ea_inode(sb)) { in ext4_check_feature_compatibility()
4609 ext4_msg(sb, KERN_ERR, in ext4_check_feature_compatibility()
4615 if (IS_EXT2_SB(sb)) { in ext4_check_feature_compatibility()
4616 if (ext2_feature_set_ok(sb)) in ext4_check_feature_compatibility()
4617 ext4_msg(sb, KERN_INFO, "mounting ext2 file system " in ext4_check_feature_compatibility()
4624 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_check_feature_compatibility()
4626 ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due " in ext4_check_feature_compatibility()
4632 if (IS_EXT3_SB(sb)) { in ext4_check_feature_compatibility()
4633 if (ext3_feature_set_ok(sb)) in ext4_check_feature_compatibility()
4634 ext4_msg(sb, KERN_INFO, "mounting ext3 file system " in ext4_check_feature_compatibility()
4641 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_check_feature_compatibility()
4643 ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due " in ext4_check_feature_compatibility()
4654 if (!ext4_feature_set_ok(sb, (sb_rdonly(sb)))) in ext4_check_feature_compatibility()
4660 static int ext4_geometry_check(struct super_block *sb, in ext4_geometry_check() argument
4663 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_geometry_check()
4667 blocks_count = sb_bdev_nr_blocks(sb); in ext4_geometry_check()
4669 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu " in ext4_geometry_check()
4680 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_geometry_check()
4688 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_geometry_check()
4695 EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_geometry_check()
4696 do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb)); in ext4_geometry_check()
4697 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) { in ext4_geometry_check()
4698 ext4_msg(sb, KERN_WARNING, "groups count too large: %llu " in ext4_geometry_check()
4703 EXT4_BLOCKS_PER_GROUP(sb)); in ext4_geometry_check()
4708 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); in ext4_geometry_check()
4711 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu", in ext4_geometry_check()
4733 static int ext4_group_desc_init(struct super_block *sb, in ext4_group_desc_init() argument
4738 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_init()
4744 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_group_desc_init()
4745 EXT4_DESC_PER_BLOCK(sb); in ext4_group_desc_init()
4746 if (ext4_has_feature_meta_bg(sb)) { in ext4_group_desc_init()
4748 ext4_msg(sb, KERN_WARNING, in ext4_group_desc_init()
4760 ext4_msg(sb, KERN_ERR, "not enough memory"); in ext4_group_desc_init()
4768 block = descriptor_loc(sb, logical_sb_block, i); in ext4_group_desc_init()
4769 ext4_sb_breadahead_unmovable(sb, block); in ext4_group_desc_init()
4775 block = descriptor_loc(sb, logical_sb_block, i); in ext4_group_desc_init()
4776 bh = ext4_sb_bread_unmovable(sb, block); in ext4_group_desc_init()
4778 ext4_msg(sb, KERN_ERR, in ext4_group_desc_init()
4789 if (!ext4_check_descriptors(sb, logical_sb_block, first_not_zeroed)) { in ext4_group_desc_init()
4790 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!"); in ext4_group_desc_init()
4800 static int ext4_load_and_init_journal(struct super_block *sb, in ext4_load_and_init_journal() argument
4804 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_load_and_init_journal()
4807 err = ext4_load_journal(sb, es, ctx->journal_devnum); in ext4_load_and_init_journal()
4811 if (ext4_has_feature_64bit(sb) && in ext4_load_and_init_journal()
4812 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_load_and_init_journal()
4814 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature"); in ext4_load_and_init_journal()
4818 if (!set_journal_csum_feature_set(sb)) { in ext4_load_and_init_journal()
4819 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum " in ext4_load_and_init_journal()
4824 if (test_opt2(sb, JOURNAL_FAST_COMMIT) && in ext4_load_and_init_journal()
4825 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_load_and_init_journal()
4827 ext4_msg(sb, KERN_ERR, in ext4_load_and_init_journal()
4834 switch (test_opt(sb, DATA_FLAGS)) { in ext4_load_and_init_journal()
4842 set_opt(sb, ORDERED_DATA); in ext4_load_and_init_journal()
4845 set_opt(sb, JOURNAL_DATA); in ext4_load_and_init_journal()
4854 ext4_msg(sb, KERN_ERR, "Journal does not support " in ext4_load_and_init_journal()
4863 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA && in ext4_load_and_init_journal()
4864 test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_load_and_init_journal()
4865 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_load_and_init_journal()
4887 static int ext4_journal_data_mode_check(struct super_block *sb) in ext4_journal_data_mode_check() argument
4889 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in ext4_journal_data_mode_check()
4894 clear_opt(sb, DIOREAD_NOLOCK); in ext4_journal_data_mode_check()
4895 clear_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_journal_data_mode_check()
4896 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in ext4_journal_data_mode_check()
4897 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_journal_data_mode_check()
4901 if (test_opt(sb, DAX_ALWAYS)) { in ext4_journal_data_mode_check()
4902 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_journal_data_mode_check()
4906 if (ext4_has_feature_encrypt(sb)) { in ext4_journal_data_mode_check()
4907 ext4_msg(sb, KERN_WARNING, in ext4_journal_data_mode_check()
4911 if (test_opt(sb, DELALLOC)) in ext4_journal_data_mode_check()
4912 clear_opt(sb, DELALLOC); in ext4_journal_data_mode_check()
4914 sb->s_iflags |= SB_I_CGROUPWB; in ext4_journal_data_mode_check()
4920 static int ext4_load_super(struct super_block *sb, ext4_fsblk_t *lsb, in ext4_load_super() argument
4923 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_load_super()
4931 blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE); in ext4_load_super()
4933 ext4_msg(sb, KERN_ERR, "unable to set blocksize"); in ext4_load_super()
4948 bh = ext4_sb_bread_unmovable(sb, logical_sb_block); in ext4_load_super()
4950 ext4_msg(sb, KERN_ERR, "unable to read superblock"); in ext4_load_super()
4959 sb->s_magic = le16_to_cpu(es->s_magic); in ext4_load_super()
4960 if (sb->s_magic != EXT4_SUPER_MAGIC) { in ext4_load_super()
4962 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); in ext4_load_super()
4968 ext4_msg(sb, KERN_ERR, in ext4_load_super()
4975 ext4_msg(sb, KERN_ERR, in ext4_load_super()
4987 if (sb->s_blocksize == blocksize) { in ext4_load_super()
5000 if (!sb_set_blocksize(sb, blocksize)) { in ext4_load_super()
5001 ext4_msg(sb, KERN_ERR, "bad block size %d", in ext4_load_super()
5009 bh = ext4_sb_bread_unmovable(sb, logical_sb_block); in ext4_load_super()
5011 ext4_msg(sb, KERN_ERR, "Can't read superblock on 2nd try"); in ext4_load_super()
5019 ext4_msg(sb, KERN_ERR, "Magic mismatch, very weird!"); in ext4_load_super()
5030 static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb) in __ext4_fill_super() argument
5033 struct ext4_sb_info *sbi = EXT4_SB(sb); in __ext4_fill_super()
5052 part_stat_read(sb->s_bdev, sectors[STAT_WRITE]); in __ext4_fill_super()
5056 err = ext4_load_super(sb, &logical_sb_block, silent); in __ext4_fill_super()
5063 err = ext4_init_metadata_csum(sb, es); in __ext4_fill_super()
5067 ext4_set_def_opts(sb, es); in __ext4_fill_super()
5081 if (ext4_inode_info_init(sb, es)) in __ext4_fill_super()
5084 err = parse_apply_sb_mount_options(sb, ctx); in __ext4_fill_super()
5090 err = ext4_check_opt_consistency(fc, sb); in __ext4_fill_super()
5094 ext4_apply_options(fc, sb); in __ext4_fill_super()
5096 if (ext4_encoding_init(sb, es)) in __ext4_fill_super()
5099 if (ext4_journal_data_mode_check(sb)) in __ext4_fill_super()
5102 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in __ext4_fill_super()
5103 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in __ext4_fill_super()
5106 sb->s_flags |= SB_I_VERSION; in __ext4_fill_super()
5108 if (ext4_check_feature_compatibility(sb, es, silent)) in __ext4_fill_super()
5111 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (sb->s_blocksize / 4)) { in __ext4_fill_super()
5112 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5119 if (sb->s_blocksize == PAGE_SIZE) in __ext4_fill_super()
5122 ext4_msg(sb, KERN_ERR, "unsupported blocksize for DAX\n"); in __ext4_fill_super()
5126 if (ext4_has_feature_inline_data(sb)) { in __ext4_fill_super()
5127 ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem" in __ext4_fill_super()
5132 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5138 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { in __ext4_fill_super()
5139 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d", in __ext4_fill_super()
5144 has_huge_files = ext4_has_feature_huge_file(sb); in __ext4_fill_super()
5145 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in __ext4_fill_super()
5147 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files); in __ext4_fill_super()
5150 if (ext4_has_feature_64bit(sb)) { in __ext4_fill_super()
5154 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5165 sbi->s_inodes_per_block = sb->s_blocksize / EXT4_INODE_SIZE(sb); in __ext4_fill_super()
5168 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); in __ext4_fill_super()
5172 sbi->s_inodes_per_group > sb->s_blocksize * 8) { in __ext4_fill_super()
5173 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n", in __ext4_fill_super()
5179 sbi->s_desc_per_block = sb->s_blocksize / EXT4_DESC_SIZE(sb); in __ext4_fill_super()
5181 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in __ext4_fill_super()
5182 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in __ext4_fill_super()
5187 if (ext4_has_feature_dir_index(sb)) { in __ext4_fill_super()
5193 if (!sb_rdonly(sb)) in __ext4_fill_super()
5198 if (!sb_rdonly(sb)) in __ext4_fill_super()
5205 if (ext4_handle_clustersize(sb)) in __ext4_fill_super()
5212 err = generic_check_addressable(sb->s_blocksize_bits, in __ext4_fill_super()
5215 ext4_msg(sb, KERN_ERR, "filesystem" in __ext4_fill_super()
5220 if (ext4_geometry_check(sb, es)) in __ext4_fill_super()
5223 err = ext4_group_desc_init(sb, es, logical_sb_block, &first_not_zeroed); in __ext4_fill_super()
5241 sb->s_op = &ext4_sops; in __ext4_fill_super()
5242 sb->s_export_op = &ext4_export_ops; in __ext4_fill_super()
5243 sb->s_xattr = ext4_xattr_handlers; in __ext4_fill_super()
5245 sb->s_cop = &ext4_cryptops; in __ext4_fill_super()
5248 sb->s_vop = &ext4_verityops; in __ext4_fill_super()
5251 sb->dq_op = &ext4_quota_operations; in __ext4_fill_super()
5252 if (ext4_has_feature_quota(sb)) in __ext4_fill_super()
5253 sb->s_qcop = &dquot_quotactl_sysfile_ops; in __ext4_fill_super()
5255 sb->s_qcop = &ext4_qctl_operations; in __ext4_fill_super()
5256 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; in __ext4_fill_super()
5258 memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid)); in __ext4_fill_super()
5263 ext4_fast_commit_init(sb); in __ext4_fill_super()
5265 sb->s_root = NULL; in __ext4_fill_super()
5268 ext4_has_feature_orphan_present(sb) || in __ext4_fill_super()
5269 ext4_has_feature_journal_needs_recovery(sb)); in __ext4_fill_super()
5271 if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb)) in __ext4_fill_super()
5272 if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block))) in __ext4_fill_super()
5279 if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) { in __ext4_fill_super()
5280 err = ext4_load_and_init_journal(sb, es, ctx); in __ext4_fill_super()
5283 } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) && in __ext4_fill_super()
5284 ext4_has_feature_journal_needs_recovery(sb)) { in __ext4_fill_super()
5285 ext4_msg(sb, KERN_ERR, "required journal recovery " in __ext4_fill_super()
5290 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) { in __ext4_fill_super()
5291 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_fill_super()
5295 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in __ext4_fill_super()
5296 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_fill_super()
5301 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_fill_super()
5308 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_fill_super()
5313 clear_opt(sb, JOURNAL_CHECKSUM); in __ext4_fill_super()
5314 clear_opt(sb, DATA_FLAGS); in __ext4_fill_super()
5315 clear_opt2(sb, JOURNAL_FAST_COMMIT); in __ext4_fill_super()
5320 if (!test_opt(sb, NO_MBCACHE)) { in __ext4_fill_super()
5323 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5328 if (ext4_has_feature_ea_inode(sb)) { in __ext4_fill_super()
5331 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5338 if (ext4_has_feature_verity(sb) && sb->s_blocksize != PAGE_SIZE) { in __ext4_fill_super()
5339 ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity"); in __ext4_fill_super()
5356 if (!ext4_has_feature_bigalloc(sb)) in __ext4_fill_super()
5359 err = ext4_calculate_overhead(sb); in __ext4_fill_super()
5368 EXT4_SB(sb)->rsv_conversion_wq = in __ext4_fill_super()
5370 if (!EXT4_SB(sb)->rsv_conversion_wq) { in __ext4_fill_super()
5381 root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL); in __ext4_fill_super()
5383 ext4_msg(sb, KERN_ERR, "get root inode failed"); in __ext4_fill_super()
5389 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck"); in __ext4_fill_super()
5394 sb->s_root = d_make_root(root); in __ext4_fill_super()
5395 if (!sb->s_root) { in __ext4_fill_super()
5396 ext4_msg(sb, KERN_ERR, "get root dentry failed"); in __ext4_fill_super()
5401 ret = ext4_setup_super(sb, es, sb_rdonly(sb)); in __ext4_fill_super()
5403 sb->s_flags |= SB_RDONLY; in __ext4_fill_super()
5408 ext4_set_resv_clusters(sb); in __ext4_fill_super()
5410 if (test_opt(sb, BLOCK_VALIDITY)) { in __ext4_fill_super()
5411 err = ext4_setup_system_zone(sb); in __ext4_fill_super()
5413 ext4_msg(sb, KERN_ERR, "failed to initialize system " in __ext4_fill_super()
5418 ext4_fc_replay_cleanup(sb); in __ext4_fill_super()
5420 ext4_ext_init(sb); in __ext4_fill_super()
5429 set_opt2(sb, MB_OPTIMIZE_SCAN); in __ext4_fill_super()
5431 clear_opt2(sb, MB_OPTIMIZE_SCAN); in __ext4_fill_super()
5434 err = ext4_mb_init(sb); in __ext4_fill_super()
5436 ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)", in __ext4_fill_super()
5449 block = ext4_count_free_clusters(sb); in __ext4_fill_super()
5455 unsigned long freei = ext4_count_free_inodes(sb); in __ext4_fill_super()
5462 ext4_count_dirs(sb), GFP_KERNEL); in __ext4_fill_super()
5473 ext4_msg(sb, KERN_ERR, "insufficient memory"); in __ext4_fill_super()
5477 if (ext4_has_feature_flex_bg(sb)) in __ext4_fill_super()
5478 if (!ext4_fill_flex_info(sb)) { in __ext4_fill_super()
5479 ext4_msg(sb, KERN_ERR, in __ext4_fill_super()
5486 err = ext4_register_li_request(sb, first_not_zeroed); in __ext4_fill_super()
5490 err = ext4_register_sysfs(sb); in __ext4_fill_super()
5494 err = ext4_init_orphan_info(sb); in __ext4_fill_super()
5499 if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) { in __ext4_fill_super()
5500 err = ext4_enable_quotas(sb); in __ext4_fill_super()
5511 errseq_check_and_advance(&sb->s_bdev->bd_inode->i_mapping->wb_err, in __ext4_fill_super()
5513 sb->s_bdev->bd_super = sb; in __ext4_fill_super()
5514 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS; in __ext4_fill_super()
5515 ext4_orphan_cleanup(sb, es); in __ext4_fill_super()
5516 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS; in __ext4_fill_super()
5524 ext4_superblock_csum_set(sb); in __ext4_fill_super()
5526 ext4_msg(sb, KERN_INFO, "recovery complete"); in __ext4_fill_super()
5527 err = ext4_mark_recovery_complete(sb, es); in __ext4_fill_super()
5532 if (test_opt(sb, DISCARD) && !bdev_max_discard_sectors(sb->s_bdev)) in __ext4_fill_super()
5533 ext4_msg(sb, KERN_WARNING, in __ext4_fill_super()
5549 ext4_release_orphan_info(sb); in __ext4_fill_super()
5551 ext4_unregister_sysfs(sb); in __ext4_fill_super()
5554 ext4_unregister_li_request(sb); in __ext4_fill_super()
5556 ext4_mb_release(sb); in __ext4_fill_super()
5572 ext4_ext_release(sb); in __ext4_fill_super()
5573 ext4_release_system_zone(sb); in __ext4_fill_super()
5575 dput(sb->s_root); in __ext4_fill_super()
5576 sb->s_root = NULL; in __ext4_fill_super()
5578 ext4_msg(sb, KERN_ERR, "mount failed"); in __ext4_fill_super()
5579 if (EXT4_SB(sb)->rsv_conversion_wq) in __ext4_fill_super()
5580 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq); in __ext4_fill_super()
5607 utf8_unload(sb->s_encoding); in __ext4_fill_super()
5612 kfree(get_qf_name(sb, sbi, i)); in __ext4_fill_super()
5619 sb->s_fs_info = NULL; in __ext4_fill_super()
5623 static int ext4_fill_super(struct super_block *sb, struct fs_context *fc) in ext4_fill_super() argument
5630 sbi = ext4_alloc_sbi(sb); in ext4_fill_super()
5637 strreplace(sb->s_id, '/', '!'); in ext4_fill_super()
5643 ret = __ext4_fill_super(fc, sb); in ext4_fill_super()
5648 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in ext4_fill_super()
5650 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in ext4_fill_super()
5658 ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. " in ext4_fill_super()
5659 "Quota mode: %s.", descr, ext4_quota_mode(sb)); in ext4_fill_super()
5662 ext4_update_overhead(sb, false); in ext4_fill_super()
5681 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal) in ext4_init_journal_params() argument
5683 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params()
5688 ext4_fc_init(sb, journal); in ext4_init_journal_params()
5691 if (test_opt(sb, BARRIER)) in ext4_init_journal_params()
5695 if (test_opt(sb, DATA_ERR_ABORT)) in ext4_init_journal_params()
5702 static struct inode *ext4_get_journal_inode(struct super_block *sb, in ext4_get_journal_inode() argument
5712 journal_inode = ext4_iget(sb, journal_inum, EXT4_IGET_SPECIAL); in ext4_get_journal_inode()
5714 ext4_msg(sb, KERN_ERR, "no journal found"); in ext4_get_journal_inode()
5720 ext4_msg(sb, KERN_ERR, "journal inode is deleted"); in ext4_get_journal_inode()
5727 ext4_msg(sb, KERN_ERR, "invalid journal inode"); in ext4_get_journal_inode()
5734 static journal_t *ext4_get_journal(struct super_block *sb, in ext4_get_journal() argument
5740 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_get_journal()
5743 journal_inode = ext4_get_journal_inode(sb, journal_inum); in ext4_get_journal()
5749 ext4_msg(sb, KERN_ERR, "Could not load journal inode"); in ext4_get_journal()
5753 journal->j_private = sb; in ext4_get_journal()
5754 ext4_init_journal_params(sb, journal); in ext4_get_journal()
5758 static journal_t *ext4_get_dev_journal(struct super_block *sb, in ext4_get_dev_journal() argument
5771 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_get_dev_journal()
5774 bdev = ext4_blkdev_get(j_dev, sb); in ext4_get_dev_journal()
5778 blocksize = sb->s_blocksize; in ext4_get_dev_journal()
5781 ext4_msg(sb, KERN_ERR, in ext4_get_dev_journal()
5790 ext4_msg(sb, KERN_ERR, "couldn't read superblock of " in ext4_get_dev_journal()
5799 ext4_msg(sb, KERN_ERR, "external journal has " in ext4_get_dev_journal()
5807 es->s_checksum != ext4_superblock_csum(sb, es)) { in ext4_get_dev_journal()
5808 ext4_msg(sb, KERN_ERR, "external journal has " in ext4_get_dev_journal()
5814 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { in ext4_get_dev_journal()
5815 ext4_msg(sb, KERN_ERR, "journal UUID does not match"); in ext4_get_dev_journal()
5824 journal = jbd2_journal_init_dev(bdev, sb->s_bdev, in ext4_get_dev_journal()
5827 ext4_msg(sb, KERN_ERR, "failed to create device journal"); in ext4_get_dev_journal()
5830 journal->j_private = sb; in ext4_get_dev_journal()
5832 ext4_msg(sb, KERN_ERR, "I/O error on journal device"); in ext4_get_dev_journal()
5836 ext4_msg(sb, KERN_ERR, "External journal has more than one " in ext4_get_dev_journal()
5841 EXT4_SB(sb)->s_journal_bdev = bdev; in ext4_get_dev_journal()
5842 ext4_init_journal_params(sb, journal); in ext4_get_dev_journal()
5852 static int ext4_load_journal(struct super_block *sb, in ext4_load_journal() argument
5863 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_load_journal()
5868 ext4_msg(sb, KERN_INFO, "external journal device major/minor " in ext4_load_journal()
5875 ext4_msg(sb, KERN_ERR, in ext4_load_journal()
5881 journal = ext4_get_journal(sb, journal_inum); in ext4_load_journal()
5885 journal = ext4_get_dev_journal(sb, journal_dev); in ext4_load_journal()
5891 really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro; in ext4_load_journal()
5893 if (journal_dev_ro && !sb_rdonly(sb)) { in ext4_load_journal()
5894 ext4_msg(sb, KERN_ERR, in ext4_load_journal()
5905 if (ext4_has_feature_journal_needs_recovery(sb)) { in ext4_load_journal()
5906 if (sb_rdonly(sb)) { in ext4_load_journal()
5907 ext4_msg(sb, KERN_INFO, "INFO: recovery " in ext4_load_journal()
5910 ext4_msg(sb, KERN_ERR, "write access " in ext4_load_journal()
5916 ext4_msg(sb, KERN_INFO, "write access will " in ext4_load_journal()
5922 ext4_msg(sb, KERN_INFO, "barriers disabled"); in ext4_load_journal()
5924 if (!ext4_has_feature_journal_needs_recovery(sb)) in ext4_load_journal()
5939 ext4_msg(sb, KERN_ERR, "error loading journal"); in ext4_load_journal()
5943 EXT4_SB(sb)->s_journal = journal; in ext4_load_journal()
5944 err = ext4_clear_journal_err(sb, es); in ext4_load_journal()
5946 EXT4_SB(sb)->s_journal = NULL; in ext4_load_journal()
5956 ext4_commit_super(sb); in ext4_load_journal()
5967 static void ext4_update_super(struct super_block *sb) in ext4_update_super() argument
5969 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_update_super()
5984 if (!(sb->s_flags & SB_RDONLY)) in ext4_update_super()
5988 ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) - in ext4_update_super()
6038 ext4_superblock_csum_set(sb); in ext4_update_super()
6042 static int ext4_commit_super(struct super_block *sb) in ext4_commit_super() argument
6044 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; in ext4_commit_super()
6048 if (block_device_ejected(sb)) in ext4_commit_super()
6051 ext4_update_super(sb); in ext4_commit_super()
6069 ext4_msg(sb, KERN_ERR, "previous I/O error to " in ext4_commit_super()
6079 (test_opt(sb, BARRIER) ? REQ_FUA : 0), sbh); in ext4_commit_super()
6082 ext4_msg(sb, KERN_ERR, "I/O error while writing " in ext4_commit_super()
6096 static int ext4_mark_recovery_complete(struct super_block *sb, in ext4_mark_recovery_complete() argument
6100 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_mark_recovery_complete()
6102 if (!ext4_has_feature_journal(sb)) { in ext4_mark_recovery_complete()
6104 ext4_error(sb, "Journal got removed while the fs was " in ext4_mark_recovery_complete()
6115 if (sb_rdonly(sb) && (ext4_has_feature_journal_needs_recovery(sb) || in ext4_mark_recovery_complete()
6116 ext4_has_feature_orphan_present(sb))) { in ext4_mark_recovery_complete()
6117 if (!ext4_orphan_file_empty(sb)) { in ext4_mark_recovery_complete()
6118 ext4_error(sb, "Orphan file not empty on read-only fs."); in ext4_mark_recovery_complete()
6122 ext4_clear_feature_journal_needs_recovery(sb); in ext4_mark_recovery_complete()
6123 ext4_clear_feature_orphan_present(sb); in ext4_mark_recovery_complete()
6124 ext4_commit_super(sb); in ext4_mark_recovery_complete()
6136 static int ext4_clear_journal_err(struct super_block *sb, in ext4_clear_journal_err() argument
6143 if (!ext4_has_feature_journal(sb)) { in ext4_clear_journal_err()
6144 ext4_error(sb, "Journal got removed while the fs was mounted!"); in ext4_clear_journal_err()
6148 journal = EXT4_SB(sb)->s_journal; in ext4_clear_journal_err()
6159 errstr = ext4_decode_error(sb, j_errno, nbuf); in ext4_clear_journal_err()
6160 ext4_warning(sb, "Filesystem error recorded " in ext4_clear_journal_err()
6162 ext4_warning(sb, "Marking fs in need of filesystem check."); in ext4_clear_journal_err()
6164 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_clear_journal_err()
6166 ext4_commit_super(sb); in ext4_clear_journal_err()
6178 int ext4_force_commit(struct super_block *sb) in ext4_force_commit() argument
6182 if (sb_rdonly(sb)) in ext4_force_commit()
6185 journal = EXT4_SB(sb)->s_journal; in ext4_force_commit()
6189 static int ext4_sync_fs(struct super_block *sb, int wait) in ext4_sync_fs() argument
6194 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs()
6199 trace_ext4_sync_fs(sb, wait); in ext4_sync_fs()
6205 dquot_writeback_dquots(sb, -1); in ext4_sync_fs()
6222 } else if (wait && test_opt(sb, BARRIER)) in ext4_sync_fs()
6226 err = blkdev_issue_flush(sb->s_bdev); in ext4_sync_fs()
6242 static int ext4_freeze(struct super_block *sb) in ext4_freeze() argument
6247 if (sb_rdonly(sb)) in ext4_freeze()
6250 journal = EXT4_SB(sb)->s_journal; in ext4_freeze()
6265 ext4_clear_feature_journal_needs_recovery(sb); in ext4_freeze()
6266 if (ext4_orphan_file_empty(sb)) in ext4_freeze()
6267 ext4_clear_feature_orphan_present(sb); in ext4_freeze()
6270 error = ext4_commit_super(sb); in ext4_freeze()
6282 static int ext4_unfreeze(struct super_block *sb) in ext4_unfreeze() argument
6284 if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb))) in ext4_unfreeze()
6287 if (EXT4_SB(sb)->s_journal) { in ext4_unfreeze()
6289 ext4_set_feature_journal_needs_recovery(sb); in ext4_unfreeze()
6290 if (ext4_has_feature_orphan_file(sb)) in ext4_unfreeze()
6291 ext4_set_feature_orphan_present(sb); in ext4_unfreeze()
6294 ext4_commit_super(sb); in ext4_unfreeze()
6314 static int __ext4_remount(struct fs_context *fc, struct super_block *sb) in __ext4_remount() argument
6318 struct ext4_sb_info *sbi = EXT4_SB(sb); in __ext4_remount()
6331 old_sb_flags = sb->s_flags; in __ext4_remount()
6343 char *qf_name = get_qf_name(sb, sbi, i); in __ext4_remount()
6363 ext4_apply_options(fc, sb); in __ext4_remount()
6366 test_opt(sb, JOURNAL_CHECKSUM)) { in __ext4_remount()
6367 ext4_msg(sb, KERN_ERR, "changing journal_checksum " in __ext4_remount()
6372 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in __ext4_remount()
6373 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in __ext4_remount()
6374 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_remount()
6379 if (test_opt(sb, DIOREAD_NOLOCK)) { in __ext4_remount()
6380 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_remount()
6385 } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) { in __ext4_remount()
6386 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in __ext4_remount()
6387 ext4_msg(sb, KERN_ERR, "can't mount with " in __ext4_remount()
6395 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount"); in __ext4_remount()
6400 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) in __ext4_remount()
6401 ext4_abort(sb, ESHUTDOWN, "Abort forced by user"); in __ext4_remount()
6403 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in __ext4_remount()
6404 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in __ext4_remount()
6409 ext4_init_journal_params(sb, sbi->s_journal); in __ext4_remount()
6416 if ((bool)(fc->sb_flags & SB_RDONLY) != sb_rdonly(sb)) { in __ext4_remount()
6417 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) { in __ext4_remount()
6423 err = sync_filesystem(sb); in __ext4_remount()
6426 err = dquot_suspend(sb, -1); in __ext4_remount()
6434 sb->s_flags |= SB_RDONLY; in __ext4_remount()
6450 ext4_mark_recovery_complete(sb, es); in __ext4_remount()
6454 if (ext4_has_feature_readonly(sb) || in __ext4_remount()
6455 !ext4_feature_set_ok(sb, 0)) { in __ext4_remount()
6465 ext4_get_group_desc(sb, g, NULL); in __ext4_remount()
6467 if (!ext4_group_desc_csum_verify(sb, g, gdp)) { in __ext4_remount()
6468 ext4_msg(sb, KERN_ERR, in __ext4_remount()
6470 g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)), in __ext4_remount()
6482 if (es->s_last_orphan || !ext4_orphan_file_empty(sb)) { in __ext4_remount()
6483 ext4_msg(sb, KERN_WARNING, "Couldn't " in __ext4_remount()
6498 err = ext4_clear_journal_err(sb, es); in __ext4_remount()
6505 err = ext4_setup_super(sb, es, 0); in __ext4_remount()
6509 sb->s_flags &= ~SB_RDONLY; in __ext4_remount()
6510 if (ext4_has_feature_mmp(sb)) in __ext4_remount()
6511 if (ext4_multi_mount_protect(sb, in __ext4_remount()
6526 if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE)) in __ext4_remount()
6527 ext4_unregister_li_request(sb); in __ext4_remount()
6530 first_not_zeroed = ext4_has_uninit_itable(sb); in __ext4_remount()
6531 ext4_register_li_request(sb, first_not_zeroed); in __ext4_remount()
6539 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) { in __ext4_remount()
6540 err = ext4_setup_system_zone(sb); in __ext4_remount()
6546 err = ext4_commit_super(sb); in __ext4_remount()
6556 if (sb_any_quota_suspended(sb)) in __ext4_remount()
6557 dquot_resume(sb, -1); in __ext4_remount()
6558 else if (ext4_has_feature_quota(sb)) { in __ext4_remount()
6559 err = ext4_enable_quotas(sb); in __ext4_remount()
6565 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6566 ext4_release_system_zone(sb); in __ext4_remount()
6568 if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb)) in __ext4_remount()
6574 sb->s_flags = old_sb_flags; in __ext4_remount()
6582 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6583 ext4_release_system_zone(sb); in __ext4_remount()
6587 to_free[i] = get_qf_name(sb, sbi, i); in __ext4_remount()
6594 if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb)) in __ext4_remount()
6601 struct super_block *sb = fc->root->d_sb; in ext4_reconfigure() local
6604 fc->s_fs_info = EXT4_SB(sb); in ext4_reconfigure()
6606 ret = ext4_check_opt_consistency(fc, sb); in ext4_reconfigure()
6610 ret = __ext4_remount(fc, sb); in ext4_reconfigure()
6614 ext4_msg(sb, KERN_INFO, "re-mounted. Quota mode: %s.", in ext4_reconfigure()
6615 ext4_quota_mode(sb)); in ext4_reconfigure()
6621 static int ext4_statfs_project(struct super_block *sb, in ext4_statfs_project() argument
6630 dquot = dqget(sb, qid); in ext4_statfs_project()
6637 limit >>= sb->s_blocksize_bits; in ext4_statfs_project()
6641 dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits; in ext4_statfs_project()
6665 struct super_block *sb = dentry->d_sb; in ext4_statfs() local
6666 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs()
6672 if (!test_opt(sb, MINIX_DF)) in ext4_statfs()
6676 buf->f_bsize = sb->s_blocksize; in ext4_statfs()
6693 sb_has_quota_limits_enabled(sb, PRJQUOTA)) in ext4_statfs()
6694 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf); in ext4_statfs()
6766 struct super_block *sb = dquot->dq_sb; in ext4_mark_dquot_dirty() local
6768 if (ext4_is_quota_journalled(sb)) { in ext4_mark_dquot_dirty()
6776 static int ext4_write_info(struct super_block *sb, int type) in ext4_write_info() argument
6782 handle = ext4_journal_start_sb(sb, EXT4_HT_QUOTA, 2); in ext4_write_info()
6785 ret = dquot_commit_info(sb, type); in ext4_write_info()
6809 static int ext4_quota_on(struct super_block *sb, int type, int format_id, in ext4_quota_on() argument
6814 if (!test_opt(sb, QUOTA)) in ext4_quota_on()
6818 if (path->dentry->d_sb != sb) in ext4_quota_on()
6826 if (EXT4_SB(sb)->s_qf_names[type]) { in ext4_quota_on()
6828 if (path->dentry->d_parent != sb->s_root) in ext4_quota_on()
6829 ext4_msg(sb, KERN_WARNING, in ext4_quota_on()
6832 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY; in ext4_quota_on()
6838 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY; in ext4_quota_on()
6845 if (EXT4_SB(sb)->s_journal && in ext4_quota_on()
6851 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6852 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0); in ext4_quota_on()
6853 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6859 err = dquot_quota_on(sb, type, format_id, path); in ext4_quota_on()
6881 dquot_quota_off(sb, type); in ext4_quota_on()
6889 static int ext4_quota_enable(struct super_block *sb, int type, int format_id, in ext4_quota_enable() argument
6895 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_quota_enable()
6896 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_quota_enable()
6897 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_quota_enable()
6900 BUG_ON(!ext4_has_feature_quota(sb)); in ext4_quota_enable()
6905 qf_inode = ext4_iget(sb, qf_inums[type], EXT4_IGET_SPECIAL); in ext4_quota_enable()
6907 ext4_error(sb, "Bad quota inode # %lu", qf_inums[type]); in ext4_quota_enable()
6923 int ext4_enable_quotas(struct super_block *sb) in ext4_enable_quotas() argument
6927 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_enable_quotas()
6928 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_enable_quotas()
6929 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_enable_quotas()
6932 test_opt(sb, USRQUOTA), in ext4_enable_quotas()
6933 test_opt(sb, GRPQUOTA), in ext4_enable_quotas()
6934 test_opt(sb, PRJQUOTA), in ext4_enable_quotas()
6937 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY; in ext4_enable_quotas()
6940 err = ext4_quota_enable(sb, type, QFMT_VFS_V1, in ext4_enable_quotas()
6944 ext4_warning(sb, in ext4_enable_quotas()
6951 inode = sb_dqopt(sb)->files[type]; in ext4_enable_quotas()
6954 dquot_quota_off(sb, type); in ext4_enable_quotas()
6969 static int ext4_quota_off(struct super_block *sb, int type) in ext4_quota_off() argument
6971 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_off()
6977 if (test_opt(sb, DELALLOC)) in ext4_quota_off()
6978 sync_filesystem(sb); in ext4_quota_off()
6983 err = dquot_quota_off(sb, type); in ext4_quota_off()
6984 if (err || ext4_has_feature_quota(sb)) in ext4_quota_off()
7010 return dquot_quota_off(sb, type); in ext4_quota_off()
7017 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data, in ext4_quota_read() argument
7020 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_read()
7021 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_read()
7022 int offset = off & (sb->s_blocksize - 1); in ext4_quota_read()
7034 tocopy = sb->s_blocksize - offset < toread ? in ext4_quota_read()
7035 sb->s_blocksize - offset : toread; in ext4_quota_read()
7054 static ssize_t ext4_quota_write(struct super_block *sb, int type, in ext4_quota_write() argument
7057 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_write()
7058 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_write()
7059 int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1); in ext4_quota_write()
7065 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
7074 if (sb->s_blocksize - offset < len) { in ext4_quota_write()
7075 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
7092 err = ext4_journal_get_write_access(handle, sb, bh, EXT4_JTR_NONE); in ext4_quota_write()
7129 static inline int ext2_feature_set_ok(struct super_block *sb) in ext2_feature_set_ok() argument
7131 if (ext4_has_unknown_ext2_incompat_features(sb)) in ext2_feature_set_ok()
7133 if (sb_rdonly(sb)) in ext2_feature_set_ok()
7135 if (ext4_has_unknown_ext2_ro_compat_features(sb)) in ext2_feature_set_ok()
7142 static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; } in ext2_feature_set_ok() argument
7158 static inline int ext3_feature_set_ok(struct super_block *sb) in ext3_feature_set_ok() argument
7160 if (ext4_has_unknown_ext3_incompat_features(sb)) in ext3_feature_set_ok()
7162 if (!ext4_has_feature_journal(sb)) in ext3_feature_set_ok()
7164 if (sb_rdonly(sb)) in ext3_feature_set_ok()
7166 if (ext4_has_unknown_ext3_ro_compat_features(sb)) in ext3_feature_set_ok()