diff options
Diffstat (limited to 'fs/ext4/super.c')
| -rw-r--r-- | fs/ext4/super.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 312211ee05a..d4ca92aab51 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1300,9 +1300,11 @@ static int parse_options(char *options, struct super_block *sb,  			*journal_devnum = option;  			break;  		case Opt_journal_checksum: -			break;	/* Kept for backwards compatibility */ +			set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM); +			break;  		case Opt_journal_async_commit:  			set_opt(sbi->s_mount_opt, JOURNAL_ASYNC_COMMIT); +			set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM);  			break;  		case Opt_noload:  			set_opt(sbi->s_mount_opt, NOLOAD); @@ -2759,14 +2761,20 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)  		goto failed_mount4;  	} -	jbd2_journal_set_features(sbi->s_journal, -				  JBD2_FEATURE_COMPAT_CHECKSUM, 0, 0); -	if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) -		jbd2_journal_set_features(sbi->s_journal, 0, 0, +	if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) { +		jbd2_journal_set_features(sbi->s_journal, +				JBD2_FEATURE_COMPAT_CHECKSUM, 0,  				JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); -	else +	} else if (test_opt(sb, JOURNAL_CHECKSUM)) { +		jbd2_journal_set_features(sbi->s_journal, +				JBD2_FEATURE_COMPAT_CHECKSUM, 0, 0);  		jbd2_journal_clear_features(sbi->s_journal, 0, 0,  				JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); +	} else { +		jbd2_journal_clear_features(sbi->s_journal, +				JBD2_FEATURE_COMPAT_CHECKSUM, 0, +				JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); +	}  	/* We have now updated the journal if required, so we can  	 * validate the data journaling mode. */  |