}
 }
 
-static int ext4_group_sparse(ext4_group_t group)
-{
-       if (group <= 1)
-               return 1;
-       if (!(group & 1))
-               return 0;
-       return (test_root(group, 7) || test_root(group, 5) ||
-               test_root(group, 3));
-}
-
 /**
  *     ext4_bg_has_super - number of blocks used by the superblock in group
  *     @sb: superblock for filesystem
  */
 int ext4_bg_has_super(struct super_block *sb, ext4_group_t group)
 {
-       if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
-                               EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER) &&
-                       !ext4_group_sparse(group))
+       struct ext4_super_block *es = EXT4_SB(sb)->s_es;
+
+       if (group == 0)
+               return 1;
+       if (EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_SPARSE_SUPER2)) {
+               if (group == le32_to_cpu(es->s_backup_bgs[0]) ||
+                   group == le32_to_cpu(es->s_backup_bgs[1]))
+                       return 1;
+               return 0;
+       }
+       if ((group <= 1) || !EXT4_HAS_RO_COMPAT_FEATURE(sb,
+                                       EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER))
+               return 1;
+       if (!(group & 1))
                return 0;
-       return 1;
+       if (test_root(group, 3) || (test_root(group, 5)) ||
+           test_root(group, 7))
+               return 1;
+
+       return 0;
 }
 
 static unsigned long ext4_bg_num_gdb_meta(struct super_block *sb,
 
        __le32  s_usr_quota_inum;       /* inode for tracking user quota */
        __le32  s_grp_quota_inum;       /* inode for tracking group quota */
        __le32  s_overhead_clusters;    /* overhead blocks/clusters in fs */
-       __le32  s_reserved[108];        /* Padding to the end of the block */
+       __le32  s_backup_bgs[2];        /* groups with sparse_super2 SBs */
+       __le32  s_reserved[106];        /* Padding to the end of the block */
        __le32  s_checksum;             /* crc32c(superblock) */
 };
 
 #define EXT4_FEATURE_COMPAT_EXT_ATTR           0x0008
 #define EXT4_FEATURE_COMPAT_RESIZE_INODE       0x0010
 #define EXT4_FEATURE_COMPAT_DIR_INDEX          0x0020
+#define EXT4_FEATURE_COMPAT_SPARSE_SUPER2      0x0200
 
 #define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
 #define EXT4_FEATURE_RO_COMPAT_LARGE_FILE      0x0002