ext4: Update ext2/3/4 superblock, group descriptor and inode structures

Most importantly, the superblock provides the used group descriptor size,
which is required for the EXT4_FEATURE_INCOMPAT_64BIT.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
This commit is contained in:
Stefan Brüns 2016-09-17 02:10:06 +02:00 committed by Tom Rini
parent b1edcf0d80
commit 3ee2f977f3

View file

@ -99,6 +99,33 @@ struct ext2_sblock {
char volume_name[16];
char last_mounted_on[64];
__le32 compression_info;
uint8_t prealloc_blocks;
uint8_t prealloc_dir_blocks;
__le16 reserved_gdt_blocks;
uint8_t journal_uuid[16];
__le32 journal_inode;
__le32 journal_dev;
__le32 last_orphan;
__le32 hash_seed[4];
uint8_t default_hash_version;
uint8_t journal_backup_type;
__le16 descriptor_size;
__le32 default_mount_options;
__le32 first_meta_block_group;
__le32 mkfs_time;
__le32 journal_blocks[17];
__le32 total_blocks_high;
__le32 reserved_blocks_high;
__le32 free_blocks_high;
__le16 min_extra_inode_size;
__le16 want_extra_inode_size;
__le32 flags;
__le16 raid_stride;
__le16 mmp_interval;
__le64 mmp_block;
__le32 raid_stripe_width;
uint8_t log2_groups_per_flex;
uint8_t checksum_type;
};
struct ext2_block_group {
@ -109,9 +136,23 @@ struct ext2_block_group {
__le16 free_inodes; /* Free inodes count */
__le16 used_dir_cnt; /* Directories count */
__le16 bg_flags;
__le32 bg_reserved[2];
__le32 bg_exclude_bitmap;
__le16 bg_block_id_csum;
__le16 bg_inode_id_csum;
__le16 bg_itable_unused; /* Unused inodes count */
__le16 bg_checksum; /* crc16(s_uuid+grouo_num+group_desc)*/
__le16 bg_checksum; /* crc16(s_uuid+group_num+group_desc)*/
/* following fields only exist if descriptor size is 64 */
__le32 block_id_high;
__le32 inode_id_high;
__le32 inode_table_id_high;
__le16 free_blocks_high;
__le16 free_inodes_high;
__le16 used_dir_cnt_high;
__le16 bg_itable_unused_high;
__le32 bg_exclude_bitmap_high;
__le16 bg_block_id_csum_high;
__le16 bg_inode_id_csum_high;
__le32 bg_reserved;
};
/* The ext2 inode. */
@ -125,7 +166,7 @@ struct ext2_inode {
__le32 dtime;
__le16 gid;
__le16 nlinks;
__le32 blockcnt; /* Blocks of 512 bytes!! */
__le32 blockcnt; /* Blocks of either 512 or block_size bytes */
__le32 flags;
__le32 osd1;
union {
@ -136,10 +177,11 @@ struct ext2_inode {
__le32 triple_indir_block;
} blocks;
char symlink[60];
char inline_data[60];
} b;
__le32 version;
__le32 acl;
__le32 dir_acl;
__le32 size_high; /* previously dir_acl, but never used */
__le32 fragment_addr;
__le32 osd2[3];
};