Annotation of qemu/roms/openbios/fs/grubfs/xfs.h, revision 1.1.1.1

1.1       root        1: /* xfs.h - an extraction from xfsprogs-1.3.5/include/xfs* into one file */
                      2: /*
                      3:  *  GRUB  --  GRand Unified Bootloader
                      4:  *  Copyright (C) 2000  Silicon Graphics, Inc.  All Rights Reserved.
                      5:  *  Copyright (C) 2001  Free Software Foundation, Inc.
                      6:  *
                      7:  *  This program is free software; you can redistribute it and/or modify it
                      8:  *  under the terms of version 2 of the GNU General Public License as
                      9:  *  published by the Free Software Foundation.
                     10:  *
                     11:  *  This program is distributed in the hope that it would be useful, but
                     12:  *  WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
                     14:  *
                     15:  *  Further, this software is distributed without any warranty that it is
                     16:  *  free of the rightful claim of any third person regarding infringement
                     17:  *  or the like.  Any license provided herein, whether implied or
                     18:  *  otherwise, applies only to this software file.  Patent licenses, if
                     19:  *  any, provided herein do not apply to combinations of this program with
                     20:  *  other software, or any other product whatsoever.
                     21:  *
                     22:  *  You should have received a copy of the GNU General Public License along
                     23:  *  with this program; if not, write the Free Software Foundation, Inc.,
                     24:  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
                     25:  *
                     26:  *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
                     27:  *  Mountain View, CA  94043, or:
                     28:  *
                     29:  *  http://www.sgi.com
                     30:  *
                     31:  *  For further information regarding this notice, see:
                     32:  *
                     33:  *  http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
                     34:  */
                     35: 
                     36: #ifndef _BITS_TYPES_H
                     37: typedef signed char    __int8_t;
                     38: typedef unsigned char  __uint8_t;
                     39: typedef short          __int16_t;
                     40: typedef unsigned short __uint16_t;
                     41: typedef int            __int32_t;
                     42: typedef unsigned int   __uint32_t;
                     43: typedef long long      __int64_t;
                     44: typedef unsigned long long __uint64_t;
                     45: #endif
                     46: 
                     47: typedef __uint64_t     xfs_ino_t;
                     48: typedef        __uint32_t      xfs_agino_t;
                     49: typedef __int64_t      xfs_daddr_t;
                     50: typedef __int64_t      xfs_off_t;
                     51: typedef __uint8_t      uuid_t[16];
                     52: 
                     53: 
                     54: /* those are from xfs_types.h */
                     55: 
                     56: typedef __uint32_t     xfs_agblock_t;  /* blockno in alloc. group */
                     57: typedef        __uint32_t      xfs_extlen_t;   /* extent length in blocks */
                     58: typedef        __uint32_t      xfs_agnumber_t; /* allocation group number */
                     59: typedef __int32_t      xfs_extnum_t;   /* # of extents in a file */
                     60: typedef __int16_t      xfs_aextnum_t;  /* # extents in an attribute fork */
                     61: typedef        __int64_t       xfs_fsize_t;    /* bytes in a file */
                     62: 
                     63: typedef        __uint32_t      xfs_dablk_t;    /* dir/attr block number (in file) */
                     64: typedef        __uint32_t      xfs_dahash_t;   /* dir/attr hash value */
                     65: 
                     66: /*
                     67:  * Disk based types:
                     68:  */
                     69: typedef __uint64_t     xfs_dfsbno_t;   /* blockno in filesystem (agno|agbno) */
                     70: typedef __uint64_t     xfs_drfsbno_t;  /* blockno in filesystem (raw) */
                     71: typedef        __uint64_t      xfs_drtbno_t;   /* extent (block) in realtime area */
                     72: typedef        __uint64_t      xfs_dfiloff_t;  /* block number in a file */
                     73: 
                     74: typedef        __uint64_t      xfs_fsblock_t;  /* blockno in filesystem (agno|agbno) */
                     75: typedef        __uint64_t      xfs_fileoff_t;  /* block number in a file */
                     76: typedef        __uint64_t      xfs_filblks_t;  /* number of blocks in a file */
                     77: 
                     78: 
                     79: /* those are from xfs_sb.h */
                     80: 
                     81: #define        XFS_SB_MAGIC            0x58465342      /* 'XFSB'*/
                     82: #define        XFS_SB_VERSION_4        4               /* 6.2+ - bitmask version */
                     83: #define        XFS_SB_VERSION_NUMBITS  0x000f
                     84: 
                     85: typedef struct xfs_sb
                     86: {
                     87:        __uint32_t      sb_magicnum;    /* magic number == XFS_SB_MAGIC */
                     88:        __uint32_t      sb_blocksize;   /* logical block size, bytes */
                     89:        xfs_drfsbno_t   sb_dblocks;     /* number of data blocks */
                     90:        xfs_drfsbno_t   sb_rblocks;     /* number of realtime blocks */
                     91:        xfs_drtbno_t    sb_rextents;    /* number of realtime extents */
                     92:        uuid_t          sb_uuid;        /* file system unique id */
                     93:        xfs_dfsbno_t    sb_logstart;    /* starting block of log if internal */
                     94:        xfs_ino_t       sb_rootino;     /* root inode number */
                     95:        xfs_ino_t       sb_rbmino;      /* bitmap inode for realtime extents */
                     96:        xfs_ino_t       sb_rsumino;     /* summary inode for rt bitmap */
                     97:        xfs_agblock_t   sb_rextsize;    /* realtime extent size, blocks */
                     98:        xfs_agblock_t   sb_agblocks;    /* size of an allocation group */
                     99:        xfs_agnumber_t  sb_agcount;     /* number of allocation groups */
                    100:        xfs_extlen_t    sb_rbmblocks;   /* number of rt bitmap blocks */
                    101:        xfs_extlen_t    sb_logblocks;   /* number of log blocks */
                    102:        __uint16_t      sb_versionnum;  /* header version == XFS_SB_VERSION */
                    103:        __uint16_t      sb_sectsize;    /* volume sector size, bytes */
                    104:        __uint16_t      sb_inodesize;   /* inode size, bytes */
                    105:        __uint16_t      sb_inopblock;   /* inodes per block */
                    106:        char            sb_fname[12];   /* file system name */
                    107:        __uint8_t       sb_blocklog;    /* log2 of sb_blocksize */
                    108:        __uint8_t       sb_sectlog;     /* log2 of sb_sectsize */
                    109:        __uint8_t       sb_inodelog;    /* log2 of sb_inodesize */
                    110:        __uint8_t       sb_inopblog;    /* log2 of sb_inopblock */
                    111:        __uint8_t       sb_agblklog;    /* log2 of sb_agblocks (rounded up) */
                    112:        __uint8_t       sb_rextslog;    /* log2 of sb_rextents */
                    113:        __uint8_t       sb_inprogress;  /* mkfs is in progress, don't mount */
                    114:        __uint8_t       sb_imax_pct;    /* max % of fs for inode space */
                    115:                                        /* statistics */
                    116:        /*
                    117:         * These fields must remain contiguous.  If you really
                    118:         * want to change their layout, make sure you fix the
                    119:         * code in xfs_trans_apply_sb_deltas().
                    120:         */
                    121:        __uint64_t      sb_icount;      /* allocated inodes */
                    122:        __uint64_t      sb_ifree;       /* free inodes */
                    123:        __uint64_t      sb_fdblocks;    /* free data blocks */
                    124:        __uint64_t      sb_frextents;   /* free realtime extents */
                    125:        /*
                    126:         * End contiguous fields.
                    127:         */
                    128:        xfs_ino_t       sb_uquotino;    /* user quota inode */
                    129:        xfs_ino_t       sb_gquotino;    /* group quota inode */
                    130:        __uint16_t      sb_qflags;      /* quota flags */
                    131:        __uint8_t       sb_flags;       /* misc. flags */
                    132:        __uint8_t       sb_shared_vn;   /* shared version number */
                    133:        xfs_extlen_t    sb_inoalignmt;  /* inode chunk alignment, fsblocks */
                    134:        __uint32_t      sb_unit;        /* stripe or raid unit */
                    135:        __uint32_t      sb_width;       /* stripe or raid width */
                    136:        __uint8_t       sb_dirblklog;   /* log2 of dir block size (fsbs) */
                    137:         __uint8_t       sb_dummy[7];    /* padding */
                    138: } xfs_sb_t;
                    139: 
                    140: 
                    141: /* those are from xfs_btree.h */
                    142: 
                    143: /*
                    144:  * Long form header: bmap btrees.
                    145:  */
                    146: typedef struct xfs_btree_lblock
                    147: {
                    148:        __uint32_t      bb_magic;       /* magic number for block type */
                    149:        __uint16_t      bb_level;       /* 0 is a leaf */
                    150:        __uint16_t      bb_numrecs;     /* current # of data records */
                    151:        xfs_dfsbno_t    bb_leftsib;     /* left sibling block or NULLDFSBNO */
                    152:        xfs_dfsbno_t    bb_rightsib;    /* right sibling block or NULLDFSBNO */
                    153: } xfs_btree_lblock_t;
                    154: 
                    155: /*
                    156:  * Combined header and structure, used by common code.
                    157:  */
                    158: typedef struct xfs_btree_hdr
                    159: {
                    160:        __uint32_t      bb_magic;       /* magic number for block type */
                    161:        __uint16_t      bb_level;       /* 0 is a leaf */
                    162:        __uint16_t      bb_numrecs;     /* current # of data records */
                    163: } xfs_btree_hdr_t;
                    164: 
                    165: typedef struct xfs_btree_block
                    166: {
                    167:        xfs_btree_hdr_t bb_h;           /* header */
                    168:        union           {
                    169:                struct  {
                    170:                        xfs_agblock_t   bb_leftsib;
                    171:                        xfs_agblock_t   bb_rightsib;
                    172:                }       s;              /* short form pointers */
                    173:                struct  {
                    174:                        xfs_dfsbno_t    bb_leftsib;
                    175:                        xfs_dfsbno_t    bb_rightsib;
                    176:                }       l;              /* long form pointers */
                    177:        }               bb_u;           /* rest */
                    178: } xfs_btree_block_t;
                    179: 
                    180: /* those are from xfs_bmap_btree.h */
                    181: 
                    182: /*
                    183:  * Bmap root header, on-disk form only.
                    184:  */
                    185: typedef struct xfs_bmdr_block
                    186: {
                    187:        __uint16_t      bb_level;       /* 0 is a leaf */
                    188:        __uint16_t      bb_numrecs;     /* current # of data records */
                    189: } xfs_bmdr_block_t;
                    190: 
                    191: /*
                    192:  * Bmap btree record and extent descriptor.
                    193:  * For 32-bit kernels,
                    194:  *  l0:31 is an extent flag (value 1 indicates non-normal).
                    195:  *  l0:0-30 and l1:9-31 are startoff.
                    196:  *  l1:0-8, l2:0-31, and l3:21-31 are startblock.
                    197:  *  l3:0-20 are blockcount.
                    198:  * For 64-bit kernels,
                    199:  *  l0:63 is an extent flag (value 1 indicates non-normal).
                    200:  *  l0:9-62 are startoff.
                    201:  *  l0:0-8 and l1:21-63 are startblock.
                    202:  *  l1:0-20 are blockcount.
                    203:  */
                    204: 
                    205: #define        BMBT_USE_64     1
                    206: 
                    207: typedef struct xfs_bmbt_rec_32
                    208: {
                    209:        __uint32_t              l0, l1, l2, l3;
                    210: } xfs_bmbt_rec_32_t;
                    211: typedef struct xfs_bmbt_rec_64
                    212: {
                    213:        __uint64_t              l0, l1;
                    214: } xfs_bmbt_rec_64_t;
                    215: 
                    216: #if BMBT_USE_64
                    217: typedef        __uint64_t      xfs_bmbt_rec_base_t;    /* use this for casts */
                    218: typedef xfs_bmbt_rec_64_t xfs_bmbt_rec_t, xfs_bmdr_rec_t;
                    219: #else  /* !BMBT_USE_64 */
                    220: typedef        __uint32_t      xfs_bmbt_rec_base_t;    /* use this for casts */
                    221: typedef xfs_bmbt_rec_32_t xfs_bmbt_rec_t, xfs_bmdr_rec_t;
                    222: #endif /* BMBT_USE_64 */
                    223: 
                    224: /*
                    225:  * Key structure for non-leaf levels of the tree.
                    226:  */
                    227: typedef struct xfs_bmbt_key
                    228: {
                    229:        xfs_dfiloff_t   br_startoff;    /* starting file offset */
                    230: } xfs_bmbt_key_t, xfs_bmdr_key_t;
                    231: 
                    232: typedef xfs_dfsbno_t xfs_bmbt_ptr_t, xfs_bmdr_ptr_t;   /* btree pointer type */
                    233:                                        /* btree block header type */
                    234: typedef        struct xfs_btree_lblock xfs_bmbt_block_t;
                    235: 
                    236: 
                    237: /* those are from xfs_dir2.h */
                    238: /*
                    239:  * Directory version 2.
                    240:  * There are 4 possible formats:
                    241:  *     shortform
                    242:  *     single block - data with embedded leaf at the end
                    243:  *     multiple data blocks, single leaf+freeindex block
                    244:  *     data blocks, node&leaf blocks (btree), freeindex blocks
                    245:  *
                    246:  *     The shortform format is in xfs_dir2_sf.h.
                    247:  *     The single block format is in xfs_dir2_block.h.
                    248:  *     The data block format is in xfs_dir2_data.h.
                    249:  *     The leaf and freeindex block formats are in xfs_dir2_leaf.h.
                    250:  *     Node blocks are the same as the other version, in xfs_da_btree.h.
                    251:  */
                    252: 
                    253: /*
                    254:  * Byte offset in data block and shortform entry.
                    255:  */
                    256: typedef        __uint16_t      xfs_dir2_data_off_t;
                    257: 
                    258: /*
                    259:  * Byte offset in a directory.
                    260:  */
                    261: typedef        xfs_off_t               xfs_dir2_off_t;
                    262: 
                    263: /* those are from xfs_da_btree.h */
                    264: /*========================================================================
                    265:  * Directory Structure when greater than XFS_LBSIZE(mp) bytes.
                    266:  *========================================================================*/
                    267: 
                    268: /*
                    269:  * This structure is common to both leaf nodes and non-leaf nodes in the Btree.
                    270:  *
                    271:  * Is is used to manage a doubly linked list of all blocks at the same
                    272:  * level in the Btree, and to identify which type of block this is.
                    273:  */
                    274: #define        XFS_DIR2_LEAF1_MAGIC    0xd2f1  /* magic number: v2 dirlf single blks */
                    275: #define        XFS_DIR2_LEAFN_MAGIC    0xd2ff  /* magic number: v2 dirlf multi blks */
                    276: 
                    277: typedef struct xfs_da_blkinfo {
                    278:        xfs_dablk_t forw;                       /* previous block in list */
                    279:        xfs_dablk_t back;                       /* following block in list */
                    280:        __uint16_t magic;                       /* validity check on block */
                    281:        __uint16_t pad;                         /* unused */
                    282: } xfs_da_blkinfo_t;
                    283: 
                    284: /*
                    285:  * This is the structure of the root and intermediate nodes in the Btree.
                    286:  * The leaf nodes are defined above.
                    287:  *
                    288:  * Entries are not packed.
                    289:  *
                    290:  * Since we have duplicate keys, use a binary search but always follow
                    291:  * all match in the block, not just the first match found.
                    292:  */
                    293: 
                    294: typedef struct xfs_da_intnode {
                    295:        struct xfs_da_node_hdr {        /* constant-structure header block */
                    296:                xfs_da_blkinfo_t info;  /* block type, links, etc. */
                    297:                __uint16_t count;       /* count of active entries */
                    298:                __uint16_t level;       /* level above leaves (leaf == 0) */
                    299:        } hdr;
                    300:        struct xfs_da_node_entry {
                    301:                xfs_dahash_t hashval;   /* hash value for this descendant */
                    302:                xfs_dablk_t before;     /* Btree block before this key */
                    303:        } btree[1];                     /* variable sized array of keys */
                    304: } xfs_da_intnode_t;
                    305: 
                    306: 
                    307: /* those are from xfs_dir2_data.h */
                    308: /*
                    309:  * Directory format 2, data block structures.
                    310:  */
                    311: 
                    312: /*
                    313:  * Constants.
                    314:  */
                    315: #define        XFS_DIR2_DATA_FREE_TAG  0xffff
                    316: #define        XFS_DIR2_DATA_FD_COUNT  3
                    317: 
                    318: /*
                    319:  * Structures.
                    320:  */
                    321: 
                    322: /*
                    323:  * Describe a free area in the data block.
                    324:  * The freespace will be formatted as a xfs_dir2_data_unused_t.
                    325:  */
                    326: typedef struct xfs_dir2_data_free {
                    327:        xfs_dir2_data_off_t     offset;         /* start of freespace */
                    328:        xfs_dir2_data_off_t     length;         /* length of freespace */
                    329: } xfs_dir2_data_free_t;
                    330: 
                    331: /*
                    332:  * Header for the data blocks.
                    333:  * Always at the beginning of a directory-sized block.
                    334:  * The code knows that XFS_DIR2_DATA_FD_COUNT is 3.
                    335:  */
                    336: typedef struct xfs_dir2_data_hdr {
                    337:        __uint32_t              magic;          /* XFS_DIR2_DATA_MAGIC */
                    338:                                                /* or XFS_DIR2_BLOCK_MAGIC */
                    339:        xfs_dir2_data_free_t    bestfree[XFS_DIR2_DATA_FD_COUNT];
                    340: } xfs_dir2_data_hdr_t;
                    341: 
                    342: /*
                    343:  * Active entry in a data block.  Aligned to 8 bytes.
                    344:  * Tag appears as the last 2 bytes.
                    345:  */
                    346: typedef struct xfs_dir2_data_entry {
                    347:        xfs_ino_t               inumber;        /* inode number */
                    348:        __uint8_t               namelen;        /* name length */
                    349:        __uint8_t               name[1];        /* name bytes, no null */
                    350:                                                /* variable offset */
                    351:        xfs_dir2_data_off_t     tag;            /* starting offset of us */
                    352: } xfs_dir2_data_entry_t;
                    353: 
                    354: /*
                    355:  * Unused entry in a data block.  Aligned to 8 bytes.
                    356:  * Tag appears as the last 2 bytes.
                    357:  */
                    358: typedef struct xfs_dir2_data_unused {
                    359:        __uint16_t              freetag;        /* XFS_DIR2_DATA_FREE_TAG */
                    360:        xfs_dir2_data_off_t     length;         /* total free length */
                    361:                                                /* variable offset */
                    362:        xfs_dir2_data_off_t     tag;            /* starting offset of us */
                    363: } xfs_dir2_data_unused_t;
                    364: 
                    365: typedef union {
                    366:        xfs_dir2_data_entry_t   entry;
                    367:        xfs_dir2_data_unused_t  unused;
                    368: } xfs_dir2_data_union_t;
                    369: 
                    370: 
                    371: /* those are from xfs_dir2_leaf.h */
                    372: /*
                    373:  * Directory version 2, leaf block structures.
                    374:  */
                    375: 
                    376: /*
                    377:  * Leaf block header.
                    378:  */
                    379: typedef struct xfs_dir2_leaf_hdr {
                    380:        xfs_da_blkinfo_t        info;           /* header for da routines */
                    381:        __uint16_t              count;          /* count of entries */
                    382:        __uint16_t              stale;          /* count of stale entries */
                    383: } xfs_dir2_leaf_hdr_t;
                    384: 
                    385: 
                    386: /* those are from xfs_dir2_block.h */
                    387: /*
                    388:  * xfs_dir2_block.h
                    389:  * Directory version 2, single block format structures
                    390:  */
                    391: 
                    392: /*
                    393:  * The single block format is as follows:
                    394:  * xfs_dir2_data_hdr_t structure
                    395:  * xfs_dir2_data_entry_t and xfs_dir2_data_unused_t structures
                    396:  * xfs_dir2_leaf_entry_t structures
                    397:  * xfs_dir2_block_tail_t structure
                    398:  */
                    399: 
                    400: #define        XFS_DIR2_BLOCK_MAGIC    0x58443242      /* XD2B: for one block dirs */
                    401: 
                    402: typedef struct xfs_dir2_block_tail {
                    403:        __uint32_t      count;                  /* count of leaf entries */
                    404:        __uint32_t      stale;                  /* count of stale lf entries */
                    405: } xfs_dir2_block_tail_t;
                    406: 
                    407: 
                    408: /* those are from xfs_dir2_sf.h */
                    409: 
                    410: /*
                    411:  * Directory layout when stored internal to an inode.
                    412:  *
                    413:  * Small directories are packed as tightly as possible so as to
                    414:  * fit into the literal area of the inode.
                    415:  */
                    416: 
                    417: /*
                    418:  * Inode number stored as 8 8-bit values.
                    419:  */
                    420: typedef        struct { __uint8_t i[8]; } xfs_dir2_ino8_t;
                    421: 
                    422: /*
                    423:  * Inode number stored as 4 8-bit values.
                    424:  * Works a lot of the time, when all the inode numbers in a directory
                    425:  * fit in 32 bits.
                    426:  */
                    427: typedef struct { __uint8_t i[4]; } xfs_dir2_ino4_t;
                    428: 
                    429: typedef union {
                    430:        xfs_dir2_ino8_t i8;
                    431:        xfs_dir2_ino4_t i4;
                    432: } xfs_dir2_inou_t;
                    433: 
                    434: /*
                    435:  * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t.
                    436:  * Only need 16 bits, this is the byte offset into the single block form.
                    437:  */
                    438: typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t;
                    439: 
                    440: /*
                    441:  * The parent directory has a dedicated field, and the self-pointer must
                    442:  * be calculated on the fly.
                    443:  *
                    444:  * Entries are packed toward the top as tightly as possible.  The header
                    445:  * and the elements must be bcopy()'d out into a work area to get correct
                    446:  * alignment for the inode number fields.
                    447:  */
                    448: typedef struct xfs_dir2_sf_hdr {
                    449:        __uint8_t               count;          /* count of entries */
                    450:        __uint8_t               i8count;        /* count of 8-byte inode #s */
                    451:        xfs_dir2_inou_t         parent;         /* parent dir inode number */
                    452: } xfs_dir2_sf_hdr_t;
                    453: 
                    454: typedef struct xfs_dir2_sf_entry {
                    455:        __uint8_t               namelen;        /* actual name length */
                    456:        xfs_dir2_sf_off_t       offset;         /* saved offset */
                    457:        __uint8_t               name[1];        /* name, variable size */
                    458:        xfs_dir2_inou_t         inumber;        /* inode number, var. offset */
                    459: } xfs_dir2_sf_entry_t;
                    460: 
                    461: typedef struct xfs_dir2_sf {
                    462:        xfs_dir2_sf_hdr_t       hdr;            /* shortform header */
                    463:        xfs_dir2_sf_entry_t     list[1];        /* shortform entries */
                    464: } xfs_dir2_sf_t;
                    465: 
                    466: /* those are from xfs_dinode.h */
                    467: 
                    468: #define        XFS_DINODE_VERSION_1    1
                    469: #define        XFS_DINODE_VERSION_2    2
                    470: #define        XFS_DINODE_MAGIC        0x494e  /* 'IN' */
                    471: 
                    472: /*
                    473:  * Disk inode structure.
                    474:  * This is just the header; the inode is expanded to fill a variable size
                    475:  * with the last field expanding.  It is split into the core and "other"
                    476:  * because we only need the core part in the in-core inode.
                    477:  */
                    478: typedef struct xfs_timestamp {
                    479:        __int32_t       t_sec;          /* timestamp seconds */
                    480:        __int32_t       t_nsec;         /* timestamp nanoseconds */
                    481: } xfs_timestamp_t;
                    482: 
                    483: /*
                    484:  * Note: Coordinate changes to this structure with the XFS_DI_* #defines
                    485:  * below and the offsets table in xfs_ialloc_log_di().
                    486:  */
                    487: typedef struct xfs_dinode_core
                    488: {
                    489:        __uint16_t      di_magic;       /* inode magic # = XFS_DINODE_MAGIC */
                    490:        __uint16_t      di_mode;        /* mode and type of file */
                    491:        __int8_t        di_version;     /* inode version */
                    492:        __int8_t        di_format;      /* format of di_c data */
                    493:        __uint16_t      di_onlink;      /* old number of links to file */
                    494:        __uint32_t      di_uid;         /* owner's user id */
                    495:        __uint32_t      di_gid;         /* owner's group id */
                    496:        __uint32_t      di_nlink;       /* number of links to file */
                    497:        __uint16_t      di_projid;      /* owner's project id */
                    498:        __uint8_t       di_pad[10];     /* unused, zeroed space */
                    499:        xfs_timestamp_t di_atime;       /* time last accessed */
                    500:        xfs_timestamp_t di_mtime;       /* time last modified */
                    501:        xfs_timestamp_t di_ctime;       /* time created/inode modified */
                    502:        xfs_fsize_t     di_size;        /* number of bytes in file */
                    503:        xfs_drfsbno_t   di_nblocks;     /* # of direct & btree blocks used */
                    504:        xfs_extlen_t    di_extsize;     /* basic/minimum extent size for file */
                    505:        xfs_extnum_t    di_nextents;    /* number of extents in data fork */
                    506:        xfs_aextnum_t   di_anextents;   /* number of extents in attribute fork*/
                    507:        __uint8_t       di_forkoff;     /* attr fork offs, <<3 for 64b align */
                    508:        __int8_t        di_aformat;     /* format of attr fork's data */
                    509:        __uint32_t      di_dmevmask;    /* DMIG event mask */
                    510:        __uint16_t      di_dmstate;     /* DMIG state info */
                    511:        __uint16_t      di_flags;       /* random flags, XFS_DIFLAG_... */
                    512:        __uint32_t      di_gen;         /* generation number */
                    513: } xfs_dinode_core_t;
                    514: 
                    515: typedef struct xfs_dinode
                    516: {
                    517:        xfs_dinode_core_t       di_core;
                    518:        xfs_agino_t             di_next_unlinked;/* agi unlinked list ptr */
                    519:        union {
                    520:                xfs_bmdr_block_t di_bmbt;       /* btree root block */
                    521:                xfs_bmbt_rec_32_t di_bmx[1];    /* extent list */
                    522:                xfs_dir2_sf_t   di_dir2sf;      /* shortform directory v2 */
                    523:                char            di_c[1];        /* local contents */
                    524:        } di_u;
                    525: } xfs_dinode_t;
                    526: 
                    527: /*
                    528:  * Values for di_format
                    529:  */
                    530: typedef enum xfs_dinode_fmt
                    531: {
                    532:        XFS_DINODE_FMT_DEV,             /* CHR, BLK: di_dev */
                    533:        XFS_DINODE_FMT_LOCAL,           /* DIR, REG: di_c */
                    534:                                        /* LNK: di_symlink */
                    535:        XFS_DINODE_FMT_EXTENTS,         /* DIR, REG, LNK: di_bmx */
                    536:        XFS_DINODE_FMT_BTREE,           /* DIR, REG, LNK: di_bmbt */
                    537:        XFS_DINODE_FMT_UUID             /* MNT: di_uuid */
                    538: } xfs_dinode_fmt_t;
                    539: 
                    540: /*
                    541:  * File types (mode field)
                    542:  */
                    543: #define        IFMT            0170000         /* type of file */
                    544: #define        IFDIR           0040000         /* directory */
                    545: #define        IFREG           0100000         /* regular */
                    546: #define        IFLNK           0120000         /* symbolic link */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.