Subversion Repositories Kolibri OS

Rev

Rev 4850 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2013-2015. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 5363 $
  9.  
  10.  
  11. ; from stat.h
  12. ; distinguish file types
  13. S_IFMT      = 0170000o  ; These bits determine file type.
  14. S_IFDIR     = 0040000o  ; Directory.
  15. S_IFCHR     = 0020000o  ; Character device.
  16. S_IFBLK     = 0060000o  ; Block device.
  17. S_IFREG     = 0100000o  ; Regular file.
  18. S_IFIFO     = 0010000o  ; FIFO.
  19. S_IFLNK     = 0120000o  ; Symbolic link.
  20. S_IFSOCK    = 0140000o  ; Socket.
  21. ; end stat.h
  22.  
  23.  
  24. ; XFS null constant: empty fields must be all ones, not zeros!
  25. XFS_NULL                = -1
  26.  
  27.  
  28. ; static sector numbers
  29. XFS_SECT_SB             = 0
  30. XFS_SECT_AGF            = 1
  31. XFS_SECT_AGI            = 2
  32. XFS_SECT_AGFL           = 3
  33.  
  34.  
  35. ; signatures of file system structures
  36. ; 'string' numbers are treated by fasm as big endian
  37. XFS_SB_MAGIC            = 'XFSB'
  38. XFS_AGF_MAGIC           = 'XAGF'
  39. XFS_AGI_MAGIC           = 'XAGI'
  40. XFS_ABTB_MAGIC          = 'ABTB'
  41. XFS_ABTC_MAGIC          = 'ABTC'
  42. XFS_IBT_MAGIC           = 'IABT'
  43. XFS_DINODE_MAGIC        = 'IN'
  44. XFS_BMAP_MAGIC          = 'BMAP'
  45. XFS_DA_NODE_MAGIC       = 0xbefe        ; those are little endian here
  46. XFS_ATTR_LEAF_MAGIC     = 0xeefb        ; but big endian in docs
  47. XFS_DIR2_LEAF1_MAGIC    = 0xf1d2        ; pay attention!
  48. XFS_DIR2_LEAFN_MAGIC    = 0xffd2        ;
  49. XFS_DIR2_BLOCK_MAGIC    = 'XD2B'
  50. XFS_DIR2_DATA_MAGIC     = 'XD2D'
  51. XFS_DIR2_FREE_MAGIC     = 'XD2F'
  52. XFS_DQUOT_MAGIC         = 'DQ'
  53.  
  54.  
  55. ; bitfield lengths for packed extent
  56. ; MSB to LSB / left to right
  57. BMBT_EXNTFLAG_BITLEN    =  1
  58. BMBT_STARTOFF_BITLEN    = 54
  59. BMBT_STARTBLOCK_BITLEN  = 52
  60. BMBT_BLOCKCOUNT_BITLEN  = 21
  61.  
  62.  
  63. ; those constants are taken from linux source (xfs_dir2_leaf.h)
  64. ; they are magic infile offsets for directories
  65. XFS_DIR2_DATA_ALIGN_LOG = 3     ; i.e., 8 bytes
  66. XFS_DIR2_LEAF_SPACE     = 1
  67. XFS_DIR2_SPACE_SIZE     = (1 SHL (32 + XFS_DIR2_DATA_ALIGN_LOG))
  68. XFS_DIR2_LEAF_OFFSET    = (XFS_DIR2_LEAF_SPACE * XFS_DIR2_SPACE_SIZE)
  69. XFS_DIR2_FREE_SPACE     = 2
  70. XFS_DIR2_SPACE_SIZE     = (1 SHL (32 + XFS_DIR2_DATA_ALIGN_LOG))
  71. XFS_DIR2_FREE_OFFSET    = (XFS_DIR2_FREE_SPACE * XFS_DIR2_SPACE_SIZE)
  72.  
  73.  
  74. ; data section magic constants for directories (xfs_dir2_data.h)
  75. XFS_DIR2_DATA_FD_COUNT  = 3
  76. XFS_DIR2_DATA_FREE_TAG  = 0xffff
  77.  
  78.  
  79. ; valid inode formats
  80. ; enum xfs_dinode_fmt (xfs_dinode.h)
  81. XFS_DINODE_FMT_DEV      = 0     ; xfs_dev_t
  82. XFS_DINODE_FMT_LOCAL    = 1     ; one inode is enough (shortdir)
  83. XFS_DINODE_FMT_EXTENTS  = 2     ; one or more extents (leafdir, nodedir, regular files)
  84. XFS_DINODE_FMT_BTREE    = 3     ; highly fragmented files or really huge directories
  85. XFS_DINODE_FMT_UUID     = 4     ; uuid_t
  86.  
  87.  
  88. ; size of the unlinked inode hash table in the agi
  89. XFS_AGI_UNLINKED_BUCKETS = 64
  90.  
  91.  
  92. ; possible extent states
  93. ; enum xfs_exntst_t (xfs_bmap_btree.h)
  94. XFS_EXT_NORM            = 0
  95. XFS_EXT_UNWRITTEN       = 1
  96. XFS_EXT_DMAPI_OFFLINE   = 2
  97. XFS_EXT_INVALID         = 3
  98.  
  99.  
  100. ; values for inode core flags / di_flags (xfs_dinode.h)
  101. XFS_DIFLAG_REALTIME_BIT     =  0        ; file's blocks come from rt area
  102. XFS_DIFLAG_PREALLOC_BIT     =  1        ; file space has been preallocated
  103. XFS_DIFLAG_NEWRTBM_BIT      =  2        ; for rtbitmap inode, new format
  104. XFS_DIFLAG_IMMUTABLE_BIT    =  3        ; inode is immutable
  105. XFS_DIFLAG_APPEND_BIT       =  4        ; inode is append-only
  106. XFS_DIFLAG_SYNC_BIT         =  5        ; inode is written synchronously
  107. XFS_DIFLAG_NOATIME_BIT      =  6        ; do not update atime
  108. XFS_DIFLAG_NODUMP_BIT       =  7        ; do not dump
  109. XFS_DIFLAG_RTINHERIT_BIT    =  8        ; create with realtime bit set
  110. XFS_DIFLAG_PROJINHERIT_BIT  =  9        ; create with parents projid
  111. XFS_DIFLAG_NOSYMLINKS_BIT   = 10        ; disallow symlink creation
  112. XFS_DIFLAG_EXTSIZE_BIT      = 11        ; inode extent size allocator hint
  113. XFS_DIFLAG_EXTSZINHERIT_BIT = 12        ; inherit inode extent size
  114. XFS_DIFLAG_NODEFRAG_BIT     = 13        ; do not reorganize/defragment
  115. XFS_DIFLAG_FILESTREAM_BIT   = 14        ; use filestream allocator
  116. XFS_DIFLAG_REALTIME         = (1 SHL XFS_DIFLAG_REALTIME_BIT)
  117. XFS_DIFLAG_PREALLOC         = (1 SHL XFS_DIFLAG_PREALLOC_BIT)
  118. XFS_DIFLAG_NEWRTBM          = (1 SHL XFS_DIFLAG_NEWRTBM_BIT)
  119. XFS_DIFLAG_IMMUTABLE        = (1 SHL XFS_DIFLAG_IMMUTABLE_BIT)
  120. XFS_DIFLAG_APPEND           = (1 SHL XFS_DIFLAG_APPEND_BIT)
  121. XFS_DIFLAG_SYNC             = (1 SHL XFS_DIFLAG_SYNC_BIT)
  122. XFS_DIFLAG_NOATIME          = (1 SHL XFS_DIFLAG_NOATIME_BIT)
  123. XFS_DIFLAG_NODUMP           = (1 SHL XFS_DIFLAG_NODUMP_BIT)
  124. XFS_DIFLAG_RTINHERIT        = (1 SHL XFS_DIFLAG_RTINHERIT_BIT)
  125. XFS_DIFLAG_PROJINHERIT      = (1 SHL XFS_DIFLAG_PROJINHERIT_BIT)
  126. XFS_DIFLAG_NOSYMLINKS       = (1 SHL XFS_DIFLAG_NOSYMLINKS_BIT)
  127. XFS_DIFLAG_EXTSIZE          = (1 SHL XFS_DIFLAG_EXTSIZE_BIT)
  128. XFS_DIFLAG_EXTSZINHERIT     = (1 SHL XFS_DIFLAG_EXTSZINHERIT_BIT)
  129. XFS_DIFLAG_NODEFRAG         = (1 SHL XFS_DIFLAG_NODEFRAG_BIT)
  130. XFS_DIFLAG_FILESTREAM       = (1 SHL XFS_DIFLAG_FILESTREAM_BIT)
  131.  
  132.  
  133. ; superblock _ondisk_ structure (xfs_sb.h)
  134. ; this is _not_ the partition structure
  135. ; for XFS partition structure see XFS below
  136. struct xfs_sb
  137.         sb_magicnum     dd ?    ; signature, must be XFS_SB_MAGIC
  138.         sb_blocksize    dd ?    ; block is the minimal file system unit, in bytes
  139.         sb_dblocks      dq ?    ; number of data blocks
  140.         sb_rblocks      dq ?    ; number of realtime blocks (not supported yet!)
  141.         sb_rextents     dq ?    ; number of realtime extents (not supported yet!)
  142.         sb_uuid         rb 16   ; file system unique identifier
  143.         sb_logstart     dq ?    ; starting block of log (for internal journal; journals on separate devices are not supported!)
  144.         sb_rootino      dq ?    ; root inode number
  145.         sb_rbmino       dq ?    ; bitmap inode for realtime extents (ignored)
  146.         sb_rsumino      dq ?    ; summary inode for rt bitmap (ignored)
  147.         sb_rextsize     dd ?    ; realtime extent size, blocks
  148.         sb_agblocks     dd ?    ; size of an allocation group (the last one may be smaller!)
  149.         sb_agcount      dd ?    ; number of allocation groups
  150.         sb_rbmblocks    dd ?    ; number of rt bitmap blocks
  151.         sb_logblocks    dd ?    ; number of log blocks
  152.         sb_versionnum   dw ?    ; header version == XFS_SB_VERSION
  153.         sb_sectsize     dw ?    ; volume sector size in bytes (only 512B sectors are supported)
  154.         sb_inodesize    dw ?    ; inode size, bytes
  155.         sb_inopblock    dw ?    ; inodes per block
  156.         sb_fname        rb 12   ; inodes per block (aka label)
  157.         sb_blocklog     db ?    ; log2 of sb_blocksize
  158.         sb_sectlog      db ?    ; log2 of sb_blocksize
  159.         sb_inodelog     db ?    ; log2 of sb_inodesize
  160.         sb_inopblog     db ?    ; log2 of sb_inopblock
  161.         sb_agblklog     db ?    ; log2 of sb_agblocks (rounded up!)
  162.         sb_rextslog     db ?    ; log2 of sb_rextents
  163.         sb_inprogress   db ?    ; mkfs is in progress, don't mount
  164.         sb_imax_pct     db ?    ; max % of fs for inode space
  165.         ; statistics
  166.         sb_icount       dq ?    ; allocated inodes
  167.         sb_ifree        dq ?    ; free inodes
  168.         sb_fdblocks     dq ?    ; free data blocks
  169.         sb_frextents    dq ?    ; free realtime extents
  170.  
  171.         sb_uquotino     dq ?    ; user quota inode
  172.         sb_gquotino     dq ?    ; group quota inode
  173.         sb_qflags       dw ?    ; quota flags
  174.         sb_flags        db ?    ; misc. flags
  175.         sb_shared_vn    db ?    ; shared version number
  176.         sb_inoalignmt   dd ?    ; inode chunk alignment, fsblocks
  177.         sb_unit         dd ?    ; stripe or raid unit
  178.         sb_width        dd ?    ; stripe or raid width
  179.         sb_dirblklog    db ?    ; log2 of dir block size (fsbs)
  180.         sb_logsectlog   db ?    ; log2 of the log sector size
  181.         sb_logsectsize  dw ?    ; sector size for the log, bytes
  182.         sb_logsunit     dd ?    ; stripe unit size for the log
  183.         sb_features2    dd ?    ; additional feature bits
  184. ends
  185.  
  186.  
  187. ; allocation group inode (xfs_ag.h)
  188. struct xfs_agi
  189.         agi_magicnum    dd ?    ; magic number == XFS_AGI_MAGIC
  190.         agi_versionnum  dd ?    ; header version == XFS_AGI_VERSION
  191.         agi_seqno       dd ?    ; sequence number starting from 0
  192.         agi_length      dd ?    ; size in blocks of a.g.
  193.         agi_count       dd ?    ; count of allocated inodes
  194.         agi_root        dd ?    ; root of inode btree
  195.         agi_level       dd ?    ; levels in inode btree
  196.         agi_freecount   dd ?    ; number of free inodes
  197.         agi_newino      dd ?    ; new inode just allocated
  198.         agi_dirino      dd ?    ; last directory inode chunk
  199.         agi_unlinked    rd XFS_AGI_UNLINKED_BUCKETS     ; Hash table of inodes which have been unlinked but are still being referenced
  200. ends
  201.  
  202.  
  203. ; superblock structure of b+tree node/leaf (same structure, bb_level matters)
  204. struct xfs_btree_sblock
  205.         bb_magic        dd ?
  206.         bb_level        dw ?    ; distinguishes nodeds and leaves
  207.         bb_numrecs      dw ?
  208.         bb_leftsib      dd ?
  209.         bb_rightsib     dd ?
  210. ends
  211.  
  212.  
  213. ; record of b+tree inode
  214. struct xfs_inobt_rec
  215.         ir_startino     dd ?
  216.         ir_freecount    dd ?
  217.         ir_free         dq ?
  218. ends
  219.  
  220.  
  221. ; structure to store create, access and modification time in inode core
  222. struct xfs_timestamp
  223.         t_sec           dd ?
  224.         t_nsec          dd ?    ; nanoseconds
  225. ends
  226.  
  227.  
  228. ; inode core structure: basic information about file
  229. struct xfs_dinode_core
  230.         di_magic        dw ?            ; inode magic = XFS_DINODE_MAGIC
  231.         di_mode         dw ?            ; mode and type of file
  232.         di_version      db ?            ; inode version
  233.         di_format       db ?            ; format of di_c data
  234.         di_onlink       dw ?            ; old number of links to file
  235.         di_uid          dd ?            ; owner's user id
  236.         di_gid          dd ?            ; owner's group id
  237.         di_nlink        dd ?            ; number of links to file
  238.         di_projid       dw ?            ; owner's project id
  239.         di_pad          rb 8            ; unused, zeroed space
  240.         di_flushiter    dw ?            ; incremented on flush
  241.         di_atime        xfs_timestamp   ; time last accessed
  242.         di_mtime        xfs_timestamp   ; time last modified
  243.         di_ctime        xfs_timestamp   ; time created/inode modified
  244.         di_size         dq ?            ; number of bytes in file
  245.         di_nblocks      dq ?            ; number of direct & btree blocks used
  246.         di_extsize      dd ?            ; basic/minimum extent size for file
  247.         di_nextents     dd ?            ; number of extents in data fork
  248.         di_anextents    dw ?            ; number of extents in attribute fork
  249.         di_forkoff      db ?            ; attr fork offs, <<3 for 64b align
  250.         di_aformat      db ?            ; format of attr fork's data
  251.         di_dmevmask     dd ?            ; DMIG event mask
  252.         di_dmstate      dw ?            ; DMIG state info
  253.         di_flags        dw ?            ; random flags, XFS_DIFLAG_...
  254.         di_gen          dd ?            ; generation number
  255. ends
  256.  
  257.  
  258. ; shortform dir header
  259. struct xfs_dir2_sf_hdr
  260.         count           db ?            ; the number of directory entries, used only if each inode number fits 4 bytes; zero otherwise
  261.         i8count         db ?            ; the number of directory entries, used only when count is zero
  262.         parent          dq ?            ; parent inode number: xfs_dir2_inou_t (4 or 8 bytes)
  263. ends        
  264.  
  265.  
  266. ; shortform dir entry
  267. struct xfs_dir2_sf_entry
  268.         namelen         db ?            ; actual name length (ASCII)
  269.         offset          rb 2            ; saved offset
  270.         name            db ?            ; name, variable size
  271. ;       inumber         dq ?            ; xfs_dir2_inou_t
  272. ends
  273.  
  274.  
  275. ; active entry in a data block
  276. ; aligned to 8 bytes
  277. ; tag appears as the last 2 bytes
  278. struct xfs_dir2_data_entry
  279.         inumber         dq ?            ; inode number
  280.         namelen         db ?            ; name length
  281.         name            db ?            ; name bytes, no null
  282. ;       tag             dw ?            ; starting offset of us
  283. ends
  284.  
  285.  
  286. ; unused entry in a data block
  287. ; aligned to 8 bytes
  288. ; tag appears as the last 2 bytes
  289. struct xfs_dir2_data_unused
  290.         freetag         dw ?            ; XFS_DIR2_DATA_FREE_TAG
  291.         length          dw ?            ; total free length
  292. ;        tag             dw ?           ; starting offset of us
  293. ends
  294.  
  295.  
  296. ; generic data entry
  297. struct xfs_dir2_data_union
  298.   union
  299.         xentry          xfs_dir2_data_entry
  300.         unused          xfs_dir2_data_unused
  301.   ends
  302. ends
  303.  
  304.  
  305. ; describe a free area in the data block
  306. ; the freespace will be formatted as a xfs_dir2_data_unused_t
  307. struct xfs_dir2_data_free
  308.         offset          dw ?            ; start of freespace
  309.         length          dw ?            ; length of freespace
  310. ends
  311.  
  312.  
  313. ; header for the data blocks
  314. ; always at the beginning of a directory-sized block
  315. ; the code knows that XFS_DIR2_DATA_FD_COUNT is 3
  316. struct xfs_dir2_data_hdr
  317.         magic           dd ?                    ; XFS_DIR2_DATA_MAGIC or XFS_DIR2_BLOCK_MAGIC
  318.         bestfree        xfs_dir2_data_free
  319.         bestfree2       xfs_dir2_data_free
  320.         bestfree3       xfs_dir2_data_free
  321. ends
  322.  
  323.  
  324. ; leaf block entry
  325. struct xfs_dir2_leaf_entry
  326.         hashval         dd ?            ; hash value of name
  327.         address         dd ?            ; address of data entry
  328. ends
  329.  
  330.  
  331. ; the tail of directory block
  332. struct xfs_dir2_block_tail
  333.         count           dd ?            ; count of leaf entries
  334.         stale           dd ?            ; count of stale leaf entries
  335. ends
  336.  
  337.  
  338. ; generic single-block structure, for xfs_db
  339. struct xfs_dir2_block
  340.         hdr             xfs_dir2_data_hdr
  341.         u               xfs_dir2_data_union
  342. ;        leaf            xfs_dir2_leaf_entry
  343. ;        tail            xfs_dir2_block_tail
  344. ends
  345.  
  346.  
  347. ;
  348. struct xfs_dir2_data
  349.         hdr             xfs_dir2_data_hdr       ; magic XFS_DIR2_DATA_MAGIC
  350.         u               xfs_dir2_data_union
  351. ends
  352.  
  353.  
  354. ;
  355. struct xfs_da_blkinfo
  356.         forw            dd ?            ; previous block in list
  357.         back            dd ?            ; following block in list
  358.         magic           dw ?            ; validity check on block
  359.         pad             dw ?            ; unused
  360. ends
  361.  
  362.  
  363. ; leaf block header
  364. struct xfs_dir2_leaf_hdr
  365.         info            xfs_da_blkinfo  ; header for da routines
  366.         count           dw ?            ; count of entries
  367.         stale           dw ?            ; count of stale entries
  368. ends
  369.  
  370.  
  371. ; leaf block tail
  372. struct xfs_dir2_leaf_tail
  373.         bestcount       dd ?
  374. ends
  375.  
  376.  
  377. ; leaf block
  378. ; bests and tail are at the end of the block for single-leaf only
  379. ; (magic = XFS_DIR2_LEAF1_MAGIC not XFS_DIR2_LEAFN_MAGIC)
  380. struct xfs_dir2_leaf
  381.         hdr             xfs_dir2_leaf_hdr       ; leaf header
  382.         ents            xfs_dir2_leaf_entry     ; entries
  383. ;       bests           dw ?                    ; best free counts
  384. ;       tail            xfs_dir2_leaf_tail      ; leaf tail
  385. ends
  386.  
  387.  
  388. ; header of 'free' block part
  389. struct xfs_dir2_free_hdr
  390.         magic           dd ?    ; XFS_DIR2_FREE_MAGIC
  391.         firstdb         dd ?    ; db of first entry
  392.         nvalid          dd ?    ; count of valid entries
  393.         nused           dd ?    ; count of used entries
  394. ends
  395.  
  396.  
  397. ; 'free' part of directiry block
  398. struct xfs_dir2_free
  399.         hdr             xfs_dir2_free_hdr       ; block header
  400.         bests           dw ?                    ; best free counts
  401.                                                 ; unused entries are -1 (XFS_NULL)
  402. ends
  403.  
  404.  
  405. ; b+tree node header
  406. struct xfs_da_node_hdr
  407.         info            xfs_da_blkinfo
  408.         count           dw ?
  409.         level           dw ?
  410. ends
  411.  
  412.  
  413. ; b+tree node
  414. struct xfs_da_node_entry
  415.         hashval         dd ?            ; hash value for this descendant
  416.         before          dd ?            ; Btree block before this key
  417. ends
  418.  
  419.  
  420. ;
  421. struct xfs_da_intnode
  422.         hdr             xfs_da_node_hdr
  423.         btree           xfs_da_node_entry
  424. ends
  425.  
  426.  
  427. ; packet extent
  428. struct xfs_bmbt_rec
  429.         l0              dq ?
  430.         l1              dq ?
  431. ends
  432.  
  433.  
  434. ; unpacked extent
  435. struct xfs_bmbt_irec
  436.         br_startoff     dq ?            ; starting file offset
  437.         br_startblock   dq ?            ; starting block number
  438.         br_blockcount   dd ?            ; number of blocks
  439.         br_state        dd ?            ; extent state
  440. ends
  441.  
  442.  
  443. ; bmap root header, on-disk form only
  444. struct xfs_bmdr_block
  445.         bb_level        dw ?            ; 0 is a leaf
  446.         bb_numrecs      dw ?            ; current number of data records
  447. ends
  448.  
  449.  
  450. ; key structure for non-leaf levels of the tree
  451. struct xfs_bmbt_key
  452.         br_startoff     dq ?            ; starting file offset
  453. ends
  454.  
  455.  
  456. sizeof.xfs_bmbt_ptr = 8                 ; workaround
  457. sizeof.xfs_bmdr_ptr = 8                 ; workaround
  458.  
  459.  
  460. ; long form header: bmap btrees
  461. ; xfs_btree_lblock is xfs_bmbt_block (xfs_btree.h)
  462. struct xfs_bmbt_block
  463.         bb_magic        dd ?            ; magic number for block type
  464.         bb_level        dw ?            ; 0 is a leaf
  465.         bb_numrecs      dw ?            ; current number of data records
  466.         bb_leftsib      dq ?            ; left sibling block or NULLDFSBNO
  467.         bb_rightsib     dq ?            ; right sibling block or NULLDFSBNO
  468. ends
  469.  
  470.  
  471. ; high level inode structure
  472. struct xfs_inode
  473.         di_core                 xfs_dinode_core ; main info, aka core
  474.         di_next_unlinked        dd ?            ; unlinked but still used inode (if any, XFS_NULL otherwise)
  475.         di_u                    db ?            ; data fork inode part
  476. ;        di_a                    db ?           ; data attribute
  477. ends
  478.  
  479.  
  480. ; internal data for every XFS partition
  481. ; this _is_ XFS partition structure
  482. ; most fields are unpacked or bswap'ed values from the superblock, so see xfs_sb structure above
  483. struct XFS PARTITION
  484.         Lock                    MUTEX ?         ; access mutex
  485.         blocksize               dd ?
  486.         sectsize                dd ?
  487.         dirblocksize            dd ?
  488.         rootino                 dq ?
  489.         cur_block               dd ?
  490.         cur_inode               dd ?
  491.         cur_sect                dd ?
  492.         cur_dirblock            dd ?
  493.         tmp_inode               dd ?
  494.         versionnum              dd ?
  495.         features2               dd ?
  496.         inodesize               dd ?
  497.         inopblock               dd ?
  498.         blocklog                dd ?
  499.         sectlog                 dd ?
  500.         inodelog                dd ?
  501.         inopblog                dd ?
  502.         agblklog                dd ?
  503.         blockmsectlog           dd ?
  504.         inodetoblocklog         dd ?
  505.         dirblklog               dd ?
  506.         sectpblock              dd ?
  507.         agblocks                dd ?
  508.         ; helpers, temporary vars, etc
  509.         agblockmask             dq ?
  510.         extent                  xfs_bmbt_irec
  511.         left_extents            dd ?
  512.         left_leaves             dd ?
  513.         bytes_to_read           dd ?
  514.         bytes_read              dd ?
  515.         entries_read            dd ?
  516.         file_offset             dq ?
  517.         max_dirblockaddr        dd ?
  518.         next_block_num          dq ?
  519.         dir2_leaf_offset_blocks dd ?
  520.         dir2_free_offset_blocks dd ?
  521.         cur_inode_save          dd ?
  522.         bytes_left_in_file      dq ?
  523.         ro_nextents             dd ?
  524.         bb_ptrs                 dd ?
  525.         maxnumrecs              dd ?
  526.         buffer_pos              dd ?
  527.         eof                     dd ?
  528. ends
  529.