diff options
| author | Zhang Yi <yi.zhang@huawei.com> | 2023-08-11 14:36:02 +0800 | 
|---|---|---|
| committer | Theodore Ts'o <tytso@mit.edu> | 2023-08-15 09:00:33 -0400 | 
| commit | e4adf8b837087b5bb57fff6827e10ec877a50f64 (patch) | |
| tree | a7cd928365c2dbcb0625da81c7938b220f05233b | |
| parent | 9600f3e5cfd0360b10c271149032c77917baedc5 (diff) | |
jbd2: checking valid features early in journal_get_superblock()
journal_get_superblock() is used to check validity of the jounal
supberblock, so move the features checks from jbd2_journal_load() to
journal_get_superblock().
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230811063610.2980059-5-yi.zhang@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
| -rw-r--r-- | fs/jbd2/journal.c | 30 | 
1 files changed, 15 insertions, 15 deletions
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 95499b3184aa..4d4494b42b39 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -1398,6 +1398,21 @@ static int journal_get_superblock(journal_t *journal)  		goto out;  	} +	/* +	 * If this is a V2 superblock, then we have to check the +	 * features flags on it. +	 */ +	if (!jbd2_format_support_feature(journal)) +		return 0; + +	if ((sb->s_feature_ro_compat & +			~cpu_to_be32(JBD2_KNOWN_ROCOMPAT_FEATURES)) || +	    (sb->s_feature_incompat & +			~cpu_to_be32(JBD2_KNOWN_INCOMPAT_FEATURES))) { +		printk(KERN_WARNING "JBD2: Unrecognised features on journal\n"); +		goto out; +	} +  	if (jbd2_has_feature_csum2(journal) &&  	    jbd2_has_feature_csum3(journal)) {  		/* Can't have checksum v2 and v3 at the same time! */ @@ -2060,21 +2075,6 @@ int jbd2_journal_load(journal_t *journal)  	journal_superblock_t *sb = journal->j_superblock;  	/* -	 * If this is a V2 superblock, then we have to check the -	 * features flags on it. -	 */ -	if (jbd2_format_support_feature(journal)) { -		if ((sb->s_feature_ro_compat & -		     ~cpu_to_be32(JBD2_KNOWN_ROCOMPAT_FEATURES)) || -		    (sb->s_feature_incompat & -		     ~cpu_to_be32(JBD2_KNOWN_INCOMPAT_FEATURES))) { -			printk(KERN_WARNING -				"JBD2: Unrecognised features on journal\n"); -			return -EINVAL; -		} -	} - -	/*  	 * Create a slab for this blocksize  	 */  	err = jbd2_journal_create_slab(be32_to_cpu(sb->s_blocksize));  | 
