ext4: change structure fields to __le/__be types
authorMichael Walle <michael@walle.cc>
Mon, 29 Aug 2016 08:46:43 +0000 (10:46 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 23 Sep 2016 13:02:01 +0000 (09:02 -0400)
Change all the types of ext2/4 fields to little endian types and all the
JBD fields to big endian types. Now we can use sparse (make C=1) to check
for statements where we need byteswaps.

Signed-off-by: Michael Walle <michael@walle.cc>
fs/ext4/ext4_journal.h
include/ext_common.h

index d926094becdf5900fdd8ce14e985bdd59ffd408d..d54165ce19cdd2ab2f6256d1c9d09d90b7fd48f5 100644 (file)
@@ -49,9 +49,9 @@ struct dirty_blocks {
 
 /* Standard header for all descriptor blocks: */
 struct journal_header_t {
-       __u32 h_magic;
-       __u32 h_blocktype;
-       __u32 h_sequence;
+       __be32 h_magic;
+       __be32 h_blocktype;
+       __be32 h_sequence;
 };
 
 /* The journal superblock.  All fields are in big-endian byte order. */
@@ -60,35 +60,35 @@ struct journal_superblock_t {
        struct journal_header_t s_header;
 
        /* Static information describing the journal */
-       __u32 s_blocksize;      /* journal device blocksize */
-       __u32 s_maxlen;         /* total blocks in journal file */
-       __u32 s_first;          /* first block of log information */
+       __be32 s_blocksize;     /* journal device blocksize */
+       __be32 s_maxlen;                /* total blocks in journal file */
+       __be32 s_first;         /* first block of log information */
 
        /* Dynamic information describing the current state of the log */
-       __u32 s_sequence;       /* first commit ID expected in log */
-       __u32 s_start;          /* blocknr of start of log */
+       __be32 s_sequence;      /* first commit ID expected in log */
+       __be32 s_start;         /* blocknr of start of log */
 
        /* Error value, as set by journal_abort(). */
-       __s32 s_errno;
+       __be32 s_errno;
 
        /* Remaining fields are only valid in a version-2 superblock */
-       __u32 s_feature_compat; /* compatible feature set */
-       __u32 s_feature_incompat;       /* incompatible feature set */
-       __u32 s_feature_ro_compat;      /* readonly-compatible feature set */
+       __be32 s_feature_compat;        /* compatible feature set */
+       __be32 s_feature_incompat;      /* incompatible feature set */
+       __be32 s_feature_ro_compat;     /* readonly-compatible feature set */
        /* 0x0030 */
        __u8 s_uuid[16];        /* 128-bit uuid for journal */
 
        /* 0x0040 */
-       __u32 s_nr_users;       /* Nr of filesystems sharing log */
+       __be32 s_nr_users;      /* Nr of filesystems sharing log */
 
-       __u32 s_dynsuper;       /* Blocknr of dynamic superblock copy */
+       __be32 s_dynsuper;      /* Blocknr of dynamic superblock copy */
 
        /* 0x0048 */
-       __u32 s_max_transaction;        /* Limit of journal blocks per trans. */
-       __u32 s_max_trans_data; /* Limit of data blocks per trans. */
+       __be32 s_max_transaction;       /* Limit of journal blocks per trans. */
+       __be32 s_max_trans_data;        /* Limit of data blocks per trans. */
 
        /* 0x0050 */
-       __u32 s_padding[44];
+       __be32 s_padding[44];
 
        /* 0x0100 */
        __u8 s_users[16 * 48];  /* ids of all fs'es sharing the log */
@@ -96,13 +96,13 @@ struct journal_superblock_t {
 } ;
 
 struct ext3_journal_block_tag {
-       uint32_t block;
-       uint32_t flags;
+       __be32 block;
+       __be32 flags;
 };
 
 struct journal_revoke_header_t {
        struct journal_header_t r_header;
-       int r_count;            /* Count of bytes used in the block */
+       __be32 r_count;         /* Count of bytes used in the block */
 };
 
 struct revoke_blk_list {
index 6cddf166d947a0b92a1bd6a76f3b6a0e168995eb..c12e5269040f6ec9ce4d17a57f17ae4b37c74185 100644 (file)
 
 /* The ext2 superblock.  */
 struct ext2_sblock {
-       uint32_t total_inodes;
-       uint32_t total_blocks;
-       uint32_t reserved_blocks;
-       uint32_t free_blocks;
-       uint32_t free_inodes;
-       uint32_t first_data_block;
-       uint32_t log2_block_size;
-       uint32_t log2_fragment_size;
-       uint32_t blocks_per_group;
-       uint32_t fragments_per_group;
-       uint32_t inodes_per_group;
-       uint32_t mtime;
-       uint32_t utime;
-       uint16_t mnt_count;
-       uint16_t max_mnt_count;
-       uint16_t magic;
-       uint16_t fs_state;
-       uint16_t error_handling;
-       uint16_t minor_revision_level;
-       uint32_t lastcheck;
-       uint32_t checkinterval;
-       uint32_t creator_os;
-       uint32_t revision_level;
-       uint16_t uid_reserved;
-       uint16_t gid_reserved;
-       uint32_t first_inode;
-       uint16_t inode_size;
-       uint16_t block_group_number;
-       uint32_t feature_compatibility;
-       uint32_t feature_incompat;
-       uint32_t feature_ro_compat;
-       uint32_t unique_id[4];
+       __le32 total_inodes;
+       __le32 total_blocks;
+       __le32 reserved_blocks;
+       __le32 free_blocks;
+       __le32 free_inodes;
+       __le32 first_data_block;
+       __le32 log2_block_size;
+       __le32 log2_fragment_size;
+       __le32 blocks_per_group;
+       __le32 fragments_per_group;
+       __le32 inodes_per_group;
+       __le32 mtime;
+       __le32 utime;
+       __le16 mnt_count;
+       __le16 max_mnt_count;
+       __le16 magic;
+       __le16 fs_state;
+       __le16 error_handling;
+       __le16 minor_revision_level;
+       __le32 lastcheck;
+       __le32 checkinterval;
+       __le32 creator_os;
+       __le32 revision_level;
+       __le16 uid_reserved;
+       __le16 gid_reserved;
+       __le32 first_inode;
+       __le16 inode_size;
+       __le16 block_group_number;
+       __le32 feature_compatibility;
+       __le32 feature_incompat;
+       __le32 feature_ro_compat;
+       __le32 unique_id[4];
        char volume_name[16];
        char last_mounted_on[64];
-       uint32_t compression_info;
+       __le32 compression_info;
 };
 
 struct ext2_block_group {
-       __u32 block_id; /* Blocks bitmap block */
-       __u32 inode_id; /* Inodes bitmap block */
-       __u32 inode_table_id;   /* Inodes table block */
-       __u16 free_blocks;      /* Free blocks count */
-       __u16 free_inodes;      /* Free inodes count */
-       __u16 used_dir_cnt;     /* Directories count */
-       __u16 bg_flags;
-       __u32 bg_reserved[2];
-       __u16 bg_itable_unused; /* Unused inodes count */
-       __u16 bg_checksum;      /* crc16(s_uuid+grouo_num+group_desc)*/
+       __le32 block_id;        /* Blocks bitmap block */
+       __le32 inode_id;        /* Inodes bitmap block */
+       __le32 inode_table_id;  /* Inodes table block */
+       __le16 free_blocks;     /* Free blocks count */
+       __le16 free_inodes;     /* Free inodes count */
+       __le16 used_dir_cnt;    /* Directories count */
+       __le16 bg_flags;
+       __le32 bg_reserved[2];
+       __le16 bg_itable_unused; /* Unused inodes count */
+       __le16 bg_checksum;     /* crc16(s_uuid+grouo_num+group_desc)*/
 };
 
 /* The ext2 inode. */
 struct ext2_inode {
-       uint16_t mode;
-       uint16_t uid;
-       uint32_t size;
-       uint32_t atime;
-       uint32_t ctime;
-       uint32_t mtime;
-       uint32_t dtime;
-       uint16_t gid;
-       uint16_t nlinks;
-       uint32_t blockcnt;      /* Blocks of 512 bytes!! */
-       uint32_t flags;
-       uint32_t osd1;
+       __le16 mode;
+       __le16 uid;
+       __le32 size;
+       __le32 atime;
+       __le32 ctime;
+       __le32 mtime;
+       __le32 dtime;
+       __le16 gid;
+       __le16 nlinks;
+       __le32 blockcnt;        /* Blocks of 512 bytes!! */
+       __le32 flags;
+       __le32 osd1;
        union {
                struct datablocks {
-                       uint32_t dir_blocks[INDIRECT_BLOCKS];
-                       uint32_t indir_block;
-                       uint32_t double_indir_block;
-                       uint32_t triple_indir_block;
+                       __le32 dir_blocks[INDIRECT_BLOCKS];
+                       __le32 indir_block;
+                       __le32 double_indir_block;
+                       __le32 triple_indir_block;
                } blocks;
                char symlink[60];
        } b;
-       uint32_t version;
-       uint32_t acl;
-       uint32_t dir_acl;
-       uint32_t fragment_addr;
-       uint32_t osd2[3];
+       __le32 version;
+       __le32 acl;
+       __le32 dir_acl;
+       __le32 fragment_addr;
+       __le32 osd2[3];
 };
 
 /* The header of an ext2 directory entry. */
 struct ext2_dirent {
-       uint32_t inode;
-       uint16_t direntlen;
-       uint8_t namelen;
-       uint8_t filetype;
+       __le32 inode;
+       __le16 direntlen;
+       __u8 namelen;
+       __u8 filetype;
 };
 
 struct ext2fs_node {