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