cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

super.rst (23535B)


      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_hi field.
    460   * - 0x278
    461     - __u8
    462     - s_first_error_time_hi
    463     - Upper 8 bits of the s_first_error_time_hi field.
    464   * - 0x279
    465     - __u8
    466     - s_last_error_time_hi
    467     - Upper 8 bits of the s_last_error_time_hi 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 commited 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.