Home | History | Annotate | Download | only in toys
      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