1.. SPDX-License-Identifier: GPL-2.0
2
3Super Block
4-----------
5
6The superblock records various information about the enclosing
7filesystem, such as block counts, inode counts, supported features,
8maintenance information, and more.
9
10If the sparse_super feature flag is set, redundant copies of the
11superblock and group descriptors are kept only in the groups whose group
12number is either 0 or a power of 3, 5, or 7. If the flag is not set,
13redundant copies are kept in all groups.
14
15The superblock checksum is calculated against the superblock structure,
16which includes the FS UUID.
17
18The ext4 superblock is laid out as follows in
19``struct ext4_super_block``:
20
21.. list-table::
22   :widths: 8 8 24 40
23   :header-rows: 1
24
25   * - Offset
26     - Size
27     - Name
28     - Description
29   * - 0x0
30     - __le32
31     - s_inodes_count
32     - Total inode count.
33   * - 0x4
34     - __le32
35     - s_blocks_count_lo
36     - Total block count.
37   * - 0x8
38     - __le32
39     - s_r_blocks_count_lo
40     - This number of blocks can only be allocated by the super-user.
41   * - 0xC
42     - __le32
43     - s_free_blocks_count_lo
44     - Free block count.
45   * - 0x10
46     - __le32
47     - s_free_inodes_count
48     - Free inode count.
49   * - 0x14
50     - __le32
51     - s_first_data_block
52     - First data block. This must be at least 1 for 1k-block filesystems and
53       is typically 0 for all other block sizes.
54   * - 0x18
55     - __le32
56     - s_log_block_size
57     - Block size is 2 ^ (10 + s_log_block_size).
58   * - 0x1C
59     - __le32
60     - s_log_cluster_size
61     - Cluster size is 2 ^ (10 + s_log_cluster_size) blocks if bigalloc is
62       enabled. Otherwise s_log_cluster_size must equal s_log_block_size.
63   * - 0x20
64     - __le32
65     - s_blocks_per_group
66     - Blocks per group.
67   * - 0x24
68     - __le32
69     - s_clusters_per_group
70     - Clusters per group, if bigalloc is enabled. Otherwise
71       s_clusters_per_group must equal s_blocks_per_group.
72   * - 0x28
73     - __le32
74     - s_inodes_per_group
75     - Inodes per group.
76   * - 0x2C
77     - __le32
78     - s_mtime
79     - Mount time, in seconds since the epoch.
80   * - 0x30
81     - __le32
82     - s_wtime
83     - Write time, in seconds since the epoch.
84   * - 0x34
85     - __le16
86     - s_mnt_count
87     - Number of mounts since the last fsck.
88   * - 0x36
89     - __le16
90     - s_max_mnt_count
91     - Number of mounts beyond which a fsck is needed.
92   * - 0x38
93     - __le16
94     - s_magic
95     - Magic signature, 0xEF53
96   * - 0x3A
97     - __le16
98     - s_state
99     - File system state. See super_state_ for more info.
100   * - 0x3C
101     - __le16
102     - s_errors
103     - Behaviour when detecting errors. See super_errors_ for more info.
104   * - 0x3E
105     - __le16
106     - s_minor_rev_level
107     - Minor revision level.
108   * - 0x40
109     - __le32
110     - s_lastcheck
111     - Time of last check, in seconds since the epoch.
112   * - 0x44
113     - __le32
114     - s_checkinterval
115     - Maximum time between checks, in seconds.
116   * - 0x48
117     - __le32
118     - s_creator_os
119     - Creator OS. See the table super_creator_ for more info.
120   * - 0x4C
121     - __le32
122     - s_rev_level
123     - Revision level. See the table super_revision_ for more info.
124   * - 0x50
125     - __le16
126     - s_def_resuid
127     - Default uid for reserved blocks.
128   * - 0x52
129     - __le16
130     - s_def_resgid
131     - Default gid for reserved blocks.
132   * -
133     -
134     -
135     - These fields are for EXT4_DYNAMIC_REV superblocks only.
136
137       Note: the difference between the compatible feature set and the
138       incompatible feature set is that if there is a bit set in the
139       incompatible feature set that the kernel doesn't know about, it should
140       refuse to mount the filesystem.
141
142       e2fsck's requirements are more strict; if it doesn't know
143       about a feature in either the compatible or incompatible feature set, it
144       must abort and not try to meddle with things it doesn't understand...
145   * - 0x54
146     - __le32
147     - s_first_ino
148     - First non-reserved inode.
149   * - 0x58
150     - __le16
151     - s_inode_size
152     - Size of inode structure, in bytes.
153   * - 0x5A
154     - __le16
155     - s_block_group_nr
156     - Block group # of this superblock.
157   * - 0x5C
158     - __le32
159     - s_feature_compat
160     - Compatible feature set flags. Kernel can still read/write this fs even
161       if it doesn't understand a flag; fsck should not do that. See the
162       super_compat_ table for more info.
163   * - 0x60
164     - __le32
165     - s_feature_incompat
166     - Incompatible feature set. If the kernel or fsck doesn't understand one
167       of these bits, it should stop. See the super_incompat_ table for more
168       info.
169   * - 0x64
170     - __le32
171     - s_feature_ro_compat
172     - Readonly-compatible feature set. If the kernel doesn't understand one of
173       these bits, it can still mount read-only. See the super_rocompat_ table
174       for more info.
175   * - 0x68
176     - __u8
177     - s_uuid[16]
178     - 128-bit UUID for volume.
179   * - 0x78
180     - char
181     - s_volume_name[16]
182     - Volume label.
183   * - 0x88
184     - char
185     - s_last_mounted[64]
186     - Directory where filesystem was last mounted.
187   * - 0xC8
188     - __le32
189     - s_algorithm_usage_bitmap
190     - For compression (Not used in e2fsprogs/Linux)
191   * -
192     -
193     -
194     - Performance hints.  Directory preallocation should only happen if the
195       EXT4_FEATURE_COMPAT_DIR_PREALLOC flag is on.
196   * - 0xCC
197     - __u8
198     - s_prealloc_blocks
199     - #. of blocks to try to preallocate for ... files? (Not used in
200       e2fsprogs/Linux)
201   * - 0xCD
202     - __u8
203     - s_prealloc_dir_blocks
204     - #. of blocks to preallocate for directories. (Not used in
205       e2fsprogs/Linux)
206   * - 0xCE
207     - __le16
208     - s_reserved_gdt_blocks
209     - Number of reserved GDT entries for future filesystem expansion.
210   * -
211     -
212     -
213     - Journalling support is valid only if EXT4_FEATURE_COMPAT_HAS_JOURNAL is
214       set.
215   * - 0xD0
216     - __u8
217     - s_journal_uuid[16]
218     - UUID of journal superblock
219   * - 0xE0
220     - __le32
221     - s_journal_inum
222     - inode number of journal file.
223   * - 0xE4
224     - __le32
225     - s_journal_dev
226     - Device number of journal file, if the external journal feature flag is
227       set.
228   * - 0xE8
229     - __le32
230     - s_last_orphan
231     - Start of list of orphaned inodes to delete.
232   * - 0xEC
233     - __le32
234     - s_hash_seed[4]
235     - HTREE hash seed.
236   * - 0xFC
237     - __u8
238     - s_def_hash_version
239     - Default hash algorithm to use for directory hashes. See super_def_hash_
240       for more info.
241   * - 0xFD
242     - __u8
243     - s_jnl_backup_type
244     - If this value is 0 or EXT3_JNL_BACKUP_BLOCKS (1), then the
245       ``s_jnl_blocks`` field contains a duplicate copy of the inode's
246       ``i_block[]`` array and ``i_size``.
247   * - 0xFE
248     - __le16
249     - s_desc_size
250     - Size of group descriptors, in bytes, if the 64bit incompat feature flag
251       is set.
252   * - 0x100
253     - __le32
254     - s_default_mount_opts
255     - Default mount options. See the super_mountopts_ table for more info.
256   * - 0x104
257     - __le32
258     - s_first_meta_bg
259     - First metablock block group, if the meta_bg feature is enabled.
260   * - 0x108
261     - __le32
262     - s_mkfs_time
263     - When the filesystem was created, in seconds since the epoch.
264   * - 0x10C
265     - __le32
266     - s_jnl_blocks[17]
267     - Backup copy of the journal inode's ``i_block[]`` array in the first 15
268       elements and i_size_high and i_size in the 16th and 17th elements,
269       respectively.
270   * -
271     -
272     -
273     - 64bit support is valid only if EXT4_FEATURE_COMPAT_64BIT is set.
274   * - 0x150
275     - __le32
276     - s_blocks_count_hi
277     - High 32-bits of the block count.
278   * - 0x154
279     - __le32
280     - s_r_blocks_count_hi
281     - High 32-bits of the reserved block count.
282   * - 0x158
283     - __le32
284     - s_free_blocks_count_hi
285     - High 32-bits of the free block count.
286   * - 0x15C
287     - __le16
288     - s_min_extra_isize
289     - All inodes have at least # bytes.
290   * - 0x15E
291     - __le16
292     - s_want_extra_isize
293     - New inodes should reserve # bytes.
294   * - 0x160
295     - __le32
296     - s_flags
297     - Miscellaneous flags. See the super_flags_ table for more info.
298   * - 0x164
299     - __le16
300     - s_raid_stride
301     - RAID stride. This is the number of logical blocks read from or written
302       to the disk before moving to the next disk. This affects the placement
303       of filesystem metadata, which will hopefully make RAID storage faster.
304   * - 0x166
305     - __le16
306     - s_mmp_interval
307     - #. seconds to wait in multi-mount prevention (MMP) checking. In theory,
308       MMP is a mechanism to record in the superblock which host and device
309       have mounted the filesystem, in order to prevent multiple mounts. This
310       feature does not seem to be implemented...
311   * - 0x168
312     - __le64
313     - s_mmp_block
314     - Block # for multi-mount protection data.
315   * - 0x170
316     - __le32
317     - s_raid_stripe_width
318     - RAID stripe width. This is the number of logical blocks read from or
319       written to the disk before coming back to the current disk. This is used
320       by the block allocator to try to reduce the number of read-modify-write
321       operations in a RAID5/6.
322   * - 0x174
323     - __u8
324     - s_log_groups_per_flex
325     - Size of a flexible block group is 2 ^ ``s_log_groups_per_flex``.
326   * - 0x175
327     - __u8
328     - s_checksum_type
329     - Metadata checksum algorithm type. The only valid value is 1 (crc32c).
330   * - 0x176
331     - __le16
332     - s_reserved_pad
333     -
334   * - 0x178
335     - __le64
336     - s_kbytes_written
337     - Number of KiB written to this filesystem over its lifetime.
338   * - 0x180
339     - __le32
340     - s_snapshot_inum
341     - inode number of active snapshot. (Not used in e2fsprogs/Linux.)
342   * - 0x184
343     - __le32
344     - s_snapshot_id
345     - Sequential ID of active snapshot. (Not used in e2fsprogs/Linux.)
346   * - 0x188
347     - __le64
348     - s_snapshot_r_blocks_count
349     - Number of blocks reserved for active snapshot's future use. (Not used in
350       e2fsprogs/Linux.)
351   * - 0x190
352     - __le32
353     - s_snapshot_list
354     - inode number of the head of the on-disk snapshot list. (Not used in
355       e2fsprogs/Linux.)
356   * - 0x194
357     - __le32
358     - s_error_count
359     - Number of errors seen.
360   * - 0x198
361     - __le32
362     - s_first_error_time
363     - First time an error happened, in seconds since the epoch.
364   * - 0x19C
365     - __le32
366     - s_first_error_ino
367     - inode involved in first error.
368   * - 0x1A0
369     - __le64
370     - s_first_error_block
371     - Number of block involved of first error.
372   * - 0x1A8
373     - __u8
374     - s_first_error_func[32]
375     - Name of function where the error happened.
376   * - 0x1C8
377     - __le32
378     - s_first_error_line
379     - Line number where error happened.
380   * - 0x1CC
381     - __le32
382     - s_last_error_time
383     - Time of most recent error, in seconds since the epoch.
384   * - 0x1D0
385     - __le32
386     - s_last_error_ino
387     - inode involved in most recent error.
388   * - 0x1D4
389     - __le32
390     - s_last_error_line
391     - Line number where most recent error happened.
392   * - 0x1D8
393     - __le64
394     - s_last_error_block
395     - Number of block involved in most recent error.
396   * - 0x1E0
397     - __u8
398     - s_last_error_func[32]
399     - Name of function where the most recent error happened.
400   * - 0x200
401     - __u8
402     - s_mount_opts[64]
403     - ASCIIZ string of mount options.
404   * - 0x240
405     - __le32
406     - s_usr_quota_inum
407     - Inode number of user `quota <quota>`__ file.
408   * - 0x244
409     - __le32
410     - s_grp_quota_inum
411     - Inode number of group `quota <quota>`__ file.
412   * - 0x248
413     - __le32
414     - s_overhead_blocks
415     - Overhead blocks/clusters in fs. (Huh? This field is always zero, which
416       means that the kernel calculates it dynamically.)
417   * - 0x24C
418     - __le32
419     - s_backup_bgs[2]
420     - Block groups containing superblock backups (if sparse_super2)
421   * - 0x254
422     - __u8
423     - s_encrypt_algos[4]
424     - Encryption algorithms in use. There can be up to four algorithms in use
425       at any time; valid algorithm codes are given in the super_encrypt_ table
426       below.
427   * - 0x258
428     - __u8
429     - s_encrypt_pw_salt[16]
430     - Salt for the string2key algorithm for encryption.
431   * - 0x268
432     - __le32
433     - s_lpf_ino
434     - Inode number of lost+found
435   * - 0x26C
436     - __le32
437     - s_prj_quota_inum
438     - Inode that tracks project quotas.
439   * - 0x270
440     - __le32
441     - s_checksum_seed
442     - Checksum seed used for metadata_csum calculations. This value is
443       crc32c(~0, $orig_fs_uuid).
444   * - 0x274
445     - __u8
446     - s_wtime_hi
447     - Upper 8 bits of the s_wtime field.
448   * - 0x275
449     - __u8
450     - s_mtime_hi
451     - Upper 8 bits of the s_mtime field.
452   * - 0x276
453     - __u8
454     - s_mkfs_time_hi
455     - Upper 8 bits of the s_mkfs_time field.
456   * - 0x277
457     - __u8
458     - s_lastcheck_hi
459     - Upper 8 bits of the s_lastcheck field.
460   * - 0x278
461     - __u8
462     - s_first_error_time_hi
463     - Upper 8 bits of the s_first_error_time field.
464   * - 0x279
465     - __u8
466     - s_last_error_time_hi
467     - Upper 8 bits of the s_last_error_time field.
468   * - 0x27A
469     - __u8
470     - s_pad[2]
471     - Zero padding.
472   * - 0x27C
473     - __le16
474     - s_encoding
475     - Filename charset encoding.
476   * - 0x27E
477     - __le16
478     - s_encoding_flags
479     - Filename charset encoding flags.
480   * - 0x280
481     - __le32
482     - s_orphan_file_inum
483     - Orphan file inode number.
484   * - 0x284
485     - __le32
486     - s_reserved[94]
487     - Padding to the end of the block.
488   * - 0x3FC
489     - __le32
490     - s_checksum
491     - Superblock checksum.
492
493.. _super_state:
494
495The superblock state is some combination of the following:
496
497.. list-table::
498   :widths: 8 72
499   :header-rows: 1
500
501   * - Value
502     - Description
503   * - 0x0001
504     - Cleanly umounted
505   * - 0x0002
506     - Errors detected
507   * - 0x0004
508     - Orphans being recovered
509
510.. _super_errors:
511
512The superblock error policy is one of the following:
513
514.. list-table::
515   :widths: 8 72
516   :header-rows: 1
517
518   * - Value
519     - Description
520   * - 1
521     - Continue
522   * - 2
523     - Remount read-only
524   * - 3
525     - Panic
526
527.. _super_creator:
528
529The filesystem creator is one of the following:
530
531.. list-table::
532   :widths: 8 72
533   :header-rows: 1
534
535   * - Value
536     - Description
537   * - 0
538     - Linux
539   * - 1
540     - Hurd
541   * - 2
542     - Masix
543   * - 3
544     - FreeBSD
545   * - 4
546     - Lites
547
548.. _super_revision:
549
550The superblock revision is one of the following:
551
552.. list-table::
553   :widths: 8 72
554   :header-rows: 1
555
556   * - Value
557     - Description
558   * - 0
559     - Original format
560   * - 1
561     - v2 format w/ dynamic inode sizes
562
563Note that ``EXT4_DYNAMIC_REV`` refers to a revision 1 or newer filesystem.
564
565.. _super_compat:
566
567The superblock compatible features field is a combination of any of the
568following:
569
570.. list-table::
571   :widths: 16 64
572   :header-rows: 1
573
574   * - Value
575     - Description
576   * - 0x1
577     - Directory preallocation (COMPAT_DIR_PREALLOC).
578   * - 0x2
579     - “imagic inodes”. Not clear from the code what this does
580       (COMPAT_IMAGIC_INODES).
581   * - 0x4
582     - Has a journal (COMPAT_HAS_JOURNAL).
583   * - 0x8
584     - Supports extended attributes (COMPAT_EXT_ATTR).
585   * - 0x10
586     - Has reserved GDT blocks for filesystem expansion
587       (COMPAT_RESIZE_INODE). Requires RO_COMPAT_SPARSE_SUPER.
588   * - 0x20
589     - Has directory indices (COMPAT_DIR_INDEX).
590   * - 0x40
591     - “Lazy BG”. Not in Linux kernel, seems to have been for uninitialized
592       block groups? (COMPAT_LAZY_BG)
593   * - 0x80
594     - “Exclude inode”. Not used. (COMPAT_EXCLUDE_INODE).
595   * - 0x100
596     - “Exclude bitmap”. Seems to be used to indicate the presence of
597       snapshot-related exclude bitmaps? Not defined in kernel or used in
598       e2fsprogs (COMPAT_EXCLUDE_BITMAP).
599   * - 0x200
600     - Sparse Super Block, v2. If this flag is set, the SB field s_backup_bgs
601       points to the two block groups that contain backup superblocks
602       (COMPAT_SPARSE_SUPER2).
603   * - 0x400
604     - Fast commits supported. Although fast commits blocks are
605       backward incompatible, fast commit blocks are not always
606       present in the journal. If fast commit blocks are present in
607       the journal, JBD2 incompat feature
608       (JBD2_FEATURE_INCOMPAT_FAST_COMMIT) gets
609       set (COMPAT_FAST_COMMIT).
610   * - 0x1000
611     - Orphan file allocated. This is the special file for more efficient
612       tracking of unlinked but still open inodes. When there may be any
613       entries in the file, we additionally set proper rocompat feature
614       (RO_COMPAT_ORPHAN_PRESENT).
615
616.. _super_incompat:
617
618The superblock incompatible features field is a combination of any of the
619following:
620
621.. list-table::
622   :widths: 16 64
623   :header-rows: 1
624
625   * - Value
626     - Description
627   * - 0x1
628     - Compression (INCOMPAT_COMPRESSION).
629   * - 0x2
630     - Directory entries record the file type. See ext4_dir_entry_2 below
631       (INCOMPAT_FILETYPE).
632   * - 0x4
633     - Filesystem needs recovery (INCOMPAT_RECOVER).
634   * - 0x8
635     - Filesystem has a separate journal device (INCOMPAT_JOURNAL_DEV).
636   * - 0x10
637     - Meta block groups. See the earlier discussion of this feature
638       (INCOMPAT_META_BG).
639   * - 0x40
640     - Files in this filesystem use extents (INCOMPAT_EXTENTS).
641   * - 0x80
642     - Enable a filesystem size of 2^64 blocks (INCOMPAT_64BIT).
643   * - 0x100
644     - Multiple mount protection (INCOMPAT_MMP).
645   * - 0x200
646     - Flexible block groups. See the earlier discussion of this feature
647       (INCOMPAT_FLEX_BG).
648   * - 0x400
649     - Inodes can be used to store large extended attribute values
650       (INCOMPAT_EA_INODE).
651   * - 0x1000
652     - Data in directory entry (INCOMPAT_DIRDATA). (Not implemented?)
653   * - 0x2000
654     - Metadata checksum seed is stored in the superblock. This feature enables
655       the administrator to change the UUID of a metadata_csum filesystem
656       while the filesystem is mounted; without it, the checksum definition
657       requires all metadata blocks to be rewritten (INCOMPAT_CSUM_SEED).
658   * - 0x4000
659     - Large directory >2GB or 3-level htree (INCOMPAT_LARGEDIR). Prior to
660       this feature, directories could not be larger than 4GiB and could not
661       have an htree more than 2 levels deep. If this feature is enabled,
662       directories can be larger than 4GiB and have a maximum htree depth of 3.
663   * - 0x8000
664     - Data in inode (INCOMPAT_INLINE_DATA).
665   * - 0x10000
666     - Encrypted inodes are present on the filesystem. (INCOMPAT_ENCRYPT).
667
668.. _super_rocompat:
669
670The superblock read-only compatible features field is a combination of any of
671the following:
672
673.. list-table::
674   :widths: 16 64
675   :header-rows: 1
676
677   * - Value
678     - Description
679   * - 0x1
680     - Sparse superblocks. See the earlier discussion of this feature
681       (RO_COMPAT_SPARSE_SUPER).
682   * - 0x2
683     - This filesystem has been used to store a file greater than 2GiB
684       (RO_COMPAT_LARGE_FILE).
685   * - 0x4
686     - Not used in kernel or e2fsprogs (RO_COMPAT_BTREE_DIR).
687   * - 0x8
688     - This filesystem has files whose sizes are represented in units of
689       logical blocks, not 512-byte sectors. This implies a very large file
690       indeed! (RO_COMPAT_HUGE_FILE)
691   * - 0x10
692     - Group descriptors have checksums. In addition to detecting corruption,
693       this is useful for lazy formatting with uninitialized groups
694       (RO_COMPAT_GDT_CSUM).
695   * - 0x20
696     - Indicates that the old ext3 32,000 subdirectory limit no longer applies
697       (RO_COMPAT_DIR_NLINK). A directory's i_links_count will be set to 1
698       if it is incremented past 64,999.
699   * - 0x40
700     - Indicates that large inodes exist on this filesystem
701       (RO_COMPAT_EXTRA_ISIZE).
702   * - 0x80
703     - This filesystem has a snapshot (RO_COMPAT_HAS_SNAPSHOT).
704   * - 0x100
705     - `Quota <Quota>`__ (RO_COMPAT_QUOTA).
706   * - 0x200
707     - This filesystem supports “bigalloc”, which means that file extents are
708       tracked in units of clusters (of blocks) instead of blocks
709       (RO_COMPAT_BIGALLOC).
710   * - 0x400
711     - This filesystem supports metadata checksumming.
712       (RO_COMPAT_METADATA_CSUM; implies RO_COMPAT_GDT_CSUM, though
713       GDT_CSUM must not be set)
714   * - 0x800
715     - Filesystem supports replicas. This feature is neither in the kernel nor
716       e2fsprogs. (RO_COMPAT_REPLICA)
717   * - 0x1000
718     - Read-only filesystem image; the kernel will not mount this image
719       read-write and most tools will refuse to write to the image.
720       (RO_COMPAT_READONLY)
721   * - 0x2000
722     - Filesystem tracks project quotas. (RO_COMPAT_PROJECT)
723   * - 0x8000
724     - Verity inodes may be present on the filesystem. (RO_COMPAT_VERITY)
725   * - 0x10000
726     - Indicates orphan file may have valid orphan entries and thus we need
727       to clean them up when mounting the filesystem
728       (RO_COMPAT_ORPHAN_PRESENT).
729
730.. _super_def_hash:
731
732The ``s_def_hash_version`` field is one of the following:
733
734.. list-table::
735   :widths: 8 72
736   :header-rows: 1
737
738   * - Value
739     - Description
740   * - 0x0
741     - Legacy.
742   * - 0x1
743     - Half MD4.
744   * - 0x2
745     - Tea.
746   * - 0x3
747     - Legacy, unsigned.
748   * - 0x4
749     - Half MD4, unsigned.
750   * - 0x5
751     - Tea, unsigned.
752
753.. _super_mountopts:
754
755The ``s_default_mount_opts`` field is any combination of the following:
756
757.. list-table::
758   :widths: 8 72
759   :header-rows: 1
760
761   * - Value
762     - Description
763   * - 0x0001
764     - Print debugging info upon (re)mount. (EXT4_DEFM_DEBUG)
765   * - 0x0002
766     - New files take the gid of the containing directory (instead of the fsgid
767       of the current process). (EXT4_DEFM_BSDGROUPS)
768   * - 0x0004
769     - Support userspace-provided extended attributes. (EXT4_DEFM_XATTR_USER)
770   * - 0x0008
771     - Support POSIX access control lists (ACLs). (EXT4_DEFM_ACL)
772   * - 0x0010
773     - Do not support 32-bit UIDs. (EXT4_DEFM_UID16)
774   * - 0x0020
775     - All data and metadata are committed to the journal.
776       (EXT4_DEFM_JMODE_DATA)
777   * - 0x0040
778     - All data are flushed to the disk before metadata are committed to the
779       journal. (EXT4_DEFM_JMODE_ORDERED)
780   * - 0x0060
781     - Data ordering is not preserved; data may be written after the metadata
782       has been written. (EXT4_DEFM_JMODE_WBACK)
783   * - 0x0100
784     - Disable write flushes. (EXT4_DEFM_NOBARRIER)
785   * - 0x0200
786     - Track which blocks in a filesystem are metadata and therefore should not
787       be used as data blocks. This option will be enabled by default on 3.18,
788       hopefully. (EXT4_DEFM_BLOCK_VALIDITY)
789   * - 0x0400
790     - Enable DISCARD support, where the storage device is told about blocks
791       becoming unused. (EXT4_DEFM_DISCARD)
792   * - 0x0800
793     - Disable delayed allocation. (EXT4_DEFM_NODELALLOC)
794
795.. _super_flags:
796
797The ``s_flags`` field is any combination of the following:
798
799.. list-table::
800   :widths: 8 72
801   :header-rows: 1
802
803   * - Value
804     - Description
805   * - 0x0001
806     - Signed directory hash in use.
807   * - 0x0002
808     - Unsigned directory hash in use.
809   * - 0x0004
810     - To test development code.
811
812.. _super_encrypt:
813
814The ``s_encrypt_algos`` list can contain any of the following:
815
816.. list-table::
817   :widths: 8 72
818   :header-rows: 1
819
820   * - Value
821     - Description
822   * - 0
823     - Invalid algorithm (ENCRYPTION_MODE_INVALID).
824   * - 1
825     - 256-bit AES in XTS mode (ENCRYPTION_MODE_AES_256_XTS).
826   * - 2
827     - 256-bit AES in GCM mode (ENCRYPTION_MODE_AES_256_GCM).
828   * - 3
829     - 256-bit AES in CBC mode (ENCRYPTION_MODE_AES_256_CBC).
830
831Total size of the superblock is 1024 bytes.
832