[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1525235166-6448-6-git-send-email-adilger@dilger.ca>
Date: Tue, 1 May 2018 22:26:01 -0600
From: Andreas Dilger <adilger@...ger.ca>
To: tytso@....edu
Cc: linux-ext4@...r.kernel.org, Andreas Dilger <adilger@...ger.ca>
Subject: [PATCH 05/10] ext2fs: annotate superblock/inode offsets
Add byte offsets for the fields in ext2_super_block and ext2_inode
for convenience when debugging on-disk structures.
Signed-off-by: Andreas Dilger <adilger@...ger.ca>
---
lib/ext2fs/ext2_fs.h | 115 +++++++++++++++++++++++++--------------------------
1 file changed, 57 insertions(+), 58 deletions(-)
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index 7d62694..55fa78e 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -378,17 +378,17 @@ struct ext4_new_group_input {
* Structure of an inode on the disk
*/
struct ext2_inode {
- __u16 i_mode; /* File mode */
+/*00*/ __u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Inode change time */
- __u32 i_mtime; /* Modification time */
+/*10*/ __u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* Blocks count */
- __u32 i_flags; /* File flags */
+/*20*/ __u32 i_flags; /* File flags */
union {
struct {
__u32 l_i_version; /* was l_i_reserved1 */
@@ -397,11 +397,11 @@ struct ext2_inode {
__u32 h_i_translator;
} hurd1;
} osd1; /* OS dependent 1 */
- __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
- __u32 i_generation; /* File version (for NFS) */
+/*28*/ __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
+/*64*/ __u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl; /* File ACL */
__u32 i_size_high;
- __u32 i_faddr; /* Fragment address */
+/*70*/ __u32 i_faddr; /* Fragment address */
union {
struct {
__u16 l_i_blocks_hi;
@@ -426,17 +426,17 @@ struct ext2_inode {
* Permanent part of an large inode on the disk
*/
struct ext2_inode_large {
- __u16 i_mode; /* File mode */
+/*00*/ __u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Inode Change time */
- __u32 i_mtime; /* Modification time */
+/*10*/ __u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* Blocks count */
- __u32 i_flags; /* File flags */
+/*20*/ __u32 i_flags; /* File flags */
union {
struct {
__u32 l_i_version; /* was l_i_reserved1 */
@@ -445,11 +445,11 @@ struct ext2_inode_large {
__u32 h_i_translator;
} hurd1;
} osd1; /* OS dependent 1 */
- __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
- __u32 i_generation; /* File version (for NFS) */
+/*28*/ __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
+/*64*/ __u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl; /* File ACL */
__u32 i_size_high;
- __u32 i_faddr; /* Fragment address */
+/*70*/ __u32 i_faddr; /* Fragment address */
union {
struct {
__u16 l_i_blocks_hi;
@@ -468,15 +468,15 @@ struct ext2_inode_large {
__u32 h_i_author;
} hurd2;
} osd2; /* OS dependent 2 */
- __u16 i_extra_isize;
+/*80*/ __u16 i_extra_isize;
__u16 i_checksum_hi; /* crc32c(uuid+inum+inode) */
__u32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */
__u32 i_mtime_extra; /* extra Modification time (nsec << 2 | epoch) */
__u32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */
- __u32 i_crtime; /* File creation time */
+/*90*/ __u32 i_crtime; /* File creation time */
__u32 i_crtime_extra; /* extra File creation time (nsec << 2 | epoch)*/
__u32 i_version_hi; /* high 32 bits for 64-bit version */
- __u32 i_projid; /* Project ID */
+/*9c*/ __u32 i_projid; /* Project ID */
};
#define EXT4_INODE_CSUM_HI_EXTRA_END \
@@ -626,30 +626,30 @@ struct ext4_encryption_key {
* Structure of the super block
*/
struct ext2_super_block {
- __u32 s_inodes_count; /* Inodes count */
+/*000*/ __u32 s_inodes_count; /* Inodes count */
__u32 s_blocks_count; /* Blocks count */
__u32 s_r_blocks_count; /* Reserved blocks count */
__u32 s_free_blocks_count; /* Free blocks count */
- __u32 s_free_inodes_count; /* Free inodes count */
+/*010*/ __u32 s_free_inodes_count; /* Free inodes count */
__u32 s_first_data_block; /* First Data Block */
__u32 s_log_block_size; /* Block size */
__u32 s_log_cluster_size; /* Allocation cluster size */
- __u32 s_blocks_per_group; /* # Blocks per group */
+/*020*/ __u32 s_blocks_per_group; /* # Blocks per group */
__u32 s_clusters_per_group; /* # Fragments per group */
__u32 s_inodes_per_group; /* # Inodes per group */
__u32 s_mtime; /* Mount time */
- __u32 s_wtime; /* Write time */
+/*030*/ __u32 s_wtime; /* Write time */
__u16 s_mnt_count; /* Mount count */
__s16 s_max_mnt_count; /* Maximal mount count */
__u16 s_magic; /* Magic signature */
__u16 s_state; /* File system state */
__u16 s_errors; /* Behaviour when detecting errors */
__u16 s_minor_rev_level; /* minor revision level */
- __u32 s_lastcheck; /* time of last check */
+/*040*/ __u32 s_lastcheck; /* time of last check */
__u32 s_checkinterval; /* max. time between checks */
__u32 s_creator_os; /* OS */
__u32 s_rev_level; /* Revision level */
- __u16 s_def_resuid; /* Default uid for reserved blocks */
+/*050*/ __u16 s_def_resuid; /* Default uid for reserved blocks */
__u16 s_def_resgid; /* Default gid for reserved blocks */
/*
* These fields are for EXT2_DYNAMIC_REV superblocks only.
@@ -668,12 +668,12 @@ struct ext2_super_block {
__u16 s_inode_size; /* size of inode structure */
__u16 s_block_group_nr; /* block group # of this superblock */
__u32 s_feature_compat; /* compatible feature set */
- __u32 s_feature_incompat; /* incompatible feature set */
+/*060*/ __u32 s_feature_incompat; /* incompatible feature set */
__u32 s_feature_ro_compat; /* readonly-compatible feature set */
- __u8 s_uuid[16]; /* 128-bit uuid for volume */
- char s_volume_name[EXT2_LABEL_LEN]; /* volume name */
- char s_last_mounted[64]; /* directory where last mounted */
- __u32 s_algorithm_usage_bitmap; /* For compression */
+/*068*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */
+/*078*/ char s_volume_name[EXT2_LABEL_LEN]; /* volume name */
+/*088*/ char s_last_mounted[64]; /* directory where last mounted */
+/*0c8*/ __u32 s_algorithm_usage_bitmap; /* For compression */
/*
* Performance hints. Directory preallocation should only
* happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
@@ -684,63 +684,62 @@ struct ext2_super_block {
/*
* Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
*/
- __u8 s_journal_uuid[16]; /* uuid of journal superblock */
- __u32 s_journal_inum; /* inode number of journal file */
+/*0d0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
+/*0e0*/ __u32 s_journal_inum; /* inode number of journal file */
__u32 s_journal_dev; /* device number of journal file */
__u32 s_last_orphan; /* start of list of inodes to delete */
- __u32 s_hash_seed[4]; /* HTREE hash seed */
- __u8 s_def_hash_version; /* Default hash version to use */
- __u8 s_jnl_backup_type; /* Default type of journal backup */
+/*0ec*/ __u32 s_hash_seed[4]; /* HTREE hash seed */
+/*0fc*/ __u8 s_def_hash_version; /* Default hash version to use */
+ __u8 s_jnl_backup_type; /* Default type of journal backup */
__u16 s_desc_size; /* Group desc. size: INCOMPAT_64BIT */
- __u32 s_default_mount_opts;
+/*100*/ __u32 s_default_mount_opts; /* default EXT2_MOUNT_* flags used */
__u32 s_first_meta_bg; /* First metablock group */
__u32 s_mkfs_time; /* When the filesystem was created */
- __u32 s_jnl_blocks[17]; /* Backup of the journal inode */
- __u32 s_blocks_count_hi; /* Blocks count high 32bits */
+/*10c*/ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */
+/*150*/ __u32 s_blocks_count_hi; /* Blocks count high 32bits */
__u32 s_r_blocks_count_hi; /* Reserved blocks count high 32 bits*/
- __u32 s_free_blocks_hi; /* Free blocks count */
+ __u32 s_free_blocks_hi; /* Free blocks count */
__u16 s_min_extra_isize; /* All inodes have at least # bytes */
- __u16 s_want_extra_isize; /* New inodes should reserve # bytes */
- __u32 s_flags; /* Miscellaneous flags */
- __u16 s_raid_stride; /* RAID stride */
- __u16 s_mmp_update_interval; /* # seconds to wait in MMP checking */
- __u64 s_mmp_block; /* Block for multi-mount protection */
- __u32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
+ __u16 s_want_extra_isize; /* New inodes should reserve # bytes */
+/*160*/ __u32 s_flags; /* Miscellaneous flags */
+ __u16 s_raid_stride; /* RAID stride in blocks */
+ __u16 s_mmp_update_interval; /* # seconds to wait in MMP checking */
+ __u64 s_mmp_block; /* Block for multi-mount protection */
+/*170*/ __u32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
__u8 s_log_groups_per_flex; /* FLEX_BG group size */
- __u8 s_checksum_type; /* metadata checksum algorithm */
+ __u8 s_checksum_type; /* metadata checksum algorithm */
__u8 s_encryption_level; /* versioning level for encryption */
__u8 s_reserved_pad; /* Padding to next 32bits */
__u64 s_kbytes_written; /* nr of lifetime kilobytes written */
- __u32 s_snapshot_inum; /* Inode number of active snapshot */
+/*180*/ __u32 s_snapshot_inum; /* Inode number of active snapshot */
__u32 s_snapshot_id; /* sequential ID of active snapshot */
- __u64 s_snapshot_r_blocks_count; /* reserved blocks for active
- snapshot's future use */
- __u32 s_snapshot_list; /* inode number of the head of the on-disk snapshot list */
+ __u64 s_snapshot_r_blocks_count; /* active snapshot reserved blocks */
+/*190*/ __u32 s_snapshot_list; /* inode number of disk snapshot list */
#define EXT4_S_ERR_START ext4_offsetof(struct ext2_super_block, s_error_count)
__u32 s_error_count; /* number of fs errors */
__u32 s_first_error_time; /* first time an error happened */
__u32 s_first_error_ino; /* inode involved in first error */
- __u64 s_first_error_block; /* block involved of first error */
+/*1a0*/ __u64 s_first_error_block; /* block involved in first error */
__u8 s_first_error_func[32]; /* function where the error happened */
- __u32 s_first_error_line; /* line number where error happened */
+/*1c8*/ __u32 s_first_error_line; /* line number where error happened */
__u32 s_last_error_time; /* most recent time of an error */
- __u32 s_last_error_ino; /* inode involved in last error */
+/*1d0*/ __u32 s_last_error_ino; /* inode involved in last error */
__u32 s_last_error_line; /* line number where error happened */
__u64 s_last_error_block; /* block involved of last error */
- __u8 s_last_error_func[32]; /* function where the error happened */
+/*1e0*/ __u8 s_last_error_func[32]; /* function where the error happened */
#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
- __u8 s_mount_opts[64];
- __u32 s_usr_quota_inum; /* inode number of user quota file */
+/*200*/ __u8 s_mount_opts[64];
+/*240*/ __u32 s_usr_quota_inum; /* inode number of user quota file */
__u32 s_grp_quota_inum; /* inode number of group quota file */
__u32 s_overhead_blocks; /* overhead blocks/clusters in fs */
- __u32 s_backup_bgs[2]; /* If sparse_super2 enabled */
- __u8 s_encrypt_algos[4]; /* Encryption algorithms in use */
- __u8 s_encrypt_pw_salt[16]; /* Salt used for string2key algorithm */
- __le32 s_lpf_ino; /* Location of the lost+found inode */
+/*24c*/ __u32 s_backup_bgs[2]; /* If sparse_super2 enabled */
+/*254*/ __u8 s_encrypt_algos[4]; /* Encryption algorithms in use */
+/*258*/ __u8 s_encrypt_pw_salt[16]; /* Salt used for string2key algorithm */
+/*268*/ __le32 s_lpf_ino; /* Location of the lost+found inode */
__le32 s_prj_quota_inum; /* inode for tracking project quota */
- __le32 s_checksum_seed; /* crc32c(orig_uuid) if csum_seed set */
+/*270*/ __le32 s_checksum_seed; /* crc32c(orig_uuid) if csum_seed set */
__le32 s_reserved[98]; /* Padding to the end of the block */
- __u32 s_checksum; /* crc32c(superblock) */
+/*3fc*/ __u32 s_checksum; /* crc32c(superblock) */
};
#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
--
1.8.0
Powered by blists - more mailing lists