mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 14:24:11 +08:00
ext2: Drop fragment support
commit 404615d7f1
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>
This commit is contained in:
parent
d160941e15
commit
27f92aad4f
@ -70,10 +70,7 @@ struct mb_cache;
|
|||||||
* second extended-fs super-block data in memory
|
* second extended-fs super-block data in memory
|
||||||
*/
|
*/
|
||||||
struct ext2_sb_info {
|
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_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_blocks_per_group;/* Number of blocks in a group */
|
||||||
unsigned long s_inodes_per_group;/* Number of inodes 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 */
|
unsigned long s_itb_per_group; /* Number of inode table blocks per group */
|
||||||
@ -188,15 +185,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_INODE_SIZE(s) (EXT2_SB(s)->s_inode_size)
|
||||||
#define EXT2_FIRST_INO(s) (EXT2_SB(s)->s_first_ino)
|
#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
|
* Structure of a blocks group descriptor
|
||||||
*/
|
*/
|
||||||
|
@ -668,10 +668,9 @@ static int ext2_setup_super (struct super_block * sb,
|
|||||||
es->s_max_mnt_count = cpu_to_le16(EXT2_DFL_MAX_MNT_COUNT);
|
es->s_max_mnt_count = cpu_to_le16(EXT2_DFL_MAX_MNT_COUNT);
|
||||||
le16_add_cpu(&es->s_mnt_count, 1);
|
le16_add_cpu(&es->s_mnt_count, 1);
|
||||||
if (test_opt (sb, DEBUG))
|
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]",
|
"bpg=%lu, ipg=%lu, mo=%04lx]",
|
||||||
EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize,
|
EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize,
|
||||||
sbi->s_frag_size,
|
|
||||||
sbi->s_groups_count,
|
sbi->s_groups_count,
|
||||||
EXT2_BLOCKS_PER_GROUP(sb),
|
EXT2_BLOCKS_PER_GROUP(sb),
|
||||||
EXT2_INODES_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_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_group = le32_to_cpu(es->s_inodes_per_group);
|
||||||
|
|
||||||
sbi->s_inodes_per_block = sb->s_blocksize / EXT2_INODE_SIZE(sb);
|
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;
|
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,
|
ext2_msg(sb, KERN_ERR,
|
||||||
"error: fragsize %lu != blocksize %lu"
|
"error: fragsize log %u != blocksize log %u",
|
||||||
"(not supported yet)",
|
le32_to_cpu(es->s_log_frag_size), sb->s_blocksize_bits);
|
||||||
sbi->s_frag_size, sb->s_blocksize);
|
|
||||||
goto failed_mount;
|
goto failed_mount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1066,12 +1057,6 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
|
|||||||
sbi->s_blocks_per_group, sbi->s_inodes_per_group + 3);
|
sbi->s_blocks_per_group, sbi->s_inodes_per_group + 3);
|
||||||
goto failed_mount;
|
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 ||
|
if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
|
||||||
sbi->s_inodes_per_group > sb->s_blocksize * 8) {
|
sbi->s_inodes_per_group > sb->s_blocksize * 8) {
|
||||||
ext2_msg(sb, KERN_ERR,
|
ext2_msg(sb, KERN_ERR,
|
||||||
|
Loading…
Reference in New Issue
Block a user