summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorAntony Pavlov <antonynpavlov@gmail.com>2017-03-20 15:35:30 +0300
committerSascha Hauer <s.hauer@pengutronix.de>2017-03-30 08:23:19 +0200
commit074d4123edbae73271ddc2791410d7c444445738 (patch)
tree2b61a7ee2e7ac09749ba1828d2e6598b41f5d601 /fs
parentc763bba7a0ea5742e5ad0cc29c66492feaad4860 (diff)
downloadbarebox-074d4123edbae73271ddc2791410d7c444445738.tar.gz
barebox-074d4123edbae73271ddc2791410d7c444445738.tar.xz
ext4: Update ext2/3/4 superblock, group descriptor and inode structures
This is an adoption of the U-Boot commit | commit 3ee2f977f3649bcc1d0de86356145e8e6999575a | Author: Stefan Brüns <stefan.bruens@rwth-aachen.de> | Date: Sat Sep 17 02:10:06 2016 +0200 | | 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> Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'fs')
-rw-r--r--fs/ext4/ext_common.h50
1 files changed, 46 insertions, 4 deletions
diff --git a/fs/ext4/ext_common.h b/fs/ext4/ext_common.h
index 63cd4d26c1..e82b56b86a 100644
--- a/fs/ext4/ext_common.h
+++ b/fs/ext4/ext_common.h
@@ -112,6 +112,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 {
@@ -122,9 +149,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. */
@@ -138,7 +179,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 {
@@ -149,10 +190,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];
};