Lines Matching refs:sb
65 static int ext4_commit_super(struct super_block *sb, int sync);
66 static void ext4_mark_recovery_complete(struct super_block *sb,
68 static void ext4_clear_journal_err(struct super_block *sb,
70 static int ext4_sync_fs(struct super_block *sb, int wait);
71 static int ext4_remount(struct super_block *sb, int *flags, char *data);
73 static int ext4_unfreeze(struct super_block *sb);
74 static int ext4_freeze(struct super_block *sb);
77 static inline int ext2_feature_set_ok(struct super_block *sb);
78 static inline int ext3_feature_set_ok(struct super_block *sb);
79 static int ext4_feature_set_ok(struct super_block *sb, int readonly);
81 static void ext4_unregister_li_request(struct super_block *sb);
83 static struct inode *ext4_get_journal_inode(struct super_block *sb,
126 #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type) argument
128 #define IS_EXT2_SB(sb) (0) argument
141 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type) argument
150 ext4_sb_bread(struct super_block *sb, sector_t block, int op_flags) in ext4_sb_bread() argument
152 struct buffer_head *bh = sb_getblk(sb, block); in ext4_sb_bread()
166 static int ext4_verify_csum_type(struct super_block *sb, in ext4_verify_csum_type() argument
169 if (!ext4_has_feature_metadata_csum(sb)) in ext4_verify_csum_type()
175 static __le32 ext4_superblock_csum(struct super_block *sb, in ext4_superblock_csum() argument
178 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_superblock_csum()
187 static int ext4_superblock_csum_verify(struct super_block *sb, in ext4_superblock_csum_verify() argument
190 if (!ext4_has_metadata_csum(sb)) in ext4_superblock_csum_verify()
193 return es->s_checksum == ext4_superblock_csum(sb, es); in ext4_superblock_csum_verify()
196 void ext4_superblock_csum_set(struct super_block *sb) in ext4_superblock_csum_set() argument
198 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_superblock_csum_set()
200 if (!ext4_has_metadata_csum(sb)) in ext4_superblock_csum_set()
203 es->s_checksum = ext4_superblock_csum(sb, es); in ext4_superblock_csum_set()
226 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, in ext4_block_bitmap() argument
230 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_block_bitmap()
234 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, in ext4_inode_bitmap() argument
238 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_bitmap()
242 ext4_fsblk_t ext4_inode_table(struct super_block *sb, in ext4_inode_table() argument
246 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_inode_table()
250 __u32 ext4_free_group_clusters(struct super_block *sb, in ext4_free_group_clusters() argument
254 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_group_clusters()
258 __u32 ext4_free_inodes_count(struct super_block *sb, in ext4_free_inodes_count() argument
262 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_free_inodes_count()
266 __u32 ext4_used_dirs_count(struct super_block *sb, in ext4_used_dirs_count() argument
270 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_used_dirs_count()
274 __u32 ext4_itable_unused_count(struct super_block *sb, in ext4_itable_unused_count() argument
278 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? in ext4_itable_unused_count()
282 void ext4_block_bitmap_set(struct super_block *sb, in ext4_block_bitmap_set() argument
286 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_block_bitmap_set()
290 void ext4_inode_bitmap_set(struct super_block *sb, in ext4_inode_bitmap_set() argument
294 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_bitmap_set()
298 void ext4_inode_table_set(struct super_block *sb, in ext4_inode_table_set() argument
302 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_inode_table_set()
306 void ext4_free_group_clusters_set(struct super_block *sb, in ext4_free_group_clusters_set() argument
310 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_group_clusters_set()
314 void ext4_free_inodes_set(struct super_block *sb, in ext4_free_inodes_set() argument
318 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_free_inodes_set()
322 void ext4_used_dirs_set(struct super_block *sb, in ext4_used_dirs_set() argument
326 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_used_dirs_set()
330 void ext4_itable_unused_set(struct super_block *sb, in ext4_itable_unused_set() argument
334 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) in ext4_itable_unused_set()
339 static void __save_error_info(struct super_block *sb, const char *func, in __save_error_info() argument
342 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in __save_error_info()
344 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in __save_error_info()
345 if (bdev_read_only(sb->s_bdev)) in __save_error_info()
364 mod_timer(&EXT4_SB(sb)->s_err_report, jiffies + 24*60*60*HZ); in __save_error_info()
368 static void save_error_info(struct super_block *sb, const char *func, in save_error_info() argument
371 __save_error_info(sb, func, line); in save_error_info()
372 ext4_commit_super(sb, 1); in save_error_info()
383 static int block_device_ejected(struct super_block *sb) in block_device_ejected() argument
385 struct inode *bd_inode = sb->s_bdev->bd_inode; in block_device_ejected()
393 struct super_block *sb = journal->j_private; in ext4_journal_commit_callback() local
394 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_journal_commit_callback()
400 ext4_process_freed_data(sb, txn->t_tid); in ext4_journal_commit_callback()
408 jce->jce_func(sb, jce, error); in ext4_journal_commit_callback()
429 static void ext4_handle_error(struct super_block *sb) in ext4_handle_error() argument
431 if (sb_rdonly(sb)) in ext4_handle_error()
434 if (!test_opt(sb, ERRORS_CONT)) { in ext4_handle_error()
435 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_handle_error()
437 EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED; in ext4_handle_error()
441 if (test_opt(sb, ERRORS_RO)) { in ext4_handle_error()
442 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in ext4_handle_error()
448 sb->s_flags |= MS_RDONLY; in ext4_handle_error()
450 if (test_opt(sb, ERRORS_PANIC)) { in ext4_handle_error()
451 if (EXT4_SB(sb)->s_journal && in ext4_handle_error()
452 !(EXT4_SB(sb)->s_journal->j_flags & JBD2_REC_ERR)) in ext4_handle_error()
455 sb->s_id); in ext4_handle_error()
459 #define ext4_error_ratelimit(sb) \ argument
460 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
463 void __ext4_error(struct super_block *sb, const char *function, in __ext4_error() argument
469 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_error()
472 if (ext4_error_ratelimit(sb)) { in __ext4_error()
478 sb->s_id, function, line, current->comm, &vaf); in __ext4_error()
481 save_error_info(sb, function, line); in __ext4_error()
482 ext4_handle_error(sb); in __ext4_error()
558 const char *ext4_decode_error(struct super_block *sb, int errno, in ext4_decode_error() argument
577 if (!sb || (EXT4_SB(sb)->s_journal && in ext4_decode_error()
578 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT)) in ext4_decode_error()
601 void __ext4_std_error(struct super_block *sb, const char *function, in __ext4_std_error() argument
607 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_std_error()
613 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb)) in __ext4_std_error()
616 if (ext4_error_ratelimit(sb)) { in __ext4_std_error()
617 errstr = ext4_decode_error(sb, errno, nbuf); in __ext4_std_error()
619 sb->s_id, function, line, errstr); in __ext4_std_error()
622 save_error_info(sb, function, line); in __ext4_std_error()
623 ext4_handle_error(sb); in __ext4_std_error()
636 void __ext4_abort(struct super_block *sb, const char *function, in __ext4_abort() argument
642 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_abort()
645 save_error_info(sb, function, line); in __ext4_abort()
650 sb->s_id, function, line, &vaf); in __ext4_abort()
653 if (sb_rdonly(sb) == 0) { in __ext4_abort()
654 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in __ext4_abort()
655 EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED; in __ext4_abort()
661 sb->s_flags |= MS_RDONLY; in __ext4_abort()
662 if (EXT4_SB(sb)->s_journal) in __ext4_abort()
663 jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO); in __ext4_abort()
664 save_error_info(sb, function, line); in __ext4_abort()
666 if (test_opt(sb, ERRORS_PANIC)) { in __ext4_abort()
667 if (EXT4_SB(sb)->s_journal && in __ext4_abort()
668 !(EXT4_SB(sb)->s_journal->j_flags & JBD2_REC_ERR)) in __ext4_abort()
674 void __ext4_msg(struct super_block *sb, in __ext4_msg() argument
680 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs")) in __ext4_msg()
686 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in __ext4_msg()
690 #define ext4_warning_ratelimit(sb) \ argument
691 ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), \
694 void __ext4_warning(struct super_block *sb, const char *function, in __ext4_warning() argument
700 if (!ext4_warning_ratelimit(sb)) in __ext4_warning()
707 sb->s_id, function, line, &vaf); in __ext4_warning()
730 struct super_block *sb, ext4_group_t grp, in __ext4_grp_locked_error() argument
738 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in __ext4_grp_locked_error()
740 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in __ext4_grp_locked_error()
745 __save_error_info(sb, function, line); in __ext4_grp_locked_error()
747 if (ext4_error_ratelimit(sb)) { in __ext4_grp_locked_error()
752 sb->s_id, function, line, grp); in __ext4_grp_locked_error()
762 if (test_opt(sb, ERRORS_CONT)) { in __ext4_grp_locked_error()
763 ext4_commit_super(sb, 0); in __ext4_grp_locked_error()
767 ext4_unlock_group(sb, grp); in __ext4_grp_locked_error()
768 ext4_commit_super(sb, 1); in __ext4_grp_locked_error()
769 ext4_handle_error(sb); in __ext4_grp_locked_error()
781 ext4_lock_group(sb, grp); in __ext4_grp_locked_error()
785 void ext4_update_dynamic_rev(struct super_block *sb) in ext4_update_dynamic_rev() argument
787 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_update_dynamic_rev()
792 ext4_warning(sb, in ext4_update_dynamic_rev()
813 static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb) in ext4_blkdev_get() argument
818 bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb); in ext4_blkdev_get()
824 ext4_msg(sb, KERN_ERR, "failed to open journal device %s: %ld", in ext4_blkdev_get()
852 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi) in dump_orphan_list() argument
856 ext4_msg(sb, KERN_ERR, "sb orphan head is %d", in dump_orphan_list()
871 static int ext4_quota_off(struct super_block *sb, int type);
873 static inline void ext4_quota_off_umount(struct super_block *sb) in ext4_quota_off_umount() argument
879 ext4_quota_off(sb, type); in ext4_quota_off_umount()
886 static inline char *get_qf_name(struct super_block *sb, in get_qf_name() argument
891 lockdep_is_held(&sb->s_umount)); in get_qf_name()
894 static inline void ext4_quota_off_umount(struct super_block *sb) in ext4_quota_off_umount() argument
899 static void ext4_put_super(struct super_block *sb) in ext4_put_super() argument
901 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_put_super()
908 ext4_unregister_li_request(sb); in ext4_put_super()
909 ext4_quota_off_umount(sb); in ext4_put_super()
919 ext4_abort(sb, "Couldn't clean up the journal"); in ext4_put_super()
922 ext4_unregister_sysfs(sb); in ext4_put_super()
925 ext4_release_system_zone(sb); in ext4_put_super()
926 ext4_mb_release(sb); in ext4_put_super()
927 ext4_ext_release(sb); in ext4_put_super()
929 if (!sb_rdonly(sb) && !aborted) { in ext4_put_super()
930 ext4_clear_feature_journal_needs_recovery(sb); in ext4_put_super()
933 if (!sb_rdonly(sb)) in ext4_put_super()
934 ext4_commit_super(sb, 1); in ext4_put_super()
955 kfree(get_qf_name(sb, sbi, i)); in ext4_put_super()
963 dump_orphan_list(sb, sbi); in ext4_put_super()
966 sync_blockdev(sb->s_bdev); in ext4_put_super()
967 invalidate_bdev(sb->s_bdev); in ext4_put_super()
968 if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) { in ext4_put_super()
989 sb->s_fs_info = NULL; in ext4_put_super()
1008 static struct inode *ext4_alloc_inode(struct super_block *sb) in ext4_alloc_inode() argument
1121 static struct inode *ext4_nfs_get_inode(struct super_block *sb, in ext4_nfs_get_inode() argument
1126 if (ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO) in ext4_nfs_get_inode()
1128 if (ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)) in ext4_nfs_get_inode()
1139 inode = ext4_iget_normal(sb, ino); in ext4_nfs_get_inode()
1150 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid, in ext4_fh_to_dentry() argument
1153 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, in ext4_fh_to_dentry()
1157 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid, in ext4_fh_to_parent() argument
1160 return generic_fh_to_parent(sb, fid, fh_len, fh_type, in ext4_fh_to_parent()
1180 static int bdev_try_to_free_page(struct super_block *sb, struct page *page, in bdev_try_to_free_page() argument
1183 journal_t *journal = EXT4_SB(sb)->s_journal; in bdev_try_to_free_page()
1305 static int ext4_write_info(struct super_block *sb, int type);
1306 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1308 static int ext4_quota_on_mount(struct super_block *sb, int type);
1309 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1311 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1313 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
1315 static int ext4_enable_quotas(struct super_block *sb);
1316 static int ext4_get_next_id(struct super_block *sb, struct kqid *qid);
1520 static int set_qf_name(struct super_block *sb, int qtype, substring_t *args) in set_qf_name() argument
1522 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_qf_name()
1523 char *qname, *old_qname = get_qf_name(sb, sbi, qtype); in set_qf_name()
1526 if (sb_any_quota_loaded(sb) && !old_qname) { in set_qf_name()
1527 ext4_msg(sb, KERN_ERR, in set_qf_name()
1532 if (ext4_has_feature_quota(sb)) { in set_qf_name()
1533 ext4_msg(sb, KERN_INFO, "Journaled quota options " in set_qf_name()
1539 ext4_msg(sb, KERN_ERR, in set_qf_name()
1547 ext4_msg(sb, KERN_ERR, in set_qf_name()
1553 ext4_msg(sb, KERN_ERR, in set_qf_name()
1558 set_opt(sb, QUOTA); in set_qf_name()
1565 static int clear_qf_name(struct super_block *sb, int qtype) in clear_qf_name() argument
1568 struct ext4_sb_info *sbi = EXT4_SB(sb); in clear_qf_name()
1569 char *old_qname = get_qf_name(sb, sbi, qtype); in clear_qf_name()
1571 if (sb_any_quota_loaded(sb) && old_qname) { in clear_qf_name()
1572 ext4_msg(sb, KERN_ERR, "Cannot change journaled quota options" in clear_qf_name()
1694 static int handle_mount_opt(struct super_block *sb, char *opt, int token, in handle_mount_opt() argument
1698 struct ext4_sb_info *sbi = EXT4_SB(sb); in handle_mount_opt()
1706 return set_qf_name(sb, USRQUOTA, &args[0]); in handle_mount_opt()
1708 return set_qf_name(sb, GRPQUOTA, &args[0]); in handle_mount_opt()
1710 return clear_qf_name(sb, USRQUOTA); in handle_mount_opt()
1712 return clear_qf_name(sb, GRPQUOTA); in handle_mount_opt()
1717 ext4_msg(sb, KERN_WARNING, deprecated_msg, opt, "3.5"); in handle_mount_opt()
1722 ext4_msg(sb, KERN_WARNING, "Ignoring removed %s option", opt); in handle_mount_opt()
1728 sb->s_flags |= SB_I_VERSION; in handle_mount_opt()
1731 sb->s_flags |= MS_LAZYTIME; in handle_mount_opt()
1734 sb->s_flags &= ~MS_LAZYTIME; in handle_mount_opt()
1743 ext4_msg(sb, KERN_ERR, "Unrecognized mount option \"%s\" " in handle_mount_opt()
1748 if ((m->flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) { in handle_mount_opt()
1749 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1753 if ((m->flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) { in handle_mount_opt()
1754 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1765 set_opt2(sb, EXPLICIT_DELALLOC); in handle_mount_opt()
1767 set_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM); in handle_mount_opt()
1772 clear_opt(sb, ERRORS_MASK); in handle_mount_opt()
1773 if (token == Opt_noquota && sb_any_quota_loaded(sb)) { in handle_mount_opt()
1774 ext4_msg(sb, KERN_ERR, "Cannot change quota " in handle_mount_opt()
1780 ext4_msg(sb, KERN_ERR, "%s option not supported", opt); in handle_mount_opt()
1789 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1800 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1807 set_opt(sb, INIT_INODE_TABLE); in handle_mount_opt()
1818 ext4_msg(sb, KERN_ERR, "Invalid uid value %d", arg); in handle_mount_opt()
1825 ext4_msg(sb, KERN_ERR, "Invalid gid value %d", arg); in handle_mount_opt()
1831 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1843 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1849 ext4_msg(sb, KERN_ERR, "error: could not dup " in handle_mount_opt()
1856 ext4_msg(sb, KERN_ERR, "error: could not find " in handle_mount_opt()
1864 ext4_msg(sb, KERN_ERR, "error: journal path %s " in handle_mount_opt()
1876 ext4_msg(sb, KERN_ERR, "Invalid journal IO priority" in handle_mount_opt()
1885 ext4_msg(sb, KERN_WARNING, in handle_mount_opt()
1888 ext4_msg(sb, KERN_WARNING, in handle_mount_opt()
1894 …ext4_msg(sb, KERN_WARNING, "Remounting file system with no journal so ignoring journalled data opt… in handle_mount_opt()
1895 else if (test_opt(sb, DATA_FLAGS) != m->mount_opt) { in handle_mount_opt()
1896 ext4_msg(sb, KERN_ERR, in handle_mount_opt()
1901 clear_opt(sb, DATA_FLAGS); in handle_mount_opt()
1906 if (sb_any_quota_loaded(sb) && in handle_mount_opt()
1908 ext4_msg(sb, KERN_ERR, "Cannot change journaled " in handle_mount_opt()
1912 if (ext4_has_feature_quota(sb)) { in handle_mount_opt()
1913 ext4_msg(sb, KERN_INFO, in handle_mount_opt()
1922 ext4_msg(sb, KERN_WARNING, in handle_mount_opt()
1926 ext4_msg(sb, KERN_INFO, "dax option not supported"); in handle_mount_opt()
1939 ext4_msg(sb, KERN_WARNING, in handle_mount_opt()
1952 static int parse_options(char *options, struct super_block *sb, in parse_options() argument
1957 struct ext4_sb_info *sbi = EXT4_SB(sb); in parse_options()
1974 if (handle_mount_opt(sb, p, token, args, journal_devnum, in parse_options()
1984 if (test_opt(sb, PRJQUOTA) && !ext4_has_feature_project(sb)) { in parse_options()
1985 ext4_msg(sb, KERN_ERR, "Project quota feature not enabled. " in parse_options()
1989 usr_qf_name = get_qf_name(sb, sbi, USRQUOTA); in parse_options()
1990 grp_qf_name = get_qf_name(sb, sbi, GRPQUOTA); in parse_options()
1992 if (test_opt(sb, USRQUOTA) && usr_qf_name) in parse_options()
1993 clear_opt(sb, USRQUOTA); in parse_options()
1995 if (test_opt(sb, GRPQUOTA) && grp_qf_name) in parse_options()
1996 clear_opt(sb, GRPQUOTA); in parse_options()
1998 if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) { in parse_options()
1999 ext4_msg(sb, KERN_ERR, "old and new quota " in parse_options()
2005 ext4_msg(sb, KERN_ERR, "journaled quota format " in parse_options()
2011 if (test_opt(sb, DIOREAD_NOLOCK)) { in parse_options()
2016 ext4_msg(sb, KERN_ERR, "can't mount with " in parse_options()
2025 struct super_block *sb) in ext4_show_quota_options() argument
2028 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_show_quota_options()
2074 static int _ext4_show_options(struct seq_file *seq, struct super_block *sb, in _ext4_show_options() argument
2077 struct ext4_sb_info *sbi = EXT4_SB(sb); in _ext4_show_options()
2112 if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO) in _ext4_show_options()
2114 if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE) in _ext4_show_options()
2116 if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC) in _ext4_show_options()
2124 if (sb->s_flags & SB_I_VERSION) in _ext4_show_options()
2129 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in _ext4_show_options()
2131 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in _ext4_show_options()
2133 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) in _ext4_show_options()
2141 if (nodefs || (test_opt(sb, INIT_INODE_TABLE) && in _ext4_show_options()
2146 if (test_opt(sb, DATA_ERR_ABORT)) in _ext4_show_options()
2151 ext4_show_quota_options(seq, sb); in _ext4_show_options()
2162 struct super_block *sb = seq->private; in ext4_seq_options_show() local
2165 seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw"); in ext4_seq_options_show()
2166 rc = _ext4_show_options(seq, sb, 1); in ext4_seq_options_show()
2171 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, in ext4_setup_super() argument
2174 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_setup_super()
2178 ext4_msg(sb, KERN_ERR, "revision level too high, " in ext4_setup_super()
2185 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, " in ext4_setup_super()
2188 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
2194 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
2200 ext4_msg(sb, KERN_WARNING, in ext4_setup_super()
2209 ext4_update_dynamic_rev(sb); in ext4_setup_super()
2211 ext4_set_feature_journal_needs_recovery(sb); in ext4_setup_super()
2213 ext4_commit_super(sb, 1); in ext4_setup_super()
2215 if (test_opt(sb, DEBUG)) in ext4_setup_super()
2218 sb->s_blocksize, in ext4_setup_super()
2220 EXT4_BLOCKS_PER_GROUP(sb), in ext4_setup_super()
2221 EXT4_INODES_PER_GROUP(sb), in ext4_setup_super()
2224 cleancache_init_fs(sb); in ext4_setup_super()
2228 int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup) in ext4_alloc_flex_bg_array() argument
2230 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_alloc_flex_bg_array()
2244 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
2256 ext4_msg(sb, KERN_ERR, in ext4_alloc_flex_bg_array()
2275 static int ext4_fill_flex_info(struct super_block *sb) in ext4_fill_flex_info() argument
2277 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_fill_flex_info()
2289 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
2294 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_fill_flex_info()
2298 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes); in ext4_fill_flex_info()
2299 atomic64_add(ext4_free_group_clusters(sb, gdp), in ext4_fill_flex_info()
2301 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs); in ext4_fill_flex_info()
2309 static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum() argument
2315 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_group_desc_csum()
2337 if (!ext4_has_feature_gdt_csum(sb)) in ext4_group_desc_csum()
2345 if (ext4_has_feature_64bit(sb) && in ext4_group_desc_csum()
2355 int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_verify() argument
2358 if (ext4_has_group_desc_csum(sb) && in ext4_group_desc_csum_verify()
2359 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp))) in ext4_group_desc_csum_verify()
2365 void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group, in ext4_group_desc_csum_set() argument
2368 if (!ext4_has_group_desc_csum(sb)) in ext4_group_desc_csum_set()
2370 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp); in ext4_group_desc_csum_set()
2374 static int ext4_check_descriptors(struct super_block *sb, in ext4_check_descriptors() argument
2378 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_check_descriptors()
2381 ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0); in ext4_check_descriptors()
2388 if (ext4_has_feature_flex_bg(sb)) in ext4_check_descriptors()
2394 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_check_descriptors()
2400 (EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_descriptors()
2406 block_bitmap = ext4_block_bitmap(sb, gdp); in ext4_check_descriptors()
2408 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2411 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2416 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2419 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2423 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2428 inode_bitmap = ext4_inode_bitmap(sb, gdp); in ext4_check_descriptors()
2430 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2433 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2438 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2441 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2445 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2450 inode_table = ext4_inode_table(sb, gdp); in ext4_check_descriptors()
2452 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2455 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2460 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2463 if (!sb_rdonly(sb)) in ext4_check_descriptors()
2468 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2473 ext4_lock_group(sb, i); in ext4_check_descriptors()
2474 if (!ext4_group_desc_csum_verify(sb, i, gdp)) { in ext4_check_descriptors()
2475 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " in ext4_check_descriptors()
2477 i, le16_to_cpu(ext4_group_desc_csum(sb, i, in ext4_check_descriptors()
2479 if (!sb_rdonly(sb)) { in ext4_check_descriptors()
2480 ext4_unlock_group(sb, i); in ext4_check_descriptors()
2484 ext4_unlock_group(sb, i); in ext4_check_descriptors()
2486 first_block += EXT4_BLOCKS_PER_GROUP(sb); in ext4_check_descriptors()
2510 static void ext4_orphan_cleanup(struct super_block *sb, in ext4_orphan_cleanup() argument
2513 unsigned int s_flags = sb->s_flags; in ext4_orphan_cleanup()
2524 if (bdev_read_only(sb->s_bdev)) { in ext4_orphan_cleanup()
2525 ext4_msg(sb, KERN_ERR, "write access " in ext4_orphan_cleanup()
2531 if (!ext4_feature_set_ok(sb, 0)) { in ext4_orphan_cleanup()
2532 ext4_msg(sb, KERN_INFO, "Skipping orphan cleanup due to " in ext4_orphan_cleanup()
2537 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { in ext4_orphan_cleanup()
2540 ext4_msg(sb, KERN_INFO, "Errors on filesystem, " in ext4_orphan_cleanup()
2549 ext4_msg(sb, KERN_INFO, "orphan cleanup on readonly fs"); in ext4_orphan_cleanup()
2550 sb->s_flags &= ~MS_RDONLY; in ext4_orphan_cleanup()
2554 sb->s_flags |= MS_ACTIVE; in ext4_orphan_cleanup()
2560 if (ext4_has_feature_quota(sb) && (s_flags & MS_RDONLY)) { in ext4_orphan_cleanup()
2561 int ret = ext4_enable_quotas(sb); in ext4_orphan_cleanup()
2566 ext4_msg(sb, KERN_ERR, in ext4_orphan_cleanup()
2572 if (EXT4_SB(sb)->s_qf_names[i]) { in ext4_orphan_cleanup()
2573 int ret = ext4_quota_on_mount(sb, i); in ext4_orphan_cleanup()
2578 ext4_msg(sb, KERN_ERR, in ext4_orphan_cleanup()
2592 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { in ext4_orphan_cleanup()
2598 inode = ext4_orphan_get(sb, le32_to_cpu(es->s_last_orphan)); in ext4_orphan_cleanup()
2604 list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan); in ext4_orphan_cleanup()
2607 if (test_opt(sb, DEBUG)) in ext4_orphan_cleanup()
2608 ext4_msg(sb, KERN_DEBUG, in ext4_orphan_cleanup()
2621 if (test_opt(sb, DEBUG)) in ext4_orphan_cleanup()
2622 ext4_msg(sb, KERN_DEBUG, in ext4_orphan_cleanup()
2635 ext4_msg(sb, KERN_INFO, "%d orphan inode%s deleted", in ext4_orphan_cleanup()
2638 ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up", in ext4_orphan_cleanup()
2644 if (sb_dqopt(sb)->files[i]) in ext4_orphan_cleanup()
2645 dquot_quota_off(sb, i); in ext4_orphan_cleanup()
2649 sb->s_flags = s_flags; /* Restore MS_RDONLY status */ in ext4_orphan_cleanup()
2764 static ext4_fsblk_t descriptor_loc(struct super_block *sb, in descriptor_loc() argument
2767 struct ext4_sb_info *sbi = EXT4_SB(sb); in descriptor_loc()
2773 if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg) in descriptor_loc()
2776 if (ext4_bg_has_super(sb, bg)) in descriptor_loc()
2785 if (sb->s_blocksize == 1024 && nr == 0 && in descriptor_loc()
2786 le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block) == 0) in descriptor_loc()
2789 return (has_super + ext4_group_first_block_no(sb, bg)); in descriptor_loc()
2835 static int ext4_feature_set_ok(struct super_block *sb, int readonly) in ext4_feature_set_ok() argument
2837 if (ext4_has_unknown_ext4_incompat_features(sb)) { in ext4_feature_set_ok()
2838 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
2841 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) & in ext4_feature_set_ok()
2849 if (ext4_has_feature_readonly(sb)) { in ext4_feature_set_ok()
2850 ext4_msg(sb, KERN_INFO, "filesystem is read-only"); in ext4_feature_set_ok()
2851 sb->s_flags |= MS_RDONLY; in ext4_feature_set_ok()
2856 if (ext4_has_unknown_ext4_ro_compat_features(sb)) { in ext4_feature_set_ok()
2857 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of " in ext4_feature_set_ok()
2859 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) & in ext4_feature_set_ok()
2867 if (ext4_has_feature_huge_file(sb)) { in ext4_feature_set_ok()
2869 ext4_msg(sb, KERN_ERR, "Filesystem with huge files " in ext4_feature_set_ok()
2875 if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) { in ext4_feature_set_ok()
2876 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
2883 if (!readonly && (ext4_has_feature_quota(sb) || in ext4_feature_set_ok()
2884 ext4_has_feature_project(sb))) { in ext4_feature_set_ok()
2885 ext4_msg(sb, KERN_ERR, in ext4_feature_set_ok()
2899 struct super_block *sb = (struct super_block *) arg; in print_daily_error_info() local
2903 sbi = EXT4_SB(sb); in print_daily_error_info()
2908 ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u", in print_daily_error_info()
2912 sb->s_id, le32_to_cpu(es->s_first_error_time), in print_daily_error_info()
2926 sb->s_id, le32_to_cpu(es->s_last_error_time), in print_daily_error_info()
2946 struct super_block *sb; in ext4_run_li_request() local
2950 sb = elr->lr_super; in ext4_run_li_request()
2951 ngroups = EXT4_SB(sb)->s_groups_count; in ext4_run_li_request()
2954 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_run_li_request()
2969 ret = ext4_init_inode_table(sb, group, in ext4_run_li_request()
3000 static void ext4_unregister_li_request(struct super_block *sb) in ext4_unregister_li_request() argument
3009 ext4_remove_li_request(EXT4_SB(sb)->s_li_request); in ext4_unregister_li_request()
3164 static ext4_group_t ext4_has_uninit_itable(struct super_block *sb) in ext4_has_uninit_itable() argument
3166 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count; in ext4_has_uninit_itable()
3169 if (!ext4_has_group_desc_csum(sb)) in ext4_has_uninit_itable()
3173 gdp = ext4_get_group_desc(sb, group, NULL); in ext4_has_uninit_itable()
3202 static struct ext4_li_request *ext4_li_request_new(struct super_block *sb, in ext4_li_request_new() argument
3205 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_li_request_new()
3212 elr->lr_super = sb; in ext4_li_request_new()
3226 int ext4_register_li_request(struct super_block *sb, in ext4_register_li_request() argument
3229 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_register_li_request()
3231 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; in ext4_register_li_request()
3244 if (first_not_zeroed == ngroups || sb_rdonly(sb) || in ext4_register_li_request()
3245 !test_opt(sb, INIT_INODE_TABLE)) in ext4_register_li_request()
3248 elr = ext4_li_request_new(sb, first_not_zeroed); in ext4_register_li_request()
3300 static int set_journal_csum_feature_set(struct super_block *sb) in set_journal_csum_feature_set() argument
3304 struct ext4_sb_info *sbi = EXT4_SB(sb); in set_journal_csum_feature_set()
3306 if (ext4_has_metadata_csum(sb)) { in set_journal_csum_feature_set()
3320 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in set_journal_csum_feature_set()
3325 } else if (test_opt(sb, JOURNAL_CHECKSUM)) { in set_journal_csum_feature_set()
3354 static int count_overhead(struct super_block *sb, ext4_group_t grp, in count_overhead() argument
3357 struct ext4_sb_info *sbi = EXT4_SB(sb); in count_overhead()
3360 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in count_overhead()
3363 if (!ext4_has_feature_bigalloc(sb)) in count_overhead()
3364 return (ext4_bg_has_super(sb, grp) + ext4_bg_num_gdb(sb, grp) + in count_overhead()
3368 (grp * EXT4_BLOCKS_PER_GROUP(sb)); in count_overhead()
3369 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1; in count_overhead()
3371 gdp = ext4_get_group_desc(sb, i, NULL); in count_overhead()
3372 b = ext4_block_bitmap(sb, gdp); in count_overhead()
3377 b = ext4_inode_bitmap(sb, gdp); in count_overhead()
3382 b = ext4_inode_table(sb, gdp); in count_overhead()
3392 if (ext4_bg_has_super(sb, grp)) { in count_overhead()
3396 j = ext4_bg_num_gdb(sb, grp); in count_overhead()
3397 if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) { in count_overhead()
3398 ext4_error(sb, "Invalid number of block group " in count_overhead()
3400 j = EXT4_BLOCKS_PER_GROUP(sb) - s; in count_overhead()
3408 return EXT4_CLUSTERS_PER_GROUP(sb) - in count_overhead()
3409 ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8); in count_overhead()
3415 int ext4_calculate_overhead(struct super_block *sb) in ext4_calculate_overhead() argument
3417 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_calculate_overhead()
3421 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_calculate_overhead()
3445 blks = count_overhead(sb, i, buf); in ext4_calculate_overhead()
3458 else if (ext4_has_feature_journal(sb) && !sbi->s_journal) { in ext4_calculate_overhead()
3459 j_inode = ext4_get_journal_inode(sb, j_inum); in ext4_calculate_overhead()
3461 j_blocks = j_inode->i_size >> sb->s_blocksize_bits; in ext4_calculate_overhead()
3465 ext4_msg(sb, KERN_ERR, "can't get journal size"); in ext4_calculate_overhead()
3474 static void ext4_set_resv_clusters(struct super_block *sb) in ext4_set_resv_clusters() argument
3477 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_set_resv_clusters()
3485 if (!ext4_has_feature_extents(sb)) in ext4_set_resv_clusters()
3504 static int ext4_fill_super(struct super_block *sb, void *data, int silent) in ext4_fill_super() argument
3506 struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev); in ext4_fill_super()
3539 sb->s_fs_info = sbi; in ext4_fill_super()
3540 sbi->s_sb = sb; in ext4_fill_super()
3543 if (sb->s_bdev->bd_part) in ext4_fill_super()
3545 part_stat_read(sb->s_bdev->bd_part, sectors[1]); in ext4_fill_super()
3548 strreplace(sb->s_id, '/', '!'); in ext4_fill_super()
3552 blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE); in ext4_fill_super()
3554 ext4_msg(sb, KERN_ERR, "unable to set blocksize"); in ext4_fill_super()
3569 if (!(bh = sb_bread_unmovable(sb, logical_sb_block))) { in ext4_fill_super()
3570 ext4_msg(sb, KERN_ERR, "unable to read superblock"); in ext4_fill_super()
3579 sb->s_magic = le16_to_cpu(es->s_magic); in ext4_fill_super()
3580 if (sb->s_magic != EXT4_SUPER_MAGIC) in ext4_fill_super()
3585 if (ext4_has_feature_metadata_csum(sb) && in ext4_fill_super()
3586 ext4_has_feature_gdt_csum(sb)) in ext4_fill_super()
3587 ext4_warning(sb, "metadata_csum and uninit_bg are " in ext4_fill_super()
3591 if (!ext4_verify_csum_type(sb, es)) { in ext4_fill_super()
3592 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_fill_super()
3601 ext4_msg(sb, KERN_ERR, "Cannot load crc32c driver."); in ext4_fill_super()
3608 if (!ext4_superblock_csum_verify(sb, es)) { in ext4_fill_super()
3609 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with " in ext4_fill_super()
3617 if (ext4_has_feature_csum_seed(sb)) in ext4_fill_super()
3619 else if (ext4_has_metadata_csum(sb) || ext4_has_feature_ea_inode(sb)) in ext4_fill_super()
3625 set_opt(sb, INIT_INODE_TABLE); in ext4_fill_super()
3627 set_opt(sb, DEBUG); in ext4_fill_super()
3629 set_opt(sb, GRPID); in ext4_fill_super()
3631 set_opt(sb, NO_UID32); in ext4_fill_super()
3633 set_opt(sb, XATTR_USER); in ext4_fill_super()
3635 set_opt(sb, POSIX_ACL); in ext4_fill_super()
3638 if (ext4_has_metadata_csum(sb)) in ext4_fill_super()
3639 set_opt(sb, JOURNAL_CHECKSUM); in ext4_fill_super()
3642 set_opt(sb, JOURNAL_DATA); in ext4_fill_super()
3644 set_opt(sb, ORDERED_DATA); in ext4_fill_super()
3646 set_opt(sb, WRITEBACK_DATA); in ext4_fill_super()
3649 set_opt(sb, ERRORS_PANIC); in ext4_fill_super()
3651 set_opt(sb, ERRORS_CONT); in ext4_fill_super()
3653 set_opt(sb, ERRORS_RO); in ext4_fill_super()
3655 set_opt(sb, BLOCK_VALIDITY); in ext4_fill_super()
3657 set_opt(sb, DISCARD); in ext4_fill_super()
3666 set_opt(sb, BARRIER); in ext4_fill_super()
3672 if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) && in ext4_fill_super()
3674 set_opt(sb, DELALLOC); in ext4_fill_super()
3685 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3698 ext4_msg(sb, KERN_ERR, "invalid first ino: %u", in ext4_fill_super()
3705 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3708 ext4_msg(sb, KERN_ERR, "blocksize: %d", blocksize); in ext4_fill_super()
3719 sb->s_time_gran = 1; in ext4_fill_super()
3721 sb->s_time_gran = NSEC_PER_SEC; in ext4_fill_super()
3727 if (ext4_has_feature_extra_isize(sb)) { in ext4_fill_super()
3733 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3742 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3757 if (!parse_options(s_mount_opts, sb, &journal_devnum, in ext4_fill_super()
3759 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
3766 if (!parse_options((char *) data, sb, &journal_devnum, in ext4_fill_super()
3770 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in ext4_fill_super()
3774 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in ext4_fill_super()
3775 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
3779 if (test_opt(sb, DIOREAD_NOLOCK)) { in ext4_fill_super()
3780 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
3784 if (test_opt(sb, DAX)) { in ext4_fill_super()
3785 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
3789 if (ext4_has_feature_encrypt(sb)) { in ext4_fill_super()
3790 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
3794 if (test_opt(sb, DELALLOC)) in ext4_fill_super()
3795 clear_opt(sb, DELALLOC); in ext4_fill_super()
3797 sb->s_iflags |= SB_I_CGROUPWB; in ext4_fill_super()
3800 sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | in ext4_fill_super()
3801 (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0); in ext4_fill_super()
3804 (ext4_has_compat_features(sb) || in ext4_fill_super()
3805 ext4_has_ro_compat_features(sb) || in ext4_fill_super()
3806 ext4_has_incompat_features(sb))) in ext4_fill_super()
3807 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
3812 set_opt2(sb, HURD_COMPAT); in ext4_fill_super()
3813 if (ext4_has_feature_64bit(sb)) { in ext4_fill_super()
3814 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3823 if (ext4_has_feature_ea_inode(sb)) { in ext4_fill_super()
3824 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3830 if (IS_EXT2_SB(sb)) { in ext4_fill_super()
3831 if (ext2_feature_set_ok(sb)) in ext4_fill_super()
3832 ext4_msg(sb, KERN_INFO, "mounting ext2 file system " in ext4_fill_super()
3839 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_fill_super()
3841 ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due " in ext4_fill_super()
3847 if (IS_EXT3_SB(sb)) { in ext4_fill_super()
3848 if (ext3_feature_set_ok(sb)) in ext4_fill_super()
3849 ext4_msg(sb, KERN_INFO, "mounting ext3 file system " in ext4_fill_super()
3856 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb))) in ext4_fill_super()
3858 ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due " in ext4_fill_super()
3869 if (!ext4_feature_set_ok(sb, (sb_rdonly(sb)))) in ext4_fill_super()
3874 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3881 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3888 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3895 if (ext4_has_feature_inline_data(sb)) { in ext4_fill_super()
3896 ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem" in ext4_fill_super()
3900 if (!bdev_dax_supported(sb->s_bdev, blocksize)) in ext4_fill_super()
3904 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { in ext4_fill_super()
3905 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d", in ext4_fill_super()
3910 if (sb->s_blocksize != blocksize) { in ext4_fill_super()
3912 if (!sb_set_blocksize(sb, blocksize)) { in ext4_fill_super()
3913 ext4_msg(sb, KERN_ERR, "bad block size %d", in ext4_fill_super()
3921 bh = sb_bread_unmovable(sb, logical_sb_block); in ext4_fill_super()
3923 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3930 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3936 has_huge_files = ext4_has_feature_huge_file(sb); in ext4_fill_super()
3937 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_fill_super()
3939 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files); in ext4_fill_super()
3942 if (ext4_has_feature_64bit(sb)) { in ext4_fill_super()
3946 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
3957 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb); in ext4_fill_super()
3962 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n", in ext4_fill_super()
3968 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb); in ext4_fill_super()
3971 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_fill_super()
3972 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_fill_super()
3977 if (ext4_has_feature_dir_index(sb)) { in ext4_fill_super()
3983 if (!sb_rdonly(sb)) in ext4_fill_super()
3988 if (!sb_rdonly(sb)) in ext4_fill_super()
3997 has_bigalloc = ext4_has_feature_bigalloc(sb); in ext4_fill_super()
4000 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4010 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4017 ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and " in ext4_fill_super()
4025 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4031 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4043 set_opt2(sb, STD_GROUP_SIZE); in ext4_fill_super()
4049 err = generic_check_addressable(sb->s_blocksize_bits, in ext4_fill_super()
4052 ext4_msg(sb, KERN_ERR, "filesystem" in ext4_fill_super()
4055 ext4_msg(sb, KERN_WARNING, "CONFIG_LBDAF not enabled"); in ext4_fill_super()
4059 if (EXT4_BLOCKS_PER_GROUP(sb) == 0) in ext4_fill_super()
4063 blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits; in ext4_fill_super()
4065 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu " in ext4_fill_super()
4076 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_fill_super()
4084 ext4_msg(sb, KERN_WARNING, "bad geometry: first data " in ext4_fill_super()
4091 EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_fill_super()
4092 do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb)); in ext4_fill_super()
4093 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) { in ext4_fill_super()
4094 ext4_msg(sb, KERN_WARNING, "groups count too large: %u " in ext4_fill_super()
4099 EXT4_BLOCKS_PER_GROUP(sb)); in ext4_fill_super()
4104 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); in ext4_fill_super()
4107 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu", in ext4_fill_super()
4113 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_fill_super()
4114 EXT4_DESC_PER_BLOCK(sb); in ext4_fill_super()
4115 if (ext4_has_feature_meta_bg(sb)) { in ext4_fill_super()
4117 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
4129 ext4_msg(sb, KERN_ERR, "not enough memory"); in ext4_fill_super()
4138 block = descriptor_loc(sb, logical_sb_block, i); in ext4_fill_super()
4139 sb_breadahead(sb, block); in ext4_fill_super()
4145 block = descriptor_loc(sb, logical_sb_block, i); in ext4_fill_super()
4146 bh = sb_bread_unmovable(sb, block); in ext4_fill_super()
4148 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4158 if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) { in ext4_fill_super()
4159 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!"); in ext4_fill_super()
4168 (unsigned long) sb); in ext4_fill_super()
4180 sb->s_op = &ext4_sops; in ext4_fill_super()
4181 sb->s_export_op = &ext4_export_ops; in ext4_fill_super()
4182 sb->s_xattr = ext4_xattr_handlers; in ext4_fill_super()
4184 sb->s_cop = &ext4_cryptops; in ext4_fill_super()
4187 sb->dq_op = &ext4_quota_operations; in ext4_fill_super()
4188 if (ext4_has_feature_quota(sb)) in ext4_fill_super()
4189 sb->s_qcop = &dquot_quotactl_sysfile_ops; in ext4_fill_super()
4191 sb->s_qcop = &ext4_qctl_operations; in ext4_fill_super()
4192 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; in ext4_fill_super()
4194 memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid)); in ext4_fill_super()
4199 sb->s_root = NULL; in ext4_fill_super()
4202 ext4_has_feature_journal_needs_recovery(sb)); in ext4_fill_super()
4204 if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb)) in ext4_fill_super()
4205 if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block))) in ext4_fill_super()
4212 if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) { in ext4_fill_super()
4213 err = ext4_load_journal(sb, es, journal_devnum); in ext4_fill_super()
4216 } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) && in ext4_fill_super()
4217 ext4_has_feature_journal_needs_recovery(sb)) { in ext4_fill_super()
4218 ext4_msg(sb, KERN_ERR, "required journal recovery " in ext4_fill_super()
4223 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) { in ext4_fill_super()
4224 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4228 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_fill_super()
4229 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4234 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4241 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4246 clear_opt(sb, JOURNAL_CHECKSUM); in ext4_fill_super()
4247 clear_opt(sb, DATA_FLAGS); in ext4_fill_super()
4253 if (ext4_has_feature_64bit(sb) && in ext4_fill_super()
4254 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_fill_super()
4256 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature"); in ext4_fill_super()
4260 if (!set_journal_csum_feature_set(sb)) { in ext4_fill_super()
4261 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum " in ext4_fill_super()
4268 switch (test_opt(sb, DATA_FLAGS)) { in ext4_fill_super()
4276 set_opt(sb, ORDERED_DATA); in ext4_fill_super()
4278 set_opt(sb, JOURNAL_DATA); in ext4_fill_super()
4285 ext4_msg(sb, KERN_ERR, "Journal does not support " in ext4_fill_super()
4293 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA && in ext4_fill_super()
4294 test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_fill_super()
4295 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_fill_super()
4305 if (!test_opt(sb, NO_MBCACHE)) { in ext4_fill_super()
4308 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4313 if (ext4_has_feature_ea_inode(sb)) { in ext4_fill_super()
4316 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4323 if ((DUMMY_ENCRYPTION_ENABLED(sbi) || ext4_has_feature_encrypt(sb)) && in ext4_fill_super()
4325 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4330 if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) && in ext4_fill_super()
4331 !ext4_has_feature_encrypt(sb)) { in ext4_fill_super()
4332 ext4_set_feature_encrypt(sb); in ext4_fill_super()
4333 ext4_commit_super(sb, 1); in ext4_fill_super()
4343 err = ext4_calculate_overhead(sb); in ext4_fill_super()
4352 EXT4_SB(sb)->rsv_conversion_wq = in ext4_fill_super()
4354 if (!EXT4_SB(sb)->rsv_conversion_wq) { in ext4_fill_super()
4365 root = ext4_iget(sb, EXT4_ROOT_INO); in ext4_fill_super()
4367 ext4_msg(sb, KERN_ERR, "get root inode failed"); in ext4_fill_super()
4373 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck"); in ext4_fill_super()
4377 sb->s_root = d_make_root(root); in ext4_fill_super()
4378 if (!sb->s_root) { in ext4_fill_super()
4379 ext4_msg(sb, KERN_ERR, "get root dentry failed"); in ext4_fill_super()
4384 if (ext4_setup_super(sb, es, sb_rdonly(sb))) in ext4_fill_super()
4385 sb->s_flags |= MS_RDONLY; in ext4_fill_super()
4387 ext4_set_resv_clusters(sb); in ext4_fill_super()
4389 err = ext4_setup_system_zone(sb); in ext4_fill_super()
4391 ext4_msg(sb, KERN_ERR, "failed to initialize system " in ext4_fill_super()
4396 ext4_ext_init(sb); in ext4_fill_super()
4397 err = ext4_mb_init(sb); in ext4_fill_super()
4399 ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)", in ext4_fill_super()
4404 block = ext4_count_free_clusters(sb); in ext4_fill_super()
4407 ext4_superblock_csum_set(sb); in ext4_fill_super()
4411 unsigned long freei = ext4_count_free_inodes(sb); in ext4_fill_super()
4413 ext4_superblock_csum_set(sb); in ext4_fill_super()
4419 ext4_count_dirs(sb), GFP_KERNEL); in ext4_fill_super()
4427 ext4_msg(sb, KERN_ERR, "insufficient memory"); in ext4_fill_super()
4431 if (ext4_has_feature_flex_bg(sb)) in ext4_fill_super()
4432 if (!ext4_fill_flex_info(sb)) { in ext4_fill_super()
4433 ext4_msg(sb, KERN_ERR, in ext4_fill_super()
4439 err = ext4_register_li_request(sb, first_not_zeroed); in ext4_fill_super()
4443 err = ext4_register_sysfs(sb); in ext4_fill_super()
4449 if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) { in ext4_fill_super()
4450 err = ext4_enable_quotas(sb); in ext4_fill_super()
4456 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS; in ext4_fill_super()
4457 ext4_orphan_cleanup(sb, es); in ext4_fill_super()
4458 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS; in ext4_fill_super()
4460 ext4_msg(sb, KERN_INFO, "recovery complete"); in ext4_fill_super()
4461 ext4_mark_recovery_complete(sb, es); in ext4_fill_super()
4463 if (EXT4_SB(sb)->s_journal) { in ext4_fill_super()
4464 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) in ext4_fill_super()
4466 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) in ext4_fill_super()
4473 if (test_opt(sb, DISCARD)) { in ext4_fill_super()
4474 struct request_queue *q = bdev_get_queue(sb->s_bdev); in ext4_fill_super()
4476 ext4_msg(sb, KERN_WARNING, in ext4_fill_super()
4482 ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. " in ext4_fill_super()
4501 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); in ext4_fill_super()
4506 ext4_unregister_sysfs(sb); in ext4_fill_super()
4509 ext4_unregister_li_request(sb); in ext4_fill_super()
4511 ext4_mb_release(sb); in ext4_fill_super()
4526 ext4_ext_release(sb); in ext4_fill_super()
4527 ext4_release_system_zone(sb); in ext4_fill_super()
4529 dput(sb->s_root); in ext4_fill_super()
4530 sb->s_root = NULL; in ext4_fill_super()
4532 ext4_msg(sb, KERN_ERR, "mount failed"); in ext4_fill_super()
4533 if (EXT4_SB(sb)->rsv_conversion_wq) in ext4_fill_super()
4534 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq); in ext4_fill_super()
4571 sb->s_fs_info = NULL; in ext4_fill_super()
4585 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal) in ext4_init_journal_params() argument
4587 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_journal_params()
4594 if (test_opt(sb, BARRIER)) in ext4_init_journal_params()
4598 if (test_opt(sb, DATA_ERR_ABORT)) in ext4_init_journal_params()
4605 static struct inode *ext4_get_journal_inode(struct super_block *sb, in ext4_get_journal_inode() argument
4615 journal_inode = ext4_iget(sb, journal_inum); in ext4_get_journal_inode()
4617 ext4_msg(sb, KERN_ERR, "no journal found"); in ext4_get_journal_inode()
4623 ext4_msg(sb, KERN_ERR, "journal inode is deleted"); in ext4_get_journal_inode()
4630 ext4_msg(sb, KERN_ERR, "invalid journal inode"); in ext4_get_journal_inode()
4637 static journal_t *ext4_get_journal(struct super_block *sb, in ext4_get_journal() argument
4643 BUG_ON(!ext4_has_feature_journal(sb)); in ext4_get_journal()
4645 journal_inode = ext4_get_journal_inode(sb, journal_inum); in ext4_get_journal()
4651 ext4_msg(sb, KERN_ERR, "Could not load journal inode"); in ext4_get_journal()
4655 journal->j_private = sb; in ext4_get_journal()
4656 ext4_init_journal_params(sb, journal); in ext4_get_journal()
4660 static journal_t *ext4_get_dev_journal(struct super_block *sb, in ext4_get_dev_journal() argument
4673 BUG_ON(!ext4_has_feature_journal(sb)); in ext4_get_dev_journal()
4675 bdev = ext4_blkdev_get(j_dev, sb); in ext4_get_dev_journal()
4679 blocksize = sb->s_blocksize; in ext4_get_dev_journal()
4682 ext4_msg(sb, KERN_ERR, in ext4_get_dev_journal()
4691 ext4_msg(sb, KERN_ERR, "couldn't read superblock of " in ext4_get_dev_journal()
4700 ext4_msg(sb, KERN_ERR, "external journal has " in ext4_get_dev_journal()
4708 es->s_checksum != ext4_superblock_csum(sb, es)) { in ext4_get_dev_journal()
4709 ext4_msg(sb, KERN_ERR, "external journal has " in ext4_get_dev_journal()
4715 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { in ext4_get_dev_journal()
4716 ext4_msg(sb, KERN_ERR, "journal UUID does not match"); in ext4_get_dev_journal()
4725 journal = jbd2_journal_init_dev(bdev, sb->s_bdev, in ext4_get_dev_journal()
4728 ext4_msg(sb, KERN_ERR, "failed to create device journal"); in ext4_get_dev_journal()
4731 journal->j_private = sb; in ext4_get_dev_journal()
4735 ext4_msg(sb, KERN_ERR, "I/O error on journal device"); in ext4_get_dev_journal()
4739 ext4_msg(sb, KERN_ERR, "External journal has more than one " in ext4_get_dev_journal()
4744 EXT4_SB(sb)->journal_bdev = bdev; in ext4_get_dev_journal()
4745 ext4_init_journal_params(sb, journal); in ext4_get_dev_journal()
4755 static int ext4_load_journal(struct super_block *sb, in ext4_load_journal() argument
4765 BUG_ON(!ext4_has_feature_journal(sb)); in ext4_load_journal()
4769 ext4_msg(sb, KERN_INFO, "external journal device major/minor " in ext4_load_journal()
4775 really_read_only = bdev_read_only(sb->s_bdev); in ext4_load_journal()
4782 if (ext4_has_feature_journal_needs_recovery(sb)) { in ext4_load_journal()
4783 if (sb_rdonly(sb)) { in ext4_load_journal()
4784 ext4_msg(sb, KERN_INFO, "INFO: recovery " in ext4_load_journal()
4787 ext4_msg(sb, KERN_ERR, "write access " in ext4_load_journal()
4791 ext4_msg(sb, KERN_INFO, "write access will " in ext4_load_journal()
4797 ext4_msg(sb, KERN_ERR, "filesystem has both journal " in ext4_load_journal()
4803 if (!(journal = ext4_get_journal(sb, journal_inum))) in ext4_load_journal()
4806 if (!(journal = ext4_get_dev_journal(sb, journal_dev))) in ext4_load_journal()
4811 ext4_msg(sb, KERN_INFO, "barriers disabled"); in ext4_load_journal()
4813 if (!ext4_has_feature_journal_needs_recovery(sb)) in ext4_load_journal()
4828 ext4_msg(sb, KERN_ERR, "error loading journal"); in ext4_load_journal()
4833 EXT4_SB(sb)->s_journal = journal; in ext4_load_journal()
4834 ext4_clear_journal_err(sb, es); in ext4_load_journal()
4841 ext4_commit_super(sb, 1); in ext4_load_journal()
4847 static int ext4_commit_super(struct super_block *sb, int sync) in ext4_commit_super() argument
4849 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_commit_super()
4850 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; in ext4_commit_super()
4853 if (!sbh || block_device_ejected(sb)) in ext4_commit_super()
4873 if (!(sb->s_flags & MS_RDONLY)) in ext4_commit_super()
4875 if (sb->s_bdev->bd_part) in ext4_commit_super()
4877 cpu_to_le64(EXT4_SB(sb)->s_kbytes_written + in ext4_commit_super()
4878 ((part_stat_read(sb->s_bdev->bd_part, sectors[1]) - in ext4_commit_super()
4879 EXT4_SB(sb)->s_sectors_written_start) >> 1)); in ext4_commit_super()
4882 cpu_to_le64(EXT4_SB(sb)->s_kbytes_written); in ext4_commit_super()
4883 if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeclusters_counter)) in ext4_commit_super()
4885 EXT4_C2B(EXT4_SB(sb), percpu_counter_sum_positive( in ext4_commit_super()
4886 &EXT4_SB(sb)->s_freeclusters_counter))); in ext4_commit_super()
4887 if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeinodes_counter)) in ext4_commit_super()
4890 &EXT4_SB(sb)->s_freeinodes_counter)); in ext4_commit_super()
4892 ext4_superblock_csum_set(sb); in ext4_commit_super()
4904 ext4_msg(sb, KERN_ERR, "previous I/O error to " in ext4_commit_super()
4913 REQ_SYNC | (test_opt(sb, BARRIER) ? REQ_FUA : 0)); in ext4_commit_super()
4919 ext4_msg(sb, KERN_ERR, "I/O error while writing " in ext4_commit_super()
4933 static void ext4_mark_recovery_complete(struct super_block *sb, in ext4_mark_recovery_complete() argument
4936 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_mark_recovery_complete()
4938 if (!ext4_has_feature_journal(sb)) { in ext4_mark_recovery_complete()
4946 if (ext4_has_feature_journal_needs_recovery(sb) && sb_rdonly(sb)) { in ext4_mark_recovery_complete()
4947 ext4_clear_feature_journal_needs_recovery(sb); in ext4_mark_recovery_complete()
4948 ext4_commit_super(sb, 1); in ext4_mark_recovery_complete()
4960 static void ext4_clear_journal_err(struct super_block *sb, in ext4_clear_journal_err() argument
4967 BUG_ON(!ext4_has_feature_journal(sb)); in ext4_clear_journal_err()
4969 journal = EXT4_SB(sb)->s_journal; in ext4_clear_journal_err()
4980 errstr = ext4_decode_error(sb, j_errno, nbuf); in ext4_clear_journal_err()
4981 ext4_warning(sb, "Filesystem error recorded " in ext4_clear_journal_err()
4983 ext4_warning(sb, "Marking fs in need of filesystem check."); in ext4_clear_journal_err()
4985 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_clear_journal_err()
4987 ext4_commit_super(sb, 1); in ext4_clear_journal_err()
4998 int ext4_force_commit(struct super_block *sb) in ext4_force_commit() argument
5002 if (sb_rdonly(sb)) in ext4_force_commit()
5005 journal = EXT4_SB(sb)->s_journal; in ext4_force_commit()
5009 static int ext4_sync_fs(struct super_block *sb, int wait) in ext4_sync_fs() argument
5014 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_sync_fs()
5016 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) in ext4_sync_fs()
5019 trace_ext4_sync_fs(sb, wait); in ext4_sync_fs()
5025 dquot_writeback_dquots(sb, -1); in ext4_sync_fs()
5042 } else if (wait && test_opt(sb, BARRIER)) in ext4_sync_fs()
5046 err = blkdev_issue_flush(sb->s_bdev, GFP_KERNEL, NULL); in ext4_sync_fs()
5062 static int ext4_freeze(struct super_block *sb) in ext4_freeze() argument
5067 if (sb_rdonly(sb)) in ext4_freeze()
5070 journal = EXT4_SB(sb)->s_journal; in ext4_freeze()
5085 ext4_clear_feature_journal_needs_recovery(sb); in ext4_freeze()
5088 error = ext4_commit_super(sb, 1); in ext4_freeze()
5100 static int ext4_unfreeze(struct super_block *sb) in ext4_unfreeze() argument
5102 if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb))) in ext4_unfreeze()
5105 if (EXT4_SB(sb)->s_journal) { in ext4_unfreeze()
5107 ext4_set_feature_journal_needs_recovery(sb); in ext4_unfreeze()
5110 ext4_commit_super(sb, 1); in ext4_unfreeze()
5130 static int ext4_remount(struct super_block *sb, int *flags, char *data) in ext4_remount() argument
5133 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_remount()
5147 old_sb_flags = sb->s_flags; in ext4_remount()
5159 char *qf_name = get_qf_name(sb, sbi, i); in ext4_remount()
5174 if (!parse_options(data, sb, NULL, &journal_ioprio, 1)) { in ext4_remount()
5180 test_opt(sb, JOURNAL_CHECKSUM)) { in ext4_remount()
5181 ext4_msg(sb, KERN_ERR, "changing journal_checksum " in ext4_remount()
5186 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { in ext4_remount()
5187 if (test_opt2(sb, EXPLICIT_DELALLOC)) { in ext4_remount()
5188 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5193 if (test_opt(sb, DIOREAD_NOLOCK)) { in ext4_remount()
5194 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5199 if (test_opt(sb, DAX)) { in ext4_remount()
5200 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5205 } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) { in ext4_remount()
5206 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { in ext4_remount()
5207 ext4_msg(sb, KERN_ERR, "can't mount with " in ext4_remount()
5215 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount"); in ext4_remount()
5221 ext4_msg(sb, KERN_WARNING, "warning: refusing change of " in ext4_remount()
5227 ext4_abort(sb, "Abort forced by user"); in ext4_remount()
5229 sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | in ext4_remount()
5230 (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0); in ext4_remount()
5235 ext4_init_journal_params(sb, sbi->s_journal); in ext4_remount()
5240 sb->s_flags |= MS_LAZYTIME; in ext4_remount()
5242 if ((bool)(*flags & MS_RDONLY) != sb_rdonly(sb)) { in ext4_remount()
5249 err = sync_filesystem(sb); in ext4_remount()
5252 err = dquot_suspend(sb, -1); in ext4_remount()
5260 sb->s_flags |= MS_RDONLY; in ext4_remount()
5272 ext4_mark_recovery_complete(sb, es); in ext4_remount()
5277 if (ext4_has_feature_readonly(sb) || in ext4_remount()
5278 !ext4_feature_set_ok(sb, 0)) { in ext4_remount()
5288 ext4_get_group_desc(sb, g, NULL); in ext4_remount()
5290 if (!ext4_group_desc_csum_verify(sb, g, gdp)) { in ext4_remount()
5291 ext4_msg(sb, KERN_ERR, in ext4_remount()
5293 g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)), in ext4_remount()
5306 ext4_msg(sb, KERN_WARNING, "Couldn't " in ext4_remount()
5321 ext4_clear_journal_err(sb, es); in ext4_remount()
5323 if (!ext4_setup_super(sb, es, 0)) in ext4_remount()
5324 sb->s_flags &= ~MS_RDONLY; in ext4_remount()
5325 if (ext4_has_feature_mmp(sb)) in ext4_remount()
5326 if (ext4_multi_mount_protect(sb, in ext4_remount()
5339 if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE)) in ext4_remount()
5340 ext4_unregister_li_request(sb); in ext4_remount()
5343 first_not_zeroed = ext4_has_uninit_itable(sb); in ext4_remount()
5344 ext4_register_li_request(sb, first_not_zeroed); in ext4_remount()
5347 ext4_setup_system_zone(sb); in ext4_remount()
5349 ext4_commit_super(sb, 1); in ext4_remount()
5356 if (sb_any_quota_suspended(sb)) in ext4_remount()
5357 dquot_resume(sb, -1); in ext4_remount()
5358 else if (ext4_has_feature_quota(sb)) { in ext4_remount()
5359 err = ext4_enable_quotas(sb); in ext4_remount()
5366 *flags = (*flags & ~MS_LAZYTIME) | (sb->s_flags & MS_LAZYTIME); in ext4_remount()
5367 ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s", orig_data); in ext4_remount()
5372 sb->s_flags = old_sb_flags; in ext4_remount()
5383 to_free[i] = get_qf_name(sb, sbi, i); in ext4_remount()
5395 static int ext4_statfs_project(struct super_block *sb, in ext4_statfs_project() argument
5404 dquot = dqget(sb, qid); in ext4_statfs_project()
5411 dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits; in ext4_statfs_project()
5413 curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits; in ext4_statfs_project()
5438 struct super_block *sb = dentry->d_sb; in ext4_statfs() local
5439 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_statfs()
5446 if (!test_opt(sb, MINIX_DF)) in ext4_statfs()
5450 buf->f_bsize = sb->s_blocksize; in ext4_statfs()
5470 sb_has_quota_limits_enabled(sb, PRJQUOTA)) in ext4_statfs()
5471 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf); in ext4_statfs()
5543 struct super_block *sb = dquot->dq_sb; in ext4_mark_dquot_dirty() local
5544 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_mark_dquot_dirty()
5547 if (ext4_has_feature_quota(sb) || in ext4_mark_dquot_dirty()
5556 static int ext4_write_info(struct super_block *sb, int type) in ext4_write_info() argument
5562 handle = ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2); in ext4_write_info()
5565 ret = dquot_commit_info(sb, type); in ext4_write_info()
5576 static int ext4_quota_on_mount(struct super_block *sb, int type) in ext4_quota_on_mount() argument
5578 return dquot_quota_on_mount(sb, get_qf_name(sb, EXT4_SB(sb), type), in ext4_quota_on_mount()
5579 EXT4_SB(sb)->s_jquota_fmt, type); in ext4_quota_on_mount()
5599 static int ext4_quota_on(struct super_block *sb, int type, int format_id, in ext4_quota_on() argument
5604 if (!test_opt(sb, QUOTA)) in ext4_quota_on()
5608 if (path->dentry->d_sb != sb) in ext4_quota_on()
5611 if (EXT4_SB(sb)->s_qf_names[type]) { in ext4_quota_on()
5613 if (path->dentry->d_parent != sb->s_root) in ext4_quota_on()
5614 ext4_msg(sb, KERN_WARNING, in ext4_quota_on()
5617 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY; in ext4_quota_on()
5623 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY; in ext4_quota_on()
5630 if (EXT4_SB(sb)->s_journal && in ext4_quota_on()
5636 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
5637 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal); in ext4_quota_on()
5638 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
5644 err = dquot_quota_on(sb, type, format_id, path); in ext4_quota_on()
5672 static int ext4_quota_enable(struct super_block *sb, int type, int format_id, in ext4_quota_enable() argument
5678 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_quota_enable()
5679 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_quota_enable()
5680 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_quota_enable()
5683 BUG_ON(!ext4_has_feature_quota(sb)); in ext4_quota_enable()
5688 qf_inode = ext4_iget(sb, qf_inums[type]); in ext4_quota_enable()
5690 ext4_error(sb, "Bad quota inode # %lu", qf_inums[type]); in ext4_quota_enable()
5706 static int ext4_enable_quotas(struct super_block *sb) in ext4_enable_quotas() argument
5710 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_enable_quotas()
5711 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_enable_quotas()
5712 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_enable_quotas()
5715 test_opt(sb, USRQUOTA), in ext4_enable_quotas()
5716 test_opt(sb, GRPQUOTA), in ext4_enable_quotas()
5717 test_opt(sb, PRJQUOTA), in ext4_enable_quotas()
5720 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY; in ext4_enable_quotas()
5723 err = ext4_quota_enable(sb, type, QFMT_VFS_V1, in ext4_enable_quotas()
5728 dquot_quota_off(sb, type); in ext4_enable_quotas()
5730 ext4_warning(sb, in ext4_enable_quotas()
5741 static int ext4_quota_off(struct super_block *sb, int type) in ext4_quota_off() argument
5743 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_off()
5749 if (test_opt(sb, DELALLOC)) in ext4_quota_off()
5750 sync_filesystem(sb); in ext4_quota_off()
5755 err = dquot_quota_off(sb, type); in ext4_quota_off()
5756 if (err || ext4_has_feature_quota(sb)) in ext4_quota_off()
5780 return dquot_quota_off(sb, type); in ext4_quota_off()
5787 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data, in ext4_quota_read() argument
5790 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_read()
5791 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_read()
5792 int offset = off & (sb->s_blocksize - 1); in ext4_quota_read()
5804 tocopy = sb->s_blocksize - offset < toread ? in ext4_quota_read()
5805 sb->s_blocksize - offset : toread; in ext4_quota_read()
5824 static ssize_t ext4_quota_write(struct super_block *sb, int type, in ext4_quota_write() argument
5827 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_write()
5828 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); in ext4_quota_write()
5829 int err, offset = off & (sb->s_blocksize - 1); in ext4_quota_write()
5834 if (EXT4_SB(sb)->s_journal && !handle) { in ext4_quota_write()
5835 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
5844 if (sb->s_blocksize - offset < len) { in ext4_quota_write()
5845 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" in ext4_quota_write()
5882 static int ext4_get_next_id(struct super_block *sb, struct kqid *qid) in ext4_get_next_id() argument
5886 if (!sb_has_quota_loaded(sb, qid->type)) in ext4_get_next_id()
5888 ops = sb_dqopt(sb)->ops[qid->type]; in ext4_get_next_id()
5891 return dquot_get_next_id(sb, qid); in ext4_get_next_id()
5915 static inline int ext2_feature_set_ok(struct super_block *sb) in ext2_feature_set_ok() argument
5917 if (ext4_has_unknown_ext2_incompat_features(sb)) in ext2_feature_set_ok()
5919 if (sb_rdonly(sb)) in ext2_feature_set_ok()
5921 if (ext4_has_unknown_ext2_ro_compat_features(sb)) in ext2_feature_set_ok()
5928 static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; } in ext2_feature_set_ok() argument
5944 static inline int ext3_feature_set_ok(struct super_block *sb) in ext3_feature_set_ok() argument
5946 if (ext4_has_unknown_ext3_incompat_features(sb)) in ext3_feature_set_ok()
5948 if (!ext4_has_feature_journal(sb)) in ext3_feature_set_ok()
5950 if (sb_rdonly(sb)) in ext3_feature_set_ok()
5952 if (ext4_has_unknown_ext3_ro_compat_features(sb)) in ext3_feature_set_ok()