Re: [PATCH] ext4: Fix incorrect group count in ext4_fill_super error message

From: kbuild test robot
Date: Sat Mar 28 2020 - 18:44:40 EST


Hi Josh,

I love your patch! Perhaps something to improve:

[auto build test WARNING on ext4/dev]
[also build test WARNING on linus/master linux/master v5.6-rc7 next-20200327]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url: https://github.com/0day-ci/linux/commits/Josh-Triplett/ext4-Fix-incorrect-group-count-in-ext4_fill_super-error-message/20200329-055606
base: https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git dev
config: sh-rsk7269_defconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=9.2.0 make.cross ARCH=sh

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

In file included from fs/ext4/super.c:50:
fs/ext4/super.c: In function 'ext4_fill_super':
>> fs/ext4/super.c:4297:30: warning: format '%u' expects argument of type 'unsigned int', but argument 4 has type '__u64' {aka 'long long unsigned int'} [-Wformat=]
4297 | ext4_msg(sb, KERN_WARNING, "groups count too large: %u "
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4298 | "(block count %llu, first data block %u, "
4299 | "blocks per group %lu)", blocks_count,
| ~~~~~~~~~~~~
| |
| __u64 {aka long long unsigned int}
fs/ext4/ext4.h:2829:24: note: in definition of macro 'ext4_msg'
2829 | __ext4_msg(sb, level, fmt, ##__VA_ARGS__)
| ^~~
fs/ext4/super.c:4297:56: note: format string is defined here
4297 | ext4_msg(sb, KERN_WARNING, "groups count too large: %u "
| ~^
| |
| unsigned int
| %llu

vim +4297 fs/ext4/super.c

c83ad55eaa91c8 Gabriel Krisman Bertazi 2019-04-25 3972
56889787cfa77d Theodore Ts'o 2011-09-03 3973 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
244adf6426ee31 Theodore Ts'o 2020-01-23 3974 printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, and O_DIRECT support!\n");
244adf6426ee31 Theodore Ts'o 2020-01-23 3975 clear_opt(sb, DIOREAD_NOLOCK);
56889787cfa77d Theodore Ts'o 2011-09-03 3976 if (test_opt2(sb, EXPLICIT_DELALLOC)) {
56889787cfa77d Theodore Ts'o 2011-09-03 3977 ext4_msg(sb, KERN_ERR, "can't mount with "
56889787cfa77d Theodore Ts'o 2011-09-03 3978 "both data=journal and delalloc");
56889787cfa77d Theodore Ts'o 2011-09-03 3979 goto failed_mount;
56889787cfa77d Theodore Ts'o 2011-09-03 3980 }
56889787cfa77d Theodore Ts'o 2011-09-03 3981 if (test_opt(sb, DIOREAD_NOLOCK)) {
56889787cfa77d Theodore Ts'o 2011-09-03 3982 ext4_msg(sb, KERN_ERR, "can't mount with "
6ae6514b33f941 Piotr Sarna 2013-08-08 3983 "both data=journal and dioread_nolock");
56889787cfa77d Theodore Ts'o 2011-09-03 3984 goto failed_mount;
56889787cfa77d Theodore Ts'o 2011-09-03 3985 }
923ae0ff925043 Ross Zwisler 2015-02-16 3986 if (test_opt(sb, DAX)) {
923ae0ff925043 Ross Zwisler 2015-02-16 3987 ext4_msg(sb, KERN_ERR, "can't mount with "
923ae0ff925043 Ross Zwisler 2015-02-16 3988 "both data=journal and dax");
923ae0ff925043 Ross Zwisler 2015-02-16 3989 goto failed_mount;
923ae0ff925043 Ross Zwisler 2015-02-16 3990 }
73b92a2a5e97d1 Sergey Karamov 2016-12-10 3991 if (ext4_has_feature_encrypt(sb)) {
73b92a2a5e97d1 Sergey Karamov 2016-12-10 3992 ext4_msg(sb, KERN_WARNING,
73b92a2a5e97d1 Sergey Karamov 2016-12-10 3993 "encrypted files will use data=ordered "
73b92a2a5e97d1 Sergey Karamov 2016-12-10 3994 "instead of data journaling mode");
73b92a2a5e97d1 Sergey Karamov 2016-12-10 3995 }
56889787cfa77d Theodore Ts'o 2011-09-03 3996 if (test_opt(sb, DELALLOC))
56889787cfa77d Theodore Ts'o 2011-09-03 3997 clear_opt(sb, DELALLOC);
001e4a8775f6e8 Tejun Heo 2015-07-21 3998 } else {
001e4a8775f6e8 Tejun Heo 2015-07-21 3999 sb->s_iflags |= SB_I_CGROUPWB;
56889787cfa77d Theodore Ts'o 2011-09-03 4000 }
56889787cfa77d Theodore Ts'o 2011-09-03 4001
1751e8a6cb935e Linus Torvalds 2017-11-27 4002 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
1751e8a6cb935e Linus Torvalds 2017-11-27 4003 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4004
617ba13b31fbf5 Mingming Cao 2006-10-11 4005 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV &&
e2b911c53584a9 Darrick J. Wong 2015-10-17 4006 (ext4_has_compat_features(sb) ||
e2b911c53584a9 Darrick J. Wong 2015-10-17 4007 ext4_has_ro_compat_features(sb) ||
e2b911c53584a9 Darrick J. Wong 2015-10-17 4008 ext4_has_incompat_features(sb)))
b31e15527a9bb7 Eric Sandeen 2009-06-04 4009 ext4_msg(sb, KERN_WARNING,
b31e15527a9bb7 Eric Sandeen 2009-06-04 4010 "feature flags set on rev 0 fs, "
b31e15527a9bb7 Eric Sandeen 2009-06-04 4011 "running e2fsck is recommended");
469108ff3dcbc0 Theodore Tso 2008-02-10 4012
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4013 if (es->s_creator_os == cpu_to_le32(EXT4_OS_HURD)) {
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4014 set_opt2(sb, HURD_COMPAT);
e2b911c53584a9 Darrick J. Wong 2015-10-17 4015 if (ext4_has_feature_64bit(sb)) {
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4016 ext4_msg(sb, KERN_ERR,
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4017 "The Hurd can't support 64-bit file systems");
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4018 goto failed_mount;
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4019 }
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4020
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4021 /*
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4022 * ea_inode feature uses l_i_version field which is not
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4023 * available in HURD_COMPAT mode.
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4024 */
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4025 if (ext4_has_feature_ea_inode(sb)) {
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4026 ext4_msg(sb, KERN_ERR,
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4027 "ea_inode feature is not supported for Hurd");
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4028 goto failed_mount;
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4029 }
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4030 }
ed3654eb981fd4 Theodore Ts'o 2014-03-24 4031
2035e776050aea Theodore Ts'o 2011-04-18 4032 if (IS_EXT2_SB(sb)) {
2035e776050aea Theodore Ts'o 2011-04-18 4033 if (ext2_feature_set_ok(sb))
2035e776050aea Theodore Ts'o 2011-04-18 4034 ext4_msg(sb, KERN_INFO, "mounting ext2 file system "
2035e776050aea Theodore Ts'o 2011-04-18 4035 "using the ext4 subsystem");
2035e776050aea Theodore Ts'o 2011-04-18 4036 else {
0d9366d67bcf06 Eric Sandeen 2018-03-22 4037 /*
0d9366d67bcf06 Eric Sandeen 2018-03-22 4038 * If we're probing be silent, if this looks like
0d9366d67bcf06 Eric Sandeen 2018-03-22 4039 * it's actually an ext[34] filesystem.
0d9366d67bcf06 Eric Sandeen 2018-03-22 4040 */
0d9366d67bcf06 Eric Sandeen 2018-03-22 4041 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
0d9366d67bcf06 Eric Sandeen 2018-03-22 4042 goto failed_mount;
2035e776050aea Theodore Ts'o 2011-04-18 4043 ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due "
2035e776050aea Theodore Ts'o 2011-04-18 4044 "to feature incompatibilities");
2035e776050aea Theodore Ts'o 2011-04-18 4045 goto failed_mount;
2035e776050aea Theodore Ts'o 2011-04-18 4046 }
2035e776050aea Theodore Ts'o 2011-04-18 4047 }
2035e776050aea Theodore Ts'o 2011-04-18 4048
2035e776050aea Theodore Ts'o 2011-04-18 4049 if (IS_EXT3_SB(sb)) {
2035e776050aea Theodore Ts'o 2011-04-18 4050 if (ext3_feature_set_ok(sb))
2035e776050aea Theodore Ts'o 2011-04-18 4051 ext4_msg(sb, KERN_INFO, "mounting ext3 file system "
2035e776050aea Theodore Ts'o 2011-04-18 4052 "using the ext4 subsystem");
2035e776050aea Theodore Ts'o 2011-04-18 4053 else {
0d9366d67bcf06 Eric Sandeen 2018-03-22 4054 /*
0d9366d67bcf06 Eric Sandeen 2018-03-22 4055 * If we're probing be silent, if this looks like
0d9366d67bcf06 Eric Sandeen 2018-03-22 4056 * it's actually an ext4 filesystem.
0d9366d67bcf06 Eric Sandeen 2018-03-22 4057 */
0d9366d67bcf06 Eric Sandeen 2018-03-22 4058 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
0d9366d67bcf06 Eric Sandeen 2018-03-22 4059 goto failed_mount;
2035e776050aea Theodore Ts'o 2011-04-18 4060 ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due "
2035e776050aea Theodore Ts'o 2011-04-18 4061 "to feature incompatibilities");
2035e776050aea Theodore Ts'o 2011-04-18 4062 goto failed_mount;
2035e776050aea Theodore Ts'o 2011-04-18 4063 }
2035e776050aea Theodore Ts'o 2011-04-18 4064 }
2035e776050aea Theodore Ts'o 2011-04-18 4065
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4066 /*
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4067 * Check feature flags regardless of the revision level, since we
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4068 * previously didn't change the revision level when setting the flags,
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4069 * so there is a chance incompat flags are set on a rev 0 filesystem.
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4070 */
bc98a42c1f7d0f David Howells 2017-07-17 4071 if (!ext4_feature_set_ok(sb, (sb_rdonly(sb))))
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4072 goto failed_mount;
a13fb1a4533f26 Eric Sandeen 2009-08-18 4073
8cdf3372fe8368 Theodore Ts'o 2016-11-18 4074 if (le32_to_cpu(es->s_log_block_size) >
8cdf3372fe8368 Theodore Ts'o 2016-11-18 4075 (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
8cdf3372fe8368 Theodore Ts'o 2016-11-18 4076 ext4_msg(sb, KERN_ERR,
8cdf3372fe8368 Theodore Ts'o 2016-11-18 4077 "Invalid log block size: %u",
8cdf3372fe8368 Theodore Ts'o 2016-11-18 4078 le32_to_cpu(es->s_log_block_size));
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4079 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4080 }
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4081 if (le32_to_cpu(es->s_log_cluster_size) >
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4082 (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4083 ext4_msg(sb, KERN_ERR,
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4084 "Invalid log cluster size: %u",
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4085 le32_to_cpu(es->s_log_cluster_size));
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4086 goto failed_mount;
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4087 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4088
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4089 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (blocksize / 4)) {
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4090 ext4_msg(sb, KERN_ERR,
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4091 "Number of reserved GDT blocks insanely large: %d",
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4092 le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks));
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4093 goto failed_mount;
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4094 }
5b9554dc5bf008 Theodore Ts'o 2016-07-05 4095
923ae0ff925043 Ross Zwisler 2015-02-16 4096 if (sbi->s_mount_opt & EXT4_MOUNT_DAX) {
559db4c6d784ce Ross Zwisler 2017-10-12 4097 if (ext4_has_feature_inline_data(sb)) {
559db4c6d784ce Ross Zwisler 2017-10-12 4098 ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem"
559db4c6d784ce Ross Zwisler 2017-10-12 4099 " that may contain inline data");
361d24d40657d2 Eric Sandeen 2018-12-04 4100 goto failed_mount;
559db4c6d784ce Ross Zwisler 2017-10-12 4101 }
80660f20252d6f Dave Jiang 2018-05-30 4102 if (!bdev_dax_supported(sb->s_bdev, blocksize)) {
24f3478d664b1e Dan Williams 2017-12-21 4103 ext4_msg(sb, KERN_ERR,
361d24d40657d2 Eric Sandeen 2018-12-04 4104 "DAX unsupported by block device.");
361d24d40657d2 Eric Sandeen 2018-12-04 4105 goto failed_mount;
24f3478d664b1e Dan Williams 2017-12-21 4106 }
923ae0ff925043 Ross Zwisler 2015-02-16 4107 }
923ae0ff925043 Ross Zwisler 2015-02-16 4108
e2b911c53584a9 Darrick J. Wong 2015-10-17 4109 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) {
6ddb2447846a8e Theodore Ts'o 2015-04-16 4110 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d",
6ddb2447846a8e Theodore Ts'o 2015-04-16 4111 es->s_encryption_level);
6ddb2447846a8e Theodore Ts'o 2015-04-16 4112 goto failed_mount;
6ddb2447846a8e Theodore Ts'o 2015-04-16 4113 }
6ddb2447846a8e Theodore Ts'o 2015-04-16 4114
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4115 if (sb->s_blocksize != blocksize) {
ce40733ce93de4 Aneesh Kumar K.V 2008-01-28 4116 /* Validate the filesystem blocksize */
ce40733ce93de4 Aneesh Kumar K.V 2008-01-28 4117 if (!sb_set_blocksize(sb, blocksize)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4118 ext4_msg(sb, KERN_ERR, "bad block size %d",
ce40733ce93de4 Aneesh Kumar K.V 2008-01-28 4119 blocksize);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4120 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4121 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4122
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4123 brelse(bh);
70bbb3e0a07c1f Andrew Morton 2006-10-11 4124 logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
70bbb3e0a07c1f Andrew Morton 2006-10-11 4125 offset = do_div(logical_sb_block, blocksize);
a8ac900b816370 Gioh Kim 2014-09-04 4126 bh = sb_bread_unmovable(sb, logical_sb_block);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4127 if (!bh) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4128 ext4_msg(sb, KERN_ERR,
b31e15527a9bb7 Eric Sandeen 2009-06-04 4129 "Can't read superblock on 2nd try");
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4130 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4131 }
2716b80284c5ca Theodore Ts'o 2012-05-28 4132 es = (struct ext4_super_block *)(bh->b_data + offset);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4133 sbi->s_es = es;
617ba13b31fbf5 Mingming Cao 2006-10-11 4134 if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4135 ext4_msg(sb, KERN_ERR,
b31e15527a9bb7 Eric Sandeen 2009-06-04 4136 "Magic mismatch, very weird!");
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4137 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4138 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4139 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4140
e2b911c53584a9 Darrick J. Wong 2015-10-17 4141 has_huge_files = ext4_has_feature_huge_file(sb);
f287a1a56130be Theodore Ts'o 2008-10-16 4142 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
f287a1a56130be Theodore Ts'o 2008-10-16 4143 has_huge_files);
f287a1a56130be Theodore Ts'o 2008-10-16 4144 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4145
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4146 sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
e2b911c53584a9 Darrick J. Wong 2015-10-17 4147 if (ext4_has_feature_64bit(sb)) {
8fadc14323684c Alexandre Ratchov 2006-10-11 4148 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4149 sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
d8ea6cf8999100 vignesh babu 2007-10-16 4150 !is_power_of_2(sbi->s_desc_size)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4151 ext4_msg(sb, KERN_ERR,
b31e15527a9bb7 Eric Sandeen 2009-06-04 4152 "unsupported descriptor size %lu",
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4153 sbi->s_desc_size);
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4154 goto failed_mount;
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4155 }
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4156 } else
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4157 sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
0b8e58a140cae2 Andreas Dilger 2009-06-03 4158
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4159 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4160 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
0b8e58a140cae2 Andreas Dilger 2009-06-03 4161
617ba13b31fbf5 Mingming Cao 2006-10-11 4162 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4163 if (sbi->s_inodes_per_block == 0)
617ba13b31fbf5 Mingming Cao 2006-10-11 4164 goto cantfind_ext4;
cd6bb35bf7f6d7 Theodore Ts'o 2016-11-18 4165 if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
cd6bb35bf7f6d7 Theodore Ts'o 2016-11-18 4166 sbi->s_inodes_per_group > blocksize * 8) {
cd6bb35bf7f6d7 Theodore Ts'o 2016-11-18 4167 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
cd6bb35bf7f6d7 Theodore Ts'o 2016-11-18 4168 sbi->s_blocks_per_group);
cd6bb35bf7f6d7 Theodore Ts'o 2016-11-18 4169 goto failed_mount;
cd6bb35bf7f6d7 Theodore Ts'o 2016-11-18 4170 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4171 sbi->s_itb_per_group = sbi->s_inodes_per_group /
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4172 sbi->s_inodes_per_block;
0d1ee42f27d30e Alexandre Ratchov 2006-10-11 4173 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4174 sbi->s_sbh = bh;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4175 sbi->s_mount_state = le16_to_cpu(es->s_state);
e57aa839cea138 Fengguang Wu 2007-10-16 4176 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
e57aa839cea138 Fengguang Wu 2007-10-16 4177 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
0b8e58a140cae2 Andreas Dilger 2009-06-03 4178
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4179 for (i = 0; i < 4; i++)
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4180 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4181 sbi->s_def_hash_version = es->s_def_hash_version;
e2b911c53584a9 Darrick J. Wong 2015-10-17 4182 if (ext4_has_feature_dir_index(sb)) {
f99b25897a86fc Theodore Ts'o 2008-10-28 4183 i = le32_to_cpu(es->s_flags);
f99b25897a86fc Theodore Ts'o 2008-10-28 4184 if (i & EXT2_FLAGS_UNSIGNED_HASH)
f99b25897a86fc Theodore Ts'o 2008-10-28 4185 sbi->s_hash_unsigned = 3;
f99b25897a86fc Theodore Ts'o 2008-10-28 4186 else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
f99b25897a86fc Theodore Ts'o 2008-10-28 4187 #ifdef __CHAR_UNSIGNED__
bc98a42c1f7d0f David Howells 2017-07-17 4188 if (!sb_rdonly(sb))
23301410972330 Theodore Ts'o 2014-02-12 4189 es->s_flags |=
23301410972330 Theodore Ts'o 2014-02-12 4190 cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
f99b25897a86fc Theodore Ts'o 2008-10-28 4191 sbi->s_hash_unsigned = 3;
f99b25897a86fc Theodore Ts'o 2008-10-28 4192 #else
bc98a42c1f7d0f David Howells 2017-07-17 4193 if (!sb_rdonly(sb))
23301410972330 Theodore Ts'o 2014-02-12 4194 es->s_flags |=
23301410972330 Theodore Ts'o 2014-02-12 4195 cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
f99b25897a86fc Theodore Ts'o 2008-10-28 4196 #endif
f99b25897a86fc Theodore Ts'o 2008-10-28 4197 }
23301410972330 Theodore Ts'o 2014-02-12 4198 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4199
281b59959707df Theodore Ts'o 2011-09-09 4200 /* Handle clustersize */
281b59959707df Theodore Ts'o 2011-09-09 4201 clustersize = BLOCK_SIZE << le32_to_cpu(es->s_log_cluster_size);
e2b911c53584a9 Darrick J. Wong 2015-10-17 4202 has_bigalloc = ext4_has_feature_bigalloc(sb);
281b59959707df Theodore Ts'o 2011-09-09 4203 if (has_bigalloc) {
281b59959707df Theodore Ts'o 2011-09-09 4204 if (clustersize < blocksize) {
281b59959707df Theodore Ts'o 2011-09-09 4205 ext4_msg(sb, KERN_ERR,
281b59959707df Theodore Ts'o 2011-09-09 4206 "cluster size (%d) smaller than "
281b59959707df Theodore Ts'o 2011-09-09 4207 "block size (%d)", clustersize, blocksize);
281b59959707df Theodore Ts'o 2011-09-09 4208 goto failed_mount;
281b59959707df Theodore Ts'o 2011-09-09 4209 }
281b59959707df Theodore Ts'o 2011-09-09 4210 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) -
281b59959707df Theodore Ts'o 2011-09-09 4211 le32_to_cpu(es->s_log_block_size);
281b59959707df Theodore Ts'o 2011-09-09 4212 sbi->s_clusters_per_group =
281b59959707df Theodore Ts'o 2011-09-09 4213 le32_to_cpu(es->s_clusters_per_group);
281b59959707df Theodore Ts'o 2011-09-09 4214 if (sbi->s_clusters_per_group > blocksize * 8) {
281b59959707df Theodore Ts'o 2011-09-09 4215 ext4_msg(sb, KERN_ERR,
281b59959707df Theodore Ts'o 2011-09-09 4216 "#clusters per group too big: %lu",
281b59959707df Theodore Ts'o 2011-09-09 4217 sbi->s_clusters_per_group);
281b59959707df Theodore Ts'o 2011-09-09 4218 goto failed_mount;
281b59959707df Theodore Ts'o 2011-09-09 4219 }
281b59959707df Theodore Ts'o 2011-09-09 4220 if (sbi->s_blocks_per_group !=
281b59959707df Theodore Ts'o 2011-09-09 4221 (sbi->s_clusters_per_group * (clustersize / blocksize))) {
281b59959707df Theodore Ts'o 2011-09-09 4222 ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and "
281b59959707df Theodore Ts'o 2011-09-09 4223 "clusters per group (%lu) inconsistent",
281b59959707df Theodore Ts'o 2011-09-09 4224 sbi->s_blocks_per_group,
281b59959707df Theodore Ts'o 2011-09-09 4225 sbi->s_clusters_per_group);
281b59959707df Theodore Ts'o 2011-09-09 4226 goto failed_mount;
281b59959707df Theodore Ts'o 2011-09-09 4227 }
281b59959707df Theodore Ts'o 2011-09-09 4228 } else {
281b59959707df Theodore Ts'o 2011-09-09 4229 if (clustersize != blocksize) {
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4230 ext4_msg(sb, KERN_ERR,
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4231 "fragment/cluster size (%d) != "
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4232 "block size (%d)", clustersize, blocksize);
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4233 goto failed_mount;
281b59959707df Theodore Ts'o 2011-09-09 4234 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4235 if (sbi->s_blocks_per_group > blocksize * 8) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4236 ext4_msg(sb, KERN_ERR,
b31e15527a9bb7 Eric Sandeen 2009-06-04 4237 "#blocks per group too big: %lu",
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4238 sbi->s_blocks_per_group);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4239 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4240 }
281b59959707df Theodore Ts'o 2011-09-09 4241 sbi->s_clusters_per_group = sbi->s_blocks_per_group;
281b59959707df Theodore Ts'o 2011-09-09 4242 sbi->s_cluster_bits = 0;
281b59959707df Theodore Ts'o 2011-09-09 4243 }
281b59959707df Theodore Ts'o 2011-09-09 4244 sbi->s_cluster_ratio = clustersize / blocksize;
281b59959707df Theodore Ts'o 2011-09-09 4245
960fd856fdc3b0 Theodore Ts'o 2013-07-05 4246 /* Do we have standard group size of clustersize * 8 blocks ? */
960fd856fdc3b0 Theodore Ts'o 2013-07-05 4247 if (sbi->s_blocks_per_group == clustersize << 3)
960fd856fdc3b0 Theodore Ts'o 2013-07-05 4248 set_opt2(sb, STD_GROUP_SIZE);
960fd856fdc3b0 Theodore Ts'o 2013-07-05 4249
bf43d84b185e2f Eric Sandeen 2009-08-17 4250 /*
bf43d84b185e2f Eric Sandeen 2009-08-17 4251 * Test whether we have more sectors than will fit in sector_t,
bf43d84b185e2f Eric Sandeen 2009-08-17 4252 * and whether the max offset is addressable by the page cache.
bf43d84b185e2f Eric Sandeen 2009-08-17 4253 */
5a9ae68a349aa0 Darrick J. Wong 2010-11-19 4254 err = generic_check_addressable(sb->s_blocksize_bits,
30ca22c70e3ef0 Patrick J. LoPresti 2010-07-22 4255 ext4_blocks_count(es));
5a9ae68a349aa0 Darrick J. Wong 2010-11-19 4256 if (err) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4257 ext4_msg(sb, KERN_ERR, "filesystem"
bf43d84b185e2f Eric Sandeen 2009-08-17 4258 " too large to mount safely on this system");
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4259 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4260 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4261
617ba13b31fbf5 Mingming Cao 2006-10-11 4262 if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
617ba13b31fbf5 Mingming Cao 2006-10-11 4263 goto cantfind_ext4;
e7c95593001cb9 Eric Sandeen 2008-01-28 4264
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4265 /* check blocks count against device size */
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4266 blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4267 if (blocks_count && ext4_blocks_count(es) > blocks_count) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4268 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu "
b31e15527a9bb7 Eric Sandeen 2009-06-04 4269 "exceeds size of device (%llu blocks)",
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4270 ext4_blocks_count(es), blocks_count);
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4271 goto failed_mount;
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4272 }
0f2ddca66d70c8 From: Thiemo Nagel 2009-04-07 4273
4ec11028137982 Theodore Ts'o 2009-01-06 4274 /*
4ec11028137982 Theodore Ts'o 2009-01-06 4275 * It makes no sense for the first data block to be beyond the end
4ec11028137982 Theodore Ts'o 2009-01-06 4276 * of the filesystem.
4ec11028137982 Theodore Ts'o 2009-01-06 4277 */
4ec11028137982 Theodore Ts'o 2009-01-06 4278 if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4279 ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
b31e15527a9bb7 Eric Sandeen 2009-06-04 4280 "block %u is beyond end of filesystem (%llu)",
e7c95593001cb9 Eric Sandeen 2008-01-28 4281 le32_to_cpu(es->s_first_data_block),
4ec11028137982 Theodore Ts'o 2009-01-06 4282 ext4_blocks_count(es));
e7c95593001cb9 Eric Sandeen 2008-01-28 4283 goto failed_mount;
e7c95593001cb9 Eric Sandeen 2008-01-28 4284 }
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4285 if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) &&
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4286 (sbi->s_cluster_ratio == 1)) {
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4287 ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4288 "block is 0 with a 1k block and cluster size");
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4289 goto failed_mount;
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4290 }
bfe0a5f47ada40 Theodore Ts'o 2018-06-17 4291
bd81d8eec04309 Laurent Vivier 2006-10-11 4292 blocks_count = (ext4_blocks_count(es) -
bd81d8eec04309 Laurent Vivier 2006-10-11 4293 le32_to_cpu(es->s_first_data_block) +
bd81d8eec04309 Laurent Vivier 2006-10-11 4294 EXT4_BLOCKS_PER_GROUP(sb) - 1);
bd81d8eec04309 Laurent Vivier 2006-10-11 4295 do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb));
4ec11028137982 Theodore Ts'o 2009-01-06 4296 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 @4297 ext4_msg(sb, KERN_WARNING, "groups count too large: %u "
4ec11028137982 Theodore Ts'o 2009-01-06 4298 "(block count %llu, first data block %u, "
871ff0cd66878b Josh Triplett 2020-03-28 4299 "blocks per group %lu)", blocks_count,
4ec11028137982 Theodore Ts'o 2009-01-06 4300 ext4_blocks_count(es),
4ec11028137982 Theodore Ts'o 2009-01-06 4301 le32_to_cpu(es->s_first_data_block),
4ec11028137982 Theodore Ts'o 2009-01-06 4302 EXT4_BLOCKS_PER_GROUP(sb));
4ec11028137982 Theodore Ts'o 2009-01-06 4303 goto failed_mount;
4ec11028137982 Theodore Ts'o 2009-01-06 4304 }
bd81d8eec04309 Laurent Vivier 2006-10-11 4305 sbi->s_groups_count = blocks_count;
fb0a387dcdcd21 Eric Sandeen 2009-09-16 4306 sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
fb0a387dcdcd21 Eric Sandeen 2009-09-16 4307 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
9e463084cdb22e Theodore Ts'o 2018-11-07 4308 if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
9e463084cdb22e Theodore Ts'o 2018-11-07 4309 le32_to_cpu(es->s_inodes_count)) {
9e463084cdb22e Theodore Ts'o 2018-11-07 4310 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
9e463084cdb22e Theodore Ts'o 2018-11-07 4311 le32_to_cpu(es->s_inodes_count),
9e463084cdb22e Theodore Ts'o 2018-11-07 4312 ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
9e463084cdb22e Theodore Ts'o 2018-11-07 4313 ret = -EINVAL;
9e463084cdb22e Theodore Ts'o 2018-11-07 4314 goto failed_mount;
9e463084cdb22e Theodore Ts'o 2018-11-07 4315 }
617ba13b31fbf5 Mingming Cao 2006-10-11 4316 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
617ba13b31fbf5 Mingming Cao 2006-10-11 4317 EXT4_DESC_PER_BLOCK(sb);
3a4b77cd47bb83 Eryu Guan 2016-12-01 4318 if (ext4_has_feature_meta_bg(sb)) {
2ba3e6e8afc9b6 Theodore Ts'o 2017-02-15 4319 if (le32_to_cpu(es->s_first_meta_bg) > db_count) {
3a4b77cd47bb83 Eryu Guan 2016-12-01 4320 ext4_msg(sb, KERN_WARNING,
3a4b77cd47bb83 Eryu Guan 2016-12-01 4321 "first meta block group too large: %u "
3a4b77cd47bb83 Eryu Guan 2016-12-01 4322 "(group descriptor block count %u)",
3a4b77cd47bb83 Eryu Guan 2016-12-01 4323 le32_to_cpu(es->s_first_meta_bg), db_count);
3a4b77cd47bb83 Eryu Guan 2016-12-01 4324 goto failed_mount;
3a4b77cd47bb83 Eryu Guan 2016-12-01 4325 }
3a4b77cd47bb83 Eryu Guan 2016-12-01 4326 }
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4327 rcu_assign_pointer(sbi->s_group_desc,
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4328 kvmalloc_array(db_count,
f18a5f21c25707 Theodore Ts'o 2011-08-01 4329 sizeof(struct buffer_head *),
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4330 GFP_KERNEL));
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4331 if (sbi->s_group_desc == NULL) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4332 ext4_msg(sb, KERN_ERR, "not enough memory");
2cde417de013b2 Theodore Ts'o 2012-05-28 4333 ret = -ENOMEM;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4334 goto failed_mount;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4335 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4336
705895b61133ef Pekka Enberg 2009-02-15 4337 bgl_lock_init(sbi->s_blockgroup_lock);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4338
85c8f176a6111e Andrew Perepechko 2017-04-30 4339 /* Pre-read the descriptors into the buffer cache */
85c8f176a6111e Andrew Perepechko 2017-04-30 4340 for (i = 0; i < db_count; i++) {
85c8f176a6111e Andrew Perepechko 2017-04-30 4341 block = descriptor_loc(sb, logical_sb_block, i);
85c8f176a6111e Andrew Perepechko 2017-04-30 4342 sb_breadahead(sb, block);
85c8f176a6111e Andrew Perepechko 2017-04-30 4343 }
85c8f176a6111e Andrew Perepechko 2017-04-30 4344
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4345 for (i = 0; i < db_count; i++) {
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4346 struct buffer_head *bh;
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4347
70bbb3e0a07c1f Andrew Morton 2006-10-11 4348 block = descriptor_loc(sb, logical_sb_block, i);
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4349 bh = sb_bread_unmovable(sb, block);
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4350 if (!bh) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4351 ext4_msg(sb, KERN_ERR,
b31e15527a9bb7 Eric Sandeen 2009-06-04 4352 "can't read group descriptor %d", i);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4353 db_count = i;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4354 goto failed_mount2;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4355 }
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4356 rcu_read_lock();
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4357 rcu_dereference(sbi->s_group_desc)[i] = bh;
1d0c3924a92e69 Theodore Ts'o 2020-02-15 4358 rcu_read_unlock();
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4359 }
44de022c438254 Theodore Ts'o 2018-07-08 4360 sbi->s_gdb_count = db_count;
829fa70dddadf9 Theodore Ts'o 2016-08-01 4361 if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4362 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
6a797d27378389 Darrick J. Wong 2015-10-17 4363 ret = -EFSCORRUPTED;
f9ae9cf5d72b39 Theodore Ts'o 2014-07-11 4364 goto failed_mount2;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4365 }
772cb7c83ba256 Jose R. Santos 2008-07-11 4366
235699a8f457ed Kees Cook 2017-10-18 4367 timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
0449641130f565 Tao Ma 2011-04-05 4368
a75ae78f087f93 Dmitry Monakhov 2013-04-03 4369 /* Register extent status tree shrinker */
eb68d0e2fc5a4e Zheng Liu 2014-09-01 4370 if (ext4_es_register_shrinker(sbi))
ce7e010aef63dc Theodore Ts'o 2010-11-03 4371 goto failed_mount3;
ce7e010aef63dc Theodore Ts'o 2010-11-03 4372
c9de560ded61fa Alex Tomas 2008-01-29 4373 sbi->s_stripe = ext4_get_stripe_size(sbi);
67a5da564f97f3 Zheng Liu 2012-08-17 4374 sbi->s_extent_max_zeroout_kb = 32;
c9de560ded61fa Alex Tomas 2008-01-29 4375
f9ae9cf5d72b39 Theodore Ts'o 2014-07-11 4376 /*
f9ae9cf5d72b39 Theodore Ts'o 2014-07-11 4377 * set up enough so that it can read an inode
f9ae9cf5d72b39 Theodore Ts'o 2014-07-11 4378 */
f9ae9cf5d72b39 Theodore Ts'o 2014-07-11 4379 sb->s_op = &ext4_sops;
617ba13b31fbf5 Mingming Cao 2006-10-11 4380 sb->s_export_op = &ext4_export_ops;
617ba13b31fbf5 Mingming Cao 2006-10-11 4381 sb->s_xattr = ext4_xattr_handlers;
643fa9612bf1a2 Chandan Rajendra 2018-12-12 4382 #ifdef CONFIG_FS_ENCRYPTION
a7550b30ab709f Jaegeuk Kim 2016-07-10 4383 sb->s_cop = &ext4_cryptops;
ffcc41829ae043 Eric Biggers 2017-10-09 4384 #endif
c93d8f88580921 Eric Biggers 2019-07-22 4385 #ifdef CONFIG_FS_VERITY
c93d8f88580921 Eric Biggers 2019-07-22 4386 sb->s_vop = &ext4_verityops;
c93d8f88580921 Eric Biggers 2019-07-22 4387 #endif
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4388 #ifdef CONFIG_QUOTA
617ba13b31fbf5 Mingming Cao 2006-10-11 4389 sb->dq_op = &ext4_quota_operations;
e2b911c53584a9 Darrick J. Wong 2015-10-17 4390 if (ext4_has_feature_quota(sb))
1fa5efe3622db5 Jan Kara 2014-10-08 4391 sb->s_qcop = &dquot_quotactl_sysfile_ops;
262b4662f42787 Jan Kara 2013-03-02 4392 else
262b4662f42787 Jan Kara 2013-03-02 4393 sb->s_qcop = &ext4_qctl_operations;
689c958cbe6be4 Li Xi 2016-01-08 4394 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4395 #endif
85787090a21eb7 Christoph Hellwig 2017-05-10 4396 memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid));
f2fa2ffc2046fd Aneesh Kumar K.V 2011-01-29 4397
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4398 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
3b9d4ed2668077 Theodore Ts'o 2009-04-25 4399 mutex_init(&sbi->s_orphan_lock);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4400
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4401 sb->s_root = NULL;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4402
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4403 needs_recovery = (es->s_last_orphan != 0 ||
e2b911c53584a9 Darrick J. Wong 2015-10-17 4404 ext4_has_feature_journal_needs_recovery(sb));
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4405
bc98a42c1f7d0f David Howells 2017-07-17 4406 if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb))
c5e06d101aaf72 Johann Lombardi 2011-05-24 4407 if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)))
50460fe8c6d1d9 Darrick J. Wong 2014-10-30 4408 goto failed_mount3a;
c5e06d101aaf72 Johann Lombardi 2011-05-24 4409
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4410 /*
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4411 * The first inode we look at is the journal inode. Don't try
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4412 * root first: it may be modified in the journal!
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4413 */
e2b911c53584a9 Darrick J. Wong 2015-10-17 4414 if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) {
4753d8a24d4588 Theodore Ts'o 2017-02-05 4415 err = ext4_load_journal(sb, es, journal_devnum);
4753d8a24d4588 Theodore Ts'o 2017-02-05 4416 if (err)
50460fe8c6d1d9 Darrick J. Wong 2014-10-30 4417 goto failed_mount3a;
bc98a42c1f7d0f David Howells 2017-07-17 4418 } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) &&
e2b911c53584a9 Darrick J. Wong 2015-10-17 4419 ext4_has_feature_journal_needs_recovery(sb)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4420 ext4_msg(sb, KERN_ERR, "required journal recovery "
b31e15527a9bb7 Eric Sandeen 2009-06-04 4421 "suppressed and not mounted read-only");
744692dc059845 Jiaying Zhang 2010-03-04 4422 goto failed_mount_wq;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4423 } else {
1e381f60dad913 Dmitry Monakhov 2015-10-18 4424 /* Nojournal mode, all journal mount options are illegal */
1e381f60dad913 Dmitry Monakhov 2015-10-18 4425 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) {
1e381f60dad913 Dmitry Monakhov 2015-10-18 4426 ext4_msg(sb, KERN_ERR, "can't mount with "
1e381f60dad913 Dmitry Monakhov 2015-10-18 4427 "journal_checksum, fs mounted w/o journal");
1e381f60dad913 Dmitry Monakhov 2015-10-18 4428 goto failed_mount_wq;
1e381f60dad913 Dmitry Monakhov 2015-10-18 4429 }
1e381f60dad913 Dmitry Monakhov 2015-10-18 4430 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
1e381f60dad913 Dmitry Monakhov 2015-10-18 4431 ext4_msg(sb, KERN_ERR, "can't mount with "
1e381f60dad913 Dmitry Monakhov 2015-10-18 4432 "journal_async_commit, fs mounted w/o journal");
1e381f60dad913 Dmitry Monakhov 2015-10-18 4433 goto failed_mount_wq;
1e381f60dad913 Dmitry Monakhov 2015-10-18 4434 }
1e381f60dad913 Dmitry Monakhov 2015-10-18 4435 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) {
1e381f60dad913 Dmitry Monakhov 2015-10-18 4436 ext4_msg(sb, KERN_ERR, "can't mount with "
1e381f60dad913 Dmitry Monakhov 2015-10-18 4437 "commit=%lu, fs mounted w/o journal",
1e381f60dad913 Dmitry Monakhov 2015-10-18 4438 sbi->s_commit_interval / HZ);
1e381f60dad913 Dmitry Monakhov 2015-10-18 4439 goto failed_mount_wq;
1e381f60dad913 Dmitry Monakhov 2015-10-18 4440 }
1e381f60dad913 Dmitry Monakhov 2015-10-18 4441 if (EXT4_MOUNT_DATA_FLAGS &
1e381f60dad913 Dmitry Monakhov 2015-10-18 4442 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) {
1e381f60dad913 Dmitry Monakhov 2015-10-18 4443 ext4_msg(sb, KERN_ERR, "can't mount with "
1e381f60dad913 Dmitry Monakhov 2015-10-18 4444 "data=, fs mounted w/o journal");
1e381f60dad913 Dmitry Monakhov 2015-10-18 4445 goto failed_mount_wq;
1e381f60dad913 Dmitry Monakhov 2015-10-18 4446 }
50b29d8f033a7c Debabrata Banerjee 2019-04-30 4447 sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM;
1e381f60dad913 Dmitry Monakhov 2015-10-18 4448 clear_opt(sb, JOURNAL_CHECKSUM);
fd8c37eccdda21 Theodore Ts'o 2010-12-15 4449 clear_opt(sb, DATA_FLAGS);
0390131ba84fd3 Frank Mayhar 2009-01-07 4450 sbi->s_journal = NULL;
0390131ba84fd3 Frank Mayhar 2009-01-07 4451 needs_recovery = 0;
0390131ba84fd3 Frank Mayhar 2009-01-07 4452 goto no_journal;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4453 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4454
e2b911c53584a9 Darrick J. Wong 2015-10-17 4455 if (ext4_has_feature_64bit(sb) &&
eb40a09c679d7f Jose R. Santos 2007-07-18 4456 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
eb40a09c679d7f Jose R. Santos 2007-07-18 4457 JBD2_FEATURE_INCOMPAT_64BIT)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4458 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature");
744692dc059845 Jiaying Zhang 2010-03-04 4459 goto failed_mount_wq;
eb40a09c679d7f Jose R. Santos 2007-07-18 4460 }
eb40a09c679d7f Jose R. Santos 2007-07-18 4461
25ed6e8a54df90 Darrick J. Wong 2012-05-27 4462 if (!set_journal_csum_feature_set(sb)) {
25ed6e8a54df90 Darrick J. Wong 2012-05-27 4463 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum "
25ed6e8a54df90 Darrick J. Wong 2012-05-27 4464 "feature set");
25ed6e8a54df90 Darrick J. Wong 2012-05-27 4465 goto failed_mount_wq;
d4da6c9ccf648f Linus Torvalds 2009-11-02 4466 }
818d276ceb83aa Girish Shilamkar 2008-01-28 4467
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4468 /* We have now updated the journal if required, so we can
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4469 * validate the data journaling mode. */
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4470 switch (test_opt(sb, DATA_FLAGS)) {
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4471 case 0:
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4472 /* No mode set, assume a default based on the journal
63f5793351d821 Andrew Morton 2006-10-11 4473 * capabilities: ORDERED_DATA if the journal can
63f5793351d821 Andrew Morton 2006-10-11 4474 * cope, else JOURNAL_DATA
63f5793351d821 Andrew Morton 2006-10-11 4475 */
dab291af8d6307 Mingming Cao 2006-10-11 4476 if (jbd2_journal_check_available_features
27f394a7718d00 Tyson Nottingham 2018-03-30 4477 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
fd8c37eccdda21 Theodore Ts'o 2010-12-15 4478 set_opt(sb, ORDERED_DATA);
27f394a7718d00 Tyson Nottingham 2018-03-30 4479 sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA;
27f394a7718d00 Tyson Nottingham 2018-03-30 4480 } else {
fd8c37eccdda21 Theodore Ts'o 2010-12-15 4481 set_opt(sb, JOURNAL_DATA);
27f394a7718d00 Tyson Nottingham 2018-03-30 4482 sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
27f394a7718d00 Tyson Nottingham 2018-03-30 4483 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4484 break;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4485
617ba13b31fbf5 Mingming Cao 2006-10-11 4486 case EXT4_MOUNT_ORDERED_DATA:
617ba13b31fbf5 Mingming Cao 2006-10-11 4487 case EXT4_MOUNT_WRITEBACK_DATA:
dab291af8d6307 Mingming Cao 2006-10-11 4488 if (!jbd2_journal_check_available_features
dab291af8d6307 Mingming Cao 2006-10-11 4489 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4490 ext4_msg(sb, KERN_ERR, "Journal does not support "
b31e15527a9bb7 Eric Sandeen 2009-06-04 4491 "requested data journaling mode");
744692dc059845 Jiaying Zhang 2010-03-04 4492 goto failed_mount_wq;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4493 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4494 default:
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4495 break;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4496 }
ab04df78181b27 Jan Kara 2016-12-03 4497
ab04df78181b27 Jan Kara 2016-12-03 4498 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA &&
ab04df78181b27 Jan Kara 2016-12-03 4499 test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
ab04df78181b27 Jan Kara 2016-12-03 4500 ext4_msg(sb, KERN_ERR, "can't mount with "
ab04df78181b27 Jan Kara 2016-12-03 4501 "journal_async_commit in data=ordered mode");
ab04df78181b27 Jan Kara 2016-12-03 4502 goto failed_mount_wq;
ab04df78181b27 Jan Kara 2016-12-03 4503 }
ab04df78181b27 Jan Kara 2016-12-03 4504
b3881f74b31b7d Theodore Ts'o 2009-01-05 4505 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4506
18aadd47f88464 Bobi Jam 2012-02-20 4507 sbi->s_journal->j_commit_callback = ext4_journal_commit_callback;
18aadd47f88464 Bobi Jam 2012-02-20 4508
ce7e010aef63dc Theodore Ts'o 2010-11-03 4509 no_journal:
cdb7ee4c632759 Tahsin Erdogan 2017-06-22 4510 if (!test_opt(sb, NO_MBCACHE)) {
47387409ee2e09 Tahsin Erdogan 2017-06-22 4511 sbi->s_ea_block_cache = ext4_xattr_create_cache();
47387409ee2e09 Tahsin Erdogan 2017-06-22 4512 if (!sbi->s_ea_block_cache) {
cdb7ee4c632759 Tahsin Erdogan 2017-06-22 4513 ext4_msg(sb, KERN_ERR,
cdb7ee4c632759 Tahsin Erdogan 2017-06-22 4514 "Failed to create ea_block_cache");
9c191f701ce9f9 T Makphaibulchoke 2014-03-18 4515 goto failed_mount_wq;
9c191f701ce9f9 T Makphaibulchoke 2014-03-18 4516 }
9c191f701ce9f9 T Makphaibulchoke 2014-03-18 4517
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4518 if (ext4_has_feature_ea_inode(sb)) {
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4519 sbi->s_ea_inode_cache = ext4_xattr_create_cache();
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4520 if (!sbi->s_ea_inode_cache) {
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4521 ext4_msg(sb, KERN_ERR,
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4522 "Failed to create ea_inode_cache");
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4523 goto failed_mount_wq;
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4524 }
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4525 }
cdb7ee4c632759 Tahsin Erdogan 2017-06-22 4526 }
dec214d00e0d78 Tahsin Erdogan 2017-06-22 4527
c93d8f88580921 Eric Biggers 2019-07-22 4528 if (ext4_has_feature_verity(sb) && blocksize != PAGE_SIZE) {
c93d8f88580921 Eric Biggers 2019-07-22 4529 ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity");
c93d8f88580921 Eric Biggers 2019-07-22 4530 goto failed_mount_wq;
c93d8f88580921 Eric Biggers 2019-07-22 4531 }
c93d8f88580921 Eric Biggers 2019-07-22 4532
bc98a42c1f7d0f David Howells 2017-07-17 4533 if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) &&
e2b911c53584a9 Darrick J. Wong 2015-10-17 4534 !ext4_has_feature_encrypt(sb)) {
e2b911c53584a9 Darrick J. Wong 2015-10-17 4535 ext4_set_feature_encrypt(sb);
6ddb2447846a8e Theodore Ts'o 2015-04-16 4536 ext4_commit_super(sb, 1);
6ddb2447846a8e Theodore Ts'o 2015-04-16 4537 }
6ddb2447846a8e Theodore Ts'o 2015-04-16 4538
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4539 /*
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4540 * Get the # of file system overhead blocks from the
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4541 * superblock if present.
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4542 */
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4543 if (es->s_overhead_clusters)
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4544 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters);
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4545 else {
07aa2ea13814ea Lukas Czerner 2012-11-08 4546 err = ext4_calculate_overhead(sb);
07aa2ea13814ea Lukas Czerner 2012-11-08 4547 if (err)
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4548 goto failed_mount_wq;
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4549 }
952fc18ef9ec70 Theodore Ts'o 2012-07-09 4550
fd89d5f2030ac8 Tejun Heo 2011-02-01 4551 /*
fd89d5f2030ac8 Tejun Heo 2011-02-01 4552 * The maximum number of concurrent works can be high and
fd89d5f2030ac8 Tejun Heo 2011-02-01 4553 * concurrency isn't really necessary. Limit it to 1.
fd89d5f2030ac8 Tejun Heo 2011-02-01 4554 */
2e8fa54e3b48e4 Jan Kara 2013-06-04 4555 EXT4_SB(sb)->rsv_conversion_wq =
2e8fa54e3b48e4 Jan Kara 2013-06-04 4556 alloc_workqueue("ext4-rsv-conversion", WQ_MEM_RECLAIM | WQ_UNBOUND, 1);
2e8fa54e3b48e4 Jan Kara 2013-06-04 4557 if (!EXT4_SB(sb)->rsv_conversion_wq) {
2e8fa54e3b48e4 Jan Kara 2013-06-04 4558 printk(KERN_ERR "EXT4-fs: failed to create workqueue\n");
07aa2ea13814ea Lukas Czerner 2012-11-08 4559 ret = -ENOMEM;
2e8fa54e3b48e4 Jan Kara 2013-06-04 4560 goto failed_mount4;
2e8fa54e3b48e4 Jan Kara 2013-06-04 4561 }
2e8fa54e3b48e4 Jan Kara 2013-06-04 4562
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4563 /*
dab291af8d6307 Mingming Cao 2006-10-11 4564 * The jbd2_journal_load will have done any necessary log recovery,
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4565 * so we can safely mount the rest of the filesystem now.
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4566 */
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4567
8a363970d1dc38 Theodore Ts'o 2018-12-19 4568 root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL);
1d1fe1ee02b9ac David Howells 2008-02-07 4569 if (IS_ERR(root)) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4570 ext4_msg(sb, KERN_ERR, "get root inode failed");
1d1fe1ee02b9ac David Howells 2008-02-07 4571 ret = PTR_ERR(root);
32a9bb57d7c1fd Manish Katiyar 2011-02-27 4572 root = NULL;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4573 goto failed_mount4;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4574 }
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4575 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
b31e15527a9bb7 Eric Sandeen 2009-06-04 4576 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck");
94bf608a18fa44 Al Viro 2012-01-09 4577 iput(root);
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4578 goto failed_mount4;
ac27a0ec112a08 Dave Kleikamp 2006-10-11 4579 }
b886ee3e778ec2 Gabriel Krisman Bertazi 2019-04-25 4580

:::::: The code at line 4297 was first introduced by commit
:::::: b31e15527a9bb71b6a11a425d17ce139a62f5af5 ext4: Change all super.c messages to print the device

:::::: TO: Eric Sandeen <sandeen@xxxxxxxxxx>
:::::: CC: Theodore Ts'o <tytso@xxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip