lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sun, 29 Mar 2020 06:44:06 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Josh Triplett <josh@...htriplett.org>
Cc:     kbuild-all@...ts.01.org, linux-ext4@...r.kernel.org,
        linux-kernel@...r.kernel.org, Theodore Ts'o <tytso@....edu>,
        Andreas Dilger <adilger.kernel@...ger.ca>
Subject: Re: [PATCH] ext4: Fix incorrect group count in ext4_fill_super error
 message

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@...el.com>

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@...hat.com>
:::::: CC: Theodore Ts'o <tytso@....edu>

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

Download attachment ".config.gz" of type "application/gzip" (11735 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ