jbd2: checking valid features early in journal_get_superblock()
authorZhang Yi <yi.zhang@huawei.com>
Fri, 11 Aug 2023 06:36:02 +0000 (14:36 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 15 Aug 2023 13:00:33 +0000 (09:00 -0400)
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>
fs/jbd2/journal.c

index 95499b3..4d4494b 100644 (file)
@@ -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));