diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-10-24 12:42:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-10-24 12:42:24 -0400 |
commit | 5993692f09582accb4cb7af11d344598af43c3b8 (patch) | |
tree | 062447eb44769d6da6e50302853eac1bb1d6e5d3 /Documentation/filesystems | |
parent | d6edff78fe9e34dbea1bec7dc26cfce92c6d96d5 (diff) | |
parent | 33458eaba4dfe778a426df6a19b7aad2ff9f7eec (diff) |
Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
Pull ext4 updates from Ted Ts'o:
- further restructure ext4 documentation
- fix up ext4's delayed allocation for bigalloc file systems
- fix up some syzbot-detected races in EXT4_IOC_MOVE_EXT,
EXT4_IOC_SWAP_BOOT, and ext4_remount
- ... and a few other miscellaneous bugs and optimizations.
* tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (21 commits)
ext4: fix use-after-free race in ext4_remount()'s error path
ext4: cache NULL when both default_acl and acl are NULL
docs: promote the ext4 data structures book to top level
docs: move ext4 administrative docs to admin-guide/
jbd2: fix use after free in jbd2_log_do_checkpoint()
ext4: propagate error from dquot_initialize() in EXT4_IOC_FSSETXATTR
ext4: fix setattr project check in fssetxattr ioctl
docs: make ext4 readme tables readable
docs: fix ext4 documentation table formatting problems
docs: generate a separate ext4 pdf file from the documentation
ext4: convert fault handler to use vm_fault_t type
ext4: initialize retries variable in ext4_da_write_inline_data_begin()
ext4: fix EXT4_IOC_SWAP_BOOT
ext4: fix build error when DX_DEBUG is defined
ext4: fix argument checking in EXT4_IOC_MOVE_EXT
ext4: fix reserved cluster accounting at page invalidation time
ext4: adjust reserved cluster count when removing extents
ext4: reduce reserved cluster count by number of allocated clusters
ext4: fix reserved cluster accounting at delayed write time
ext4: add new pending reservation mechanism
...
Diffstat (limited to 'Documentation/filesystems')
-rw-r--r-- | Documentation/filesystems/ext4/about.rst (renamed from Documentation/filesystems/ext4/ondisk/about.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/allocators.rst (renamed from Documentation/filesystems/ext4/ondisk/allocators.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/attributes.rst (renamed from Documentation/filesystems/ext4/ondisk/attributes.rst) | 8 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/bigalloc.rst (renamed from Documentation/filesystems/ext4/ondisk/bigalloc.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/bitmaps.rst (renamed from Documentation/filesystems/ext4/ondisk/bitmaps.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/blockgroup.rst (renamed from Documentation/filesystems/ext4/ondisk/blockgroup.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/blockmap.rst (renamed from Documentation/filesystems/ext4/ondisk/blockmap.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/blocks.rst (renamed from Documentation/filesystems/ext4/ondisk/blocks.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/checksums.rst (renamed from Documentation/filesystems/ext4/ondisk/checksums.rst) | 2 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/directory.rst (renamed from Documentation/filesystems/ext4/ondisk/directory.rst) | 18 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/dynamic.rst (renamed from Documentation/filesystems/ext4/ondisk/dynamic.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/eainode.rst (renamed from Documentation/filesystems/ext4/ondisk/eainode.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/ext4.rst | 613 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/globals.rst (renamed from Documentation/filesystems/ext4/ondisk/globals.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/group_descr.rst (renamed from Documentation/filesystems/ext4/ondisk/group_descr.rst) | 4 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/ifork.rst (renamed from Documentation/filesystems/ext4/ondisk/ifork.rst) | 8 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/index.rst | 19 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/inlinedata.rst (renamed from Documentation/filesystems/ext4/ondisk/inlinedata.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/inodes.rst (renamed from Documentation/filesystems/ext4/ondisk/inodes.rst) | 19 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/journal.rst (renamed from Documentation/filesystems/ext4/ondisk/journal.rst) | 32 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/mmp.rst (renamed from Documentation/filesystems/ext4/ondisk/mmp.rst) | 2 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/ondisk/index.rst | 9 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/overview.rst (renamed from Documentation/filesystems/ext4/ondisk/overview.rst) | 0 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/special_inodes.rst (renamed from Documentation/filesystems/ext4/ondisk/special_inodes.rst) | 2 | ||||
-rw-r--r-- | Documentation/filesystems/ext4/super.rst (renamed from Documentation/filesystems/ext4/ondisk/super.rst) | 24 |
25 files changed, 68 insertions, 692 deletions
diff --git a/Documentation/filesystems/ext4/ondisk/about.rst b/Documentation/filesystems/ext4/about.rst index 0aadba052264..0aadba052264 100644 --- a/Documentation/filesystems/ext4/ondisk/about.rst +++ b/Documentation/filesystems/ext4/about.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/allocators.rst b/Documentation/filesystems/ext4/allocators.rst index 7aa85152ace3..7aa85152ace3 100644 --- a/Documentation/filesystems/ext4/ondisk/allocators.rst +++ b/Documentation/filesystems/ext4/allocators.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/attributes.rst b/Documentation/filesystems/ext4/attributes.rst index 0b01b67b81fe..54386a010a8d 100644 --- a/Documentation/filesystems/ext4/ondisk/attributes.rst +++ b/Documentation/filesystems/ext4/attributes.rst | |||
@@ -30,7 +30,7 @@ Extended attributes, when stored after the inode, have a header | |||
30 | ``ext4_xattr_ibody_header`` that is 4 bytes long: | 30 | ``ext4_xattr_ibody_header`` that is 4 bytes long: |
31 | 31 | ||
32 | .. list-table:: | 32 | .. list-table:: |
33 | :widths: 1 1 1 77 | 33 | :widths: 8 8 24 40 |
34 | :header-rows: 1 | 34 | :header-rows: 1 |
35 | 35 | ||
36 | * - Offset | 36 | * - Offset |
@@ -47,7 +47,7 @@ The beginning of an extended attribute block is in | |||
47 | ``struct ext4_xattr_header``, which is 32 bytes long: | 47 | ``struct ext4_xattr_header``, which is 32 bytes long: |
48 | 48 | ||
49 | .. list-table:: | 49 | .. list-table:: |
50 | :widths: 1 1 1 77 | 50 | :widths: 8 8 24 40 |
51 | :header-rows: 1 | 51 | :header-rows: 1 |
52 | 52 | ||
53 | * - Offset | 53 | * - Offset |
@@ -92,7 +92,7 @@ entries must be stored in sorted order. The sort order is | |||
92 | Attributes stored inside an inode do not need be stored in sorted order. | 92 | Attributes stored inside an inode do not need be stored in sorted order. |
93 | 93 | ||
94 | .. list-table:: | 94 | .. list-table:: |
95 | :widths: 1 1 1 77 | 95 | :widths: 8 8 24 40 |
96 | :header-rows: 1 | 96 | :header-rows: 1 |
97 | 97 | ||
98 | * - Offset | 98 | * - Offset |
@@ -157,7 +157,7 @@ attribute name index field is set, and matching string is removed from | |||
157 | the key name. Here is a map of name index values to key prefixes: | 157 | the key name. Here is a map of name index values to key prefixes: |
158 | 158 | ||
159 | .. list-table:: | 159 | .. list-table:: |
160 | :widths: 1 79 | 160 | :widths: 16 64 |
161 | :header-rows: 1 | 161 | :header-rows: 1 |
162 | 162 | ||
163 | * - Name Index | 163 | * - Name Index |
diff --git a/Documentation/filesystems/ext4/ondisk/bigalloc.rst b/Documentation/filesystems/ext4/bigalloc.rst index c6d88557553c..c6d88557553c 100644 --- a/Documentation/filesystems/ext4/ondisk/bigalloc.rst +++ b/Documentation/filesystems/ext4/bigalloc.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/bitmaps.rst b/Documentation/filesystems/ext4/bitmaps.rst index c7546dbc197a..c7546dbc197a 100644 --- a/Documentation/filesystems/ext4/ondisk/bitmaps.rst +++ b/Documentation/filesystems/ext4/bitmaps.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/blockgroup.rst b/Documentation/filesystems/ext4/blockgroup.rst index baf888e4c06a..baf888e4c06a 100644 --- a/Documentation/filesystems/ext4/ondisk/blockgroup.rst +++ b/Documentation/filesystems/ext4/blockgroup.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/blockmap.rst b/Documentation/filesystems/ext4/blockmap.rst index 30e25750d88a..30e25750d88a 100644 --- a/Documentation/filesystems/ext4/ondisk/blockmap.rst +++ b/Documentation/filesystems/ext4/blockmap.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/blocks.rst b/Documentation/filesystems/ext4/blocks.rst index 73d4dc0f7bda..73d4dc0f7bda 100644 --- a/Documentation/filesystems/ext4/ondisk/blocks.rst +++ b/Documentation/filesystems/ext4/blocks.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/checksums.rst b/Documentation/filesystems/ext4/checksums.rst index 9d6a793b2e03..5519e253810d 100644 --- a/Documentation/filesystems/ext4/ondisk/checksums.rst +++ b/Documentation/filesystems/ext4/checksums.rst | |||
@@ -28,7 +28,7 @@ of checksum. The checksum function is whatever the superblock describes | |||
28 | (crc32c as of October 2013) unless noted otherwise. | 28 | (crc32c as of October 2013) unless noted otherwise. |
29 | 29 | ||
30 | .. list-table:: | 30 | .. list-table:: |
31 | :widths: 1 1 4 | 31 | :widths: 20 8 50 |
32 | :header-rows: 1 | 32 | :header-rows: 1 |
33 | 33 | ||
34 | * - Metadata | 34 | * - Metadata |
diff --git a/Documentation/filesystems/ext4/ondisk/directory.rst b/Documentation/filesystems/ext4/directory.rst index 8fcba68c2884..614034e24669 100644 --- a/Documentation/filesystems/ext4/ondisk/directory.rst +++ b/Documentation/filesystems/ext4/directory.rst | |||
@@ -34,7 +34,7 @@ is at most 263 bytes long, though on disk you'll need to reference | |||
34 | ``dirent.rec_len`` to know for sure. | 34 | ``dirent.rec_len`` to know for sure. |
35 | 35 | ||
36 | .. list-table:: | 36 | .. list-table:: |
37 | :widths: 1 1 1 77 | 37 | :widths: 8 8 24 40 |
38 | :header-rows: 1 | 38 | :header-rows: 1 |
39 | 39 | ||
40 | * - Offset | 40 | * - Offset |
@@ -66,7 +66,7 @@ tree traversal. This format is ``ext4_dir_entry_2``, which is at most | |||
66 | ``dirent.rec_len`` to know for sure. | 66 | ``dirent.rec_len`` to know for sure. |
67 | 67 | ||
68 | .. list-table:: | 68 | .. list-table:: |
69 | :widths: 1 1 1 77 | 69 | :widths: 8 8 24 40 |
70 | :header-rows: 1 | 70 | :header-rows: 1 |
71 | 71 | ||
72 | * - Offset | 72 | * - Offset |
@@ -99,7 +99,7 @@ tree traversal. This format is ``ext4_dir_entry_2``, which is at most | |||
99 | The directory file type is one of the following values: | 99 | The directory file type is one of the following values: |
100 | 100 | ||
101 | .. list-table:: | 101 | .. list-table:: |
102 | :widths: 1 79 | 102 | :widths: 16 64 |
103 | :header-rows: 1 | 103 | :header-rows: 1 |
104 | 104 | ||
105 | * - Value | 105 | * - Value |
@@ -130,7 +130,7 @@ in the place where the name normally goes. The structure is | |||
130 | ``struct ext4_dir_entry_tail``: | 130 | ``struct ext4_dir_entry_tail``: |
131 | 131 | ||
132 | .. list-table:: | 132 | .. list-table:: |
133 | :widths: 1 1 1 77 | 133 | :widths: 8 8 24 40 |
134 | :header-rows: 1 | 134 | :header-rows: 1 |
135 | 135 | ||
136 | * - Offset | 136 | * - Offset |
@@ -212,7 +212,7 @@ The root of the htree is in ``struct dx_root``, which is the full length | |||
212 | of a data block: | 212 | of a data block: |
213 | 213 | ||
214 | .. list-table:: | 214 | .. list-table:: |
215 | :widths: 1 1 1 77 | 215 | :widths: 8 8 24 40 |
216 | :header-rows: 1 | 216 | :header-rows: 1 |
217 | 217 | ||
218 | * - Offset | 218 | * - Offset |
@@ -305,7 +305,7 @@ of a data block: | |||
305 | The directory hash is one of the following values: | 305 | The directory hash is one of the following values: |
306 | 306 | ||
307 | .. list-table:: | 307 | .. list-table:: |
308 | :widths: 1 79 | 308 | :widths: 16 64 |
309 | :header-rows: 1 | 309 | :header-rows: 1 |
310 | 310 | ||
311 | * - Value | 311 | * - Value |
@@ -327,7 +327,7 @@ Interior nodes of an htree are recorded as ``struct dx_node``, which is | |||
327 | also the full length of a data block: | 327 | also the full length of a data block: |
328 | 328 | ||
329 | .. list-table:: | 329 | .. list-table:: |
330 | :widths: 1 1 1 77 | 330 | :widths: 8 8 24 40 |
331 | :header-rows: 1 | 331 | :header-rows: 1 |
332 | 332 | ||
333 | * - Offset | 333 | * - Offset |
@@ -375,7 +375,7 @@ The hash maps that exist in both ``struct dx_root`` and | |||
375 | long: | 375 | long: |
376 | 376 | ||
377 | .. list-table:: | 377 | .. list-table:: |
378 | :widths: 1 1 1 77 | 378 | :widths: 8 8 24 40 |
379 | :header-rows: 1 | 379 | :header-rows: 1 |
380 | 380 | ||
381 | * - Offset | 381 | * - Offset |
@@ -405,7 +405,7 @@ directory index (which will ensure that there's space for the checksum. | |||
405 | The dx\_tail structure is 8 bytes long and looks like this: | 405 | The dx\_tail structure is 8 bytes long and looks like this: |
406 | 406 | ||
407 | .. list-table:: | 407 | .. list-table:: |
408 | :widths: 1 1 1 77 | 408 | :widths: 8 8 24 40 |
409 | :header-rows: 1 | 409 | :header-rows: 1 |
410 | 410 | ||
411 | * - Offset | 411 | * - Offset |
diff --git a/Documentation/filesystems/ext4/ondisk/dynamic.rst b/Documentation/filesystems/ext4/dynamic.rst index bb0c84333341..bb0c84333341 100644 --- a/Documentation/filesystems/ext4/ondisk/dynamic.rst +++ b/Documentation/filesystems/ext4/dynamic.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/eainode.rst b/Documentation/filesystems/ext4/eainode.rst index ecc0d01a0a72..ecc0d01a0a72 100644 --- a/Documentation/filesystems/ext4/ondisk/eainode.rst +++ b/Documentation/filesystems/ext4/eainode.rst | |||
diff --git a/Documentation/filesystems/ext4/ext4.rst b/Documentation/filesystems/ext4/ext4.rst deleted file mode 100644 index 9d4368d591fa..000000000000 --- a/Documentation/filesystems/ext4/ext4.rst +++ /dev/null | |||
@@ -1,613 +0,0 @@ | |||
1 | .. SPDX-License-Identifier: GPL-2.0 | ||
2 | |||
3 | ======================== | ||
4 | General Information | ||
5 | ======================== | ||
6 | |||
7 | Ext4 is an advanced level of the ext3 filesystem which incorporates | ||
8 | scalability and reliability enhancements for supporting large filesystems | ||
9 | (64 bit) in keeping with increasing disk capacities and state-of-the-art | ||
10 | feature requirements. | ||
11 | |||
12 | Mailing list: linux-ext4@vger.kernel.org | ||
13 | Web site: http://ext4.wiki.kernel.org | ||
14 | |||
15 | |||
16 | Quick usage instructions | ||
17 | ======================== | ||
18 | |||
19 | Note: More extensive information for getting started with ext4 can be | ||
20 | found at the ext4 wiki site at the URL: | ||
21 | http://ext4.wiki.kernel.org/index.php/Ext4_Howto | ||
22 | |||
23 | - The latest version of e2fsprogs can be found at: | ||
24 | |||
25 | https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/ | ||
26 | |||
27 | or | ||
28 | |||
29 | http://sourceforge.net/project/showfiles.php?group_id=2406 | ||
30 | |||
31 | or grab the latest git repository from: | ||
32 | |||
33 | https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git | ||
34 | |||
35 | - Create a new filesystem using the ext4 filesystem type: | ||
36 | |||
37 | # mke2fs -t ext4 /dev/hda1 | ||
38 | |||
39 | Or to configure an existing ext3 filesystem to support extents: | ||
40 | |||
41 | # tune2fs -O extents /dev/hda1 | ||
42 | |||
43 | If the filesystem was created with 128 byte inodes, it can be | ||
44 | converted to use 256 byte for greater efficiency via: | ||
45 | |||
46 | # tune2fs -I 256 /dev/hda1 | ||
47 | |||
48 | - Mounting: | ||
49 | |||
50 | # mount -t ext4 /dev/hda1 /wherever | ||
51 | |||
52 | - When comparing performance with other filesystems, it's always | ||
53 | important to try multiple workloads; very often a subtle change in a | ||
54 | workload parameter can completely change the ranking of which | ||
55 | filesystems do well compared to others. When comparing versus ext3, | ||
56 | note that ext4 enables write barriers by default, while ext3 does | ||
57 | not enable write barriers by default. So it is useful to use | ||
58 | explicitly specify whether barriers are enabled or not when via the | ||
59 | '-o barriers=[0|1]' mount option for both ext3 and ext4 filesystems | ||
60 | for a fair comparison. When tuning ext3 for best benchmark numbers, | ||
61 | it is often worthwhile to try changing the data journaling mode; '-o | ||
62 | data=writeback' can be faster for some workloads. (Note however that | ||
63 | running mounted with data=writeback can potentially leave stale data | ||
64 | exposed in recently written files in case of an unclean shutdown, | ||
65 | which could be a security exposure in some situations.) Configuring | ||
66 | the filesystem with a large journal can also be helpful for | ||
67 | metadata-intensive workloads. | ||
68 | |||
69 | Features | ||
70 | ======== | ||
71 | |||
72 | Currently Available | ||
73 | ------------------- | ||
74 | |||
75 | * ability to use filesystems > 16TB (e2fsprogs support not available yet) | ||
76 | * extent format reduces metadata overhead (RAM, IO for access, transactions) | ||
77 | * extent format more robust in face of on-disk corruption due to magics, | ||
78 | * internal redundancy in tree | ||
79 | * improved file allocation (multi-block alloc) | ||
80 | * lift 32000 subdirectory limit imposed by i_links_count[1] | ||
81 | * nsec timestamps for mtime, atime, ctime, create time | ||
82 | * inode version field on disk (NFSv4, Lustre) | ||
83 | * reduced e2fsck time via uninit_bg feature | ||
84 | * journal checksumming for robustness, performance | ||
85 | * persistent file preallocation (e.g for streaming media, databases) | ||
86 | * ability to pack bitmaps and inode tables into larger virtual groups via the | ||
87 | flex_bg feature | ||
88 | * large file support | ||
89 | * inode allocation using large virtual block groups via flex_bg | ||
90 | * delayed allocation | ||
91 | * large block (up to pagesize) support | ||
92 | * efficient new ordered mode in JBD2 and ext4 (avoid using buffer head to force | ||
93 | the ordering) | ||
94 | |||
95 | [1] Filesystems with a block size of 1k may see a limit imposed by the | ||
96 | directory hash tree having a maximum depth of two. | ||
97 | |||
98 | Options | ||
99 | ======= | ||
100 | |||
101 | When mounting an ext4 filesystem, the following option are accepted: | ||
102 | (*) == default | ||
103 | |||
104 | ======================= ======================================================= | ||
105 | Mount Option Description | ||
106 | ======================= ======================================================= | ||
107 | ro Mount filesystem read only. Note that ext4 will | ||
108 | replay the journal (and thus write to the | ||
109 | partition) even when mounted "read only". The | ||
110 | mount options "ro,noload" can be used to prevent | ||
111 | writes to the filesystem. | ||
112 | |||
113 | journal_checksum Enable checksumming of the journal transactions. | ||
114 | This will allow the recovery code in e2fsck and the | ||
115 | kernel to detect corruption in the kernel. It is a | ||
116 | compatible change and will be ignored by older kernels. | ||
117 | |||
118 | journal_async_commit Commit block can be written to disk without waiting | ||
119 | for descriptor blocks. If enabled older kernels cannot | ||
120 | mount the device. This will enable 'journal_checksum' | ||
121 | internally. | ||
122 | |||
123 | journal_path=path | ||
124 | journal_dev=devnum When the external journal device's major/minor numbers | ||
125 | have changed, these options allow the user to specify | ||
126 | the new journal location. The journal device is | ||
127 | identified through either its new major/minor numbers | ||
128 | encoded in devnum, or via a path to the device. | ||
129 | |||
130 | norecovery Don't load the journal on mounting. Note that | ||
131 | noload if the filesystem was not unmounted cleanly, | ||
132 | skipping the journal replay will lead to the | ||
133 | filesystem containing inconsistencies that can | ||
134 | lead to any number of problems. | ||
135 | |||
136 | data=journal All data are committed into the journal prior to being | ||
137 | written into the main file system. Enabling | ||
138 | this mode will disable delayed allocation and | ||
139 | O_DIRECT support. | ||
140 | |||
141 | data=ordered (*) All data are forced directly out to the main file | ||
142 | system prior to its metadata being committed to the | ||
143 | journal. | ||
144 | |||
145 | data=writeback Data ordering is not preserved, data may be written | ||
146 | into the main file system after its metadata has been | ||
147 | committed to the journal. | ||
148 | |||
149 | commit=nrsec (*) Ext4 can be told to sync all its data and metadata | ||
150 | every 'nrsec' seconds. The default value is 5 seconds. | ||
151 | This means that if you lose your power, you will lose | ||
152 | as much as the latest 5 seconds of work (your | ||
153 | filesystem will not be damaged though, thanks to the | ||
154 | journaling). This default value (or any low value) | ||
155 | will hurt performance, but it's good for data-safety. | ||
156 | Setting it to 0 will have the same effect as leaving | ||
157 | it at the default (5 seconds). | ||
158 | Setting it to very large values will improve | ||
159 | performance. | ||
160 | |||
161 | barrier=<0|1(*)> This enables/disables the use of write barriers in | ||
162 | barrier(*) the jbd code. barrier=0 disables, barrier=1 enables. | ||
163 | nobarrier This also requires an IO stack which can support | ||
164 | barriers, and if jbd gets an error on a barrier | ||
165 | write, it will disable again with a warning. | ||
166 | Write barriers enforce proper on-disk ordering | ||
167 | of journal commits, making volatile disk write caches | ||
168 | safe to use, at some performance penalty. If | ||
169 | your disks are battery-backed in one way or another, | ||
170 | disabling barriers may safely improve performance. | ||
171 | The mount options "barrier" and "nobarrier" can | ||
172 | also be used to enable or disable barriers, for | ||
173 | consistency with other ext4 mount options. | ||
174 | |||
175 | inode_readahead_blks=n This tuning parameter controls the maximum | ||
176 | number of inode table blocks that ext4's inode | ||
177 | table readahead algorithm will pre-read into | ||
178 | the buffer cache. The default value is 32 blocks. | ||
179 | |||
180 | nouser_xattr Disables Extended User Attributes. See the | ||
181 | attr(5) manual page for more information about | ||
182 | extended attributes. | ||
183 | |||
184 | noacl This option disables POSIX Access Control List | ||
185 | support. If ACL support is enabled in the kernel | ||
186 | configuration (CONFIG_EXT4_FS_POSIX_ACL), ACL is | ||
187 | enabled by default on mount. See the acl(5) manual | ||
188 | page for more information about acl. | ||
189 | |||
190 | bsddf (*) Make 'df' act like BSD. | ||
191 | minixdf Make 'df' act like Minix. | ||
192 | |||
193 | debug Extra debugging information is sent to syslog. | ||
194 | |||
195 | abort Simulate the effects of calling ext4_abort() for | ||
196 | debugging purposes. This is normally used while | ||
197 | remounting a filesystem which is already mounted. | ||
198 | |||
199 | errors=remount-ro Remount the filesystem read-only on an error. | ||
200 | errors=continue Keep going on a filesystem error. | ||
201 | errors=panic Panic and halt the machine if an error occurs. | ||
202 | (These mount options override the errors behavior | ||
203 | specified in the superblock, which can be configured | ||
204 | using tune2fs) | ||
205 | |||
206 | data_err=ignore(*) Just print an error message if an error occurs | ||
207 | in a file data buffer in ordered mode. | ||
208 | data_err=abort Abort the journal if an error occurs in a file | ||
209 | data buffer in ordered mode. | ||
210 | |||
211 | grpid New objects have the group ID of their parent. | ||
212 | bsdgroups | ||
213 | |||
214 | nogrpid (*) New objects have the group ID of their creator. | ||
215 | sysvgroups | ||
216 | |||
217 | resgid=n The group ID which may use the reserved blocks. | ||
218 | |||
219 | resuid=n The user ID which may use the reserved blocks. | ||
220 | |||
221 | sb=n Use alternate superblock at this location. | ||
222 | |||
223 | quota These options are ignored by the filesystem. They | ||
224 | noquota are used only by quota tools to recognize volumes | ||
225 | grpquota where quota should be turned on. See documentation | ||
226 | usrquota in the quota-tools package for more details | ||
227 | (http://sourceforge.net/projects/linuxquota). | ||
228 | |||
229 | jqfmt=<quota type> These options tell filesystem details about quota | ||
230 | usrjquota=<file> so that quota information can be properly updated | ||
231 | grpjquota=<file> during journal replay. They replace the above | ||
232 | quota options. See documentation in the quota-tools | ||
233 | package for more details | ||
234 | (http://sourceforge.net/projects/linuxquota). | ||
235 | |||
236 | stripe=n Number of filesystem blocks that mballoc will try | ||
237 | to use for allocation size and alignment. For RAID5/6 | ||
238 | systems this should be the number of data | ||
239 | disks * RAID chunk size in file system blocks. | ||
240 | |||
241 | delalloc (*) Defer block allocation until just before ext4 | ||
242 | writes out the block(s) in question. This | ||
243 | allows ext4 to better allocation decisions | ||
244 | more efficiently. | ||
245 | nodelalloc Disable delayed allocation. Blocks are allocated | ||
246 | when the data is copied from userspace to the | ||
247 | page cache, either via the write(2) system call | ||
248 | or when an mmap'ed page which was previously | ||
249 | unallocated is written for the first time. | ||
250 | |||
251 | max_batch_time=usec Maximum amount of time ext4 should wait for | ||
252 | additional filesystem operations to be batch | ||
253 | together with a synchronous write operation. | ||
254 | Since a synchronous write operation is going to | ||
255 | force a commit and then a wait for the I/O | ||
256 | complete, it doesn't cost much, and can be a | ||
257 | huge throughput win, we wait for a small amount | ||
258 | of time to see if any other transactions can | ||
259 | piggyback on the synchronous write. The | ||
260 | algorithm used is designed to automatically tune | ||
261 | for the speed of the disk, by measuring the | ||
262 | amount of time (on average) that it takes to | ||
263 | finish committing a transaction. Call this time | ||
264 | the "commit time". If the time that the | ||
265 | transaction has been running is less than the | ||
266 | commit time, ext4 will try sleeping for the | ||
267 | commit time to see if other operations will join | ||
268 | the transaction. The commit time is capped by | ||
269 | the max_batch_time, which defaults to 15000us | ||
270 | (15ms). This optimization can be turned off | ||
271 | entirely by setting max_batch_time to 0. | ||
272 | |||
273 | min_batch_time=usec This parameter sets the commit time (as | ||
274 | described above) to be at least min_batch_time. | ||
275 | It defaults to zero microseconds. Increasing | ||
276 | this parameter may improve the throughput of | ||
277 | multi-threaded, synchronous workloads on very | ||
278 | fast disks, at the cost of increasing latency. | ||
279 | |||
280 | journal_ioprio=prio The I/O priority (from 0 to 7, where 0 is the | ||
281 | highest priority) which should be used for I/O | ||
282 | operations submitted by kjournald2 during a | ||
283 | commit operation. This defaults to 3, which is | ||
284 | a slightly higher priority than the default I/O | ||
285 | priority. | ||
286 | |||
287 | auto_da_alloc(*) Many broken applications don't use fsync() when | ||
288 | noauto_da_alloc replacing existing files via patterns such as | ||
289 | fd = open("foo.new")/write(fd,..)/close(fd)/ | ||
290 | rename("foo.new", "foo"), or worse yet, | ||
291 | fd = open("foo", O_TRUNC)/write(fd,..)/close(fd). | ||
292 | If auto_da_alloc is enabled, ext4 will detect | ||
293 | the replace-via-rename and replace-via-truncate | ||
294 | patterns and force that any delayed allocation | ||
295 | blocks are allocated such that at the next | ||
296 | journal commit, in the default data=ordered | ||
297 | mode, the data blocks of the new file are forced | ||
298 | to disk before the rename() operation is | ||
299 | committed. This provides roughly the same level | ||
300 | of guarantees as ext3, and avoids the | ||
301 | "zero-length" problem that can happen when a | ||
302 | system crashes before the delayed allocation | ||
303 | blocks are forced to disk. | ||
304 | |||
305 | noinit_itable Do not initialize any uninitialized inode table | ||
306 | blocks in the background. This feature may be | ||
307 | used by installation CD's so that the install | ||
308 | process can complete as quickly as possible; the | ||
309 | inode table initialization process would then be | ||
310 | deferred until the next time the file system | ||
311 | is unmounted. | ||
312 | |||
313 | init_itable=n The lazy itable init code will wait n times the | ||
314 | number of milliseconds it took to zero out the | ||
315 | previous block group's inode table. This | ||
316 | minimizes the impact on the system performance | ||
317 | while file system's inode table is being initialized. | ||
318 | |||
319 | discard Controls whether ext4 should issue discard/TRIM | ||
320 | nodiscard(*) commands to the underlying block device when | ||
321 | blocks are freed. This is useful for SSD devices | ||
322 | and sparse/thinly-provisioned LUNs, but it is off | ||
323 | by default until sufficient testing has been done. | ||
324 | |||
325 | nouid32 Disables 32-bit UIDs and GIDs. This is for | ||
326 | interoperability with older kernels which only | ||
327 | store and expect 16-bit values. | ||
328 | |||
329 | block_validity(*) These options enable or disable the in-kernel | ||
330 | noblock_validity facility for tracking filesystem metadata blocks | ||
331 | within internal data structures. This allows multi- | ||
332 | block allocator and other routines to notice | ||
333 | bugs or corrupted allocation bitmaps which cause | ||
334 | blocks to be allocated which overlap with | ||
335 | filesystem metadata blocks. | ||
336 | |||
337 | dioread_lock Controls whether or not ext4 should use the DIO read | ||
338 | dioread_nolock locking. If the dioread_nolock option is specified | ||
339 | ext4 will allocate uninitialized extent before buffer | ||
340 | write and convert the extent to initialized after IO | ||
341 | completes. This approach allows ext4 code to avoid | ||
342 | using inode mutex, which improves scalability on high | ||
343 | speed storages. However this does not work with | ||
344 | data journaling and dioread_nolock option will be | ||
345 | ignored with kernel warning. Note that dioread_nolock | ||
346 | code path is only used for extent-based files. | ||
347 | Because of the restrictions this options comprises | ||
348 | it is off by default (e.g. dioread_lock). | ||
349 | |||
350 | max_dir_size_kb=n This limits the size of directories so that any | ||
351 | attempt to expand them beyond the specified | ||
352 | limit in kilobytes will cause an ENOSPC error. | ||
353 | This is useful in memory constrained | ||
354 | environments, where a very large directory can | ||
355 | cause severe performance problems or even | ||
356 | provoke the Out Of Memory killer. (For example, | ||
357 | if there is only 512mb memory available, a 176mb | ||
358 | directory may seriously cramp the system's style.) | ||
359 | |||
360 | i_version Enable 64-bit inode version support. This option is | ||
361 | off by default. | ||
362 | |||
363 | dax Use direct access (no page cache). See | ||
364 | Documentation/filesystems/dax.txt. Note that | ||
365 | this option is incompatible with data=journal. | ||
366 | ======================= ======================================================= | ||
367 | |||
368 | Data Mode | ||
369 | ========= | ||
370 | There are 3 different data modes: | ||
371 | |||
372 | * writeback mode | ||
373 | |||
374 | In data=writeback mode, ext4 does not journal data at all. This mode provides | ||
375 | a similar level of journaling as that of XFS, JFS, and ReiserFS in its default | ||
376 | mode - metadata journaling. A crash+recovery can cause incorrect data to | ||
377 | appear in files which were written shortly before the crash. This mode will | ||
378 | typically provide the best ext4 performance. | ||
379 | |||
380 | * ordered mode | ||
381 | |||
382 | In data=ordered mode, ext4 only officially journals metadata, but it logically | ||
383 | groups metadata information related to data changes with the data blocks into | ||
384 | a single unit called a transaction. When it's time to write the new metadata | ||
385 | out to disk, the associated data blocks are written first. In general, this | ||
386 | mode performs slightly slower than writeback but significantly faster than | ||
387 | journal mode. | ||
388 | |||
389 | * journal mode | ||
390 | |||
391 | data=journal mode provides full data and metadata journaling. All new data is | ||
392 | written to the journal first, and then to its final location. In the event of | ||
393 | a crash, the journal can be replayed, bringing both data and metadata into a | ||
394 | consistent state. This mode is the slowest except when data needs to be read | ||
395 | from and written to disk at the same time where it outperforms all others | ||
396 | modes. Enabling this mode will disable delayed allocation and O_DIRECT | ||
397 | support. | ||
398 | |||
399 | /proc entries | ||
400 | ============= | ||
401 | |||
402 | Information about mounted ext4 file systems can be found in | ||
403 | /proc/fs/ext4. Each mounted filesystem will have a directory in | ||
404 | /proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or | ||
405 | /proc/fs/ext4/dm-0). The files in each per-device directory are shown | ||
406 | in table below. | ||
407 | |||
408 | Files in /proc/fs/ext4/<devname> | ||
409 | |||
410 | ================ ======= | ||
411 | File Content | ||
412 | ================ ======= | ||
413 | mb_groups details of multiblock allocator buddy cache of free blocks | ||
414 | ================ ======= | ||
415 | |||
416 | /sys entries | ||
417 | ============ | ||
418 | |||
419 | Information about mounted ext4 file systems can be found in | ||
420 | /sys/fs/ext4. Each mounted filesystem will have a directory in | ||
421 | /sys/fs/ext4 based on its device name (i.e., /sys/fs/ext4/hdc or | ||
422 | /sys/fs/ext4/dm-0). The files in each per-device directory are shown | ||
423 | in table below. | ||
424 | |||
425 | Files in /sys/fs/ext4/<devname>: | ||
426 | |||
427 | (see also Documentation/ABI/testing/sysfs-fs-ext4) | ||
428 | |||
429 | ============================= ================================================= | ||
430 | File Content | ||
431 | ============================= ================================================= | ||
432 | delayed_allocation_blocks This file is read-only and shows the number of | ||
433 | blocks that are dirty in the page cache, but | ||
434 | which do not have their location in the | ||
435 | filesystem allocated yet. | ||
436 | |||
437 | inode_goal Tuning parameter which (if non-zero) controls | ||
438 | the goal inode used by the inode allocator in | ||
439 | preference to all other allocation heuristics. | ||
440 | This is intended for debugging use only, and | ||
441 | should be 0 on production systems. | ||
442 | |||
443 | inode_readahead_blks Tuning parameter which controls the maximum | ||
444 | number of inode table blocks that ext4's inode | ||
445 | table readahead algorithm will pre-read into | ||
446 | the buffer cache | ||
447 | |||
448 | lifetime_write_kbytes This file is read-only and shows the number of | ||
449 | kilobytes of data that have been written to this | ||
450 | filesystem since it was created. | ||
451 | |||
452 | max_writeback_mb_bump The maximum number of megabytes the writeback | ||
453 | code will try to write out before move on to | ||
454 | another inode. | ||
455 | |||
456 | mb_group_prealloc The multiblock allocator will round up allocation | ||
457 | requests to a multiple of this tuning parameter if | ||
458 | the stripe size is not set in the ext4 superblock | ||
459 | |||
460 | mb_max_to_scan The maximum number of extents the multiblock | ||
461 | allocator will search to find the best extent | ||
462 | |||
463 | mb_min_to_scan The minimum number of extents the multiblock | ||
464 | allocator will search to find the best extent | ||
465 | |||
466 | mb_order2_req Tuning parameter which controls the minimum size | ||
467 | for requests (as a power of 2) where the buddy | ||
468 | cache is used | ||
469 | |||
470 | mb_stats Controls whether the multiblock allocator should | ||
471 | collect statistics, which are shown during the | ||
472 | unmount. 1 means to collect statistics, 0 means | ||
473 | not to collect statistics | ||
474 | |||
475 | mb_stream_req Files which have fewer blocks than this tunable | ||
476 | parameter will have their blocks allocated out | ||
477 | of a block group specific preallocation pool, so | ||
478 | that small files are packed closely together. | ||
479 | Each large file will have its blocks allocated | ||
480 | out of its own unique preallocation pool. | ||
481 | |||
482 | session_write_kbytes This file is read-only and shows the number of | ||
483 | kilobytes of data that have been written to this | ||
484 | filesystem since it was mounted. | ||
485 | |||
486 | reserved_clusters This is RW file and contains number of reserved | ||
487 | clusters in the file system which will be used | ||
488 | in the specific situations to avoid costly | ||
489 | zeroout, unexpected ENOSPC, or possible data | ||
490 | loss. The default is 2% or 4096 clusters, | ||
491 | whichever is smaller and this can be changed | ||
492 | however it can never exceed number of clusters | ||
493 | in the file system. If there is not enough space | ||
494 | for the reserved space when mounting the file | ||
495 | mount will _not_ fail. | ||
496 | ============================= ================================================= | ||
497 | |||
498 | Ioctls | ||
499 | ====== | ||
500 | |||
501 | There is some Ext4 specific functionality which can be accessed by applications | ||
502 | through the system call interfaces. The list of all Ext4 specific ioctls are | ||
503 | shown in the table below. | ||
504 | |||
505 | Table of Ext4 specific ioctls | ||
506 | |||
507 | ============================= ================================================= | ||
508 | Ioctl Description | ||
509 | ============================= ================================================= | ||
510 | EXT4_IOC_GETFLAGS Get additional attributes associated with inode. | ||
511 | The ioctl argument is an integer bitfield, with | ||
512 | bit values described in ext4.h. This ioctl is an | ||
513 | alias for FS_IOC_GETFLAGS. | ||
514 | |||
515 | EXT4_IOC_SETFLAGS Set additional attributes associated with inode. | ||
516 | The ioctl argument is an integer bitfield, with | ||
517 | bit values described in ext4.h. This ioctl is an | ||
518 | alias for FS_IOC_SETFLAGS. | ||
519 | |||
520 | EXT4_IOC_GETVERSION | ||
521 | EXT4_IOC_GETVERSION_OLD | ||
522 | Get the inode i_generation number stored for | ||
523 | each inode. The i_generation number is normally | ||
524 | changed only when new inode is created and it is | ||
525 | particularly useful for network filesystems. The | ||
526 | '_OLD' version of this ioctl is an alias for | ||
527 | FS_IOC_GETVERSION. | ||
528 | |||
529 | EXT4_IOC_SETVERSION | ||
530 | EXT4_IOC_SETVERSION_OLD | ||
531 | Set the inode i_generation number stored for | ||
532 | each inode. The '_OLD' version of this ioctl | ||
533 | is an alias for FS_IOC_SETVERSION. | ||
534 | |||
535 | EXT4_IOC_GROUP_EXTEND This ioctl has the same purpose as the resize | ||
536 | mount option. It allows to resize filesystem | ||
537 | to the end of the last existing block group, | ||
538 | further resize has to be done with resize2fs, | ||
539 | either online, or offline. The argument points | ||
540 | to the unsigned logn number representing the | ||
541 | filesystem new block count. | ||
542 | |||
543 | EXT4_IOC_MOVE_EXT Move the block extents from orig_fd (the one | ||
544 | this ioctl is pointing to) to the donor_fd (the | ||
545 | one specified in move_extent structure passed | ||
546 | as an argument to this ioctl). Then, exchange | ||
547 | inode metadata between orig_fd and donor_fd. | ||
548 | This is especially useful for online | ||
549 | defragmentation, because the allocator has the | ||
550 | opportunity to allocate moved blocks better, | ||
551 | ideally into one contiguous extent. | ||
552 | |||
553 | EXT4_IOC_GROUP_ADD Add a new group descriptor to an existing or | ||
554 | new group descriptor block. The new group | ||
555 | descriptor is described by ext4_new_group_input | ||
556 | structure, which is passed as an argument to | ||
557 | this ioctl. This is especially useful in | ||
558 | conjunction with EXT4_IOC_GROUP_EXTEND, | ||
559 | which allows online resize of the filesystem | ||
560 | to the end of the last existing block group. | ||
561 | Those two ioctls combined is used in userspace | ||
562 | online resize tool (e.g. resize2fs). | ||
563 | |||
564 | EXT4_IOC_MIGRATE This ioctl operates on the filesystem itself. | ||
565 | It converts (migrates) ext3 indirect block mapped | ||
566 | inode to ext4 extent mapped inode by walking | ||
567 | through indirect block mapping of the original | ||
568 | inode and converting contiguous block ranges | ||
569 | into ext4 extents of the temporary inode. Then, | ||
570 | inodes are swapped. This ioctl might help, when | ||
571 | migrating from ext3 to ext4 filesystem, however | ||
572 | suggestion is to create fresh ext4 filesystem | ||
573 | and copy data from the backup. Note, that | ||
574 | filesystem has to support extents for this ioctl | ||
575 | to work. | ||
576 | |||
577 | EXT4_IOC_ALLOC_DA_BLKS Force all of the delay allocated blocks to be | ||
578 | allocated to preserve application-expected ext3 | ||
579 | behaviour. Note that this will also start | ||
580 | triggering a write of the data blocks, but this | ||
581 | behaviour may change in the future as it is | ||
582 | not necessary and has been done this way only | ||
583 | for sake of simplicity. | ||
584 | |||
585 | EXT4_IOC_RESIZE_FS Resize the filesystem to a new size. The number | ||
586 | of blocks of resized filesystem is passed in via | ||
587 | 64 bit integer argument. The kernel allocates | ||
588 | bitmaps and inode table, the userspace tool thus | ||
589 | just passes the new number of blocks. | ||
590 | |||
591 | EXT4_IOC_SWAP_BOOT Swap i_blocks and associated attributes | ||
592 | (like i_blocks, i_size, i_flags, ...) from | ||
593 | the specified inode with inode | ||
594 | EXT4_BOOT_LOADER_INO (#5). This is typically | ||
595 | used to store a boot loader in a secure part of | ||
596 | the filesystem, where it can't be changed by a | ||
597 | normal user by accident. | ||
598 | The data blocks of the previous boot loader | ||
599 | will be associated with the given inode. | ||
600 | ============================= ================================================= | ||
601 | |||
602 | References | ||
603 | ========== | ||
604 | |||
605 | kernel source: <file:fs/ext4/> | ||
606 | <file:fs/jbd2/> | ||
607 | |||
608 | programs: http://e2fsprogs.sourceforge.net/ | ||
609 | |||
610 | useful links: http://fedoraproject.org/wiki/ext3-devel | ||
611 | http://www.bullopensource.org/ext4/ | ||
612 | http://ext4.wiki.kernel.org/index.php/Main_Page | ||
613 | http://fedoraproject.org/wiki/Features/Ext4 | ||
diff --git a/Documentation/filesystems/ext4/ondisk/globals.rst b/Documentation/filesystems/ext4/globals.rst index 368bf7662b96..368bf7662b96 100644 --- a/Documentation/filesystems/ext4/ondisk/globals.rst +++ b/Documentation/filesystems/ext4/globals.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/group_descr.rst b/Documentation/filesystems/ext4/group_descr.rst index 759827e5d2cf..0f783ed88592 100644 --- a/Documentation/filesystems/ext4/ondisk/group_descr.rst +++ b/Documentation/filesystems/ext4/group_descr.rst | |||
@@ -43,7 +43,7 @@ entire bitmap. | |||
43 | The block group descriptor is laid out in ``struct ext4_group_desc``. | 43 | The block group descriptor is laid out in ``struct ext4_group_desc``. |
44 | 44 | ||
45 | .. list-table:: | 45 | .. list-table:: |
46 | :widths: 1 1 1 77 | 46 | :widths: 8 8 24 40 |
47 | :header-rows: 1 | 47 | :header-rows: 1 |
48 | 48 | ||
49 | * - Offset | 49 | * - Offset |
@@ -157,7 +157,7 @@ The block group descriptor is laid out in ``struct ext4_group_desc``. | |||
157 | Block group flags can be any combination of the following: | 157 | Block group flags can be any combination of the following: |
158 | 158 | ||
159 | .. list-table:: | 159 | .. list-table:: |
160 | :widths: 1 79 | 160 | :widths: 16 64 |
161 | :header-rows: 1 | 161 | :header-rows: 1 |
162 | 162 | ||
163 | * - Value | 163 | * - Value |
diff --git a/Documentation/filesystems/ext4/ondisk/ifork.rst b/Documentation/filesystems/ext4/ifork.rst index 5dbe3b2b121a..b9816d5a896b 100644 --- a/Documentation/filesystems/ext4/ondisk/ifork.rst +++ b/Documentation/filesystems/ext4/ifork.rst | |||
@@ -68,7 +68,7 @@ The extent tree header is recorded in ``struct ext4_extent_header``, | |||
68 | which is 12 bytes long: | 68 | which is 12 bytes long: |
69 | 69 | ||
70 | .. list-table:: | 70 | .. list-table:: |
71 | :widths: 1 1 1 77 | 71 | :widths: 8 8 24 40 |
72 | :header-rows: 1 | 72 | :header-rows: 1 |
73 | 73 | ||
74 | * - Offset | 74 | * - Offset |
@@ -104,7 +104,7 @@ Internal nodes of the extent tree, also known as index nodes, are | |||
104 | recorded as ``struct ext4_extent_idx``, and are 12 bytes long: | 104 | recorded as ``struct ext4_extent_idx``, and are 12 bytes long: |
105 | 105 | ||
106 | .. list-table:: | 106 | .. list-table:: |
107 | :widths: 1 1 1 77 | 107 | :widths: 8 8 24 40 |
108 | :header-rows: 1 | 108 | :header-rows: 1 |
109 | 109 | ||
110 | * - Offset | 110 | * - Offset |
@@ -134,7 +134,7 @@ Leaf nodes of the extent tree are recorded as ``struct ext4_extent``, | |||
134 | and are also 12 bytes long: | 134 | and are also 12 bytes long: |
135 | 135 | ||
136 | .. list-table:: | 136 | .. list-table:: |
137 | :widths: 1 1 1 77 | 137 | :widths: 8 8 24 40 |
138 | :header-rows: 1 | 138 | :header-rows: 1 |
139 | 139 | ||
140 | * - Offset | 140 | * - Offset |
@@ -174,7 +174,7 @@ including) the checksum itself. | |||
174 | ``struct ext4_extent_tail`` is 4 bytes long: | 174 | ``struct ext4_extent_tail`` is 4 bytes long: |
175 | 175 | ||
176 | .. list-table:: | 176 | .. list-table:: |
177 | :widths: 1 1 1 77 | 177 | :widths: 8 8 24 40 |
178 | :header-rows: 1 | 178 | :header-rows: 1 |
179 | 179 | ||
180 | * - Offset | 180 | * - Offset |
diff --git a/Documentation/filesystems/ext4/index.rst b/Documentation/filesystems/ext4/index.rst index 71121605558c..3be3e54d480d 100644 --- a/Documentation/filesystems/ext4/index.rst +++ b/Documentation/filesystems/ext4/index.rst | |||
@@ -1,17 +1,14 @@ | |||
1 | .. SPDX-License-Identifier: GPL-2.0 | 1 | .. SPDX-License-Identifier: GPL-2.0 |
2 | 2 | ||
3 | =============== | 3 | =================================== |
4 | ext4 Filesystem | 4 | ext4 Data Structures and Algorithms |
5 | =============== | 5 | =================================== |
6 | |||
7 | General usage and on-disk artifacts writen by ext4. More documentation may | ||
8 | be ported from the wiki as time permits. This should be considered the | ||
9 | canonical source of information as the details here have been reviewed by | ||
10 | the ext4 community. | ||
11 | 6 | ||
12 | .. toctree:: | 7 | .. toctree:: |
13 | :maxdepth: 5 | 8 | :maxdepth: 6 |
14 | :numbered: | 9 | :numbered: |
15 | 10 | ||
16 | ext4 | 11 | about.rst |
17 | ondisk/index | 12 | overview.rst |
13 | globals.rst | ||
14 | dynamic.rst | ||
diff --git a/Documentation/filesystems/ext4/ondisk/inlinedata.rst b/Documentation/filesystems/ext4/inlinedata.rst index d1075178ce0b..d1075178ce0b 100644 --- a/Documentation/filesystems/ext4/ondisk/inlinedata.rst +++ b/Documentation/filesystems/ext4/inlinedata.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/inodes.rst b/Documentation/filesystems/ext4/inodes.rst index 655ce898f3f5..6bd35e506b6f 100644 --- a/Documentation/filesystems/ext4/ondisk/inodes.rst +++ b/Documentation/filesystems/ext4/inodes.rst | |||
@@ -29,8 +29,9 @@ and the inode structure itself. | |||
29 | The inode table entry is laid out in ``struct ext4_inode``. | 29 | The inode table entry is laid out in ``struct ext4_inode``. |
30 | 30 | ||
31 | .. list-table:: | 31 | .. list-table:: |
32 | :widths: 1 1 1 77 | 32 | :widths: 8 8 24 40 |
33 | :header-rows: 1 | 33 | :header-rows: 1 |
34 | :class: longtable | ||
34 | 35 | ||
35 | * - Offset | 36 | * - Offset |
36 | - Size | 37 | - Size |
@@ -176,7 +177,7 @@ The inode table entry is laid out in ``struct ext4_inode``. | |||
176 | The ``i_mode`` value is a combination of the following flags: | 177 | The ``i_mode`` value is a combination of the following flags: |
177 | 178 | ||
178 | .. list-table:: | 179 | .. list-table:: |
179 | :widths: 1 79 | 180 | :widths: 16 64 |
180 | :header-rows: 1 | 181 | :header-rows: 1 |
181 | 182 | ||
182 | * - Value | 183 | * - Value |
@@ -227,7 +228,7 @@ The ``i_mode`` value is a combination of the following flags: | |||
227 | The ``i_flags`` field is a combination of these values: | 228 | The ``i_flags`` field is a combination of these values: |
228 | 229 | ||
229 | .. list-table:: | 230 | .. list-table:: |
230 | :widths: 1 79 | 231 | :widths: 16 64 |
231 | :header-rows: 1 | 232 | :header-rows: 1 |
232 | 233 | ||
233 | * - Value | 234 | * - Value |
@@ -314,7 +315,7 @@ The ``osd1`` field has multiple meanings depending on the creator: | |||
314 | Linux: | 315 | Linux: |
315 | 316 | ||
316 | .. list-table:: | 317 | .. list-table:: |
317 | :widths: 1 1 1 77 | 318 | :widths: 8 8 24 40 |
318 | :header-rows: 1 | 319 | :header-rows: 1 |
319 | 320 | ||
320 | * - Offset | 321 | * - Offset |
@@ -331,7 +332,7 @@ Linux: | |||
331 | Hurd: | 332 | Hurd: |
332 | 333 | ||
333 | .. list-table:: | 334 | .. list-table:: |
334 | :widths: 1 1 1 77 | 335 | :widths: 8 8 24 40 |
335 | :header-rows: 1 | 336 | :header-rows: 1 |
336 | 337 | ||
337 | * - Offset | 338 | * - Offset |
@@ -346,7 +347,7 @@ Hurd: | |||
346 | Masix: | 347 | Masix: |
347 | 348 | ||
348 | .. list-table:: | 349 | .. list-table:: |
349 | :widths: 1 1 1 77 | 350 | :widths: 8 8 24 40 |
350 | :header-rows: 1 | 351 | :header-rows: 1 |
351 | 352 | ||
352 | * - Offset | 353 | * - Offset |
@@ -365,7 +366,7 @@ The ``osd2`` field has multiple meanings depending on the filesystem creator: | |||
365 | Linux: | 366 | Linux: |
366 | 367 | ||
367 | .. list-table:: | 368 | .. list-table:: |
368 | :widths: 1 1 1 77 | 369 | :widths: 8 8 24 40 |
369 | :header-rows: 1 | 370 | :header-rows: 1 |
370 | 371 | ||
371 | * - Offset | 372 | * - Offset |
@@ -402,7 +403,7 @@ Linux: | |||
402 | Hurd: | 403 | Hurd: |
403 | 404 | ||
404 | .. list-table:: | 405 | .. list-table:: |
405 | :widths: 1 1 1 77 | 406 | :widths: 8 8 24 40 |
406 | :header-rows: 1 | 407 | :header-rows: 1 |
407 | 408 | ||
408 | * - Offset | 409 | * - Offset |
@@ -433,7 +434,7 @@ Hurd: | |||
433 | Masix: | 434 | Masix: |
434 | 435 | ||
435 | .. list-table:: | 436 | .. list-table:: |
436 | :widths: 1 1 1 77 | 437 | :widths: 8 8 24 40 |
437 | :header-rows: 1 | 438 | :header-rows: 1 |
438 | 439 | ||
439 | * - Offset | 440 | * - Offset |
diff --git a/Documentation/filesystems/ext4/ondisk/journal.rst b/Documentation/filesystems/ext4/journal.rst index e7031af86876..ea613ee701f5 100644 --- a/Documentation/filesystems/ext4/ondisk/journal.rst +++ b/Documentation/filesystems/ext4/journal.rst | |||
@@ -48,7 +48,7 @@ Layout | |||
48 | Generally speaking, the journal has this format: | 48 | Generally speaking, the journal has this format: |
49 | 49 | ||
50 | .. list-table:: | 50 | .. list-table:: |
51 | :widths: 1 1 78 | 51 | :widths: 16 48 16 |
52 | :header-rows: 1 | 52 | :header-rows: 1 |
53 | 53 | ||
54 | * - Superblock | 54 | * - Superblock |
@@ -76,7 +76,7 @@ The journal superblock will be in the next full block after the | |||
76 | superblock. | 76 | superblock. |
77 | 77 | ||
78 | .. list-table:: | 78 | .. list-table:: |
79 | :widths: 1 1 1 1 76 | 79 | :widths: 12 12 12 32 12 |
80 | :header-rows: 1 | 80 | :header-rows: 1 |
81 | 81 | ||
82 | * - 1024 bytes of padding | 82 | * - 1024 bytes of padding |
@@ -98,7 +98,7 @@ Every block in the journal starts with a common 12-byte header | |||
98 | ``struct journal_header_s``: | 98 | ``struct journal_header_s``: |
99 | 99 | ||
100 | .. list-table:: | 100 | .. list-table:: |
101 | :widths: 1 1 1 77 | 101 | :widths: 8 8 24 40 |
102 | :header-rows: 1 | 102 | :header-rows: 1 |
103 | 103 | ||
104 | * - Offset | 104 | * - Offset |
@@ -124,7 +124,7 @@ Every block in the journal starts with a common 12-byte header | |||
124 | The journal block type can be any one of: | 124 | The journal block type can be any one of: |
125 | 125 | ||
126 | .. list-table:: | 126 | .. list-table:: |
127 | :widths: 1 79 | 127 | :widths: 16 64 |
128 | :header-rows: 1 | 128 | :header-rows: 1 |
129 | 129 | ||
130 | * - Value | 130 | * - Value |
@@ -154,7 +154,7 @@ The journal superblock is recorded as ``struct journal_superblock_s``, | |||
154 | which is 1024 bytes long: | 154 | which is 1024 bytes long: |
155 | 155 | ||
156 | .. list-table:: | 156 | .. list-table:: |
157 | :widths: 1 1 1 77 | 157 | :widths: 8 8 24 40 |
158 | :header-rows: 1 | 158 | :header-rows: 1 |
159 | 159 | ||
160 | * - Offset | 160 | * - Offset |
@@ -264,7 +264,7 @@ which is 1024 bytes long: | |||
264 | The journal compat features are any combination of the following: | 264 | The journal compat features are any combination of the following: |
265 | 265 | ||
266 | .. list-table:: | 266 | .. list-table:: |
267 | :widths: 1 79 | 267 | :widths: 16 64 |
268 | :header-rows: 1 | 268 | :header-rows: 1 |
269 | 269 | ||
270 | * - Value | 270 | * - Value |
@@ -278,7 +278,7 @@ The journal compat features are any combination of the following: | |||
278 | The journal incompat features are any combination of the following: | 278 | The journal incompat features are any combination of the following: |
279 | 279 | ||
280 | .. list-table:: | 280 | .. list-table:: |
281 | :widths: 1 79 | 281 | :widths: 16 64 |
282 | :header-rows: 1 | 282 | :header-rows: 1 |
283 | 283 | ||
284 | * - Value | 284 | * - Value |
@@ -306,7 +306,7 @@ Journal checksum type codes are one of the following. crc32 or crc32c are the | |||
306 | most likely choices. | 306 | most likely choices. |
307 | 307 | ||
308 | .. list-table:: | 308 | .. list-table:: |
309 | :widths: 1 79 | 309 | :widths: 16 64 |
310 | :header-rows: 1 | 310 | :header-rows: 1 |
311 | 311 | ||
312 | * - Value | 312 | * - Value |
@@ -330,7 +330,7 @@ described by a data structure, but here is the block structure anyway. | |||
330 | Descriptor blocks consume at least 36 bytes, but use a full block: | 330 | Descriptor blocks consume at least 36 bytes, but use a full block: |
331 | 331 | ||
332 | .. list-table:: | 332 | .. list-table:: |
333 | :widths: 1 1 1 77 | 333 | :widths: 8 8 24 40 |
334 | :header-rows: 1 | 334 | :header-rows: 1 |
335 | 335 | ||
336 | * - Offset | 336 | * - Offset |
@@ -355,7 +355,7 @@ defined as ``struct journal_block_tag3_s``, which looks like the | |||
355 | following. The size is 16 or 32 bytes. | 355 | following. The size is 16 or 32 bytes. |
356 | 356 | ||
357 | .. list-table:: | 357 | .. list-table:: |
358 | :widths: 1 1 1 77 | 358 | :widths: 8 8 24 40 |
359 | :header-rows: 1 | 359 | :header-rows: 1 |
360 | 360 | ||
361 | * - Offset | 361 | * - Offset |
@@ -400,7 +400,7 @@ following. The size is 16 or 32 bytes. | |||
400 | The journal tag flags are any combination of the following: | 400 | The journal tag flags are any combination of the following: |
401 | 401 | ||
402 | .. list-table:: | 402 | .. list-table:: |
403 | :widths: 1 79 | 403 | :widths: 16 64 |
404 | :header-rows: 1 | 404 | :header-rows: 1 |
405 | 405 | ||
406 | * - Value | 406 | * - Value |
@@ -421,7 +421,7 @@ is defined as ``struct journal_block_tag_s``, which looks like the | |||
421 | following. The size is 8, 12, 24, or 28 bytes: | 421 | following. The size is 8, 12, 24, or 28 bytes: |
422 | 422 | ||
423 | .. list-table:: | 423 | .. list-table:: |
424 | :widths: 1 1 1 77 | 424 | :widths: 8 8 24 40 |
425 | :header-rows: 1 | 425 | :header-rows: 1 |
426 | 426 | ||
427 | * - Offset | 427 | * - Offset |
@@ -471,7 +471,7 @@ JBD2\_FEATURE\_INCOMPAT\_CSUM\_V3 are set, the end of the block is a | |||
471 | ``struct jbd2_journal_block_tail``, which looks like this: | 471 | ``struct jbd2_journal_block_tail``, which looks like this: |
472 | 472 | ||
473 | .. list-table:: | 473 | .. list-table:: |
474 | :widths: 1 1 1 77 | 474 | :widths: 8 8 24 40 |
475 | :header-rows: 1 | 475 | :header-rows: 1 |
476 | 476 | ||
477 | * - Offset | 477 | * - Offset |
@@ -513,7 +513,7 @@ Revocation blocks are described in | |||
513 | length, but use a full block: | 513 | length, but use a full block: |
514 | 514 | ||
515 | .. list-table:: | 515 | .. list-table:: |
516 | :widths: 1 1 1 77 | 516 | :widths: 8 8 24 40 |
517 | :header-rows: 1 | 517 | :header-rows: 1 |
518 | 518 | ||
519 | * - Offset | 519 | * - Offset |
@@ -543,7 +543,7 @@ JBD2\_FEATURE\_INCOMPAT\_CSUM\_V3 are set, the end of the revocation | |||
543 | block is a ``struct jbd2_journal_revoke_tail``, which has this format: | 543 | block is a ``struct jbd2_journal_revoke_tail``, which has this format: |
544 | 544 | ||
545 | .. list-table:: | 545 | .. list-table:: |
546 | :widths: 1 1 1 77 | 546 | :widths: 8 8 24 40 |
547 | :header-rows: 1 | 547 | :header-rows: 1 |
548 | 548 | ||
549 | * - Offset | 549 | * - Offset |
@@ -567,7 +567,7 @@ The commit block is described by ``struct commit_header``, which is 32 | |||
567 | bytes long (but uses a full block): | 567 | bytes long (but uses a full block): |
568 | 568 | ||
569 | .. list-table:: | 569 | .. list-table:: |
570 | :widths: 1 1 1 77 | 570 | :widths: 8 8 24 40 |
571 | :header-rows: 1 | 571 | :header-rows: 1 |
572 | 572 | ||
573 | * - Offset | 573 | * - Offset |
diff --git a/Documentation/filesystems/ext4/ondisk/mmp.rst b/Documentation/filesystems/ext4/mmp.rst index b7d7a3137f80..25660981d93c 100644 --- a/Documentation/filesystems/ext4/ondisk/mmp.rst +++ b/Documentation/filesystems/ext4/mmp.rst | |||
@@ -32,7 +32,7 @@ The checksum is calculated against the FS UUID and the MMP structure. | |||
32 | The MMP structure (``struct mmp_struct``) is as follows: | 32 | The MMP structure (``struct mmp_struct``) is as follows: |
33 | 33 | ||
34 | .. list-table:: | 34 | .. list-table:: |
35 | :widths: 1 1 1 77 | 35 | :widths: 8 12 20 40 |
36 | :header-rows: 1 | 36 | :header-rows: 1 |
37 | 37 | ||
38 | * - Offset | 38 | * - Offset |
diff --git a/Documentation/filesystems/ext4/ondisk/index.rst b/Documentation/filesystems/ext4/ondisk/index.rst deleted file mode 100644 index f7d082c3a435..000000000000 --- a/Documentation/filesystems/ext4/ondisk/index.rst +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | .. SPDX-License-Identifier: GPL-2.0 | ||
2 | |||
3 | ============================== | ||
4 | Data Structures and Algorithms | ||
5 | ============================== | ||
6 | .. include:: about.rst | ||
7 | .. include:: overview.rst | ||
8 | .. include:: globals.rst | ||
9 | .. include:: dynamic.rst | ||
diff --git a/Documentation/filesystems/ext4/ondisk/overview.rst b/Documentation/filesystems/ext4/overview.rst index cbab18baba12..cbab18baba12 100644 --- a/Documentation/filesystems/ext4/ondisk/overview.rst +++ b/Documentation/filesystems/ext4/overview.rst | |||
diff --git a/Documentation/filesystems/ext4/ondisk/special_inodes.rst b/Documentation/filesystems/ext4/special_inodes.rst index a82f70c9baeb..9061aabba827 100644 --- a/Documentation/filesystems/ext4/ondisk/special_inodes.rst +++ b/Documentation/filesystems/ext4/special_inodes.rst | |||
@@ -6,7 +6,7 @@ Special inodes | |||
6 | ext4 reserves some inode for special features, as follows: | 6 | ext4 reserves some inode for special features, as follows: |
7 | 7 | ||
8 | .. list-table:: | 8 | .. list-table:: |
9 | :widths: 1 79 | 9 | :widths: 6 70 |
10 | :header-rows: 1 | 10 | :header-rows: 1 |
11 | 11 | ||
12 | * - inode Number | 12 | * - inode Number |
diff --git a/Documentation/filesystems/ext4/ondisk/super.rst b/Documentation/filesystems/ext4/super.rst index 5f81dd87e0b9..04ff079a2acf 100644 --- a/Documentation/filesystems/ext4/ondisk/super.rst +++ b/Documentation/filesystems/ext4/super.rst | |||
@@ -19,7 +19,7 @@ The ext4 superblock is laid out as follows in | |||
19 | ``struct ext4_super_block``: | 19 | ``struct ext4_super_block``: |
20 | 20 | ||
21 | .. list-table:: | 21 | .. list-table:: |
22 | :widths: 1 1 1 77 | 22 | :widths: 8 8 24 40 |
23 | :header-rows: 1 | 23 | :header-rows: 1 |
24 | 24 | ||
25 | * - Offset | 25 | * - Offset |
@@ -483,7 +483,7 @@ The ext4 superblock is laid out as follows in | |||
483 | The superblock state is some combination of the following: | 483 | The superblock state is some combination of the following: |
484 | 484 | ||
485 | .. list-table:: | 485 | .. list-table:: |
486 | :widths: 1 79 | 486 | :widths: 8 72 |
487 | :header-rows: 1 | 487 | :header-rows: 1 |
488 | 488 | ||
489 | * - Value | 489 | * - Value |
@@ -500,7 +500,7 @@ The superblock state is some combination of the following: | |||
500 | The superblock error policy is one of the following: | 500 | The superblock error policy is one of the following: |
501 | 501 | ||
502 | .. list-table:: | 502 | .. list-table:: |
503 | :widths: 1 79 | 503 | :widths: 8 72 |
504 | :header-rows: 1 | 504 | :header-rows: 1 |
505 | 505 | ||
506 | * - Value | 506 | * - Value |
@@ -517,7 +517,7 @@ The superblock error policy is one of the following: | |||
517 | The filesystem creator is one of the following: | 517 | The filesystem creator is one of the following: |
518 | 518 | ||
519 | .. list-table:: | 519 | .. list-table:: |
520 | :widths: 1 79 | 520 | :widths: 8 72 |
521 | :header-rows: 1 | 521 | :header-rows: 1 |
522 | 522 | ||
523 | * - Value | 523 | * - Value |
@@ -538,7 +538,7 @@ The filesystem creator is one of the following: | |||
538 | The superblock revision is one of the following: | 538 | The superblock revision is one of the following: |
539 | 539 | ||
540 | .. list-table:: | 540 | .. list-table:: |
541 | :widths: 1 79 | 541 | :widths: 8 72 |
542 | :header-rows: 1 | 542 | :header-rows: 1 |
543 | 543 | ||
544 | * - Value | 544 | * - Value |
@@ -556,7 +556,7 @@ The superblock compatible features field is a combination of any of the | |||
556 | following: | 556 | following: |
557 | 557 | ||
558 | .. list-table:: | 558 | .. list-table:: |
559 | :widths: 1 79 | 559 | :widths: 16 64 |
560 | :header-rows: 1 | 560 | :header-rows: 1 |
561 | 561 | ||
562 | * - Value | 562 | * - Value |
@@ -595,7 +595,7 @@ The superblock incompatible features field is a combination of any of the | |||
595 | following: | 595 | following: |
596 | 596 | ||
597 | .. list-table:: | 597 | .. list-table:: |
598 | :widths: 1 79 | 598 | :widths: 16 64 |
599 | :header-rows: 1 | 599 | :header-rows: 1 |
600 | 600 | ||
601 | * - Value | 601 | * - Value |
@@ -647,7 +647,7 @@ The superblock read-only compatible features field is a combination of any of | |||
647 | the following: | 647 | the following: |
648 | 648 | ||
649 | .. list-table:: | 649 | .. list-table:: |
650 | :widths: 1 79 | 650 | :widths: 16 64 |
651 | :header-rows: 1 | 651 | :header-rows: 1 |
652 | 652 | ||
653 | * - Value | 653 | * - Value |
@@ -702,7 +702,7 @@ the following: | |||
702 | The ``s_def_hash_version`` field is one of the following: | 702 | The ``s_def_hash_version`` field is one of the following: |
703 | 703 | ||
704 | .. list-table:: | 704 | .. list-table:: |
705 | :widths: 1 79 | 705 | :widths: 8 72 |
706 | :header-rows: 1 | 706 | :header-rows: 1 |
707 | 707 | ||
708 | * - Value | 708 | * - Value |
@@ -725,7 +725,7 @@ The ``s_def_hash_version`` field is one of the following: | |||
725 | The ``s_default_mount_opts`` field is any combination of the following: | 725 | The ``s_default_mount_opts`` field is any combination of the following: |
726 | 726 | ||
727 | .. list-table:: | 727 | .. list-table:: |
728 | :widths: 1 79 | 728 | :widths: 8 72 |
729 | :header-rows: 1 | 729 | :header-rows: 1 |
730 | 730 | ||
731 | * - Value | 731 | * - Value |
@@ -767,7 +767,7 @@ The ``s_default_mount_opts`` field is any combination of the following: | |||
767 | The ``s_flags`` field is any combination of the following: | 767 | The ``s_flags`` field is any combination of the following: |
768 | 768 | ||
769 | .. list-table:: | 769 | .. list-table:: |
770 | :widths: 1 79 | 770 | :widths: 8 72 |
771 | :header-rows: 1 | 771 | :header-rows: 1 |
772 | 772 | ||
773 | * - Value | 773 | * - Value |
@@ -784,7 +784,7 @@ The ``s_flags`` field is any combination of the following: | |||
784 | The ``s_encrypt_algos`` list can contain any of the following: | 784 | The ``s_encrypt_algos`` list can contain any of the following: |
785 | 785 | ||
786 | .. list-table:: | 786 | .. list-table:: |
787 | :widths: 1 79 | 787 | :widths: 8 72 |
788 | :header-rows: 1 | 788 | :header-rows: 1 |
789 | 789 | ||
790 | * - Value | 790 | * - Value |