ext4: move s_reserved_gdt_blocks and addressable checking into ext4_check_geometry()
These two checkings are more suitable to be put into ext4_check_geometry() rather than spreading outside. Signed-off-by: Jason Yan <yanaijie@huawei.com> Link: https://lore.kernel.org/r/20230323140517.1070239-7-yanaijie@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
Родитель
68e624398f
Коммит
269e9226c2
|
@ -4718,6 +4718,25 @@ static int ext4_check_geometry(struct super_block *sb,
|
|||
{
|
||||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||
__u64 blocks_count;
|
||||
int err;
|
||||
|
||||
if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (sb->s_blocksize / 4)) {
|
||||
ext4_msg(sb, KERN_ERR,
|
||||
"Number of reserved GDT blocks insanely large: %d",
|
||||
le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks));
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Test whether we have more sectors than will fit in sector_t,
|
||||
* and whether the max offset is addressable by the page cache.
|
||||
*/
|
||||
err = generic_check_addressable(sb->s_blocksize_bits,
|
||||
ext4_blocks_count(es));
|
||||
if (err) {
|
||||
ext4_msg(sb, KERN_ERR, "filesystem"
|
||||
" too large to mount safely on this system");
|
||||
return err;
|
||||
}
|
||||
|
||||
/* check blocks count against device size */
|
||||
blocks_count = sb_bdev_nr_blocks(sb);
|
||||
|
@ -5174,13 +5193,6 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
|
|||
if (ext4_check_feature_compatibility(sb, es, silent))
|
||||
goto failed_mount;
|
||||
|
||||
if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (sb->s_blocksize / 4)) {
|
||||
ext4_msg(sb, KERN_ERR,
|
||||
"Number of reserved GDT blocks insanely large: %d",
|
||||
le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks));
|
||||
goto failed_mount;
|
||||
}
|
||||
|
||||
if (sbi->s_daxdev) {
|
||||
if (sb->s_blocksize == PAGE_SIZE)
|
||||
set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags);
|
||||
|
@ -5252,18 +5264,6 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
|
|||
if (ext4_handle_clustersize(sb))
|
||||
goto failed_mount;
|
||||
|
||||
/*
|
||||
* Test whether we have more sectors than will fit in sector_t,
|
||||
* and whether the max offset is addressable by the page cache.
|
||||
*/
|
||||
err = generic_check_addressable(sb->s_blocksize_bits,
|
||||
ext4_blocks_count(es));
|
||||
if (err) {
|
||||
ext4_msg(sb, KERN_ERR, "filesystem"
|
||||
" too large to mount safely on this system");
|
||||
goto failed_mount;
|
||||
}
|
||||
|
||||
if (ext4_check_geometry(sb, es))
|
||||
goto failed_mount;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче