@@ -233,21 +233,21 @@ struct ext2_dx_root_info {
#define EXT2_HASH_FLAG_INCOMPAT 0x1
struct ext2_dx_entry {
- __u32 hash;
- __u32 block;
+ __le32 hash;
+ __le32 block;
};
struct ext2_dx_countlimit {
- __u16 limit;
- __u16 count;
+ __le16 limit;
+ __le16 count;
};
/*
* This goes at the end of each htree block.
*/
struct ext2_dx_tail {
- __u32 dt_reserved;
- __u32 dt_checksum; /* crc32c(uuid+inum+dxblock) */
+ __le32 dt_reserved;
+ __le32 dt_checksum; /* crc32c(uuid+inum+dxblock) */
};
/*
@@ -894,6 +894,7 @@ struct ext2_dir_entry_tail {
#define EXT4_MMP_SEQ_FSCK 0xE24D4D50U /* mmp_seq value when being fscked */
#define EXT4_MMP_SEQ_MAX 0xE24D4D4FU /* maximum valid mmp_seq value */
+/* Not endian-annotated; it's swapped at read/write time */
struct mmp_struct {
__u32 mmp_magic; /* Magic number for MMP */
__u32 mmp_seq; /* Sequence no. updated periodically */
@@ -26,7 +26,7 @@
* crammed into the end of the block without having to rebalance the tree.
*/
struct ext3_extent_tail {
- __u32 et_checksum; /* crc32c(uuid+inum+extent_block) */
+ __le32 et_checksum; /* crc32c(uuid+inum+extent_block) */
};
/*
@@ -34,10 +34,10 @@ struct ext3_extent_tail {
* it's used at the bottom of the tree
*/
struct ext3_extent {
- __u32 ee_block; /* first logical block extent covers */
- __u16 ee_len; /* number of blocks covered by extent */
- __u16 ee_start_hi; /* high 16 bits of physical block */
- __u32 ee_start; /* low 32 bigs of physical block */
+ __le32 ee_block; /* first logical block extent covers */
+ __le16 ee_len; /* number of blocks covered by extent */
+ __le16 ee_start_hi; /* high 16 bits of physical block */
+ __le32 ee_start; /* low 32 bigs of physical block */
};
/*
@@ -45,22 +45,22 @@ struct ext3_extent {
* it's used at all the levels, but the bottom
*/
struct ext3_extent_idx {
- __u32 ei_block; /* index covers logical blocks from 'block' */
- __u32 ei_leaf; /* pointer to the physical block of the next *
+ __le32 ei_block; /* index covers logical blocks from 'block' */
+ __le32 ei_leaf; /* pointer to the physical block of the next *
* level. leaf or next index could bet here */
- __u16 ei_leaf_hi; /* high 16 bits of physical block */
- __u16 ei_unused;
+ __le16 ei_leaf_hi; /* high 16 bits of physical block */
+ __le16 ei_unused;
};
/*
* each block (leaves and indexes), even inode-stored has header
*/
struct ext3_extent_header {
- __u16 eh_magic; /* probably will support different formats */
- __u16 eh_entries; /* number of valid entries */
- __u16 eh_max; /* capacity of store in entries */
- __u16 eh_depth; /* has tree real underlaying blocks? */
- __u32 eh_generation; /* generation of the tree */
+ __le16 eh_magic; /* probably will support different formats */
+ __le16 eh_entries; /* number of valid entries */
+ __le16 eh_max; /* capacity of store in entries */
+ __le16 eh_depth; /* has tree real underlaying blocks? */
+ __le32 eh_generation; /* generation of the tree */
};
#define EXT3_EXT_MAGIC 0xf30a
@@ -170,7 +170,7 @@ typedef struct journal_block_tag_s
/* Tail of descriptor block, for checksumming */
struct journal_block_tail {
- __u32 t_checksum;
+ __be32 t_checksum;
};
/*
@@ -185,7 +185,7 @@ typedef struct journal_revoke_header_s
/* Tail of revoke block, for checksumming */
struct journal_revoke_tail {
- __u32 r_checksum;
+ __be32 r_checksum;
};
/* Definitions for the journal tag flags word: */
@@ -30,8 +30,8 @@ static const char * const basenames[] = {
/* Header in all newer quotafiles */
struct disk_dqheader {
- __u32 dqh_magic;
- __u32 dqh_version;
+ __le32 dqh_magic;
+ __le32 dqh_version;
} __attribute__ ((packed));
/**
@@ -20,13 +20,13 @@ typedef __u32 qid_t; /* Type in which we store ids in memory */
* so there will be space for exactly 21 quota-entries in a block
*/
struct qt_disk_dqdbheader {
- __u32 dqdh_next_free; /* Number of next block with free
+ __le32 dqdh_next_free; /* Number of next block with free
* entry */
- __u32 dqdh_prev_free; /* Number of previous block with free
+ __le32 dqdh_prev_free; /* Number of previous block with free
* entry */
- __u16 dqdh_entries; /* Number of valid entries in block */
- __u16 dqdh_pad1;
- __u32 dqdh_pad2;
+ __le16 dqdh_entries; /* Number of valid entries in block */
+ __le16 dqdh_pad1;
+ __le32 dqdh_pad2;
} __attribute__ ((packed));
struct dquot;
@@ -16,8 +16,8 @@
#define V2_VERSION 1
struct v2_disk_dqheader {
- __u32 dqh_magic; /* Magic number identifying file */
- __u32 dqh_version; /* File version */
+ __le32 dqh_magic; /* Magic number identifying file */
+ __le32 dqh_version; /* File version */
} __attribute__ ((packed));
/* Flags for version specific files */
@@ -25,30 +25,30 @@ struct v2_disk_dqheader {
/* Header with type and version specific information */
struct v2_disk_dqinfo {
- __u32 dqi_bgrace; /* Time before block soft limit becomes
+ __le32 dqi_bgrace; /* Time before block soft limit becomes
* hard limit */
- __u32 dqi_igrace; /* Time before inode soft limit becomes
+ __le32 dqi_igrace; /* Time before inode soft limit becomes
* hard limit */
- __u32 dqi_flags; /* Flags for quotafile (DQF_*) */
- __u32 dqi_blocks; /* Number of blocks in file */
- __u32 dqi_free_blk; /* Number of first free block in the list */
- __u32 dqi_free_entry; /* Number of block with at least one
+ __le32 dqi_flags; /* Flags for quotafile (DQF_*) */
+ __le32 dqi_blocks; /* Number of blocks in file */
+ __le32 dqi_free_blk; /* Number of first free block in the list */
+ __le32 dqi_free_entry; /* Number of block with at least one
* free entry */
} __attribute__ ((packed));
struct v2r1_disk_dqblk {
- __u32 dqb_id; /* id this quota applies to */
- __u32 dqb_pad;
- __u64 dqb_ihardlimit; /* absolute limit on allocated inodes */
- __u64 dqb_isoftlimit; /* preferred inode limit */
- __u64 dqb_curinodes; /* current # allocated inodes */
- __u64 dqb_bhardlimit; /* absolute limit on disk space
+ __le32 dqb_id; /* id this quota applies to */
+ __le32 dqb_pad;
+ __le64 dqb_ihardlimit; /* absolute limit on allocated inodes */
+ __le64 dqb_isoftlimit; /* preferred inode limit */
+ __le64 dqb_curinodes; /* current # allocated inodes */
+ __le64 dqb_bhardlimit; /* absolute limit on disk space
* (in QUOTABLOCK_SIZE) */
- __u64 dqb_bsoftlimit; /* preferred limit on disk space
+ __le64 dqb_bsoftlimit; /* preferred limit on disk space
* (in QUOTABLOCK_SIZE) */
- __u64 dqb_curspace; /* current space occupied (in bytes) */
- __u64 dqb_btime; /* time limit for excessive disk use */
- __u64 dqb_itime; /* time limit for excessive inode use */
+ __le64 dqb_curspace; /* current space occupied (in bytes) */
+ __le64 dqb_btime; /* time limit for excessive disk use */
+ __le64 dqb_itime; /* time limit for excessive inode use */
} __attribute__ ((packed));
#endif
This annotates most on-disk structures for endianness; however it does not annotate some, like the superblock, inodes, mmp, etc, as these are swapped in-place at this point. This is a little inconsistent, but should help catch some endian mistakes, at least. Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- lib/ext2fs/ext2_fs.h | 13 +++++++------ lib/ext2fs/ext3_extents.h | 28 ++++++++++++++-------------- lib/ext2fs/kernel-jbd.h | 4 ++-- lib/quota/quotaio.c | 4 ++-- lib/quota/quotaio_tree.h | 10 +++++----- lib/quota/quotaio_v2.h | 36 ++++++++++++++++++------------------ 6 files changed, 48 insertions(+), 47 deletions(-) -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html