Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2013-2020. All rights reserved. ;;
  4. ;;  Distributed under terms of the GNU General Public License   ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 7736 $
  9.  
  10. ; file types from stat.h
  11. S_IFMT      = 0170000o  ; These bits determine file type
  12. S_IFDIR     = 0040000o  ; Directory
  13. S_IFCHR     = 0020000o  ; Character device
  14. S_IFBLK     = 0060000o  ; Block device
  15. S_IFREG     = 0100000o  ; Regular file
  16. S_IFIFO     = 0010000o  ; FIFO
  17. S_IFLNK     = 0120000o  ; Symbolic link
  18. S_IFSOCK    = 0140000o  ; Socket
  19.  
  20. ; XFS null constant: empty fields must be all ones, not zeros!
  21. XFS_NULL                = -1
  22.  
  23. XFS_SECT_SB             = 0
  24.  
  25. ; signatures of file system structures
  26. XFS_AGF_MAGIC           = 'XAGF'
  27. XFS_DINODE_MAGIC        = 'IN'
  28. XFS_BMAP_MAGIC          = 'BMAP'
  29. XFS_DA_NODE_MAGIC       = 0xbefe
  30. XFS_DIR2_LEAF1_MAGIC    = 0xf1d2
  31. XFS_DIR2_LEAFN_MAGIC    = 0xffd2
  32. XFS_DIR2_BLOCK_MAGIC    = 'XD2B'
  33. XFS_DIR2_DATA_MAGIC     = 'XD2D'
  34.  
  35. XFS_BMAP3_MAGIC         = 'BMA3'
  36. XFS_DA3_NODE_MAGIC      = 0xbe3e        ; non-leaf blocks
  37. XFS_DIR3_LEAF1_MAGIC    = 0xf13d        ; v3 dir single blks
  38. XFS_DIR3_LEAFN_MAGIC    = 0xff3d        ; v3 dir multi blks
  39. XFS_DIR3_BLOCK_MAGIC    = 'XDB3'        ; single block dirs
  40. XFS_DIR3_DATA_MAGIC     = 'XDD3'        ; multiblock dirs
  41.  
  42. XFS_SB_MAGIC               = 'XFSB'
  43. XFS_SB_VERSION_NUMBITS     = 0x000f
  44. XFS_SB_VERSION_ALLFBITS    = 0xfff0
  45. XFS_SB_VERSION_REALFBITS   = 0x0ff0
  46. XFS_SB_VERSION_ATTRBIT     = 0x0010
  47. XFS_SB_VERSION_NLINKBIT    = 0x0020
  48. XFS_SB_VERSION_QUOTABIT    = 0x0040
  49. XFS_SB_VERSION_ALIGNBIT    = 0x0080
  50. XFS_SB_VERSION_DALIGNBIT   = 0x0100
  51. XFS_SB_VERSION_SHAREDBIT   = 0x0200
  52. XFS_SB_VERSION_LOGV2BIT    = 0x0400
  53. XFS_SB_VERSION_SECTORBIT   = 0x0800
  54. XFS_SB_VERSION_EXTFLGBIT   = 0x1000
  55. XFS_SB_VERSION_DIRV2BIT    = 0x2000
  56. XFS_SB_VERSION_BORGBIT     = 0x4000     ; ASCII only case-insensitive
  57. XFS_SB_VERSION_MOREBITSBIT = 0x8000
  58.  
  59. XFS_SB_VERSION_SUPPORTED = XFS_SB_VERSION_NUMBITS     OR \
  60.                            XFS_SB_VERSION_ATTRBIT     OR \
  61.                            XFS_SB_VERSION_NLINKBIT    OR \
  62.                            XFS_SB_VERSION_QUOTABIT    OR \
  63.                            XFS_SB_VERSION_ALIGNBIT    OR \
  64.                            XFS_SB_VERSION_LOGV2BIT    OR \
  65.                            XFS_SB_VERSION_SECTORBIT   OR \
  66.                            XFS_SB_VERSION_EXTFLGBIT   OR \
  67.                            XFS_SB_VERSION_DIRV2BIT    OR \
  68.                            XFS_SB_VERSION_MOREBITSBIT
  69.  
  70. XFS_SB_VERSION2_RESERVED1BIT   = 0x00000001
  71. XFS_SB_VERSION2_LAZYSBCOUNTBIT = 0x00000002     ; Superblk counters
  72. XFS_SB_VERSION2_RESERVED4BIT   = 0x00000004
  73. XFS_SB_VERSION2_ATTR2BIT       = 0x00000008     ; Inline attr rework
  74. XFS_SB_VERSION2_PARENTBIT      = 0x00000010     ; parent pointers in xattr
  75. XFS_SB_VERSION2_PROJID32BIT    = 0x00000080     ; 32 bit project id
  76. XFS_SB_VERSION2_CRCBIT         = 0x00000100     ; metadata CRCs
  77. XFS_SB_VERSION2_FTYPE          = 0x00000200     ; inode type in dir
  78.  
  79. XFS_SB_VERSION2_SUPPORTED = XFS_SB_VERSION2_LAZYSBCOUNTBIT OR \
  80.                             XFS_SB_VERSION2_ATTR2BIT       OR \
  81.                             XFS_SB_VERSION2_PARENTBIT      OR \
  82.                             XFS_SB_VERSION2_PROJID32BIT    OR \
  83.                             XFS_SB_VERSION2_CRCBIT         OR \
  84.                             XFS_SB_VERSION2_FTYPE
  85.  
  86. XFS_SB_FEAT_INCOMPAT_FTYPE     = 1      ; filetype in dirent
  87. XFS_SB_FEAT_INCOMPAT_SPINODES  = 2      ; sparse inode chunks
  88. XFS_SB_FEAT_INCOMPAT_META_UUID = 4      ; metadata UUID
  89. XFS_SB_FEAT_INCOMPAT_SUPPORTED = XFS_SB_FEAT_INCOMPAT_FTYPE    OR \
  90.                                  XFS_SB_FEAT_INCOMPAT_SPINODES OR \
  91.                                  XFS_SB_FEAT_INCOMPAT_META_UUID
  92.  
  93. ; bitfield lengths for packed extent
  94. ; MSB to LSB / left to right
  95. BMBT_EXNTFLAG_BITLEN    =  1
  96. BMBT_STARTOFF_BITLEN    = 54
  97. BMBT_STARTBLOCK_BITLEN  = 52
  98. BMBT_BLOCKCOUNT_BITLEN  = 21
  99.  
  100. XFS_DIR2_DATA_ALIGN_LOG = 3
  101. XFS_DIR2_DATA_ALIGN     = 1 SHL XFS_DIR2_DATA_ALIGN_LOG
  102. XFS_DIR2_SPACE_SIZE     = (1 SHL (32 + XFS_DIR2_DATA_ALIGN_LOG))
  103. XFS_DIR2_DATA_OFFSET    = 0*XFS_DIR2_SPACE_SIZE
  104. XFS_DIR2_LEAF_OFFSET    = 1*XFS_DIR2_SPACE_SIZE
  105. XFS_DIR2_FREE_OFFSET    = 2*XFS_DIR2_SPACE_SIZE
  106.  
  107. ; data section magic constants for directories (xfs_dir2_data.h)
  108. XFS_DIR2_DATA_FD_COUNT  = 3
  109.  
  110. ; valid inode formats
  111. ; enum xfs_dinode_fmt (xfs_dinode.h)
  112. XFS_DINODE_FMT_DEV      = 0
  113. XFS_DINODE_FMT_LOCAL    = 1
  114. XFS_DINODE_FMT_EXTENTS  = 2
  115. XFS_DINODE_FMT_BTREE    = 3
  116. XFS_DINODE_FMT_UUID     = 4
  117.  
  118. ; size of the unlinked inode hash table in the agi
  119. XFS_AGI_UNLINKED_BUCKETS = 64
  120.  
  121. ; possible extent states
  122. ; enum xfs_exntst_t (xfs_bmap_btree.h)
  123. XFS_EXT_NORM            = 0
  124. XFS_EXT_UNWRITTEN       = 1
  125. XFS_EXT_DMAPI_OFFLINE   = 2
  126. XFS_EXT_INVALID         = 3
  127.  
  128. ; values for inode core flags / di_flags (xfs_dinode.h)
  129. XFS_DIFLAG_REALTIME_BIT     =  0        ; file's blocks come from rt area
  130. XFS_DIFLAG_PREALLOC_BIT     =  1        ; file space has been preallocated
  131. XFS_DIFLAG_NEWRTBM_BIT      =  2        ; for rtbitmap inode, new format
  132. XFS_DIFLAG_NODUMP_BIT       =  7        ; do not dump
  133. XFS_DIFLAG_REALTIME         = (1 SHL XFS_DIFLAG_REALTIME_BIT)
  134. XFS_DIFLAG_PREALLOC         = (1 SHL XFS_DIFLAG_PREALLOC_BIT)
  135. XFS_DIFLAG_NEWRTBM          = (1 SHL XFS_DIFLAG_NEWRTBM_BIT)
  136. XFS_DIFLAG_NODUMP           = (1 SHL XFS_DIFLAG_NODUMP_BIT)
  137.  
  138. ; superblock _ondisk_ structure (xfs_sb.h)
  139. ; this is _not_ the partition structure
  140. ; for XFS partition structure see XFS below
  141. struct xfs_sb
  142.         sb_magicnum              dd ?   ; signature, must be XFS_SB_MAGIC
  143.         sb_blocksize             dd ?   ; block is the minimal file system unit, in bytes
  144.         sb_dblocks               DQ ?   ; number of data blocks
  145.         sb_rblocks               DQ ?   ; number of realtime blocks
  146.         sb_rextents              DQ ?   ; number of realtime extents
  147.         sb_uuid                  rb 16  ; file system unique identifier
  148.         sb_logstart              DQ ?   ; starting block of log (for internal journal)
  149.         sb_rootino               DQ ?   ; root inode number
  150.         sb_rbmino                DQ ?   ; bitmap inode for realtime extents
  151.         sb_rsumino               DQ ?   ; summary inode for rt bitmap
  152.         sb_rextsize              dd ?   ; realtime extent size, blocks
  153.         sb_agblocks              dd ?   ; size of an allocation group (the last one may be smaller!)
  154.         sb_agcount               dd ?   ; number of allocation groups
  155.         sb_rbmblocks             dd ?   ; number of rt bitmap blocks
  156.         sb_logblocks             dd ?   ; number of log blocks
  157.         sb_versionnum            dw ?   ; header version
  158.         sb_sectsize              dw ?   ; volume sector size in bytes
  159.         sb_inodesize             dw ?   ; inode size, bytes
  160.         sb_inopblock             dw ?   ; inodes per block
  161.         sb_fname                 rb 12  ; inodes per block (aka label)
  162.         sb_blocklog              db ?   ; log2 of sb_blocksize
  163.         sb_sectlog               db ?   ; log2 of sb_blocksize
  164.         sb_inodelog              db ?   ; log2 of sb_inodesize
  165.         sb_inopblog              db ?   ; log2 of sb_inopblock
  166.         sb_agblklog              db ?   ; log2 of sb_agblocks (rounded up!)
  167.         sb_rextslog              db ?   ; log2 of sb_rextents
  168.         sb_inprogress            db ?   ; mkfs is in progress, don't mount
  169.         sb_imax_pct              db ?   ; max % of fs for inode space
  170.         ; statistics
  171.         sb_icount                DQ ?   ; allocated inodes
  172.         sb_ifree                 DQ ?   ; free inodes
  173.         sb_fdblocks              DQ ?   ; free data blocks
  174.         sb_frextents             DQ ?   ; free realtime extents
  175.  
  176.         sb_uquotino              DQ ?   ; user quota inode
  177.         sb_gquotino              DQ ?   ; group quota inode
  178.         sb_qflags                dw ?   ; quota flags
  179.         sb_flags                 db ?   ; misc. flags
  180.         sb_shared_vn             db ?   ; shared version number
  181.         sb_inoalignmt            dd ?   ; inode chunk alignment, fsblocks
  182.         sb_unit                  dd ?   ; stripe or raid unit
  183.         sb_width                 dd ?   ; stripe or raid width
  184.         sb_dirblklog             db ?   ; log2 of dir block size (fsbs)
  185.         sb_logsectlog            db ?   ; log2 of the log sector size
  186.         sb_logsectsize           dw ?   ; sector size for the log, bytes
  187.         sb_logsunit              dd ?   ; stripe unit size for the log
  188.         sb_features2             dd ?   ; additional feature bits
  189.         sb_bad_features2         dd ?
  190.         sb_features_compat       dd ?
  191.         sb_features_ro_compat    dd ?
  192.         sb_features_incompat     dd ?
  193.         sb_features_log_incompat dd ?
  194.         sb_crc                   dd ?   ; superblock crc
  195.         sb_spino_align           dd ?   ; sparse inode chunk alignment
  196.         sb_pquotino              DQ ?   ; project quota inode
  197.         sb_lsn                   DQ ?   ; last write sequence
  198.         sb_meta_uuid             rb 16  ; metadata file system unique id
  199. ends
  200.  
  201. ; structure to store create, access and modification time in inode core
  202. struct xfs_timestamp
  203.         t_sec           dd ?
  204.         t_nsec          dd ?    ; nanoseconds
  205. ends
  206.  
  207. ; inode core structure: basic information about file
  208. struct xfs_dinode_core
  209.         di_magic         dw ?           ; inode magic = XFS_DINODE_MAGIC
  210.         di_mode          dw ?           ; mode and type of file
  211.         di_version       db ?           ; inode version
  212.         di_format        db ?           ; format of di_c data
  213.         di_onlink        dw ?           ; old number of links to file
  214.         di_uid           dd ?           ; owner's user id
  215.         di_gid           dd ?           ; owner's group id
  216.         di_nlink         dd ?           ; number of links to file
  217.         di_projid        dw ?           ; owner's project id
  218.         di_pad           rb 8           ; unused, zeroed space
  219.         di_flushiter     dw ?           ; incremented on flush
  220.         di_atime         xfs_timestamp  ; time last accessed
  221.         di_mtime         xfs_timestamp  ; time last modified
  222.         di_ctime         xfs_timestamp  ; time created/inode modified
  223.         di_size          DQ ?           ; number of bytes in file
  224.         di_nblocks       DQ ?           ; number of direct & btree blocks used
  225.         di_extsize       dd ?           ; basic/minimum extent size for file
  226.         di_nextents      dd ?           ; number of extents in data fork
  227.         di_anextents     dw ?           ; number of extents in attribute fork
  228.         di_forkoff       db ?           ; attr fork offs, <<3 for 64b align
  229.         di_aformat       db ?           ; format of attr fork's data
  230.         di_dmevmask      dd ?           ; DMIG event mask
  231.         di_dmstate       dw ?           ; DMIG state info
  232.         di_flags         dw ?           ; random flags, XFS_DIFLAG_...
  233.         di_gen           dd ?           ; generation number
  234.         di_next_unlinked dd ?           ; unlinked but still used inode (if any, XFS_NULL otherwise)
  235. ends
  236.  
  237. struct xfs_dinode3_core xfs_dinode_core
  238.         di_crc           dd ?           ; CRC of the inode
  239.         di_changecount   DQ ?           ; number of attribute changes
  240.         di_lsn           DQ ?           ; flush sequence
  241.         di_flags2        DQ ?           ; more random flags
  242.         di_cowextsize    dd ?           ; basic cow extent size for file
  243.         di_pad2          rb 12          ; more padding for future expansion
  244.  
  245.         ; fields only written to during inode creation
  246.         di_crtime        xfs_timestamp  ; time created
  247.         di_ino           DQ ?           ; inode number
  248.         di_uuid          rb 16          ; UUID of the filesystem
  249. ends
  250.  
  251.  
  252. struct xfs_dir2_sf_hdr
  253.         count           db ?
  254.         i8count         db ?
  255.         parent          DQ ?            ; parent inode number, 4 or 8 bytes
  256. ends        
  257.  
  258. struct xfs_dir2_sf_entry
  259.         namelen         db ?            ; actual name length (ASCII)
  260.         offset          rb 2            ; saved offset
  261.         name            db ?            ; name, variable size
  262.         inumber         DQ ?            ; 4 or 8 bytes
  263. ends
  264.  
  265. struct xfs_dir2_sf
  266.         hdr     xfs_dir2_sf_hdr
  267.         entries xfs_dir2_sf_entry
  268. ends
  269.  
  270. ; active entry in a data block
  271. ; aligned to 8 bytes
  272. ; tag appears as the last 2 bytes
  273. struct xfs_dir2_data_entry
  274.         inumber         DQ ?
  275.         namelen         db ?
  276.         name            db ?            ; name bytes array without terminator
  277. ;       tag             dw ?            ; starting offset of the entry
  278. ends
  279.  
  280. ; unused entry in a data block
  281. struct xfs_dir2_data_unused
  282.         freetag         dw ?            ; XFS_DIR2_DATA_FREE_TAG aka XFS_NULL
  283.         length          dw ?            ; total free length
  284. ;        tag             dw ?           ; starting offset of the entry
  285. ends
  286.  
  287. ; generic data entry
  288. struct xfs_dir2_data_union
  289.   union
  290.         xentry          xfs_dir2_data_entry
  291.         unused          xfs_dir2_data_unused
  292.   ends
  293. ends
  294.  
  295. ; describe a free area in the data block
  296. ; the freespace will be formatted as a xfs_dir2_data_unused_t
  297. struct xfs_dir2_data_free
  298.         offset          dw ?            ; start of freespace
  299.         length          dw ?            ; length of freespace
  300. ends
  301.  
  302. ; header for the data blocks
  303. ; always at the beginning of a directory-sized block
  304. ; the code knows that XFS_DIR2_DATA_FD_COUNT is 3
  305. struct xfs_dir2_data_hdr
  306.         magic           dd ?            ; XFS_DIR2_DATA_MAGIC or XFS_DIR2_BLOCK_MAGIC
  307.         bestfree        xfs_dir2_data_free
  308.         bestfree2       xfs_dir2_data_free
  309.         bestfree3       xfs_dir2_data_free
  310. ends
  311.  
  312. struct xfs_dir3_data_hdr xfs_dir2_data_hdr
  313.         magic3  dd ?
  314.         crc     dd ?
  315.         blkno   DQ ?
  316.         lsn     DQ ?
  317.         uuid    rb 16
  318.         owner   DQ ?
  319. ends
  320.  
  321. ; leaf block entry
  322. struct xfs_dir2_leaf_entry
  323.         hashval         dd ?            ; hash value of name
  324.         address         dd ?            ; address of data entry
  325. ends
  326.  
  327. ; the tail of directory block
  328. struct xfs_dir2_block_tail
  329.         count           dd ?            ; count of leaf entries
  330.         stale           dd ?            ; count of stale leaf entries
  331. ends
  332.  
  333. ; generic single-block structure, for xfs_db
  334. struct xfs_dir2_block
  335.         hdr             xfs_dir2_data_hdr       ; magic XFS_DIR2_DATA_MAGIC
  336.         u               xfs_dir2_data_union
  337. ;        leaf            xfs_dir2_leaf_entry
  338. ;        tail            xfs_dir2_block_tail
  339. ends
  340.  
  341. struct xfs_da_blkinfo
  342.         forw            dd ?            ; previous block in list
  343.         back            dd ?            ; following block in list
  344.         magic           dw ?            ; validity check on block
  345.         pad             dw ?            ; unused
  346. ends
  347.  
  348. struct xfs_dir2_leaf_hdr
  349.         info            xfs_da_blkinfo
  350.         count           dw ?
  351.         stale           dw ?
  352. ends
  353.  
  354. struct xfs_da3_blkinfo xfs_da_blkinfo
  355.         crc   dd ?      ; CRC of block
  356.         blkno DQ ?      ; first block of the buffer
  357.         lsn   DQ ?      ; sequence number of last write
  358.         uuid  rb 16     ; filesystem we belong to
  359.         owner DQ ?      ; inode that owns the block
  360. ends
  361.  
  362. struct xfs_dir3_leaf_hdr
  363.         info            xfs_da3_blkinfo
  364.         count           dw ?
  365.         stale           dw ?
  366.         pad             dd ?
  367. ends
  368.  
  369. ; bests and tail are at the end of the block for single-leaf only
  370. ; (magic = XFS_DIR2_LEAF1_MAGIC not XFS_DIR2_LEAFN_MAGIC)
  371. struct xfs_dir2_leaf
  372.         hdr             xfs_dir2_leaf_hdr
  373.         ents            xfs_dir2_leaf_entry
  374. ;       bests           dw ?
  375. ;       tail            xfs_dir2_leaf_tail
  376. ends
  377.  
  378. struct xfs_dir3_leaf
  379.         hdr             xfs_dir3_leaf_hdr
  380.         ents            xfs_dir2_leaf_entry
  381. ;       bests
  382. ;       tail
  383. ends
  384.  
  385. struct xfs_dir2_free_hdr
  386.         magic           dd ?    ; XFS_DIR2_FREE_MAGIC
  387.         firstdb         dd ?    ; db of first entry
  388.         nvalid          dd ?    ; count of valid entries
  389.         nused           dd ?    ; count of used entries
  390. ends
  391.  
  392. struct xfs_da_node_hdr
  393.         info            xfs_da_blkinfo
  394.         count           dw ?
  395.         level           dw ?
  396. ends
  397.  
  398. struct xfs_da_node_entry
  399.         hashval         dd ?            ; hash value for this descendant
  400.         before          dd ?            ; Btree block before this key
  401. ends
  402.  
  403. struct xfs_da_intnode
  404.         hdr             xfs_da_node_hdr
  405.         btree           xfs_da_node_entry
  406. ends
  407.  
  408. struct xfs_da3_node_hdr
  409.         info            xfs_da3_blkinfo
  410.         count           dw ?
  411.         level           dw ?
  412.         pad             dd ?
  413. ends
  414.  
  415. struct xfs_da3_intnode
  416.         hdr             xfs_da3_node_hdr
  417.         btree           xfs_da_node_entry
  418. ends
  419.  
  420. ; packet extent
  421. struct xfs_bmbt_rec
  422.         l0              DQ ?
  423.         l1              DQ ?
  424. ends
  425.  
  426. ; unpacked extent
  427. struct xfs_bmbt_irec
  428.         br_startoff     DQ ?
  429.         br_startblock   DQ ?
  430.         br_blockcount   dd ?
  431.         br_state        dd ?
  432. ends
  433.  
  434. struct xfs_dir2_bmx
  435.         bmx     xfs_bmbt_rec
  436. ends
  437.  
  438. ; bmap root header
  439. struct xfs_bmdr_block
  440.         bb_level        dw ?            ; 0 is a leaf
  441.         bb_numrecs      dw ?            ; current number of data records
  442. ends
  443.  
  444. ; key structure for non-leaf levels of the tree
  445. struct xfs_bmbt_key
  446.         br_startoff     DQ ?            ; starting file offset
  447. ends
  448.  
  449. struct xfs_bmdr_ptr DQ
  450. ends
  451.  
  452. struct xfs_bmbt_ptr DQ
  453. ends
  454.  
  455. ; long form header: bmap btrees
  456. ; xfs_btree_lblock is xfs_bmbt_block (xfs_btree.h)
  457. struct xfs_bmbt_block
  458.         bb_magic        dd ?            ; magic number for block type
  459.         bb_level        dw ?            ; 0 is a leaf
  460.         bb_numrecs      dw ?            ; current number of data records
  461.         bb_leftsib      DQ ?            ; left sibling block or NULLDFSBNO
  462.         bb_rightsib     DQ ?            ; right sibling block or NULLDFSBNO
  463. ends
  464.  
  465. struct xfs_bmbt3_block xfs_bmbt_block
  466.         bb_blkno        DQ ?
  467.         bb_lsn          DQ ?
  468.         bb_uuid         rb 16
  469.         bb_owner        DQ ?
  470.         bb_crc          dd ?
  471.         bb_pad          dd ?
  472. ends
  473.  
  474. struct xfs_inode
  475.         di_core                 xfs_dinode_core ; main info, aka core
  476.         union
  477.                 di_u            db ?            ; data fork inode part
  478.                 dir2_sf         xfs_dir2_sf
  479.                 bmx             xfs_dir2_bmx
  480.         ends
  481. ;        di_a                    db ?           ; data attribute
  482. ends
  483.  
  484. struct xfs_agf
  485.         agf_magicnum    dd ?    ; magic number == XFS_AGF_MAGIC
  486.         agf_versionnum  dd ?    ; header version == XFS_AGF_VERSION
  487.         agf_seqno       dd ?    ; sequence # starting from 0
  488.         agf_length      dd ?    ; size in blocks of AG
  489.         agf_roots       dd ?
  490.         agf_levels      dd ?
  491.         agf_flfirst     dd ?
  492.         agf_fllast      dd ?
  493.         agf_flcount     dd ?
  494.         agf_freeblks    dd ?    ; free blocks in AG
  495. ends
  496.  
  497. ; internal data for every XFS partition
  498. ; this _is_ XFS partition structure
  499. ; most fields are unpacked or bswap'ed values of the superblock, see xfs_sb structure above
  500. struct XFS PARTITION
  501.         Lock                    MUTEX ?         ; access mutex
  502.         sectsize                dd ?
  503.         blocksize               dd ?
  504.         dirblocksize            dd ?
  505.         inodesize               dd ?
  506.         rootino                 DQ ?
  507.         versionnum              dd ?
  508.         version                 dd ?
  509.         features2               dd ?
  510.         inopblock               dd ?
  511.         blkpdirblk              dd ?
  512.         blocklog                dd ?
  513.         sectlog                 dd ?
  514.         inodelog                dd ?
  515.         inopblog                dd ?
  516.         agblklog                dd ?
  517.         sectpblog               dd ?
  518.         dirblklog               dd ?    ; in fsblocks
  519.         sectpblock              dd ?
  520.         agblocks                dd ?
  521.         dir2_leaf_offset_blocks DQ ?
  522.         dir2_free_offset_blocks DQ ?
  523.         agblockmask             DQ ?
  524.         inode_core_size         dd ?
  525.         features_incompat       dd ?
  526.         ftype_size              dd ?
  527.         dir_block_magic         dd ?
  528.         dir_data_magic          dd ?
  529.         dir_leaf1_magic         dw ?
  530.         dir_leafn_magic         dw ?
  531.         da_node_magic           dw ?
  532.         bmap_magic              dd ?
  533.         bmbt_block_size         dd ?
  534.         dir_block_size          dd ?
  535.         dir_data_size           dd ?
  536.         dir_leaf1_size          dd ?
  537.         dir_leafn_size          dd ?
  538.         da_node_size            dd ?
  539.         da_blkinfo_size         dd ?
  540.         ; helpers, temporary vars, etc
  541.         ; should go to file descriptor and local vars?
  542.         cur_block               dd ?
  543.         cur_block_data          dd ?
  544.         cur_inode               dd ?
  545.         cur_sect                dd ?
  546.         cur_dirblock            dd ?
  547.         tmp_inode               dd ?
  548.         extent                  xfs_bmbt_irec
  549.         bytes_to_read           dd ?
  550.         bytes_read              dd ?
  551.         bytes_left_in_file      DQ ?
  552.         file_offset             DQ ?
  553.         file_buffer             dd ?
  554.         entries_read            dd ?
  555.         requested_cnt           dd ?
  556.         dir_sf_self_done        dd ?
  557.         dir_sf_parent_done      dd ?
  558.         entries_left_in_dir     dd ?
  559.         entries_to_skip         dd ?
  560.         max_dirblockaddr        dd ?
  561.         cur_inode_save          dd ?
  562.         shortform_inodelen      dd ?
  563.         bdfe_nameenc            dd ?
  564.         bdfe_len                dd ?
  565.         bdfe_process            dd ?
  566.         inode_self              DQ ?
  567.         bdfe_buf                dd ?
  568.         eof                     dd ?
  569.         offset_begin            DQ ?
  570.         offset_end              DQ ?
  571. ends
  572.  
  573. struct f70s0arg
  574.         sf       dd ?
  575.         offset   DQ ?
  576.         count    dd ?
  577.         buf      dd ?
  578.         zero     db ?
  579.         path     dd ?
  580. ends
  581.  
  582. struct f70s1arg
  583.         sf        dd ?
  584.         start_idx dd ?
  585.         encoding  dd ?
  586.         count     dd ?
  587.         buf       dd ?
  588.         zero      db ?
  589.         path      dd ?
  590. ends
  591.  
  592. struct f70s5arg
  593.         sf     dd ?
  594.                dd ?
  595.         xflags dd ?     ; name flags is already used
  596.                dd ?
  597.         buf    dd ?
  598.         zero   db ?
  599.         path   dd ?
  600. ends
  601.  
  602. struct bdfe_hdr
  603.         version   dd ?
  604.         read_cnt  dd ?
  605.         total_cnt dd ?
  606.         zeroed    rd 5
  607. ends
  608.  
  609. struct bdfe
  610.         attr     dd ?
  611.         nameenc  dd ?
  612. ;        nameenc  db ?
  613. ;        reserved db 3 dup(?)
  614.         ctime    dd ?
  615.         cdate    dd ?
  616.         atime    dd ?
  617.         adate    dd ?
  618.         mtime    dd ?
  619.         mdate    dd ?
  620.         size     DQ ?
  621.         name     db ?
  622. ends
  623.