Lines Matching +full:non +full:- +full:linear
1 .. SPDX-License-Identifier: GPL-2.0
4 -----------------
9 that reference the same inode number--these are known as hard links, and
15 Linear (Classic) Directories
18 By default, each directory lists its entries in an “almost-linear”
19 array. I write “almost” because it's not a linear array in the memory
22 data blocks and that each block contains a linear array of directory
23 entries. The end of each per-block array is signified by reaching the
36 .. list-table::
38 :header-rows: 1
40 * - Offset
41 - Size
42 - Name
43 - Description
44 * - 0x0
45 - __le32
46 - inode
47 - Number of the inode that this directory entry points to.
48 * - 0x4
49 - __le16
50 - rec_len
51 - Length of this directory entry. Must be a multiple of 4.
52 * - 0x6
53 - __le16
54 - name_len
55 - Length of the file name.
56 * - 0x8
57 - char
58 - name[EXT4_NAME_LEN]
59 - File name.
68 .. list-table::
70 :header-rows: 1
72 * - Offset
73 - Size
74 - Name
75 - Description
76 * - 0x0
77 - __le32
78 - inode
79 - Number of the inode that this directory entry points to.
80 * - 0x4
81 - __le16
82 - rec_len
83 - Length of this directory entry.
84 * - 0x6
85 - __u8
86 - name_len
87 - Length of the file name.
88 * - 0x7
89 - __u8
90 - file_type
91 - File type code, see ftype_ table below.
92 * - 0x8
93 - char
94 - name[EXT4_NAME_LEN]
95 - File name.
101 .. list-table::
103 :header-rows: 1
105 * - Value
106 - Description
107 * - 0x0
108 - Unknown.
109 * - 0x1
110 - Regular file.
111 * - 0x2
112 - Directory.
113 * - 0x3
114 - Character device file.
115 * - 0x4
116 - Block device file.
117 * - 0x5
118 - FIFO.
119 * - 0x6
120 - Socket.
121 * - 0x7
122 - Symbolic link.
131 .. list-table::
133 :header-rows: 1
135 * - Offset
136 - Size
137 - Name
138 - Description
139 * - 0x0
140 - __le32
141 - hash
142 - The hash of the directory name
143 * - 0x4
144 - __le32
145 - minor_hash
146 - The minor hash of the directory name
157 .. list-table::
159 :header-rows: 1
161 * - Offset
162 - Size
163 - Name
164 - Description
165 * - 0x0
166 - __le32
167 - det_reserved_zero1
168 - Inode number, which must be zero.
169 * - 0x4
170 - __le16
171 - det_rec_len
172 - Length of this directory entry, which must be 12.
173 * - 0x6
174 - __u8
175 - det_reserved_zero2
176 - Length of the file name, which must be zero.
177 * - 0x7
178 - __u8
179 - det_reserved_ft
180 - File type, which must be 0xDE.
181 * - 0x8
182 - __le32
183 - det_checksum
184 - Directory leaf block checksum.
194 A linear array of directory entries isn't great for performance, so a
199 backwards read-only compatibility with ext2, this tree is actually
201 blocks! It was stated previously that the end of the linear directory
203 (ab)used to fool the old linear-scan algorithm into thinking that the
210 the root node contains metadata about the tree and finally a hash->block
212 ``dx_root.info.indirect_levels`` is non-zero then the htree has two
216 minor_hash->block map to find leafe nodes. Leaf nodes contain a linear
220 least-significant bit of the hash (in the interior node map) that gets
225 number. If the tree is flat, the block is a linear array of directory
228 third block number. That third block number will be a linear array of
231 To traverse the directory as a linear array (such as the old code does),
239 .. list-table::
241 :header-rows: 1
243 * - Offset
244 - Type
245 - Name
246 - Description
247 * - 0x0
248 - __le32
249 - dot.inode
250 - inode number of this directory.
251 * - 0x4
252 - __le16
253 - dot.rec_len
254 - Length of this record, 12.
255 * - 0x6
256 - u8
257 - dot.name_len
258 - Length of the name, 1.
259 * - 0x7
260 - u8
261 - dot.file_type
262 - File type of this entry, 0x2 (directory) (if the feature flag is set).
263 * - 0x8
264 - char
265 - dot.name[4]
266 - “.\0\0\0”
267 * - 0xC
268 - __le32
269 - dotdot.inode
270 - inode number of parent directory.
271 * - 0x10
272 - __le16
273 - dotdot.rec_len
274 - block_size - 12. The record length is long enough to cover all htree
276 * - 0x12
277 - u8
278 - dotdot.name_len
279 - Length of the name, 2.
280 * - 0x13
281 - u8
282 - dotdot.file_type
283 - File type of this entry, 0x2 (directory) (if the feature flag is set).
284 * - 0x14
285 - char
286 - dotdot_name[4]
287 - “..\0\0”
288 * - 0x18
289 - __le32
290 - struct dx_root_info.reserved_zero
291 - Zero.
292 * - 0x1C
293 - u8
294 - struct dx_root_info.hash_version
295 - Hash type, see dirhash_ table below.
296 * - 0x1D
297 - u8
298 - struct dx_root_info.info_length
299 - Length of the tree information, 0x8.
300 * - 0x1E
301 - u8
302 - struct dx_root_info.indirect_levels
303 - Depth of the htree. Cannot be larger than 3 if the INCOMPAT_LARGEDIR
305 * - 0x1F
306 - u8
307 - struct dx_root_info.unused_flags
308 -
309 * - 0x20
310 - __le16
311 - limit
312 - Maximum number of dx_entries that can follow this header, plus 1 for
314 * - 0x22
315 - __le16
316 - count
317 - Actual number of dx_entries that follow this header, plus 1 for the
319 * - 0x24
320 - __le32
321 - block
322 - The block number (within the directory file) that goes with hash=0.
323 * - 0x28
324 - struct dx_entry
325 - entries[0]
326 - As many 8-byte ``struct dx_entry`` as fits in the rest of the data block.
332 .. list-table::
334 :header-rows: 1
336 * - Value
337 - Description
338 * - 0x0
339 - Legacy.
340 * - 0x1
341 - Half MD4.
342 * - 0x2
343 - Tea.
344 * - 0x3
345 - Legacy, unsigned.
346 * - 0x4
347 - Half MD4, unsigned.
348 * - 0x5
349 - Tea, unsigned.
350 * - 0x6
351 - Siphash.
356 .. list-table::
358 :header-rows: 1
360 * - Offset
361 - Type
362 - Name
363 - Description
364 * - 0x0
365 - __le32
366 - fake.inode
367 - Zero, to make it look like this entry is not in use.
368 * - 0x4
369 - __le16
370 - fake.rec_len
371 - The size of the block, in order to hide all of the dx_node data.
372 * - 0x6
373 - u8
374 - name_len
375 - Zero. There is no name for this “unused” directory entry.
376 * - 0x7
377 - u8
378 - file_type
379 - Zero. There is no file type for this “unused” directory entry.
380 * - 0x8
381 - __le16
382 - limit
383 - Maximum number of dx_entries that can follow this header, plus 1 for
385 * - 0xA
386 - __le16
387 - count
388 - Actual number of dx_entries that follow this header, plus 1 for the
390 * - 0xE
391 - __le32
392 - block
393 - The block number (within the directory file) that goes with the lowest
395 * - 0x12
396 - struct dx_entry
397 - entries[0]
398 - As many 8-byte ``struct dx_entry`` as fits in the rest of the data block.
404 .. list-table::
406 :header-rows: 1
408 * - Offset
409 - Type
410 - Name
411 - Description
412 * - 0x0
413 - __le32
414 - hash
415 - Hash code.
416 * - 0x4
417 - __le32
418 - block
419 - Block number (within the directory file, not filesystem blocks) of the
430 the dx_tail, the user is notified to run e2fsck -D to rebuild the
434 .. list-table::
436 :header-rows: 1
438 * - Offset
439 - Type
440 - Name
441 - Description
442 * - 0x0
443 - u32
444 - dt_reserved
445 - Zero.
446 * - 0x4
447 - __le32
448 - dt_checksum
449 - Checksum of the htree directory block.