]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ext2: Drop fragment support
authorJan Kara <jack@suse.cz>
Tue, 13 Jun 2023 10:25:52 +0000 (12:25 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Aug 2023 13:13:58 +0000 (15:13 +0200)
commit 404615d7f1dcd4cca200e9a7a9df3a1dcae1dd62 upstream.

Ext2 has fields in superblock reserved for subblock allocation support.
However that never landed. Drop the many years dead code.

Reported-by: syzbot+af5e10f73dbff48f70af@syzkaller.appspotmail.com
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ext2/ext2.h
fs/ext2/super.c

index a610c096f3a9d387629643e051e99861edd05ae0..5207ce805a399f106a52d5619c8e4558b46d9a4f 100644 (file)
@@ -70,10 +70,7 @@ struct mb_cache;
  * second extended-fs super-block data in memory
  */
 struct ext2_sb_info {
-       unsigned long s_frag_size;      /* Size of a fragment in bytes */
-       unsigned long s_frags_per_block;/* Number of fragments per block */
        unsigned long s_inodes_per_block;/* Number of inodes per block */
-       unsigned long s_frags_per_group;/* Number of fragments in a group */
        unsigned long s_blocks_per_group;/* Number of blocks in a group */
        unsigned long s_inodes_per_group;/* Number of inodes in a group */
        unsigned long s_itb_per_group;  /* Number of inode table blocks per group */
@@ -187,15 +184,6 @@ static inline struct ext2_sb_info *EXT2_SB(struct super_block *sb)
 #define EXT2_INODE_SIZE(s)             (EXT2_SB(s)->s_inode_size)
 #define EXT2_FIRST_INO(s)              (EXT2_SB(s)->s_first_ino)
 
-/*
- * Macro-instructions used to manage fragments
- */
-#define EXT2_MIN_FRAG_SIZE             1024
-#define        EXT2_MAX_FRAG_SIZE              4096
-#define EXT2_MIN_FRAG_LOG_SIZE           10
-#define EXT2_FRAG_SIZE(s)              (EXT2_SB(s)->s_frag_size)
-#define EXT2_FRAGS_PER_BLOCK(s)                (EXT2_SB(s)->s_frags_per_block)
-
 /*
  * Structure of a blocks group descriptor
  */
index 486a43e347950f30496dadd9e1413cd589535c70..81798b7cbde2d1856571e29e2a06dca11714f398 100644 (file)
@@ -670,10 +670,9 @@ static int ext2_setup_super (struct super_block * sb,
                es->s_max_mnt_count = cpu_to_le16(EXT2_DFL_MAX_MNT_COUNT);
        le16_add_cpu(&es->s_mnt_count, 1);
        if (test_opt (sb, DEBUG))
-               ext2_msg(sb, KERN_INFO, "%s, %s, bs=%lu, fs=%lu, gc=%lu, "
+               ext2_msg(sb, KERN_INFO, "%s, %s, bs=%lu, gc=%lu, "
                        "bpg=%lu, ipg=%lu, mo=%04lx]",
                        EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize,
-                       sbi->s_frag_size,
                        sbi->s_groups_count,
                        EXT2_BLOCKS_PER_GROUP(sb),
                        EXT2_INODES_PER_GROUP(sb),
@@ -1012,14 +1011,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
                }
        }
 
-       sbi->s_frag_size = EXT2_MIN_FRAG_SIZE <<
-                                  le32_to_cpu(es->s_log_frag_size);
-       if (sbi->s_frag_size == 0)
-               goto cantfind_ext2;
-       sbi->s_frags_per_block = sb->s_blocksize / sbi->s_frag_size;
-
        sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
-       sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group);
        sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
 
        sbi->s_inodes_per_block = sb->s_blocksize / EXT2_INODE_SIZE(sb);
@@ -1045,11 +1037,10 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
                goto failed_mount;
        }
 
-       if (sb->s_blocksize != sbi->s_frag_size) {
+       if (es->s_log_frag_size != es->s_log_block_size) {
                ext2_msg(sb, KERN_ERR,
-                       "error: fragsize %lu != blocksize %lu"
-                       "(not supported yet)",
-                       sbi->s_frag_size, sb->s_blocksize);
+                       "error: fragsize log %u != blocksize log %u",
+                       le32_to_cpu(es->s_log_frag_size), sb->s_blocksize_bits);
                goto failed_mount;
        }
 
@@ -1059,12 +1050,6 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
                        sbi->s_blocks_per_group);
                goto failed_mount;
        }
-       if (sbi->s_frags_per_group > sb->s_blocksize * 8) {
-               ext2_msg(sb, KERN_ERR,
-                       "error: #fragments per group too big: %lu",
-                       sbi->s_frags_per_group);
-               goto failed_mount;
-       }
        if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
            sbi->s_inodes_per_group > sb->s_blocksize * 8) {
                ext2_msg(sb, KERN_ERR,