diff options
Diffstat (limited to 'fs/ext4/super.c')
| -rw-r--r-- | fs/ext4/super.c | 22 | 
1 files changed, 11 insertions, 11 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 3cdb0a2fc648..e09f7d1646ba 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1645,9 +1645,7 @@ static int parse_options(char *options, struct super_block *sb,  			 unsigned int *journal_ioprio,  			 int is_remount)  { -#ifdef CONFIG_QUOTA  	struct ext4_sb_info *sbi = EXT4_SB(sb); -#endif  	char *p;  	substring_t args[MAX_OPT_ARGS];  	int token; @@ -1696,6 +1694,16 @@ static int parse_options(char *options, struct super_block *sb,  		}  	}  #endif +	if (test_opt(sb, DIOREAD_NOLOCK)) { +		int blocksize = +			BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size); + +		if (blocksize < PAGE_CACHE_SIZE) { +			ext4_msg(sb, KERN_ERR, "can't mount with " +				 "dioread_nolock if block size != PAGE_SIZE"); +			return 0; +		} +	}  	return 1;  } @@ -3436,15 +3444,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)  			clear_opt(sb, DELALLOC);  	} -	blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size); -	if (test_opt(sb, DIOREAD_NOLOCK)) { -		if (blocksize < PAGE_SIZE) { -			ext4_msg(sb, KERN_ERR, "can't mount with " -				 "dioread_nolock if block size != PAGE_SIZE"); -			goto failed_mount; -		} -	} -  	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |  		(test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0); @@ -3486,6 +3485,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)  	if (!ext4_feature_set_ok(sb, (sb->s_flags & MS_RDONLY)))  		goto failed_mount; +	blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);  	if (blocksize < EXT4_MIN_BLOCK_SIZE ||  	    blocksize > EXT4_MAX_BLOCK_SIZE) {  		ext4_msg(sb, KERN_ERR,  | 
