|
|
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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.