Changeset b53a733 in mainline for uspace/lib/ext4/libext4_inode.h
- Timestamp:
- 2012-03-07T09:33:14Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e2629b08
- Parents:
- a872fc09
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ext4/libext4_inode.h
ra872fc09 rb53a733 36 36 #include <libblock.h> 37 37 #include <sys/types.h> 38 #include "libext4_extent.h" 39 #include "libext4_superblock.h" 40 41 #define EXT4_INODE_BLOCK_SIZE 512 42 43 #define EXT4_INODE_DIRECT_BLOCK_COUNT 12 44 #define EXT4_INODE_INDIRECT_BLOCK EXT4_INODE_DIRECT_BLOCK_COUNT 45 #define EXT4_INODE_DOUBLE_INDIRECT_BLOCK (EXT4_INODE_INDIRECT_BLOCK + 1) 46 #define EXT4_INODE_TRIPPLE_INDIRECT_BLOCK (EXT4_INODE_DOUBLE_INDIRECT_BLOCK + 1) 47 #define EXT4_INODE_BLOCKS (EXT4_INODE_TRIPPLE_INDIRECT_BLOCK + 1) 48 #define EXT4_INODE_INDIRECT_BLOCK_COUNT (EXT4_INODE_BLOCKS - EXT4_INODE_DIRECT_BLOCK_COUNT) 49 50 /* 51 * Structure of an inode on the disk 52 */ 53 typedef struct ext4_inode { 54 uint16_t mode; // File mode 55 uint16_t uid; // Low 16 bits of owner uid 56 uint32_t size_lo; // Size in bytes 57 uint32_t access_time; // Access time 58 uint32_t change_inode_time; // Inode change time 59 uint32_t modification_time; // Modification time 60 uint32_t deletion_time; // Deletion time 61 uint16_t gid; // Low 16 bits of group id 62 uint16_t links_count; // Links count 63 uint32_t blocks_count_lo; // Blocks count 64 uint32_t flags; // File flags 65 uint32_t unused_osd1; // OS dependent - not used in HelenOS 66 uint32_t blocks[EXT4_INODE_BLOCKS]; // Pointers to blocks 67 uint32_t generation; // File version (for NFS) 68 uint32_t file_acl_lo; // File ACL 69 uint32_t size_hi; 70 uint32_t obso_faddr; // Obsoleted fragment address 71 union { 72 struct { 73 uint16_t blocks_high; /* were l_i_reserved1 */ 74 uint16_t file_acl_high; 75 uint16_t uid_high; /* these 2 fields */ 76 uint16_t gid_high; /* were reserved2[0] */ 77 uint32_t reserved2; 78 } linux2; 79 struct { 80 uint16_t reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ 81 uint16_t mode_high; 82 uint16_t uid_high; 83 uint16_t gid_high; 84 uint32_t author; 85 } hurd2; 86 } __attribute__ ((packed)) osd2; 87 88 uint16_t extra_isize; 89 uint16_t pad1; 90 uint32_t ctime_extra; // Extra change time (nsec << 2 | epoch) 91 uint32_t mtime_extra; // Extra Modification time (nsec << 2 | epoch) 92 uint32_t atime_extra; // Extra Access time (nsec << 2 | epoch) 93 uint32_t crtime; // File creation time 94 uint32_t crtime_extra; // Extra file creation time (nsec << 2 | epoch) 95 uint32_t version_hi; // High 32 bits for 64-bit version 96 } __attribute__ ((packed)) ext4_inode_t; 97 98 #define EXT4_INODE_MODE_FIFO 0x1000 99 #define EXT4_INODE_MODE_CHARDEV 0x2000 100 #define EXT4_INODE_MODE_DIRECTORY 0x4000 101 #define EXT4_INODE_MODE_BLOCKDEV 0x6000 102 #define EXT4_INODE_MODE_FILE 0x8000 103 #define EXT4_INODE_MODE_SOFTLINK 0xA000 104 #define EXT4_INODE_MODE_SOCKET 0xC000 105 #define EXT4_INODE_MODE_TYPE_MASK 0xF000 106 107 /* 108 * Inode flags 109 */ 110 #define EXT4_INODE_FLAG_SECRM 0x00000001 // Secure deletion 111 #define EXT4_INODE_FLAG_UNRM 0x00000002 // Undelete 112 #define EXT4_INODE_FLAG_COMPR 0x00000004 // Compress file 113 #define EXT4_INODE_FLAG_SYNC 0x00000008 // Synchronous updates 114 #define EXT4_INODE_FLAG_IMMUTABLE 0x00000010 // Immutable file 115 #define EXT4_INODE_FLAG_APPEND 0x00000020 // writes to file may only append 116 #define EXT4_INODE_FLAG_NODUMP 0x00000040 // do not dump file 117 #define EXT4_INODE_FLAG_NOATIME 0x00000080 // do not update atime 118 /* Compression flags */ 119 #define EXT4_INODE_FLAG_DIRTY 0x00000100 120 #define EXT4_INODE_FLAG_COMPRBLK 0x00000200 // One or more compressed clusters 121 #define EXT4_INODE_FLAG_NOCOMPR 0x00000400 // Don't compress 122 #define EXT4_INODE_FLAG_ECOMPR 0x00000800 // Compression error 123 /* End compression flags --- maybe not all used */ 124 #define EXT4_INODE_FLAG_INDEX 0x00001000 // hash-indexed directory 125 #define EXT4_INODE_FLAG_IMAGIC 0x00002000 // AFS directory */ 126 #define EXT4_INODE_FLAG_JOURNAL_DATA 0x00004000 // File data should be journaled 127 #define EXT4_INODE_FLAG_NOTAIL 0x00008000 // File tail should not be merged 128 #define EXT4_INODE_FLAG_DIRSYNC 0x00010000 // Dirsync behaviour (directories only) 129 #define EXT4_INODE_FLAG_TOPDIR 0x00020000 // Top of directory hierarchies 130 #define EXT4_INODE_FLAG_HUGE_FILE 0x00040000 // Set to each huge file 131 #define EXT4_INODE_FLAG_EXTENTS 0x00080000 // Inode uses extents 132 #define EXT4_INODE_FLAG_EA_INODE 0x00200000 // Inode used for large EA 133 #define EXT4_INODE_FLAG_EOFBLOCKS 0x00400000 // Blocks allocated beyond EOF 134 #define EXT4_INODE_FLAG_RESERVED 0x80000000 // reserved for ext4 lib 135 136 #define EXT4_INODE_ROOT_INDEX 2 137 138 typedef struct ext4_inode_ref { 139 block_t *block; // Reference to a block containing this inode 140 ext4_inode_t *inode; 141 uint32_t index; // Index number of this inode 142 bool dirty; 143 } ext4_inode_ref_t; 144 38 #include "libext4_types.h" 145 39 146 40 extern uint32_t ext4_inode_get_mode(ext4_superblock_t *, ext4_inode_t *);
Note:
See TracChangeset
for help on using the changeset viewer.