1 /* mke2fs.h - Headers for ext2 2 * 3 * Copyright 2006 Rob Landley <rob (at) landley.net> 4 */ 5 6 // Stuff defined in linux/ext2_fs.h 7 8 #define EXT2_SUPER_MAGIC 0xEF53 9 10 struct ext2_superblock { 11 uint32_t inodes_count; // Inodes count 12 uint32_t blocks_count; // Blocks count 13 uint32_t r_blocks_count; // Reserved blocks count 14 uint32_t free_blocks_count; // Free blocks count 15 uint32_t free_inodes_count; // Free inodes count 16 uint32_t first_data_block; // First Data Block 17 uint32_t log_block_size; // Block size 18 uint32_t log_frag_size; // Fragment size 19 uint32_t blocks_per_group; // Blocks per group 20 uint32_t frags_per_group; // Fragments per group 21 uint32_t inodes_per_group; // Inodes per group 22 uint32_t mtime; // Mount time 23 uint32_t wtime; // Write time 24 uint16_t mnt_count; // Mount count 25 uint16_t max_mnt_count; // Maximal mount count 26 uint16_t magic; // Magic signature 27 uint16_t state; // File system state 28 uint16_t errors; // Behaviour when detecting errors 29 uint16_t minor_rev_level; // minor revision level 30 uint32_t lastcheck; // time of last check 31 uint32_t checkinterval; // max. time between checks 32 uint32_t creator_os; // OS 33 uint32_t rev_level; // Revision level 34 uint16_t def_resuid; // Default uid for reserved blocks 35 uint16_t def_resgid; // Default gid for reserved blocks 36 uint32_t first_ino; // First non-reserved inode 37 uint16_t inode_size; // size of inode structure 38 uint16_t block_group_nr; // block group # of this superblock 39 uint32_t feature_compat; // compatible feature set 40 uint32_t feature_incompat; // incompatible feature set 41 uint32_t feature_ro_compat; // readonly-compatible feature set 42 char uuid[16]; // 128-bit uuid for volume 43 char volume_name[16]; // volume name 44 char last_mounted[64]; // directory where last mounted 45 uint32_t alg_usage_bitmap; // For compression 46 // For EXT2_COMPAT_PREALLOC 47 uint8_t prealloc_blocks; // Nr of blocks to try to preallocate 48 uint8_t prealloc_dir_blocks; //Nr to preallocate for dirs 49 uint16_t padding1; 50 // For EXT3_FEATURE_COMPAT_HAS_JOURNAL 51 uint8_t journal_uuid[16]; // uuid of journal superblock 52 uint32_t journal_inum; // inode number of journal file 53 uint32_t journal_dev; // device number of journal file 54 uint32_t last_orphan; // start of list of inodes to delete 55 uint32_t hash_seed[4]; // HTREE hash seed 56 uint8_t def_hash_version; // Default hash version to use 57 uint8_t padding2[3]; 58 uint32_t default_mount_opts; 59 uint32_t first_meta_bg; // First metablock block group 60 uint32_t mkfs_time; // Creation timestamp 61 uint32_t jnl_blocks[17]; // Backup of journal inode 62 // uint32_t reserved[172]; // Padding to the end of the block 63 }; 64 65 struct ext2_group 66 { 67 uint32_t block_bitmap; // Block number of block bitmap 68 uint32_t inode_bitmap; // Block number of inode bitmap 69 uint32_t inode_table; // Block number of inode table 70 uint16_t free_blocks_count; // How many free blocks in this group? 71 uint16_t free_inodes_count; // How many free inodes in this group? 72 uint16_t used_dirs_count; // How many directories? 73 uint16_t reserved[7]; // pad to 32 bytes 74 }; 75 76 struct ext2_dentry { 77 uint32_t inode; // Inode number 78 uint16_t rec_len; // Directory entry length 79 uint8_t name_len; // Name length 80 uint8_t file_type; 81 char name[0]; // File name 82 }; 83 84 struct ext2_inode { 85 uint16_t mode; // File mode 86 uint16_t uid; // Low 16 bits of Owner Uid 87 uint32_t size; // Size in bytes 88 uint32_t atime; // Access time 89 uint32_t ctime; // Creation time 90 uint32_t mtime; // Modification time 91 uint32_t dtime; // Deletion Time 92 uint16_t gid; // Low 16 bits of Group Id 93 uint16_t links_count; // Links count 94 uint32_t blocks; // Blocks count 95 uint32_t flags; // File flags 96 uint32_t reserved1; 97 uint32_t block[15]; // Pointers to blocks 98 uint32_t generation; // File version (for NFS) 99 uint32_t file_acl; // File ACL 100 uint32_t dir_acl; // Directory ACL (or top bits of file length) 101 uint32_t faddr; // Last block in file 102 uint8_t frag; // Fragment number 103 uint8_t fsize; // Fragment size 104 uint16_t pad1; 105 uint16_t uid_high; // High bits of uid 106 uint16_t gid_high; // High bits of gid 107 uint32_t reserved2; 108 }; 109 110 #define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 111 #define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 112 #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 113 #define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008 114 #define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010 115 #define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 116 117 #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 118 #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 119 #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 120 121 #define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 122 #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 123 #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 124 #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 125 #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 126 127 #define EXT2_NAME_LEN 255 128 129 // Ext2 directory file types. Only the low 3 bits are used. The 130 // other bits are reserved for now. 131 132 enum { 133 EXT2_FT_UNKNOWN, 134 EXT2_FT_REG_FILE, 135 EXT2_FT_DIR, 136 EXT2_FT_CHRDEV, 137 EXT2_FT_BLKDEV, 138 EXT2_FT_FIFO, 139 EXT2_FT_SOCK, 140 EXT2_FT_SYMLINK, 141 EXT2_FT_MAX 142 }; 143