sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget*/translations/zh_CN/filesystems/ext4/iforkmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/filesystems/ext4/iforkmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/filesystems/ext4/iforkmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/filesystems/ext4/iforkmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/filesystems/ext4/iforkmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/filesystems/ext4/iforkmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhD/var/lib/git/docbuild/linux/Documentation/filesystems/ext4/ifork.rsthKubhsection)}(hhh](htitle)}(hThe Contents of inode.i_blockh]hThe Contents of inode.i_block}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX Depending on the type of file an inode describes, the 60 bytes of storage in ``inode.i_block`` can be used in different ways. In general, regular files and directories will use it for file block indexing information, and special files will use it for special purposes.h](hMDepending on the type of file an inode describes, the 60 bytes of storage in }(hhhhhNhNubhliteral)}(h``inode.i_block``h]h inode.i_block}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh can be used in different ways. In general, regular files and directories will use it for file block indexing information, and special files will use it for special purposes.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hSymbolic Linksh]hSymbolic Links}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hThe target of a symbolic link will be stored in this field if the target string is less than 60 bytes long. Otherwise, either extents or block maps will be used to allocate data blocks to store the link target.h]hThe target of a symbolic link will be stored in this field if the target string is less than 60 bytes long. Otherwise, either extents or block maps will be used to allocate data blocks to store the link target.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]symbolic-linksah ]h"]symbolic linksah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Direct/Indirect Block Addressingh]h Direct/Indirect Block Addressing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXIn ext2/3, file block numbers were mapped to logical block numbers by means of an (up to) three level 1-1 block map. To find the logical block that stores a particular file block, the code would navigate through this increasingly complicated structure. Notice that there is neither a magic number nor a checksum to provide any level of confidence that the block isn't full of garbage.h]hXIn ext2/3, file block numbers were mapped to logical block numbers by means of an (up to) three level 1-1 block map. To find the logical block that stores a particular file block, the code would navigate through this increasingly complicated structure. Notice that there is neither a magic number nor a checksum to provide any level of confidence that the block isn’t full of garbage.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubsphinx.ext.ifconfigifconfig)}(hhh](h)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hj9sbah}(h]h ]h"]h$]h&]hhuh1hhj6hhh+Documentation/filesystems/ext4/blockmap.rsthKubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhjOubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhjOubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hi.i_block Offseth]hi.i_block Offset}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjtubah}(h]h ]h"]h$]h&]uh1jrhjoubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjoubeh}(h]h ]h"]h$]h&]uh1jmhjjubah}(h]h ]h"]h$]h&]uh1jhhjOubhtbody)}(hhh](jn)}(hhh](js)}(hhh]h)}(h0 to 11h]h0 to 11}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h"Direct map to file blocks 0 to 11.h]h"Direct map to file blocks 0 to 11.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubjn)}(hhh](js)}(hhh]h)}(h12h]h12}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh](h)}(h\Indirect block: (file blocks 12 to (``$block_size`` / 4) + 11, or 12 to 1035 if 4KiB blocks)h](h$Indirect block: (file blocks 12 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh) / 4) + 11, or 12 to 1035 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhj*ubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKDuh1jRhj*ubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hIndirect Block Offseth]hIndirect Block Offset}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK hjGubah}(h]h ]h"]h$]h&]uh1jrhjDubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK hj^ubah}(h]h ]h"]h$]h&]uh1jrhjDubeh}(h]h ]h"]h$]h&]uh1jmhjAubah}(h]h ]h"]h$]h&]uh1jhhj*ubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK hjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h@Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)h](hDirect map to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh" / 4) blocks (1024 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK hjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]colsKuh1jMhj'ubah}(h]h ]h"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubjn)}(hhh](js)}(hhh]h)}(h13h]h13}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh](h)}(hDouble-indirect block: (file blocks ``$block_size``/4 + 12 to (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 11, or 1036 to 1049611 if 4KiB blocks)h](h$Double-indirect block: (file blocks }(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh /4 + 12 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4) ^ 2 + (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh. / 4) + 11, or 1036 to 1049611 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jRhjbubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKiuh1jRhjbubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hDouble Indirect Block Offseth]hDouble Indirect Block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhj|ubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhj|ubeh}(h]h ]h"]h$]h&]uh1jmhjyubah}(h]h ]h"]h$]h&]uh1jhhjbubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh](h)}(hBMap to (``$block_size`` / 4) indirect blocks (1024 if 4KiB blocks)h](hMap to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh+ / 4) indirect blocks (1024 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKDuh1jRhjubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hIndirect Block Offseth]hIndirect Block Offset}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhj+ubah}(h]h ]h"]h$]h&]uh1jrhj(ubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjBubah}(h]h ]h"]h$]h&]uh1jrhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj%ubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjnhhhNhNubh)}(h``$block_size``h]h $block_size}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubh / 4)}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjkubah}(h]h ]h"]h$]h&]uh1jrhjhubjs)}(hhh]h)}(h@Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)h](hDirect map to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh" / 4) blocks (1024 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjhubeh}(h]h ]h"]h$]h&]uh1jmhjeubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jMhj ubah}(h]h ]h"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]colsKuh1jMhj_ubah}(h]h ]h"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubjn)}(hhh](js)}(hhh]h)}(h14h]h14}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh](h)}(hTriple-indirect block: (file blocks (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 12 to (``$block_size`` / 4) ^ 3 + (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 12, or 1049612 to 1074791436 if 4KiB blocks)h](h%Triple-indirect block: (file blocks (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4) ^ 2 + (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4) + 12 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4) ^ 3 + (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4) ^ 2 + (}hjsbh)}(h``$block_size``h]h $block_size}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh4 / 4) + 12, or 1049612 to 1074791436 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKhjubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhjubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hTriple Indirect Block Offseth]hTriple Indirect Block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK!hjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK!hjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK#hjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh](h)}(hIMap to (``$block_size`` / 4) double indirect blocks (1024 if 4KiB blocks)h](hMap to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh2 / 4) double indirect blocks (1024 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK#hjubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jRhj5ubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKiuh1jRhj5ubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hDouble Indirect Block Offseth]hDouble Indirect Block Offset}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK&hjRubah}(h]h ]h"]h$]h&]uh1jrhjOubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK&hjiubah}(h]h ]h"]h$]h&]uh1jrhjOubeh}(h]h ]h"]h$]h&]uh1jmhjLubah}(h]h ]h"]h$]h&]uh1jhhj5ubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh / 4)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK(hjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh](h)}(hBMap to (``$block_size`` / 4) indirect blocks (1024 if 4KiB blocks)h](hMap to (}(hjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh+ / 4) indirect blocks (1024 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK(hjubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKDuh1jRhjubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hIndirect Block Offseth]hIndirect Block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK+hjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK+hjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjAhhhNhNubh)}(h``$block_size``h]h $block_size}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAubh / 4)}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK-hj>ubah}(h]h ]h"]h$]h&]uh1jrhj;ubjs)}(hhh]h)}(h@Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)h](hDirect map to (}(hjjhhhNhNubh)}(h``$block_size``h]h $block_size}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubh" / 4) blocks (1024 if 4KiB blocks)}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK-hjgubah}(h]h ]h"]h$]h&]uh1jrhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jMhjubah}(h]h ]h"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]colsKuh1jMhj2ubah}(h]h ]h"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jMhjubah}(h]h ]h"]h$]h&]uh1jHhjubeh}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]colsKuh1jMhjJubah}(h]h ]h"]h$]h&]uh1jHhj6hhhjGhNubeh}(h]h ]h"]h$]h&]exprbuilder != 'latex'uh1j4hhhhhKhjubj5)}(hhh]h)}(h<[Table omitted because LaTeX doesn't support nested tables.]h]h>[Table omitted because LaTeX doesn’t support nested tables.]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjhhubah}(h]h ]h"]h$]h&]j builder == 'latex'uh1j4hhhhhK hjubh)}(hNote that with this block mapping scheme, it is necessary to fill out a lot of mapping data even for a large contiguous file! This inefficiency led to the creation of the extent mapping scheme, discussed below.h]hNote that with this block mapping scheme, it is necessary to fill out a lot of mapping data even for a large contiguous file! This inefficiency led to the creation of the extent mapping scheme, discussed below.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubh)}(h[Notice also that a file using this mapping scheme cannot be placed higher than 2^32 blocks.h]h[Notice also that a file using this mapping scheme cannot be placed higher than 2^32 blocks.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubeh}(h] direct-indirect-block-addressingah ]h"] direct/indirect block addressingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Extent Treeh]h Extent Tree}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhK,ubh)}(hX0In ext4, the file to logical block map has been replaced with an extent tree. Under the old scheme, allocating a contiguous run of 1,000 blocks requires an indirect block to map all 1,000 entries; with extents, the mapping is reduced to a single ``struct ext4_extent`` with ``ee_len = 1000``. If flex_bg is enabled, it is possible to allocate very large files with a single extent, at a considerable reduction in metadata block use, and some improvement in disk efficiency. The inode must have the extents flag (0x80000) flag set for this feature to be in use.h](hIn ext4, the file to logical block map has been replaced with an extent tree. Under the old scheme, allocating a contiguous run of 1,000 blocks requires an indirect block to map all 1,000 entries; with extents, the mapping is reduced to a single }(hj[hhhNhNubh)}(h``struct ext4_extent``h]hstruct ext4_extent}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubh with }(hj[hhhNhNubh)}(h``ee_len = 1000``h]h ee_len = 1000}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubhX . If flex_bg is enabled, it is possible to allocate very large files with a single extent, at a considerable reduction in metadata block use, and some improvement in disk efficiency. The inode must have the extents flag (0x80000) flag set for this feature to be in use.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hjJhhubh)}(hXExtents are arranged as a tree. Each node of the tree begins with a ``struct ext4_extent_header``. If the node is an interior node (``eh.eh_depth`` > 0), the header is followed by ``eh.eh_entries`` instances of ``struct ext4_extent_idx``; each of these index entries points to a block containing more nodes in the extent tree. If the node is a leaf node (``eh.eh_depth == 0``), then the header is followed by ``eh.eh_entries`` instances of ``struct ext4_extent``; these instances point to the file's data blocks. The root node of the extent tree is stored in ``inode.i_block``, which allows for the first four extents to be recorded without the use of extra metadata blocks.h](hDExtents are arranged as a tree. Each node of the tree begins with a }(hjhhhNhNubh)}(h``struct ext4_extent_header``h]hstruct ext4_extent_header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh#. If the node is an interior node (}(hjhhhNhNubh)}(h``eh.eh_depth``h]h eh.eh_depth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh! > 0), the header is followed by }(hjhhhNhNubh)}(h``eh.eh_entries``h]h eh.eh_entries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh instances of }(hjhhhNhNubh)}(h``struct ext4_extent_idx``h]hstruct ext4_extent_idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhv; each of these index entries points to a block containing more nodes in the extent tree. If the node is a leaf node (}(hjhhhNhNubh)}(h``eh.eh_depth == 0``h]heh.eh_depth == 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh"), then the header is followed by }(hjhhhNhNubh)}(h``eh.eh_entries``h]h eh.eh_entries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh instances of }(hjhhhNhNubh)}(h``struct ext4_extent``h]hstruct ext4_extent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhc; these instances point to the file’s data blocks. The root node of the extent tree is stored in }(hjhhhNhNubh)}(h``inode.i_block``h]h inode.i_block}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhb, which allows for the first four extents to be recorded without the use of extra metadata blocks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK8hjJhhubh)}(h\The extent tree header is recorded in ``struct ext4_extent_header``, which is 12 bytes long:h](h&The extent tree header is recorded in }(hj+ hhhNhNubh)}(h``struct ext4_extent_header``h]hstruct ext4_extent_header}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ ubh, which is 12 bytes long:}(hj+ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChjJhhubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jRhjN ubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjN ubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjN ubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ K(uh1jRhjN ubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hOffseth]hOffset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhj| ubah}(h]h ]h"]h$]h&]uh1jrhjy ubjs)}(hhh]h)}(hSizeh]hSize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj ubah}(h]h ]h"]h$]h&]uh1jrhjy ubjs)}(hhh]h)}(hNameh]hName}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhj ubah}(h]h ]h"]h$]h&]uh1jrhjy ubjs)}(hhh]h)}(h Descriptionh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhj ubah}(h]h ]h"]h$]h&]uh1jrhjy ubeh}(h]h ]h"]h$]h&]uh1jmhjv ubah}(h]h ]h"]h$]h&]uh1jhhjN ubj)}(hhh](jn)}(hhh](js)}(hhh]h)}(h0x0h]h0x0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h__le16h]h__le16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(heh_magich]heh_magic}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(hMagic number, 0xF30A.h]hMagic number, 0xF30A.}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhj/ ubah}(h]h ]h"]h$]h&]uh1jrhj ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0x2h]h0x2}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjO ubah}(h]h ]h"]h$]h&]uh1jrhjL ubjs)}(hhh]h)}(h__le16h]h__le16}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjf ubah}(h]h ]h"]h$]h&]uh1jrhjL ubjs)}(hhh]h)}(h eh_entriesh]h eh_entries}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThj} ubah}(h]h ]h"]h$]h&]uh1jrhjL ubjs)}(hhh]h)}(h-Number of valid entries following the header.h]h-Number of valid entries following the header.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhj ubah}(h]h ]h"]h$]h&]uh1jrhjL ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0x4h]h0x4}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h__le16h]h__le16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(heh_maxh]heh_max}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h7Maximum number of entries that could follow the header.h]h7Maximum number of entries that could follow the header.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0x6h]h0x6}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h__le16h]h__le16}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hj0 ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(heh_depthh]heh_depth}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjG ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(hXEDepth of this extent node in the extent tree. 0 = this extent node points to data blocks; otherwise, this extent node points to other extent nodes. The extent tree can be at most 5 levels deep: a logical block number can be at most ``2^32``, and the smallest ``n`` that satisfies ``4*(((blocksize - 12)/12)^n) >= 2^32`` is 5.h](hDepth of this extent node in the extent tree. 0 = this extent node points to data blocks; otherwise, this extent node points to other extent nodes. The extent tree can be at most 5 levels deep: a logical block number can be at most }(hja hhhNhNubh)}(h``2^32``h]h2^32}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja ubh, and the smallest }(hja hhhNhNubh)}(h``n``h]hn}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja ubh that satisfies }(hja hhhNhNubh)}(h'``4*(((blocksize - 12)/12)^n) >= 2^32``h]h#4*(((blocksize - 12)/12)^n) >= 2^32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja ubh is 5.}(hja hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK]hj^ ubah}(h]h ]h"]h$]h&]uh1jrhj ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0x8h]h0x8}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h__le32h]h__le32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h eh_generationh]h eh_generation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h@Generation of the tree. (Used by Lustre, but not standard ext4).h]h@Generation of the tree. (Used by Lustre, but not standard ext4).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehj ubah}(h]h ]h"]h$]h&]uh1jrhj ubeh}(h]h ]h"]h$]h&]uh1jmhj ubeh}(h]h ]h"]h$]h&]uh1jhjN ubeh}(h]h ]h"]h$]h&]colsKuh1jMhjK ubah}(h]h ]colwidths-givenah"]h$]h&]uh1jHhjJhhhNhNubh)}(hInternal nodes of the extent tree, also known as index nodes, are recorded as ``struct ext4_extent_idx``, and are 12 bytes long:h](hNInternal nodes of the extent tree, also known as index nodes, are recorded as }(hj* hhhNhNubh)}(h``struct ext4_extent_idx``h]hstruct ext4_extent_idx}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj* ubh, and are 12 bytes long:}(hj* hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKghjJhhubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjM ubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjM ubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjM ubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ K(uh1jRhjM ubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hOffseth]hOffset}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjz ubah}(h]h ]h"]h$]h&]uh1jrhjw ubjs)}(hhh]h)}(hSizeh]hSize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohj ubah}(h]h ]h"]h$]h&]uh1jrhjw ubjs)}(hhh]h)}(hNameh]hName}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphj ubah}(h]h ]h"]h$]h&]uh1jrhjw ubjs)}(hhh]h)}(h Descriptionh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhj ubah}(h]h ]h"]h$]h&]uh1jrhjw ubeh}(h]h ]h"]h$]h&]uh1jmhjt ubah}(h]h ]h"]h$]h&]uh1jhhjM ubj)}(hhh](jn)}(hhh](js)}(hhh]h)}(h0x0h]h0x0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h__le32h]h__le32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(hei_blockh]hei_block}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h7This index node covers file blocks from 'block' onward.h]h;This index node covers file blocks from ‘block’ onward.}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhj- ubah}(h]h ]h"]h$]h&]uh1jrhj ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0x4h]h0x4}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjM ubah}(h]h ]h"]h$]h&]uh1jrhjJ ubjs)}(hhh]h)}(h__le32h]h__le32}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhjd ubah}(h]h ]h"]h$]h&]uh1jrhjJ ubjs)}(hhh]h)}(h ei_leaf_loh]h ei_leaf_lo}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhj{ ubah}(h]h ]h"]h$]h&]uh1jrhjJ ubjs)}(hhh]h)}(hLower 32-bits of the block number of the extent node that is the next level lower in the tree. The tree node pointed to can be either another internal node or a leaf node, described below.h]hLower 32-bits of the block number of the extent node that is the next level lower in the tree. The tree node pointed to can be either another internal node or a leaf node, described below.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhj ubah}(h]h ]h"]h$]h&]uh1jrhjJ ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0x8h]h0x8}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h__le16h]h__le16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h ei_leaf_hih]h ei_leaf_hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hj ubah}(h]h ]h"]h$]h&]uh1jrhj ubjs)}(hhh]h)}(h$Upper 16-bits of the previous field.h]h$Upper 16-bits of the previous field.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj ubeh}(h]h ]h"]h$]h&]uh1jmhj ubjn)}(hhh](js)}(hhh]h)}(h0xAh]h0xA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h__u16h]h__u16}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj.ubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h ei_unusedh]h ei_unused}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhj ubeh}(h]h ]h"]h$]h&]uh1jhjM ubeh}(h]h ]h"]h$]h&]colsKuh1jMhjJ ubah}(h]h ]j& ah"]h$]h&]uh1jHhjJhhhNhNubh)}(haLeaf nodes of the extent tree are recorded as ``struct ext4_extent``, and are also 12 bytes long:h](h.Leaf nodes of the extent tree are recorded as }(hj~hhhNhNubh)}(h``struct ext4_extent``h]hstruct ext4_extent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ubh, and are also 12 bytes long:}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjJhhubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ K(uh1jRhjubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hOffseth]hOffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hSizeh]hSize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(hhh](jn)}(hhh](js)}(hhh]h)}(h0x0h]h0x0}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj<ubah}(h]h ]h"]h$]h&]uh1jrhj9ubjs)}(hhh]h)}(h__le32h]h__le32}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjSubah}(h]h ]h"]h$]h&]uh1jrhj9ubjs)}(hhh]h)}(hee_blockh]hee_block}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjjubah}(h]h ]h"]h$]h&]uh1jrhj9ubjs)}(hhh]h)}(h0First file block number that this extent covers.h]h0First file block number that this extent covers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj9ubeh}(h]h ]h"]h$]h&]uh1jmhj6ubjn)}(hhh](js)}(hhh]h)}(h0x4h]h0x4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h__le16h]h__le16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hee_lenh]hee_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hX_Number of blocks covered by extent. If the value of this field is <= 32768, the extent is initialized. If the value of the field is > 32768, the extent is uninitialized and the actual extent length is ``ee_len`` - 32768. Therefore, the maximum length of a initialized extent is 32768 blocks, and the maximum length of an uninitialized extent is 32767.h](hNumber of blocks covered by extent. If the value of this field is <= 32768, the extent is initialized. If the value of the field is > 32768, the extent is uninitialized and the actual extent length is }(hjhhhNhNubh)}(h ``ee_len``h]hee_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh - 32768. Therefore, the maximum length of a initialized extent is 32768 blocks, and the maximum length of an uninitialized extent is 32767.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhj6ubjn)}(hhh](js)}(hhh]h)}(h0x6h]h0x6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h__le16h]h__le16}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h ee_start_hih]h ee_start_hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h>Upper 16-bits of the block number to which this extent points.h]h>Upper 16-bits of the block number to which this extent points.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj]ubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhj6ubjn)}(hhh](js)}(hhh]h)}(h0x8h]h0x8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj}ubah}(h]h ]h"]h$]h&]uh1jrhjzubjs)}(hhh]h)}(h__le32h]h__le32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjzubjs)}(hhh]h)}(h ee_start_loh]h ee_start_lo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjzubjs)}(hhh]h)}(h>Lower 32-bits of the block number to which this extent points.h]h>Lower 32-bits of the block number to which this extent points.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjzubeh}(h]h ]h"]h$]h&]uh1jmhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jMhjubah}(h]h ]j& ah"]h$]h&]uh1jHhjJhhhNhNubh)}(hXPrior to the introduction of metadata checksums, the extent header + extent entries always left at least 4 bytes of unallocated space at the end of each extent tree data block (because (2^x % 12) >= 4). Therefore, the 32-bit checksum is inserted into this space. The 4 extents in the inode do not need checksumming, since the inode is already checksummed. The checksum is calculated against the FS UUID, the inode number, the inode generation, and the entire extent block leading up to (but not including) the checksum itself.h]hXPrior to the introduction of metadata checksums, the extent header + extent entries always left at least 4 bytes of unallocated space at the end of each extent tree data block (because (2^x % 12) >= 4). Therefore, the 32-bit checksum is inserted into this space. The 4 extents in the inode do not need checksumming, since the inode is already checksummed. The checksum is calculated against the FS UUID, the inode number, the inode generation, and the entire extent block leading up to (but not including) the checksum itself.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJhhubh)}(h,``struct ext4_extent_tail`` is 4 bytes long:h](h)}(h``struct ext4_extent_tail``h]hstruct ext4_extent_tail}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh is 4 bytes long:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjJhhubjI)}(hhh]jN)}(hhh](jS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ Kuh1jRhjubjS)}(hhh]h}(h]h ]h"]h$]h&]jZ K(uh1jRhjubji)}(hhh]jn)}(hhh](js)}(hhh]h)}(hOffseth]hOffset}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(h]h ]h"]h$]h&]uh1jrhjIubjs)}(hhh]h)}(hSizeh]hSize}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjcubah}(h]h ]h"]h$]h&]uh1jrhjIubjs)}(hhh]h)}(hNameh]hName}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjzubah}(h]h ]h"]h$]h&]uh1jrhjIubjs)}(hhh]h)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjIubeh}(h]h ]h"]h$]h&]uh1jmhjFubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(hhh]jn)}(hhh](js)}(hhh]h)}(h0x0h]h0x0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h__le32h]h__le32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(h eb_checksumh]h eb_checksum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubjs)}(hhh]h)}(hGChecksum of the extent block, crc32c(uuid+inum+igeneration+extentblock)h]hGChecksum of the extent block, crc32c(uuid+inum+igeneration+extentblock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjubeh}(h]h ]h"]h$]h&]uh1jmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jMhjubah}(h]h ]j& ah"]h$]h&]uh1jHhjJhhhNhNubeh}(h] extent-treeah ]h"] extent treeah$]h&]uh1hhhhhhhhK,ubh)}(hhh](h)}(h Inline Datah]h Inline Data}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhKubh)}(hIf the inline data feature is enabled for the filesystem and the flag is set for the inode, it is possible that the first 60 bytes of the file data are stored here.h]hIf the inline data feature is enabled for the filesystem and the flag is set for the inode, it is possible that the first 60 bytes of the file data are stored here.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj7hhubeh}(h] inline-dataah ]h"] inline dataah$]h&]uh1hhhhhhhhKubeh}(h]the-contents-of-inode-i-blockah ]h"]the contents of inode.i_blockah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjrfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jcj`jjjGjDj4j1j[jXu nametypes}(jcjjGj4j[uh}(j`hjhjDjj1jJjXj7u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log](Documentation/filesystems/ext4/ifork.rst(NNNNta decorationNhhub.