diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 830c196ec069..b9999660eb36 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -4022,7 +4022,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) struct inode *root; const char *descr; int ret = -ENOMEM; - int blocksize, clustersize; + int blocksize, logblocksize, clustersize; unsigned int db_count; unsigned int i; int needs_recovery, has_huge_files; @@ -4187,19 +4187,21 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) */ sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; - blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size); + logblocksize = le32_to_cpu(es->s_log_block_size); - if (blocksize == PAGE_SIZE) - set_opt(sb, DIOREAD_NOLOCK); - - if (blocksize < EXT4_MIN_BLOCK_SIZE || - blocksize > EXT4_MAX_BLOCK_SIZE) { + if (logblocksize < EXT4_MIN_BLOCK_LOG_SIZE || + logblocksize > EXT4_MAX_BLOCK_LOG_SIZE) { ext4_msg(sb, KERN_ERR, - "Unsupported filesystem blocksize %d (%d log_block_size)", - blocksize, le32_to_cpu(es->s_log_block_size)); + "Unsupported filesystem log block size (%d log_block_size)", + logblocksize); goto failed_mount; + } else { + blocksize = BLOCK_SIZE << logblocksize; } + if (blocksize == PAGE_SIZE) + set_opt(sb, DIOREAD_NOLOCK); + if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) { sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE; sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO;