Changeset b53a733 in mainline for uspace/lib/ext4/libext4_inode.h


Ignore:
Timestamp:
2012-03-07T09:33:14Z (13 years ago)
Author:
Frantisek Princ <frantisek.princ@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e2629b08
Parents:
a872fc09
Message:

Data types definitions groupped to one file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ext4/libext4_inode.h

    ra872fc09 rb53a733  
    3636#include <libblock.h>
    3737#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"
    14539
    14640extern uint32_t ext4_inode_get_mode(ext4_superblock_t *, ext4_inode_t *);
Note: See TracChangeset for help on using the changeset viewer.