Lines Matching refs:sb

68 static int ext4_commit_super(struct super_block *sb, int sync);
69 static int ext4_mark_recovery_complete(struct super_block *sb,
71 static int ext4_clear_journal_err(struct super_block *sb,
73 static int ext4_sync_fs(struct super_block *sb, int wait);
74 static int ext4_remount(struct super_block *sb, int *flags, char *data);
76 static int ext4_unfreeze(struct super_block *sb);
77 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 int ext4_feature_set_ok(struct super_block *sb, int readonly);
84 static void ext4_unregister_li_request(struct super_block *sb);
86 static struct inode *ext4_get_journal_inode(struct super_block *sb,
127 #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type) argument
129 #define IS_EXT2_SB(sb) (0) argument
142 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type) argument
212 static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb, in __ext4_sb_bread_gfp() argument
219 bh = sb_getblk_gfp(sb, block, gfp); in __ext4_sb_bread_gfp()
233 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block, in ext4_sb_bread() argument
236 return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE); in ext4_sb_bread()
239 struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb, in ext4_sb_bread_unmovable() argument
242 return __ext4_sb_bread_gfp(sb, block, 0, 0); in ext4_sb_bread_unmovable()
245 void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block) in ext4_sb_breadahead_unmovable() argument
247 struct buffer_head *bh = sb_getblk_gfp(sb, block, 0); in ext4_sb_breadahead_unmovable()
255 static int ext4_verify_csum_type(struct super_block *sb, in ext4_verify_csum_type() argument
258 if (!ext4_has_feature_metadata_csum(sb)) in ext4_verify_csum_type()
264 static __le32 ext4_superblock_csum(struct super_block *sb, in ext4_superblock_csum() argument
267 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_superblock_csum()
276 static int ext4_superblock_csum_verify(struct super_block *sb, in ext4_superblock_csum_verify() argument
279 if (!ext4_has_metadata_csum(sb)) in ext4_superblock_csum_verify()
282 return es->s_checksum == ext4_superblock_csum(sb, es); in ext4_superblock_csum_verify()
285 void ext4_superblock_csum_set(struct super_block *sb) in ext4_superblock_csum_set() argument
287 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_superblock_csum_set()
289 if (!ext4_has_metadata_csum(sb)) in ext4_superblock_csum_set()
292 es->s_checksum = ext4_superblock_csum(sb, es); in ext4_superblock_csum_set()
295 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, in ext4_block_bitmap() argument
299 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_block_bitmap()
303 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, in ext4_inode_bitmap() argument
307 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_bitmap()
311 ext4_fsblk_t ext4_inode_table(struct super_block *sb, in ext4_inode_table() argument
315 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_table()
319 __u32 ext4_free_group_clusters(struct super_block *sb, in ext4_free_group_clusters() argument
323 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_group_clusters()
327 __u32 ext4_free_inodes_count(struct super_block *sb, in ext4_free_inodes_count() argument
331 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_inodes_count()
335 __u32 ext4_used_dirs_count(struct super_block *sb, in ext4_used_dirs_count() argument
339 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_used_dirs_count()
343 __u32 ext4_itable_unused_count(struct super_block *sb, in ext4_itable_unused_count() argument
347 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_itable_unused_count()
351 void ext4_block_bitmap_set(struct super_block *sb, in ext4_block_bitmap_set() argument
355 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_block_bitmap_set()
359 void ext4_inode_bitmap_set(struct super_block *sb, in ext4_inode_bitmap_set() argument
363 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_bitmap_set()
367 void ext4_inode_table_set(struct super_block *sb, in ext4_inode_table_set() argument
371 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_table_set()
375 void ext4_free_group_clusters_set(struct super_block *sb, in ext4_free_group_clusters_set() argument
379 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_group_clusters_set()
383 void ext4_free_inodes_set(struct super_block *sb, in ext4_free_inodes_set() argument
387 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_inodes_set()
391 void ext4_used_dirs_set(struct super_block *sb, in ext4_used_dirs_set() argument
395 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_used_dirs_set()
399 void ext4_itable_unused_set(struct super_block *sb, in ext4_itable_unused_set() argument
403 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_itable_unused_set()
426 static void __save_error_info(struct super_block *sb, int error, in __save_error_info() argument
430 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in __save_error_info()
433 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in __save_error_info()
434 if (bdev_read_only(sb->s_bdev)) in __save_error_info()
511 mod_timer(&EXT4_SB(sb)->s_err_report, jiffies + 24*60*60*HZ); in __save_error_info()
515 static void save_error_info(struct super_block *sb, int error, in save_error_info() argument
519 __save_error_info(sb, error, ino, block, func, line); in save_error_info()
520 if (!bdev_read_only(sb->s_bdev)) in save_error_info()
521 ext4_commit_super(sb, 1); in save_error_info()
532 static int block_device_ejected(struct super_block *sb) in block_device_ejected() argument
534 struct inode *bd_inode = sb->s_bdev->bd_inode; in block_device_ejected()
542 struct super_block *sb = journal->j_private; in ext4_journal_commit_callback() local
543 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_journal_commit_callback()
549 ext4_process_freed_data(sb, txn->t_tid); in ext4_journal_commit_callback()
557 jce->jce_func(sb, jce, error); in ext4_journal_commit_callback()
667 static void ext4_handle_error(struct super_block *sb) in ext4_handle_error() argument
669 if (test_opt(sb, WARN_ON_ERROR)) in ext4_handle_error()
672 if (sb_rdonly(sb)) in ext4_handle_error()
675 if (!test_opt(sb, ERRORS_CONT)) { in ext4_handle_error()
676 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_handle_error()
678 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED); in ext4_handle_error()
687 if (test_opt(sb, ERRORS_RO) || system_going_down()) { in ext4_handle_error()
688 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in ext4_handle_error()
694 sb->s_flags |= SB_RDONLY; in ext4_handle_error()
695 } else if (test_opt(sb, ERRORS_PANIC)) { in ext4_handle_error()
697 sb->s_id); in ext4_handle_error()
701 #define ext4_error_ratelimit(sb) \ argument
702 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
705 void __ext4_error(struct super_block *sb, const char *function, in __ext4_error() argument
712 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_error()
715 trace_ext4_error(sb, function, line); in __ext4_error()
716 if (ext4_error_ratelimit(sb)) { in __ext4_error()
722 sb->s_id, function, line, current->comm, &vaf); in __ext4_error()
725 save_error_info(sb, error, 0, block, function, line); in __ext4_error()
726 ext4_handle_error(sb); in __ext4_error()
800 const char *ext4_decode_error(struct super_block *sb, int errno, in ext4_decode_error() argument
819 if (!sb || (EXT4_SB(sb)->s_journal && in ext4_decode_error()
820 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT)) in ext4_decode_error()
843 void __ext4_std_error(struct super_block *sb, const char *function, in __ext4_std_error() argument
849 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_std_error()
855 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb)) in __ext4_std_error()
858 if (ext4_error_ratelimit(sb)) { in __ext4_std_error()
859 errstr = ext4_decode_error(sb, errno, nbuf); in __ext4_std_error()
861 sb->s_id, function, line, errstr); in __ext4_std_error()
864 save_error_info(sb, -errno, 0, 0, function, line); in __ext4_std_error()
865 ext4_handle_error(sb); in __ext4_std_error()
878 void __ext4_abort(struct super_block *sb, const char *function, in __ext4_abort() argument
884 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_abort()
887 save_error_info(sb, error, 0, 0, function, line); in __ext4_abort()
892 sb->s_id, function, line, &vaf); in __ext4_abort()
895 if (sb_rdonly(sb) == 0) { in __ext4_abort()
896 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED); in __ext4_abort()
897 if (EXT4_SB(sb)->s_journal) in __ext4_abort()
898 jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO); in __ext4_abort()
900 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in __ext4_abort()
906 sb->s_flags |= SB_RDONLY; in __ext4_abort()
908 if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) in __ext4_abort()
912 void __ext4_msg(struct super_block *sb, in __ext4_msg() argument
918 atomic_inc(&EXT4_SB(sb)->s_msg_count); in __ext4_msg()
919 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs")) in __ext4_msg()
925 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in __ext4_msg()
929 static int ext4_warning_ratelimit(struct super_block *sb) in ext4_warning_ratelimit() argument
931 atomic_inc(&EXT4_SB(sb)->s_warning_count); in ext4_warning_ratelimit()
932 return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), in ext4_warning_ratelimit()
936 void __ext4_warning(struct super_block *sb, const char *function, in __ext4_warning() argument
942 if (!ext4_warning_ratelimit(sb)) in __ext4_warning()
949 sb->s_id, function, line, &vaf); in __ext4_warning()
972 struct super_block *sb, ext4_group_t grp, in __ext4_grp_locked_error() argument
981 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_grp_locked_error()
984 trace_ext4_error(sb, function, line); in __ext4_grp_locked_error()
985 __save_error_info(sb, EFSCORRUPTED, ino, block, function, line); in __ext4_grp_locked_error()
987 if (ext4_error_ratelimit(sb)) { in __ext4_grp_locked_error()
992 sb->s_id, function, line, grp); in __ext4_grp_locked_error()
1002 if (test_opt(sb, WARN_ON_ERROR)) in __ext4_grp_locked_error()
1005 if (test_opt(sb, ERRORS_CONT)) { in __ext4_grp_locked_error()
1006 ext4_commit_super(sb, 0); in __ext4_grp_locked_error()
1010 ext4_unlock_group(sb, grp); in __ext4_grp_locked_error()
1011 ext4_commit_super(sb, 1); in __ext4_grp_locked_error()
1012 ext4_handle_error(sb); in __ext4_grp_locked_error()
1024 ext4_lock_group(sb, grp); in __ext4_grp_locked_error()
1028 void ext4_mark_group_bitmap_corrupted(struct super_block *sb, in ext4_mark_group_bitmap_corrupted() argument
1032 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_group_bitmap_corrupted()
1033 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in ext4_mark_group_bitmap_corrupted()
1034 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL); in ext4_mark_group_bitmap_corrupted()
1051 count = ext4_free_inodes_count(sb, gdp); in ext4_mark_group_bitmap_corrupted()
1058 void ext4_update_dynamic_rev(struct super_block *sb) in ext4_update_dynamic_rev() argument
1060 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_update_dynamic_rev()
1065 ext4_warning(sb, in ext4_update_dynamic_rev()
1086 static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb) in ext4_blkdev_get() argument
1090 bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb); in ext4_blkdev_get()
1096 ext4_msg(sb, KERN_ERR, in ext4_blkdev_get()
1125 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
1129 ext4_msg(sb, KERN_ERR, "sb orphan head is %d", in dump_orphan_list()
1144 static int ext4_quota_off(struct super_block *sb, int type);
1146 static inline void ext4_quota_off_umount(struct super_block *sb) in ext4_quota_off_umount() argument
1152 ext4_quota_off(sb, type); in ext4_quota_off_umount()
1159 static inline char *get_qf_name(struct super_block *sb, in get_qf_name() argument
1164 lockdep_is_held(&sb->s_umount)); in get_qf_name()
1167 static inline void ext4_quota_off_umount(struct super_block *sb) in ext4_quota_off_umount() argument
1172 static void ext4_put_super(struct super_block *sb) in ext4_put_super() argument
1174 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super()
1181 ext4_unregister_li_request(sb); in ext4_put_super()
1182 ext4_quota_off_umount(sb); in ext4_put_super()
1191 ext4_unregister_sysfs(sb); in ext4_put_super()
1198 ext4_abort(sb, -err, "Couldn't clean up the journal"); in ext4_put_super()
1204 ext4_release_system_zone(sb); in ext4_put_super()
1205 ext4_mb_release(sb); in ext4_put_super()
1206 ext4_ext_release(sb); in ext4_put_super()
1208 if (!sb_rdonly(sb) && !aborted) { in ext4_put_super()
1209 ext4_clear_feature_journal_needs_recovery(sb); in ext4_put_super()
1212 if (!sb_rdonly(sb)) in ext4_put_super()
1213 ext4_commit_super(sb, 1); in ext4_put_super()
1234 kfree(get_qf_name(sb, sbi, i)); in ext4_put_super()
1242 dump_orphan_list(sb, sbi); in ext4_put_super()
1245 sync_blockdev(sb->s_bdev); in ext4_put_super()
1246 invalidate_bdev(sb->s_bdev); in ext4_put_super()
1247 if (sbi->s_journal_bdev && sbi->s_journal_bdev != sb->s_bdev) { in ext4_put_super()
1267 sb->s_fs_info = NULL; in ext4_put_super()
1280 utf8_unload(sb->s_encoding); in ext4_put_super()
1290 static struct inode *ext4_alloc_inode(struct super_block *sb) in ext4_alloc_inode() argument
1416 static struct inode *ext4_nfs_get_inode(struct super_block *sb, in ext4_nfs_get_inode() argument
1425 inode = ext4_iget(sb, ino, EXT4_IGET_HANDLE); in ext4_nfs_get_inode()
1436 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid, in ext4_fh_to_dentry() argument
1439 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, in ext4_fh_to_dentry()
1443 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid, in ext4_fh_to_parent() argument
1446 return generic_fh_to_parent(sb, fid, fh_len, fh_type, in ext4_fh_to_parent()
1466 static int bdev_try_to_free_page(struct super_block *sb, struct page *page, in bdev_try_to_free_page() argument
1469 journal_t *journal = EXT4_SB(sb)->s_journal; in bdev_try_to_free_page()
1574 static const union fscrypt_policy *ext4_get_dummy_policy(struct super_block *sb) in ext4_get_dummy_policy() argument
1576 return EXT4_SB(sb)->s_dummy_enc_policy.policy; in ext4_get_dummy_policy()
1579 static bool ext4_has_stable_inodes(struct super_block *sb) in ext4_has_stable_inodes() argument
1581 return ext4_has_feature_stable_inodes(sb); in ext4_has_stable_inodes()
1584 static void ext4_get_ino_and_lblk_bits(struct super_block *sb, in ext4_get_ino_and_lblk_bits() argument
1587 *ino_bits_ret = 8 * sizeof(EXT4_SB(sb)->s_es->s_inodes_count); in ext4_get_ino_and_lblk_bits()
1611 static int ext4_write_info(struct super_block *sb, int type);
1612 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1614 static int ext4_quota_on_mount(struct super_block *sb, int type);
1615 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1617 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1619 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
1621 static int ext4_enable_quotas(struct super_block *sb);
1846 static int set_qf_name(struct super_block *sb, int qtype, substring_t *args) in set_qf_name() argument
1848 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_qf_name()
1849 char *qname, *old_qname = get_qf_name(sb, sbi, qtype); in set_qf_name()
1852 if (sb_any_quota_loaded(sb) && !old_qname) { in set_qf_name()
1853 ext4_msg(sb, KERN_ERR, in set_qf_name()
1858 if (ext4_has_feature_quota(sb)) { in set_qf_name()
1859 ext4_msg(sb, KERN_INFO, "Journaled quota options " in set_qf_name()
1865 ext4_msg(sb, KERN_ERR, in set_qf_name()
1873 ext4_msg(sb, KERN_ERR, in set_qf_name()
1879 ext4_msg(sb, KERN_ERR, in set_qf_name()
1884 set_opt(sb, QUOTA); in set_qf_name()
1891 static int clear_qf_name(struct super_block *sb, int qtype) in clear_qf_name() argument
1894 struct ext4_sb_info *sbi = EXT4_SB(sb); in clear_qf_name()
1895 char *old_qname = get_qf_name(sb, sbi, qtype); in clear_qf_name()
1897 if (sb_any_quota_loaded(sb) && old_qname) { in clear_qf_name()
1898 ext4_msg(sb, KERN_ERR, "Cannot change journaled quota options" in clear_qf_name()
2067 static int ext4_set_test_dummy_encryption(struct super_block *sb, in ext4_set_test_dummy_encryption() argument
2073 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_test_dummy_encryption()
2083 ext4_msg(sb, KERN_WARNING, in ext4_set_test_dummy_encryption()
2087 err = fscrypt_set_test_dummy_encryption(sb, arg->from, in ext4_set_test_dummy_encryption()
2091 ext4_msg(sb, KERN_WARNING, in ext4_set_test_dummy_encryption()
2094 ext4_msg(sb, KERN_WARNING, in ext4_set_test_dummy_encryption()
2097 ext4_msg(sb, KERN_WARNING, in ext4_set_test_dummy_encryption()
2102 ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled"); in ext4_set_test_dummy_encryption()
2104 ext4_msg(sb, KERN_WARNING, in ext4_set_test_dummy_encryption()
2110 static int handle_mount_opt(struct super_block *sb, char *opt, int token, in handle_mount_opt() argument
2114 struct ext4_sb_info *sbi = EXT4_SB(sb); in handle_mount_opt()
2122 return set_qf_name(sb, USRQUOTA, &args[0]); in handle_mount_opt()
2124 return set_qf_name(sb, GRPQUOTA, &args[0]); in handle_mount_opt()
2126 return clear_qf_name(sb, USRQUOTA); in handle_mount_opt()
2128 return clear_qf_name(sb, GRPQUOTA); in handle_mount_opt()
2133 ext4_msg(sb, KERN_WARNING, deprecated_msg, opt, "3.5"); in handle_mount_opt()
2138 ext4_msg(sb, KERN_WARNING, "Ignoring removed %s option", opt); in handle_mount_opt()
2141 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED); in handle_mount_opt()
2144 sb->s_flags |= SB_I_VERSION; in handle_mount_opt()
2147 sb->s_flags |= SB_LAZYTIME; in handle_mount_opt()
2150 sb->s_flags &= ~SB_LAZYTIME; in handle_mount_opt()
2154 sb->s_flags |= SB_INLINECRYPT; in handle_mount_opt()
2156 ext4_msg(sb, KERN_ERR, "inline encryption not supported"); in handle_mount_opt()
2166 ext4_msg(sb, KERN_ERR, "Unrecognized mount option \"%s\" " in handle_mount_opt()
2171 if ((m->flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) { in handle_mount_opt()
2172 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2176 if ((m->flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) { in handle_mount_opt()
2177 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2188 set_opt2(sb, EXPLICIT_DELALLOC); in handle_mount_opt()
2190 set_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM); in handle_mount_opt()
2195 clear_opt(sb, ERRORS_MASK); in handle_mount_opt()
2196 if (token == Opt_noquota && sb_any_quota_loaded(sb)) { in handle_mount_opt()
2197 ext4_msg(sb, KERN_ERR, "Cannot change quota " in handle_mount_opt()
2203 ext4_msg(sb, KERN_ERR, "%s option not supported", opt); in handle_mount_opt()
2208 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2219 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2230 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2237 set_opt(sb, INIT_INODE_TABLE); in handle_mount_opt()
2252 ext4_msg(sb, KERN_ERR, "Invalid uid value %d", arg); in handle_mount_opt()
2259 ext4_msg(sb, KERN_ERR, "Invalid gid value %d", arg); in handle_mount_opt()
2265 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2277 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2283 ext4_msg(sb, KERN_ERR, "error: could not dup " in handle_mount_opt()
2290 ext4_msg(sb, KERN_ERR, "error: could not find " in handle_mount_opt()
2298 ext4_msg(sb, KERN_ERR, "error: journal path %s " in handle_mount_opt()
2310 ext4_msg(sb, KERN_ERR, "Invalid journal IO priority" in handle_mount_opt()
2317 return ext4_set_test_dummy_encryption(sb, opt, &args[0], in handle_mount_opt()
2322 …ext4_msg(sb, KERN_WARNING, "Remounting file system with no journal so ignoring journalled data opt… in handle_mount_opt()
2323 else if (test_opt(sb, DATA_FLAGS) != m->mount_opt) { in handle_mount_opt()
2324 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
2329 clear_opt(sb, DATA_FLAGS); in handle_mount_opt()
2334 if (sb_any_quota_loaded(sb) && in handle_mount_opt()
2336 ext4_msg(sb, KERN_ERR, "Cannot change journaled " in handle_mount_opt()
2340 if (ext4_has_feature_quota(sb)) { in handle_mount_opt()
2341 ext4_msg(sb, KERN_INFO, in handle_mount_opt()
2358 ext4_msg(sb, KERN_ERR, "can't change " in handle_mount_opt()
2363 (test_opt(sb, DATA_FLAGS) == in handle_mount_opt()
2365 ext4_msg(sb, KERN_ERR, "can't mount with " in handle_mount_opt()
2369 ext4_msg(sb, KERN_WARNING, in handle_mount_opt()
2395 ext4_msg(sb, KERN_INFO, "dax option not supported"); in handle_mount_opt()
2410 ext4_msg(sb, KERN_WARNING, in handle_mount_opt()
2430 static int parse_options(char *options, struct super_block *sb, in parse_options() argument
2435 struct ext4_sb_info __maybe_unused *sbi = EXT4_SB(sb); in parse_options()
2452 if (handle_mount_opt(sb, p, token, args, journal_devnum, in parse_options()
2462 if (test_opt(sb, PRJQUOTA) && !ext4_has_feature_project(sb)) { in parse_options()
2463 ext4_msg(sb, KERN_ERR, "Project quota feature not enabled. " in parse_options()
2467 usr_qf_name = get_qf_name(sb, sbi, USRQUOTA); in parse_options()
2468 grp_qf_name = get_qf_name(sb, sbi, GRPQUOTA); in parse_options()
2470 if (test_opt(sb, USRQUOTA) && usr_qf_name) in parse_options()
2471 clear_opt(sb, USRQUOTA); in parse_options()
2473 if (test_opt(sb, GRPQUOTA) && grp_qf_name) in parse_options()
2474 clear_opt(sb, GRPQUOTA); in parse_options()
2476 if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) { in parse_options()
2477 ext4_msg(sb, KERN_ERR, "old and new quota " in parse_options()
2483 ext4_msg(sb, KERN_ERR, "journaled quota format " in parse_options()
2489 if (test_opt(sb, DIOREAD_NOLOCK)) { in parse_options()
2493 ext4_msg(sb, KERN_WARNING, "Warning: mounting with an " in parse_options()
2501 struct super_block *sb) in ext4_show_quota_options() argument
2504 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options()
2550 static int _ext4_show_options(struct seq_file *seq, struct super_block *sb, in _ext4_show_options() argument
2553 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options()
2588 if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO) in _ext4_show_options()
2590 if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE) in _ext4_show_options()
2592 if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC) in _ext4_show_options()
2600 if (sb->s_flags & SB_I_VERSION) in _ext4_show_options()
2606 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in _ext4_show_options()
2608 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in _ext4_show_options()
2610 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) in _ext4_show_options()
2618 if (test_opt(sb, INIT_INODE_TABLE) && (nodefs || in _ext4_show_options()
2623 if (test_opt(sb, DATA_ERR_ABORT)) in _ext4_show_options()
2626 fscrypt_show_test_dummy_encryption(seq, sep, sb); in _ext4_show_options()
2628 if (sb->s_flags & SB_INLINECRYPT) in _ext4_show_options()
2631 if (test_opt(sb, DAX_ALWAYS)) { in _ext4_show_options()
2632 if (IS_EXT2_SB(sb)) in _ext4_show_options()
2636 } else if (test_opt2(sb, DAX_NEVER)) { in _ext4_show_options()
2638 } else if (test_opt2(sb, DAX_INODE)) { in _ext4_show_options()
2641 ext4_show_quota_options(seq, sb); in _ext4_show_options()
2652 struct super_block *sb = seq->private; in ext4_seq_options_show() local
2655 seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw"); in ext4_seq_options_show()
2656 rc = _ext4_show_options(seq, sb, 1); in ext4_seq_options_show()
2661 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, in ext4_setup_super() argument
2664 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super()
2668 ext4_msg(sb, KERN_ERR, "revision level too high, " in ext4_setup_super()
2676 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, " in ext4_setup_super()
2679 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
2685 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
2691 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
2701 ext4_set_feature_journal_needs_recovery(sb); in ext4_setup_super()
2703 err = ext4_commit_super(sb, 1); in ext4_setup_super()
2705 if (test_opt(sb, DEBUG)) in ext4_setup_super()
2708 sb->s_blocksize, in ext4_setup_super()
2710 EXT4_BLOCKS_PER_GROUP(sb), in ext4_setup_super()
2711 EXT4_INODES_PER_GROUP(sb), in ext4_setup_super()
2714 cleancache_init_fs(sb); in ext4_setup_super()
2718 int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup) in ext4_alloc_flex_bg_array() argument
2720 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array()
2734 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
2746 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
2765 static int ext4_fill_flex_info(struct super_block *sb) in ext4_fill_flex_info() argument
2767 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info()
2779 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
2784 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_fill_flex_info()
2788 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes); in ext4_fill_flex_info()
2789 atomic64_add(ext4_free_group_clusters(sb, gdp), in ext4_fill_flex_info()
2791 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs); in ext4_fill_flex_info()
2799 static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum() argument
2805 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_csum()
2827 if (!ext4_has_feature_gdt_csum(sb)) in ext4_group_desc_csum()
2835 if (ext4_has_feature_64bit(sb) && in ext4_group_desc_csum()
2845 int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_verify() argument
2848 if (ext4_has_group_desc_csum(sb) && in ext4_group_desc_csum_verify()
2849 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp))) in ext4_group_desc_csum_verify()
2855 void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_set() argument
2858 if (!ext4_has_group_desc_csum(sb)) in ext4_group_desc_csum_set()
2860 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp); in ext4_group_desc_csum_set()
2864 static int ext4_check_descriptors(struct super_block *sb, in ext4_check_descriptors() argument
2868 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors()
2871 ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0); in ext4_check_descriptors()
2878 if (ext4_has_feature_flex_bg(sb)) in ext4_check_descriptors()
2884 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_check_descriptors()
2890 (EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_descriptors()
2896 block_bitmap = ext4_block_bitmap(sb, gdp); in ext4_check_descriptors()
2898 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2901 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2906 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2909 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2913 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2918 inode_bitmap = ext4_inode_bitmap(sb, gdp); in ext4_check_descriptors()
2920 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2923 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2928 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2931 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2935 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2940 inode_table = ext4_inode_table(sb, gdp); in ext4_check_descriptors()
2942 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2945 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2950 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2953 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2958 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2963 ext4_lock_group(sb, i); in ext4_check_descriptors()
2964 if (!ext4_group_desc_csum_verify(sb, i, gdp)) { in ext4_check_descriptors()
2965 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2967 i, le16_to_cpu(ext4_group_desc_csum(sb, i, in ext4_check_descriptors()
2969 if (!sb_rdonly(sb)) { in ext4_check_descriptors()
2970 ext4_unlock_group(sb, i); in ext4_check_descriptors()
2974 ext4_unlock_group(sb, i); in ext4_check_descriptors()
2976 first_block += EXT4_BLOCKS_PER_GROUP(sb); in ext4_check_descriptors()
3000 static void ext4_orphan_cleanup(struct super_block *sb, in ext4_orphan_cleanup() argument
3003 unsigned int s_flags = sb->s_flags; in ext4_orphan_cleanup()
3014 if (bdev_read_only(sb->s_bdev)) { in ext4_orphan_cleanup()
3015 ext4_msg(sb, KERN_ERR, "write access " in ext4_orphan_cleanup()
3021 if (!ext4_feature_set_ok(sb, 0)) { in ext4_orphan_cleanup()
3022 ext4_msg(sb, KERN_INFO, "Skipping orphan cleanup due to " in ext4_orphan_cleanup()
3027 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { in ext4_orphan_cleanup()
3030 ext4_msg(sb, KERN_INFO, "Errors on filesystem, " in ext4_orphan_cleanup()
3039 ext4_msg(sb, KERN_INFO, "orphan cleanup on readonly fs"); in ext4_orphan_cleanup()
3040 sb->s_flags &= ~SB_RDONLY; in ext4_orphan_cleanup()
3044 sb->s_flags |= SB_ACTIVE; in ext4_orphan_cleanup()
3050 if (ext4_has_feature_quota(sb) && (s_flags & SB_RDONLY)) { in ext4_orphan_cleanup()
3051 int ret = ext4_enable_quotas(sb); in ext4_orphan_cleanup()
3056 ext4_msg(sb, KERN_ERR, in ext4_orphan_cleanup()
3062 if (EXT4_SB(sb)->s_qf_names[i]) { in ext4_orphan_cleanup()
3063 int ret = ext4_quota_on_mount(sb, i); in ext4_orphan_cleanup()
3068 ext4_msg(sb, KERN_ERR, in ext4_orphan_cleanup()
3082 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { in ext4_orphan_cleanup()
3088 inode = ext4_orphan_get(sb, le32_to_cpu(es->s_last_orphan)); in ext4_orphan_cleanup()
3094 list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan); in ext4_orphan_cleanup()
3097 if (test_opt(sb, DEBUG)) in ext4_orphan_cleanup()
3098 ext4_msg(sb, KERN_DEBUG, in ext4_orphan_cleanup()
3111 if (test_opt(sb, DEBUG)) in ext4_orphan_cleanup()
3112 ext4_msg(sb, KERN_DEBUG, in ext4_orphan_cleanup()
3125 ext4_msg(sb, KERN_INFO, "%d orphan inode%s deleted", in ext4_orphan_cleanup()
3128 ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up", in ext4_orphan_cleanup()
3134 if (sb_dqopt(sb)->files[i]) in ext4_orphan_cleanup()
3135 dquot_quota_off(sb, i); in ext4_orphan_cleanup()
3139 sb->s_flags = s_flags; /* Restore SB_RDONLY status */ in ext4_orphan_cleanup()
3250 static ext4_fsblk_t descriptor_loc(struct super_block *sb, in descriptor_loc() argument
3253 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc()
3259 if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg) in descriptor_loc()
3262 if (ext4_bg_has_super(sb, bg)) in descriptor_loc()
3271 if (sb->s_blocksize == 1024 && nr == 0 && in descriptor_loc()
3275 return (has_super + ext4_group_first_block_no(sb, bg)); in descriptor_loc()
3321 static int ext4_feature_set_ok(struct super_block *sb, int readonly) in ext4_feature_set_ok() argument
3323 if (ext4_has_unknown_ext4_incompat_features(sb)) { in ext4_feature_set_ok()
3324 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3327 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) & in ext4_feature_set_ok()
3333 if (ext4_has_feature_casefold(sb)) { in ext4_feature_set_ok()
3334 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3344 if (ext4_has_feature_readonly(sb)) { in ext4_feature_set_ok()
3345 ext4_msg(sb, KERN_INFO, "filesystem is read-only"); in ext4_feature_set_ok()
3346 sb->s_flags |= SB_RDONLY; in ext4_feature_set_ok()
3351 if (ext4_has_unknown_ext4_ro_compat_features(sb)) { in ext4_feature_set_ok()
3352 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of " in ext4_feature_set_ok()
3354 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) & in ext4_feature_set_ok()
3358 if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) { in ext4_feature_set_ok()
3359 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3366 if (!readonly && (ext4_has_feature_quota(sb) || in ext4_feature_set_ok()
3367 ext4_has_feature_project(sb))) { in ext4_feature_set_ok()
3368 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
3383 struct super_block *sb = sbi->s_sb; in print_daily_error_info() local
3388 ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u", in print_daily_error_info()
3392 sb->s_id, in print_daily_error_info()
3407 sb->s_id, in print_daily_error_info()
3427 struct super_block *sb = elr->lr_super; in ext4_run_li_request() local
3428 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; in ext4_run_li_request()
3435 elr->lr_next_group = ext4_mb_prefetch(sb, group, in ext4_run_li_request()
3436 EXT4_SB(sb)->s_mb_prefetch, &prefetch_ios); in ext4_run_li_request()
3438 ext4_mb_prefetch_fini(sb, elr->lr_next_group, in ext4_run_li_request()
3440 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group, in ext4_run_li_request()
3445 !sb_rdonly(sb) && test_opt(sb, INIT_INODE_TABLE)) { in ext4_run_li_request()
3455 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_run_li_request()
3470 ret = ext4_init_inode_table(sb, group, in ext4_run_li_request()
3472 trace_ext4_lazy_itable_init(sb, group); in ext4_run_li_request()
3498 static void ext4_unregister_li_request(struct super_block *sb) in ext4_unregister_li_request() argument
3507 ext4_remove_li_request(EXT4_SB(sb)->s_li_request); in ext4_unregister_li_request()
3662 static ext4_group_t ext4_has_uninit_itable(struct super_block *sb) in ext4_has_uninit_itable() argument
3664 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count; in ext4_has_uninit_itable()
3667 if (!ext4_has_group_desc_csum(sb)) in ext4_has_uninit_itable()
3671 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_has_uninit_itable()
3700 static struct ext4_li_request *ext4_li_request_new(struct super_block *sb, in ext4_li_request_new() argument
3709 elr->lr_super = sb; in ext4_li_request_new()
3711 if (test_opt(sb, PREFETCH_BLOCK_BITMAPS)) in ext4_li_request_new()
3728 int ext4_register_li_request(struct super_block *sb, in ext4_register_li_request() argument
3731 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request()
3746 if (!test_opt(sb, PREFETCH_BLOCK_BITMAPS) && in ext4_register_li_request()
3747 (first_not_zeroed == ngroups || sb_rdonly(sb) || in ext4_register_li_request()
3748 !test_opt(sb, INIT_INODE_TABLE))) in ext4_register_li_request()
3751 elr = ext4_li_request_new(sb, first_not_zeroed); in ext4_register_li_request()
3803 static int set_journal_csum_feature_set(struct super_block *sb) in set_journal_csum_feature_set() argument
3807 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set()
3809 if (ext4_has_metadata_csum(sb)) { in set_journal_csum_feature_set()
3823 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in set_journal_csum_feature_set()
3828 } else if (test_opt(sb, JOURNAL_CHECKSUM)) { in set_journal_csum_feature_set()
3857 static int count_overhead(struct super_block *sb, ext4_group_t grp, in count_overhead() argument
3860 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead()
3863 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in count_overhead()
3866 if (!ext4_has_feature_bigalloc(sb)) in count_overhead()
3867 return (ext4_bg_has_super(sb, grp) + ext4_bg_num_gdb(sb, grp) + in count_overhead()
3871 (grp * EXT4_BLOCKS_PER_GROUP(sb)); in count_overhead()
3872 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1; in count_overhead()
3874 gdp = ext4_get_group_desc(sb, i, NULL); in count_overhead()
3875 b = ext4_block_bitmap(sb, gdp); in count_overhead()
3880 b = ext4_inode_bitmap(sb, gdp); in count_overhead()
3885 b = ext4_inode_table(sb, gdp); in count_overhead()
3895 if (ext4_bg_has_super(sb, grp)) { in count_overhead()
3899 j = ext4_bg_num_gdb(sb, grp); in count_overhead()
3900 if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) { in count_overhead()
3901 ext4_error(sb, "Invalid number of block group " in count_overhead()
3903 j = EXT4_BLOCKS_PER_GROUP(sb) - s; in count_overhead()
3911 return EXT4_CLUSTERS_PER_GROUP(sb) - in count_overhead()
3912 ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8); in count_overhead()
3918 int ext4_calculate_overhead(struct super_block *sb) in ext4_calculate_overhead() argument
3920 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead()
3924 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_calculate_overhead()
3948 blks = count_overhead(sb, i, buf); in ext4_calculate_overhead()
3961 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) { in ext4_calculate_overhead()
3963 j_inode = ext4_get_journal_inode(sb, j_inum); in ext4_calculate_overhead()
3965 j_blocks = j_inode->i_size >> sb->s_blocksize_bits; in ext4_calculate_overhead()
3969 ext4_msg(sb, KERN_ERR, "can't get journal size"); in ext4_calculate_overhead()
3978 static void ext4_set_resv_clusters(struct super_block *sb) in ext4_set_resv_clusters() argument
3981 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_resv_clusters()
3989 if (!ext4_has_feature_extents(sb)) in ext4_set_resv_clusters()
4008 static int ext4_fill_super(struct super_block *sb, void *data, int silent) in ext4_fill_super() argument
4010 struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev); in ext4_fill_super()
4043 sb->s_fs_info = sbi; in ext4_fill_super()
4044 sbi->s_sb = sb; in ext4_fill_super()
4047 if (sb->s_bdev->bd_part) in ext4_fill_super()
4049 part_stat_read(sb->s_bdev->bd_part, sectors[STAT_WRITE]); in ext4_fill_super()
4052 strreplace(sb->s_id, '/', '!'); in ext4_fill_super()
4056 blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE); in ext4_fill_super()
4058 ext4_msg(sb, KERN_ERR, "unable to set blocksize"); in ext4_fill_super()
4073 bh = ext4_sb_bread_unmovable(sb, logical_sb_block); in ext4_fill_super()
4075 ext4_msg(sb, KERN_ERR, "unable to read superblock"); in ext4_fill_super()
4086 sb->s_magic = le16_to_cpu(es->s_magic); in ext4_fill_super()
4087 if (sb->s_magic != EXT4_SUPER_MAGIC) in ext4_fill_super()
4092 if (ext4_has_feature_metadata_csum(sb) && in ext4_fill_super()
4093 ext4_has_feature_gdt_csum(sb)) in ext4_fill_super()
4094 ext4_warning(sb, "metadata_csum and uninit_bg are " in ext4_fill_super()
4098 if (!ext4_verify_csum_type(sb, es)) { in ext4_fill_super()
4099 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_fill_super()
4108 ext4_msg(sb, KERN_ERR, "Cannot load crc32c driver."); in ext4_fill_super()
4115 if (!ext4_superblock_csum_verify(sb, es)) { in ext4_fill_super()
4116 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_fill_super()
4124 if (ext4_has_feature_csum_seed(sb)) in ext4_fill_super()
4126 else if (ext4_has_metadata_csum(sb) || ext4_has_feature_ea_inode(sb)) in ext4_fill_super()
4132 set_opt(sb, INIT_INODE_TABLE); in ext4_fill_super()
4134 set_opt(sb, DEBUG); in ext4_fill_super()
4136 set_opt(sb, GRPID); in ext4_fill_super()
4138 set_opt(sb, NO_UID32); in ext4_fill_super()
4140 set_opt(sb, XATTR_USER); in ext4_fill_super()
4142 set_opt(sb, POSIX_ACL); in ext4_fill_super()
4144 if (ext4_has_feature_fast_commit(sb)) in ext4_fill_super()
4145 set_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_fill_super()
4147 if (ext4_has_metadata_csum(sb)) in ext4_fill_super()
4148 set_opt(sb, JOURNAL_CHECKSUM); in ext4_fill_super()
4151 set_opt(sb, JOURNAL_DATA); in ext4_fill_super()
4153 set_opt(sb, ORDERED_DATA); in ext4_fill_super()
4155 set_opt(sb, WRITEBACK_DATA); in ext4_fill_super()
4158 set_opt(sb, ERRORS_PANIC); in ext4_fill_super()
4160 set_opt(sb, ERRORS_CONT); in ext4_fill_super()
4162 set_opt(sb, ERRORS_RO); in ext4_fill_super()
4164 set_opt(sb, BLOCK_VALIDITY); in ext4_fill_super()
4166 set_opt(sb, DISCARD); in ext4_fill_super()
4175 set_opt(sb, BARRIER); in ext4_fill_super()
4181 if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) && in ext4_fill_super()
4183 set_opt(sb, DELALLOC); in ext4_fill_super()
4194 set_opt(sb, DIOREAD_NOLOCK); in ext4_fill_super()
4198 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4211 ext4_msg(sb, KERN_ERR, "invalid first ino: %u", in ext4_fill_super()
4218 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4221 ext4_msg(sb, KERN_ERR, "blocksize: %d", blocksize); in ext4_fill_super()
4232 sb->s_time_gran = 1; in ext4_fill_super()
4233 sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX; in ext4_fill_super()
4235 sb->s_time_gran = NSEC_PER_SEC; in ext4_fill_super()
4236 sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX; in ext4_fill_super()
4238 sb->s_time_min = EXT4_TIMESTAMP_MIN; in ext4_fill_super()
4243 if (ext4_has_feature_extra_isize(sb)) { in ext4_fill_super()
4249 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4258 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4273 if (!parse_options(s_mount_opts, sb, &journal_devnum, in ext4_fill_super()
4275 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
4282 if (!parse_options((char *) data, sb, &journal_devnum, in ext4_fill_super()
4287 if (ext4_has_feature_casefold(sb) && !sb->s_encoding) { in ext4_fill_super()
4292 if (ext4_has_feature_encrypt(sb)) { in ext4_fill_super()
4293 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4300 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4307 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4314 ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: " in ext4_fill_super()
4318 sb->s_encoding = encoding; in ext4_fill_super()
4319 sb->s_encoding_flags = encoding_flags; in ext4_fill_super()
4323 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in ext4_fill_super()
4326 clear_opt(sb, DIOREAD_NOLOCK); in ext4_fill_super()
4327 clear_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_fill_super()
4328 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in ext4_fill_super()
4329 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4333 if (test_opt(sb, DAX_ALWAYS)) { in ext4_fill_super()
4334 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4338 if (ext4_has_feature_encrypt(sb)) { in ext4_fill_super()
4339 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
4343 if (test_opt(sb, DELALLOC)) in ext4_fill_super()
4344 clear_opt(sb, DELALLOC); in ext4_fill_super()
4346 sb->s_iflags |= SB_I_CGROUPWB; in ext4_fill_super()
4349 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in ext4_fill_super()
4350 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in ext4_fill_super()
4353 (ext4_has_compat_features(sb) || in ext4_fill_super()
4354 ext4_has_ro_compat_features(sb) || in ext4_fill_super()
4355 ext4_has_incompat_features(sb))) in ext4_fill_super()
4356 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
4361 set_opt2(sb, HURD_COMPAT); in ext4_fill_super()
4362 if (ext4_has_feature_64bit(sb)) { in ext4_fill_super()
4363 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4372 if (ext4_has_feature_ea_inode(sb)) { in ext4_fill_super()
4373 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4379 if (IS_EXT2_SB(sb)) { in ext4_fill_super()
4380 if (ext2_feature_set_ok(sb)) in ext4_fill_super()
4381 ext4_msg(sb, KERN_INFO, "mounting ext2 file system " in ext4_fill_super()
4388 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_fill_super()
4390 ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due " in ext4_fill_super()
4396 if (IS_EXT3_SB(sb)) { in ext4_fill_super()
4397 if (ext3_feature_set_ok(sb)) in ext4_fill_super()
4398 ext4_msg(sb, KERN_INFO, "mounting ext3 file system " in ext4_fill_super()
4405 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_fill_super()
4407 ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due " in ext4_fill_super()
4418 if (!ext4_feature_set_ok(sb, (sb_rdonly(sb)))) in ext4_fill_super()
4423 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4430 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4437 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4443 if (bdev_dax_supported(sb->s_bdev, blocksize)) in ext4_fill_super()
4447 if (ext4_has_feature_inline_data(sb)) { in ext4_fill_super()
4448 ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem" in ext4_fill_super()
4453 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4459 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { in ext4_fill_super()
4460 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d", in ext4_fill_super()
4465 if (sb->s_blocksize != blocksize) { in ext4_fill_super()
4467 if (!sb_set_blocksize(sb, blocksize)) { in ext4_fill_super()
4468 ext4_msg(sb, KERN_ERR, "bad block size %d", in ext4_fill_super()
4476 bh = ext4_sb_bread_unmovable(sb, logical_sb_block); in ext4_fill_super()
4478 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4487 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4493 has_huge_files = ext4_has_feature_huge_file(sb); in ext4_fill_super()
4494 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_fill_super()
4496 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files); in ext4_fill_super()
4499 if (ext4_has_feature_64bit(sb)) { in ext4_fill_super()
4503 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4514 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb); in ext4_fill_super()
4519 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n", in ext4_fill_super()
4525 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb); in ext4_fill_super()
4528 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_fill_super()
4529 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_fill_super()
4534 if (ext4_has_feature_dir_index(sb)) { in ext4_fill_super()
4540 if (!sb_rdonly(sb)) in ext4_fill_super()
4545 if (!sb_rdonly(sb)) in ext4_fill_super()
4554 if (ext4_has_feature_bigalloc(sb)) { in ext4_fill_super()
4556 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4566 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4573 ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and " in ext4_fill_super()
4581 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4587 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4599 set_opt2(sb, STD_GROUP_SIZE); in ext4_fill_super()
4605 err = generic_check_addressable(sb->s_blocksize_bits, in ext4_fill_super()
4608 ext4_msg(sb, KERN_ERR, "filesystem" in ext4_fill_super()
4613 if (EXT4_BLOCKS_PER_GROUP(sb) == 0) in ext4_fill_super()
4617 blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits; in ext4_fill_super()
4619 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu " in ext4_fill_super()
4630 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_fill_super()
4638 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_fill_super()
4645 EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_fill_super()
4646 do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb)); in ext4_fill_super()
4647 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) { in ext4_fill_super()
4648 ext4_msg(sb, KERN_WARNING, "groups count too large: %llu " in ext4_fill_super()
4653 EXT4_BLOCKS_PER_GROUP(sb)); in ext4_fill_super()
4658 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); in ext4_fill_super()
4661 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu", in ext4_fill_super()
4667 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_fill_super()
4668 EXT4_DESC_PER_BLOCK(sb); in ext4_fill_super()
4669 if (ext4_has_feature_meta_bg(sb)) { in ext4_fill_super()
4671 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
4683 ext4_msg(sb, KERN_ERR, "not enough memory"); in ext4_fill_super()
4692 block = descriptor_loc(sb, logical_sb_block, i); in ext4_fill_super()
4693 ext4_sb_breadahead_unmovable(sb, block); in ext4_fill_super()
4699 block = descriptor_loc(sb, logical_sb_block, i); in ext4_fill_super()
4700 bh = ext4_sb_bread_unmovable(sb, block); in ext4_fill_super()
4702 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4714 if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) { in ext4_fill_super()
4715 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!"); in ext4_fill_super()
4732 sb->s_op = &ext4_sops; in ext4_fill_super()
4733 sb->s_export_op = &ext4_export_ops; in ext4_fill_super()
4734 sb->s_xattr = ext4_xattr_handlers; in ext4_fill_super()
4736 sb->s_cop = &ext4_cryptops; in ext4_fill_super()
4739 sb->s_vop = &ext4_verityops; in ext4_fill_super()
4742 sb->dq_op = &ext4_quota_operations; in ext4_fill_super()
4743 if (ext4_has_feature_quota(sb)) in ext4_fill_super()
4744 sb->s_qcop = &dquot_quotactl_sysfile_ops; in ext4_fill_super()
4746 sb->s_qcop = &ext4_qctl_operations; in ext4_fill_super()
4747 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; in ext4_fill_super()
4749 memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid)); in ext4_fill_super()
4762 ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE); in ext4_fill_super()
4763 ext4_clear_mount_flag(sb, EXT4_MF_FC_COMMITTING); in ext4_fill_super()
4774 sb->s_root = NULL; in ext4_fill_super()
4777 ext4_has_feature_journal_needs_recovery(sb)); in ext4_fill_super()
4779 if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb)) in ext4_fill_super()
4780 if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block))) in ext4_fill_super()
4787 if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) { in ext4_fill_super()
4788 err = ext4_load_journal(sb, es, journal_devnum); in ext4_fill_super()
4791 } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) && in ext4_fill_super()
4792 ext4_has_feature_journal_needs_recovery(sb)) { in ext4_fill_super()
4793 ext4_msg(sb, KERN_ERR, "required journal recovery " in ext4_fill_super()
4798 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) { in ext4_fill_super()
4799 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4803 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_fill_super()
4804 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4809 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4816 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4821 clear_opt(sb, JOURNAL_CHECKSUM); in ext4_fill_super()
4822 clear_opt(sb, DATA_FLAGS); in ext4_fill_super()
4823 clear_opt2(sb, JOURNAL_FAST_COMMIT); in ext4_fill_super()
4829 if (ext4_has_feature_64bit(sb) && in ext4_fill_super()
4830 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_fill_super()
4832 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature"); in ext4_fill_super()
4836 if (!set_journal_csum_feature_set(sb)) { in ext4_fill_super()
4837 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum " in ext4_fill_super()
4842 if (test_opt2(sb, JOURNAL_FAST_COMMIT) && in ext4_fill_super()
4843 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_fill_super()
4845 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4852 switch (test_opt(sb, DATA_FLAGS)) { in ext4_fill_super()
4860 set_opt(sb, ORDERED_DATA); in ext4_fill_super()
4863 set_opt(sb, JOURNAL_DATA); in ext4_fill_super()
4872 ext4_msg(sb, KERN_ERR, "Journal does not support " in ext4_fill_super()
4880 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA && in ext4_fill_super()
4881 test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_fill_super()
4882 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4896 if (!test_opt(sb, NO_MBCACHE)) { in ext4_fill_super()
4899 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4904 if (ext4_has_feature_ea_inode(sb)) { in ext4_fill_super()
4907 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4914 if (ext4_has_feature_verity(sb) && blocksize != PAGE_SIZE) { in ext4_fill_super()
4915 ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity"); in ext4_fill_super()
4919 if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) && in ext4_fill_super()
4920 !ext4_has_feature_encrypt(sb)) { in ext4_fill_super()
4921 ext4_set_feature_encrypt(sb); in ext4_fill_super()
4922 ext4_commit_super(sb, 1); in ext4_fill_super()
4932 err = ext4_calculate_overhead(sb); in ext4_fill_super()
4941 EXT4_SB(sb)->rsv_conversion_wq = in ext4_fill_super()
4943 if (!EXT4_SB(sb)->rsv_conversion_wq) { in ext4_fill_super()
4954 root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL); in ext4_fill_super()
4956 ext4_msg(sb, KERN_ERR, "get root inode failed"); in ext4_fill_super()
4962 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck"); in ext4_fill_super()
4968 if (sb->s_encoding) in ext4_fill_super()
4969 sb->s_d_op = &ext4_dentry_ops; in ext4_fill_super()
4972 sb->s_root = d_make_root(root); in ext4_fill_super()
4973 if (!sb->s_root) { in ext4_fill_super()
4974 ext4_msg(sb, KERN_ERR, "get root dentry failed"); in ext4_fill_super()
4979 ret = ext4_setup_super(sb, es, sb_rdonly(sb)); in ext4_fill_super()
4981 sb->s_flags |= SB_RDONLY; in ext4_fill_super()
4986 ext4_set_resv_clusters(sb); in ext4_fill_super()
4988 if (test_opt(sb, BLOCK_VALIDITY)) { in ext4_fill_super()
4989 err = ext4_setup_system_zone(sb); in ext4_fill_super()
4991 ext4_msg(sb, KERN_ERR, "failed to initialize system " in ext4_fill_super()
4996 ext4_fc_replay_cleanup(sb); in ext4_fill_super()
4998 ext4_ext_init(sb); in ext4_fill_super()
4999 err = ext4_mb_init(sb); in ext4_fill_super()
5001 ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)", in ext4_fill_super()
5006 block = ext4_count_free_clusters(sb); in ext4_fill_super()
5009 ext4_superblock_csum_set(sb); in ext4_fill_super()
5013 unsigned long freei = ext4_count_free_inodes(sb); in ext4_fill_super()
5015 ext4_superblock_csum_set(sb); in ext4_fill_super()
5021 ext4_count_dirs(sb), GFP_KERNEL); in ext4_fill_super()
5029 ext4_msg(sb, KERN_ERR, "insufficient memory"); in ext4_fill_super()
5033 if (ext4_has_feature_flex_bg(sb)) in ext4_fill_super()
5034 if (!ext4_fill_flex_info(sb)) { in ext4_fill_super()
5035 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
5041 err = ext4_register_li_request(sb, first_not_zeroed); in ext4_fill_super()
5045 err = ext4_register_sysfs(sb); in ext4_fill_super()
5051 if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) { in ext4_fill_super()
5052 err = ext4_enable_quotas(sb); in ext4_fill_super()
5063 errseq_check_and_advance(&sb->s_bdev->bd_inode->i_mapping->wb_err, in ext4_fill_super()
5065 sb->s_bdev->bd_super = sb; in ext4_fill_super()
5066 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS; in ext4_fill_super()
5067 ext4_orphan_cleanup(sb, es); in ext4_fill_super()
5068 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS; in ext4_fill_super()
5070 ext4_msg(sb, KERN_INFO, "recovery complete"); in ext4_fill_super()
5071 err = ext4_mark_recovery_complete(sb, es); in ext4_fill_super()
5075 if (EXT4_SB(sb)->s_journal) { in ext4_fill_super()
5076 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in ext4_fill_super()
5078 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in ext4_fill_super()
5085 if (test_opt(sb, DISCARD)) { in ext4_fill_super()
5086 struct request_queue *q = bdev_get_queue(sb->s_bdev); in ext4_fill_super()
5088 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
5094 ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. " in ext4_fill_super()
5115 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); in ext4_fill_super()
5119 ext4_unregister_sysfs(sb); in ext4_fill_super()
5122 ext4_unregister_li_request(sb); in ext4_fill_super()
5124 ext4_mb_release(sb); in ext4_fill_super()
5139 ext4_ext_release(sb); in ext4_fill_super()
5140 ext4_release_system_zone(sb); in ext4_fill_super()
5142 dput(sb->s_root); in ext4_fill_super()
5143 sb->s_root = NULL; in ext4_fill_super()
5145 ext4_msg(sb, KERN_ERR, "mount failed"); in ext4_fill_super()
5146 if (EXT4_SB(sb)->rsv_conversion_wq) in ext4_fill_super()
5147 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq); in ext4_fill_super()
5177 utf8_unload(sb->s_encoding); in ext4_fill_super()
5182 kfree(get_qf_name(sb, sbi, i)); in ext4_fill_super()
5188 sb->s_fs_info = NULL; in ext4_fill_super()
5202 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal) in ext4_init_journal_params() argument
5204 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params()
5209 ext4_fc_init(sb, journal); in ext4_init_journal_params()
5212 if (test_opt(sb, BARRIER)) in ext4_init_journal_params()
5216 if (test_opt(sb, DATA_ERR_ABORT)) in ext4_init_journal_params()
5223 static struct inode *ext4_get_journal_inode(struct super_block *sb, in ext4_get_journal_inode() argument
5233 journal_inode = ext4_iget(sb, journal_inum, EXT4_IGET_SPECIAL); in ext4_get_journal_inode()
5235 ext4_msg(sb, KERN_ERR, "no journal found"); in ext4_get_journal_inode()
5241 ext4_msg(sb, KERN_ERR, "journal inode is deleted"); in ext4_get_journal_inode()
5248 ext4_msg(sb, KERN_ERR, "invalid journal inode"); in ext4_get_journal_inode()
5255 static journal_t *ext4_get_journal(struct super_block *sb, in ext4_get_journal() argument
5261 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_get_journal()
5264 journal_inode = ext4_get_journal_inode(sb, journal_inum); in ext4_get_journal()
5270 ext4_msg(sb, KERN_ERR, "Could not load journal inode"); in ext4_get_journal()
5274 journal->j_private = sb; in ext4_get_journal()
5275 ext4_init_journal_params(sb, journal); in ext4_get_journal()
5279 static journal_t *ext4_get_dev_journal(struct super_block *sb, in ext4_get_dev_journal() argument
5292 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_get_dev_journal()
5295 bdev = ext4_blkdev_get(j_dev, sb); in ext4_get_dev_journal()
5299 blocksize = sb->s_blocksize; in ext4_get_dev_journal()
5302 ext4_msg(sb, KERN_ERR, in ext4_get_dev_journal()
5311 ext4_msg(sb, KERN_ERR, "couldn't read superblock of " in ext4_get_dev_journal()
5320 ext4_msg(sb, KERN_ERR, "external journal has " in ext4_get_dev_journal()
5328 es->s_checksum != ext4_superblock_csum(sb, es)) { in ext4_get_dev_journal()
5329 ext4_msg(sb, KERN_ERR, "external journal has " in ext4_get_dev_journal()
5335 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { in ext4_get_dev_journal()
5336 ext4_msg(sb, KERN_ERR, "journal UUID does not match"); in ext4_get_dev_journal()
5345 journal = jbd2_journal_init_dev(bdev, sb->s_bdev, in ext4_get_dev_journal()
5348 ext4_msg(sb, KERN_ERR, "failed to create device journal"); in ext4_get_dev_journal()
5351 journal->j_private = sb; in ext4_get_dev_journal()
5353 ext4_msg(sb, KERN_ERR, "I/O error on journal device"); in ext4_get_dev_journal()
5357 ext4_msg(sb, KERN_ERR, "External journal has more than one " in ext4_get_dev_journal()
5362 EXT4_SB(sb)->s_journal_bdev = bdev; in ext4_get_dev_journal()
5363 ext4_init_journal_params(sb, journal); in ext4_get_dev_journal()
5373 static int ext4_load_journal(struct super_block *sb, in ext4_load_journal() argument
5384 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb))) in ext4_load_journal()
5389 ext4_msg(sb, KERN_INFO, "external journal device major/minor " in ext4_load_journal()
5396 ext4_msg(sb, KERN_ERR, in ext4_load_journal()
5402 journal = ext4_get_journal(sb, journal_inum); in ext4_load_journal()
5406 journal = ext4_get_dev_journal(sb, journal_dev); in ext4_load_journal()
5412 really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro; in ext4_load_journal()
5414 if (journal_dev_ro && !sb_rdonly(sb)) { in ext4_load_journal()
5415 ext4_msg(sb, KERN_ERR, in ext4_load_journal()
5426 if (ext4_has_feature_journal_needs_recovery(sb)) { in ext4_load_journal()
5427 if (sb_rdonly(sb)) { in ext4_load_journal()
5428 ext4_msg(sb, KERN_INFO, "INFO: recovery " in ext4_load_journal()
5431 ext4_msg(sb, KERN_ERR, "write access " in ext4_load_journal()
5437 ext4_msg(sb, KERN_INFO, "write access will " in ext4_load_journal()
5443 ext4_msg(sb, KERN_INFO, "barriers disabled"); in ext4_load_journal()
5445 if (!ext4_has_feature_journal_needs_recovery(sb)) in ext4_load_journal()
5460 ext4_msg(sb, KERN_ERR, "error loading journal"); in ext4_load_journal()
5464 EXT4_SB(sb)->s_journal = journal; in ext4_load_journal()
5465 err = ext4_clear_journal_err(sb, es); in ext4_load_journal()
5467 EXT4_SB(sb)->s_journal = NULL; in ext4_load_journal()
5477 ext4_commit_super(sb, 1); in ext4_load_journal()
5487 static int ext4_commit_super(struct super_block *sb, int sync) in ext4_commit_super() argument
5489 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_commit_super()
5490 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; in ext4_commit_super()
5493 if (!sbh || block_device_ejected(sb)) in ext4_commit_super()
5506 if (!(sb->s_flags & SB_RDONLY)) in ext4_commit_super()
5508 if (sb->s_bdev->bd_part) in ext4_commit_super()
5510 cpu_to_le64(EXT4_SB(sb)->s_kbytes_written + in ext4_commit_super()
5511 ((part_stat_read(sb->s_bdev->bd_part, in ext4_commit_super()
5513 EXT4_SB(sb)->s_sectors_written_start) >> 1)); in ext4_commit_super()
5516 cpu_to_le64(EXT4_SB(sb)->s_kbytes_written); in ext4_commit_super()
5517 if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeclusters_counter)) in ext4_commit_super()
5519 EXT4_C2B(EXT4_SB(sb), percpu_counter_sum_positive( in ext4_commit_super()
5520 &EXT4_SB(sb)->s_freeclusters_counter))); in ext4_commit_super()
5521 if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeinodes_counter)) in ext4_commit_super()
5524 &EXT4_SB(sb)->s_freeinodes_counter)); in ext4_commit_super()
5526 ext4_superblock_csum_set(sb); in ext4_commit_super()
5538 ext4_msg(sb, KERN_ERR, "previous I/O error to " in ext4_commit_super()
5547 REQ_SYNC | (test_opt(sb, BARRIER) ? REQ_FUA : 0)); in ext4_commit_super()
5549 ext4_msg(sb, KERN_ERR, "I/O error while writing " in ext4_commit_super()
5563 static int ext4_mark_recovery_complete(struct super_block *sb, in ext4_mark_recovery_complete() argument
5567 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_mark_recovery_complete()
5569 if (!ext4_has_feature_journal(sb)) { in ext4_mark_recovery_complete()
5571 ext4_error(sb, "Journal got removed while the fs was " in ext4_mark_recovery_complete()
5582 if (ext4_has_feature_journal_needs_recovery(sb) && sb_rdonly(sb)) { in ext4_mark_recovery_complete()
5583 ext4_clear_feature_journal_needs_recovery(sb); in ext4_mark_recovery_complete()
5584 ext4_commit_super(sb, 1); in ext4_mark_recovery_complete()
5596 static int ext4_clear_journal_err(struct super_block *sb, in ext4_clear_journal_err() argument
5603 if (!ext4_has_feature_journal(sb)) { in ext4_clear_journal_err()
5604 ext4_error(sb, "Journal got removed while the fs was mounted!"); in ext4_clear_journal_err()
5608 journal = EXT4_SB(sb)->s_journal; in ext4_clear_journal_err()
5619 errstr = ext4_decode_error(sb, j_errno, nbuf); in ext4_clear_journal_err()
5620 ext4_warning(sb, "Filesystem error recorded " in ext4_clear_journal_err()
5622 ext4_warning(sb, "Marking fs in need of filesystem check."); in ext4_clear_journal_err()
5624 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_clear_journal_err()
5626 ext4_commit_super(sb, 1); in ext4_clear_journal_err()
5638 int ext4_force_commit(struct super_block *sb) in ext4_force_commit() argument
5642 if (sb_rdonly(sb)) in ext4_force_commit()
5645 journal = EXT4_SB(sb)->s_journal; in ext4_force_commit()
5649 static int ext4_sync_fs(struct super_block *sb, int wait) in ext4_sync_fs() argument
5654 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs()
5659 trace_ext4_sync_fs(sb, wait); in ext4_sync_fs()
5665 dquot_writeback_dquots(sb, -1); in ext4_sync_fs()
5682 } else if (wait && test_opt(sb, BARRIER)) in ext4_sync_fs()
5686 err = blkdev_issue_flush(sb->s_bdev, GFP_KERNEL); in ext4_sync_fs()
5702 static int ext4_freeze(struct super_block *sb) in ext4_freeze() argument
5707 if (sb_rdonly(sb)) in ext4_freeze()
5710 journal = EXT4_SB(sb)->s_journal; in ext4_freeze()
5725 ext4_clear_feature_journal_needs_recovery(sb); in ext4_freeze()
5728 error = ext4_commit_super(sb, 1); in ext4_freeze()
5740 static int ext4_unfreeze(struct super_block *sb) in ext4_unfreeze() argument
5742 if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb))) in ext4_unfreeze()
5745 if (EXT4_SB(sb)->s_journal) { in ext4_unfreeze()
5747 ext4_set_feature_journal_needs_recovery(sb); in ext4_unfreeze()
5750 ext4_commit_super(sb, 1); in ext4_unfreeze()
5770 static int ext4_remount(struct super_block *sb, int *flags, char *data) in ext4_remount() argument
5773 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_remount()
5790 old_sb_flags = sb->s_flags; in ext4_remount()
5802 char *qf_name = get_qf_name(sb, sbi, i); in ext4_remount()
5823 sb->s_flags = (sb->s_flags & ~vfs_flags) | (*flags & vfs_flags); in ext4_remount()
5825 if (!parse_options(data, sb, NULL, &journal_ioprio, 1)) { in ext4_remount()
5831 test_opt(sb, JOURNAL_CHECKSUM)) { in ext4_remount()
5832 ext4_msg(sb, KERN_ERR, "changing journal_checksum " in ext4_remount()
5837 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in ext4_remount()
5838 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in ext4_remount()
5839 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5844 if (test_opt(sb, DIOREAD_NOLOCK)) { in ext4_remount()
5845 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5850 } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) { in ext4_remount()
5851 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_remount()
5852 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5860 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount"); in ext4_remount()
5865 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) in ext4_remount()
5866 ext4_abort(sb, EXT4_ERR_ESHUTDOWN, "Abort forced by user"); in ext4_remount()
5868 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in ext4_remount()
5869 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in ext4_remount()
5874 ext4_init_journal_params(sb, sbi->s_journal); in ext4_remount()
5878 if ((bool)(*flags & SB_RDONLY) != sb_rdonly(sb)) { in ext4_remount()
5879 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) { in ext4_remount()
5885 err = sync_filesystem(sb); in ext4_remount()
5888 err = dquot_suspend(sb, -1); in ext4_remount()
5896 sb->s_flags |= SB_RDONLY; in ext4_remount()
5912 ext4_mark_recovery_complete(sb, es); in ext4_remount()
5918 if (ext4_has_feature_readonly(sb) || in ext4_remount()
5919 !ext4_feature_set_ok(sb, 0)) { in ext4_remount()
5929 ext4_get_group_desc(sb, g, NULL); in ext4_remount()
5931 if (!ext4_group_desc_csum_verify(sb, g, gdp)) { in ext4_remount()
5932 ext4_msg(sb, KERN_ERR, in ext4_remount()
5934 g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)), in ext4_remount()
5947 ext4_msg(sb, KERN_WARNING, "Couldn't " in ext4_remount()
5962 err = ext4_clear_journal_err(sb, es); in ext4_remount()
5968 err = ext4_setup_super(sb, es, 0); in ext4_remount()
5972 sb->s_flags &= ~SB_RDONLY; in ext4_remount()
5973 if (ext4_has_feature_mmp(sb)) in ext4_remount()
5974 if (ext4_multi_mount_protect(sb, in ext4_remount()
5987 if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE)) in ext4_remount()
5988 ext4_unregister_li_request(sb); in ext4_remount()
5991 first_not_zeroed = ext4_has_uninit_itable(sb); in ext4_remount()
5992 ext4_register_li_request(sb, first_not_zeroed); in ext4_remount()
6000 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) { in ext4_remount()
6001 err = ext4_setup_system_zone(sb); in ext4_remount()
6007 err = ext4_commit_super(sb, 1); in ext4_remount()
6017 if (sb_any_quota_suspended(sb)) in ext4_remount()
6018 dquot_resume(sb, -1); in ext4_remount()
6019 else if (ext4_has_feature_quota(sb)) { in ext4_remount()
6020 err = ext4_enable_quotas(sb); in ext4_remount()
6026 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in ext4_remount()
6027 ext4_release_system_zone(sb); in ext4_remount()
6034 *flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags); in ext4_remount()
6036 ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s", orig_data); in ext4_remount()
6041 sb->s_flags = old_sb_flags; in ext4_remount()
6049 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in ext4_remount()
6050 ext4_release_system_zone(sb); in ext4_remount()
6054 to_free[i] = get_qf_name(sb, sbi, i); in ext4_remount()
6066 static int ext4_statfs_project(struct super_block *sb, in ext4_statfs_project() argument
6075 dquot = dqget(sb, qid); in ext4_statfs_project()
6082 limit >>= sb->s_blocksize_bits; in ext4_statfs_project()
6086 dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits; in ext4_statfs_project()
6110 struct super_block *sb = dentry->d_sb; in ext4_statfs() local
6111 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs()
6118 if (!test_opt(sb, MINIX_DF)) in ext4_statfs()
6122 buf->f_bsize = sb->s_blocksize; in ext4_statfs()
6141 sb_has_quota_limits_enabled(sb, PRJQUOTA)) in ext4_statfs()
6142 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf); in ext4_statfs()
6214 struct super_block *sb = dquot->dq_sb; in ext4_mark_dquot_dirty() local
6215 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_dquot_dirty()
6218 if (ext4_has_feature_quota(sb) || in ext4_mark_dquot_dirty()
6227 static int ext4_write_info(struct super_block *sb, int type) in ext4_write_info() argument
6233 handle = ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2); in ext4_write_info()
6236 ret = dquot_commit_info(sb, type); in ext4_write_info()
6247 static int ext4_quota_on_mount(struct super_block *sb, int type) in ext4_quota_on_mount() argument
6249 return dquot_quota_on_mount(sb, get_qf_name(sb, EXT4_SB(sb), type), in ext4_quota_on_mount()
6250 EXT4_SB(sb)->s_jquota_fmt, type); in ext4_quota_on_mount()
6270 static int ext4_quota_on(struct super_block *sb, int type, int format_id, in ext4_quota_on() argument
6275 if (!test_opt(sb, QUOTA)) in ext4_quota_on()
6279 if (path->dentry->d_sb != sb) in ext4_quota_on()
6287 if (EXT4_SB(sb)->s_qf_names[type]) { in ext4_quota_on()
6289 if (path->dentry->d_parent != sb->s_root) in ext4_quota_on()
6290 ext4_msg(sb, KERN_WARNING, in ext4_quota_on()
6293 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY; in ext4_quota_on()
6299 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY; in ext4_quota_on()
6306 if (EXT4_SB(sb)->s_journal && in ext4_quota_on()
6312 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6313 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6314 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6320 err = dquot_quota_on(sb, type, format_id, path); in ext4_quota_on()
6348 static int ext4_quota_enable(struct super_block *sb, int type, int format_id, in ext4_quota_enable() argument
6354 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_quota_enable()
6355 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_quota_enable()
6356 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_quota_enable()
6359 BUG_ON(!ext4_has_feature_quota(sb)); in ext4_quota_enable()
6364 qf_inode = ext4_iget(sb, qf_inums[type], EXT4_IGET_SPECIAL); in ext4_quota_enable()
6366 ext4_error(sb, "Bad quota inode # %lu", qf_inums[type]); in ext4_quota_enable()
6382 static int ext4_enable_quotas(struct super_block *sb) in ext4_enable_quotas() argument
6386 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_enable_quotas()
6387 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_enable_quotas()
6388 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_enable_quotas()
6391 test_opt(sb, USRQUOTA), in ext4_enable_quotas()
6392 test_opt(sb, GRPQUOTA), in ext4_enable_quotas()
6393 test_opt(sb, PRJQUOTA), in ext4_enable_quotas()
6396 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY; in ext4_enable_quotas()
6399 err = ext4_quota_enable(sb, type, QFMT_VFS_V1, in ext4_enable_quotas()
6403 ext4_warning(sb, in ext4_enable_quotas()
6408 dquot_quota_off(sb, type); in ext4_enable_quotas()
6417 static int ext4_quota_off(struct super_block *sb, int type) in ext4_quota_off() argument
6419 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_off()
6425 if (test_opt(sb, DELALLOC)) in ext4_quota_off()
6426 sync_filesystem(sb); in ext4_quota_off()
6431 err = dquot_quota_off(sb, type); in ext4_quota_off()
6432 if (err || ext4_has_feature_quota(sb)) in ext4_quota_off()
6458 return dquot_quota_off(sb, type); in ext4_quota_off()
6465 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data, in ext4_quota_read() argument
6468 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_read()
6469 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_read()
6470 int offset = off & (sb->s_blocksize - 1); in ext4_quota_read()
6482 tocopy = sb->s_blocksize - offset < toread ? in ext4_quota_read()
6483 sb->s_blocksize - offset : toread; in ext4_quota_read()
6502 static ssize_t ext4_quota_write(struct super_block *sb, int type, in ext4_quota_write() argument
6505 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_write()
6506 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_write()
6507 int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1); in ext4_quota_write()
6512 if (EXT4_SB(sb)->s_journal && !handle) { in ext4_quota_write()
6513 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
6522 if (sb->s_blocksize - offset < len) { in ext4_quota_write()
6523 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
6583 static inline int ext2_feature_set_ok(struct super_block *sb) in ext2_feature_set_ok() argument
6585 if (ext4_has_unknown_ext2_incompat_features(sb)) in ext2_feature_set_ok()
6587 if (sb_rdonly(sb)) in ext2_feature_set_ok()
6589 if (ext4_has_unknown_ext2_ro_compat_features(sb)) in ext2_feature_set_ok()
6596 static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; } in ext2_feature_set_ok() argument
6612 static inline int ext3_feature_set_ok(struct super_block *sb) in ext3_feature_set_ok() argument
6614 if (ext4_has_unknown_ext3_incompat_features(sb)) in ext3_feature_set_ok()
6616 if (!ext4_has_feature_journal(sb)) in ext3_feature_set_ok()
6618 if (sb_rdonly(sb)) in ext3_feature_set_ok()
6620 if (ext4_has_unknown_ext3_ro_compat_features(sb)) in ext3_feature_set_ok()