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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/pt_BR/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]symbolic-linksah ]h"]symbolic linksah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Direct/Indirect Block Addressingh]h Direct/Indirect Block Addressing}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hhhhhKubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj(hhubsphinx.ext.ifconfigifconfig)}(hhh](h)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hjMsbah}(h]h ]h"]h$]h&]hhuh1hhjJhhh+Documentation/filesystems/ext4/blockmap.rsthKubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhjcubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhjcubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hi.i_block Offseth]hi.i_block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1j|hjcubhtbody)}(hhh](j)}(hhh](j)}(hhh]h)}(h0 to 11h]h0 to 11}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h12h]h12}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh) / 4) + 11, or 12 to 1035 if 4KiB blocks)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hKhjubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhj>ubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKDuh1jfhj>ubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hIndirect Block Offseth]hIndirect Block Offset}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK hj[ubah}(h]h ]h"]h$]h&]uh1jhjXubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK hjrubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1j|hj>ubj)}(hhh]j)}(hhh](j)}(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&]uh1hhj[hK hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1hhj[hK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]colsKuh1jahj;ubah}(h]h ]h"]h$]h&]uh1j\hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h13h]h13}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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 }(hj/hhhNhNubh)}(h``$block_size``h]h $block_size}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh /4 + 12 to (}(hj/hhhNhNubh)}(h``$block_size``h]h $block_size}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh / 4) ^ 2 + (}(hj/hhhNhNubh)}(h``$block_size``h]h $block_size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh. / 4) + 11, or 1036 to 1049611 if 4KiB blocks)}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hKhj,ubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jfhjvubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKiuh1jfhjvubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hDouble Indirect Block Offseth]hDouble Indirect Block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j|hjvubj)}(hhh]j)}(hhh](j)}(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&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1hhj[hKhjubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhj"ubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKDuh1jfhj"ubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hIndirect Block Offseth]hIndirect Block Offset}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhj?ubah}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjVubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1j|hj"ubj)}(hhh]j)}(hhh](j)}(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&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubj)}(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&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]colsKuh1jahjubah}(h]h ]h"]h$]h&]uh1j\hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]colsKuh1jahjsubah}(h]h ]h"]h$]h&]uh1j\hj,ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h14h]h14}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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 (}(hj2hhhNhNubh)}(h``$block_size``h]h $block_size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubh / 4) ^ 2 + (}(hj2hhhNhNubh)}(h``$block_size``h]h $block_size}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubh / 4) + 12 to (}(hj2hhhNhNubh)}(h``$block_size``h]h $block_size}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubh / 4) ^ 3 + (}(hj2hhhNhNubh)}(h``$block_size``h]h $block_size}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubh / 4) ^ 2 + (}hj2sbh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubh4 / 4) + 12, or 1049612 to 1074791436 if 4KiB blocks)}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hKhj/ubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jfhjubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhjubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hTriple Indirect Block Offseth]hTriple Indirect Block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK!hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j|hjubj)}(hhh]j)}(hhh](j)}(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&]uh1hhj[hK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](h)}(hIMap to (``$block_size`` / 4) double indirect blocks (1024 if 4KiB blocks)h](hMap to (}(hj&hhhNhNubh)}(h``$block_size``h]h $block_size}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubh2 / 4) double indirect blocks (1024 if 4KiB blocks)}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hK#hj#ubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jfhjIubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKiuh1jfhjIubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hDouble Indirect Block Offseth]hDouble Indirect Block Offset}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK&hjfubah}(h]h ]h"]h$]h&]uh1jhjcubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK&hj}ubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1j|hjIubj)}(hhh]j)}(hhh](j)}(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&]uh1hhj[hK(hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1hhj[hK(hjubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhjubjg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKDuh1jfhjubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hIndirect Block Offseth]hIndirect Block Offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK+hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hWhere It Pointsh]hWhere It Points}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK+hj)ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j|hjubj)}(hhh]j)}(hhh](j)}(hhh]h)}(h0 to (``$block_size`` / 4)h](h0 to (}(hjUhhhNhNubh)}(h``$block_size``h]h $block_size}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUubh / 4)}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hK-hjRubah}(h]h ]h"]h$]h&]uh1jhjOubj)}(hhh]h)}(h@Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)h](hDirect map to (}(hj~hhhNhNubh)}(h``$block_size``h]h $block_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ubh" / 4) blocks (1024 if 4KiB blocks)}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hK-hj{ubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jahjubah}(h]h ]h"]h$]h&]uh1j\hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]colsKuh1jahjFubah}(h]h ]h"]h$]h&]uh1j\hj#ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jahjubah}(h]h ]h"]h$]h&]uh1j\hj/ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]colsKuh1jahj^ubah}(h]h ]h"]h$]h&]uh1j\hjJhhhj[hNubeh}(h]h ]h"]h$]h&]exprbuilder != 'latex'uh1jHhhhhhKhj(ubjI)}(hhh]h)}(h<[Table omitted because LaTeX doesn't support nested tables.]h]h>[Table omitted because LaTeX doesn’t support nested tables.]}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hj"hhubah}(h]h ]h"]h$]h&]j builder == 'latex'uh1jHhhhhhK hj(ubh)}(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$hj(hhubh)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hj(hhubeh}(h] direct-indirect-block-addressingah ]h"] direct/indirect block addressingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Extent Treeh]h Extent Tree}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hhhhhK,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 }(hjohhhNhNubh)}(h``struct ext4_extent``h]hstruct ext4_extent}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubh with }(hjohhhNhNubh)}(h``ee_len = 1000``h]h ee_len = 1000}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubhX . 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.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hj^hhubh)}(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}(hj hhhNhNubah}(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&]uh1hhhhK8hj^hhubh)}(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}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj? ubh, which is 12 bytes long:}(hj? hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChj^hhubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jfhjb ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhjb ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhjb ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn K(uh1jfhjb ubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hOffseth]hOffset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hSizeh]hSize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNameh]hName}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Descriptionh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j|hjb ubj)}(hhh](j)}(hhh](j)}(hhh]h)}(h0x0h]h0x0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h__le16h]h__le16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(heh_magich]heh_magic}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhj, ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hMagic number, 0xF30A.h]hMagic number, 0xF30A.}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjC ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0x2h]h0x2}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjc ubah}(h]h ]h"]h$]h&]uh1jhj` ubj)}(hhh]h)}(h__le16h]h__le16}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjz ubah}(h]h ]h"]h$]h&]uh1jhj` ubj)}(hhh]h)}(h eh_entriesh]h eh_entries}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThj ubah}(h]h ]h"]h$]h&]uh1jhj` ubj)}(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&]uh1jhj` ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0x4h]h0x4}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h__le16h]h__le16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(heh_maxh]heh_max}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0x6h]h0x6}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhj- ubah}(h]h ]h"]h$]h&]uh1jhj* ubj)}(hhh]h)}(h__le16h]h__le16}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjD ubah}(h]h ]h"]h$]h&]uh1jhj* ubj)}(hhh]h)}(heh_depthh]heh_depth}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hj[ ubah}(h]h ]h"]h$]h&]uh1jhj* ubj)}(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 }(hju hhhNhNubh)}(h``2^32``h]h2^32}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju ubh, and the smallest }(hju hhhNhNubh)}(h``n``h]hn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju ubh that satisfies }(hju 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&]uh1hhju ubh is 5.}(hju hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK]hjr ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0x8h]h0x8}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h__le32h]h__le32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h eh_generationh]h eh_generation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjb ubeh}(h]h ]h"]h$]h&]colsKuh1jahj_ ubah}(h]h ]colwidths-givenah"]h$]h&]uh1j\hj^hhhNhNubh)}(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}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj> ubh, and are 12 bytes long:}(hj> hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKghj^hhubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhja ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhja ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhja ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn K(uh1jfhja ubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hOffseth]hOffset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hSizeh]hSize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNameh]hName}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Descriptionh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j|hja ubj)}(hhh](j)}(hhh](j)}(hhh]h)}(h0x0h]h0x0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h__le32h]h__le32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hei_blockh]hei_block}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthj* ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h7This index node covers file blocks from 'block' onward.h]h;This index node covers file blocks from ‘block’ onward.}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjA ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0x4h]h0x4}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhja ubah}(h]h ]h"]h$]h&]uh1jhj^ ubj)}(hhh]h)}(h__le32h]h__le32}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhjx ubah}(h]h ]h"]h$]h&]uh1jhj^ ubj)}(hhh]h)}(h ei_leaf_loh]h ei_leaf_lo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhj ubah}(h]h ]h"]h$]h&]uh1jhj^ ubj)}(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&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0x8h]h0x8}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h__le16h]h__le16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(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&]uh1jhj ubj)}(hhh]h)}(h$Upper 16-bits of the previous field.h]h$Upper 16-bits of the previous field.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(h0xAh]h0xA}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1jhj(ubj)}(hhh]h)}(h__u16h]h__u16}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjBubah}(h]h ]h"]h$]h&]uh1jhj(ubj)}(hhh]h)}(h ei_unusedh]h ei_unused}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjYubah}(h]h ]h"]h$]h&]uh1jhj(ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhja ubeh}(h]h ]h"]h$]h&]colsKuh1jahj^ ubah}(h]h ]j: ah"]h$]h&]uh1j\hj^hhhNhNubh)}(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 }(hjhhhNhNubh)}(h``struct ext4_extent``h]hstruct ext4_extent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, and are also 12 bytes long:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj^hhubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhjubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhjubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhjubjg)}(hhh]h}(h]h ]h"]h$]h&]jn K(uh1jfhjubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hOffseth]hOffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hSizeh]hSize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Descriptionh]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j|hjubj)}(hhh](j)}(hhh](j)}(hhh]h)}(h0x0h]h0x0}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPubah}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh]h)}(h__le32h]h__le32}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjgubah}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh]h)}(hee_blockh]hee_block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj~ubah}(h]h ]h"]h$]h&]uh1jhjMubj)}(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&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjJubj)}(hhh](j)}(hhh]h)}(h0x4h]h0x4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h__le16h]h__le16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hee_lenh]hee_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjJubj)}(hhh](j)}(hhh]h)}(h0x6h]h0x6}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj,ubah}(h]h ]h"]h$]h&]uh1jhj)ubj)}(hhh]h)}(h__le16h]h__le16}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjCubah}(h]h ]h"]h$]h&]uh1jhj)ubj)}(hhh]h)}(h ee_start_hih]h ee_start_hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjZubah}(h]h ]h"]h$]h&]uh1jhj)ubj)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjqubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjJubj)}(hhh](j)}(hhh]h)}(h0x8h]h0x8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h__le32h]h__le32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h ee_start_loh]h ee_start_lo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jahjubah}(h]h ]j: ah"]h$]h&]uh1j\hj^hhhNhNubh)}(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&]uh1hhhhKhj^hhubh)}(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&]uh1hhhhKhj^hhubj])}(hhh]jb)}(hhh](jg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhj3ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhj3ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn Kuh1jfhj3ubjg)}(hhh]h}(h]h ]h"]h$]h&]jn K(uh1jfhj3ubj})}(hhh]j)}(hhh](j)}(hhh]h)}(hOffseth]hOffset}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1jhj]ubj)}(hhh]h)}(hSizeh]hSize}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwubah}(h]h ]h"]h$]h&]uh1jhj]ubj)}(hhh]h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhj]ubj)}(hhh]h)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1j|hj3ubj)}(hhh]j)}(hhh](j)}(hhh]h)}(h0x0h]h0x0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h__le32h]h__le32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h eb_checksumh]h eb_checksum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]colsKuh1jahj0ubah}(h]h ]j: ah"]h$]h&]uh1j\hj^hhhNhNubeh}(h] extent-treeah ]h"] extent treeah$]h&]uh1hhhhhhhhK,ubh)}(hhh](h)}(h Inline Datah]h Inline Data}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhhhhhKubh)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjKhhubeh}(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_backlinksjfootnote_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_sourcehnj _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}(jwjtj%j"j[jXjHjEjojlu nametypes}(jwj%j[jHjouh}(jthj"jjXj(jEj^jljKu 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.