libparted 3.6
Loading...
Searching...
No Matches
ext2_fs.h
Go to the documentation of this file.
1/*
2 * linux/include/linux/ext2_fs.h
3 *
4 * Copyright (C) 1992, 1993, 1994, 1995
5 * Remy Card (card@masi.ibp.fr)
6 * Laboratoire MASI - Institut Blaise Pascal
7 * Universite Pierre et Marie Curie (Paris VI)
8 *
9 * from
10 *
11 * linux/include/linux/minix_fs.h
12 *
13 * Copyright (C) 1991, 1992 Linus Torvalds
14 */
15
16/*
17 * EXT2_*_*() convienience macros added by Andrew Clausen <clausen@gnu.org>
18 * Copyright (C) 2000, 2009-2014, 2019-2023, 2026 Free Software Foundation,
19 * Inc.
20 */
21
22#ifndef _EXT2_FS_H
23#define _EXT2_FS_H
24
25#include <parted/endian.h>
26#include <stdint.h>
27
28/*
29 * The second extended file system constants/structures
30 */
31
32#define EXT2_SUPER_MAGIC_CONST 0xEF53
33#define EXT2_MIN_BLOCK_SIZE 1024
34#define EXT2_NDIR_BLOCKS 12
35#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
36#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
37#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
38#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
39#define EXT2_VALID_FS 0x0001
40#define EXT2_ERROR_FS 0x0002
41#define EXT2_RESERVED_INODE_COUNT 11
42
43/*
44 * Codes for operating systems
45 */
46#define EXT2_OS_LINUX 0
47#define EXT2_OS_HURD 1
48#define EXT2_OS_MASIX 2
49#define EXT2_OS_FREEBSD 3
50#define EXT2_OS_LITES 4
51
52/*
53 * Feature set definitions
54 */
55#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
56#define EXT2_FEATURE_COMPAT_HAS_DIR_INDEX 0x0020
57
58#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
59#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
60#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008
61#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
62#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
63
64#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
65#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004
66#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040
67#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
68#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
69
70/*
71 * Special inodes numbers
72 */
73#define EXT2_BAD_INO 1 /* Bad blocks inode */
74#define EXT2_ROOT_INO 2 /* Root inode */
75#define EXT2_ACL_IDX_INO 3 /* ACL inode */
76#define EXT2_ACL_DATA_INO 4 /* ACL inode */
77#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
78#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
79
80/*
81 * Ext2 directory file types. Only the low 3 bits are used. The
82 * other bits are reserved for now.
83 */
84#define EXT2_FT_UNKNOWN 0
85#define EXT2_FT_REG_FILE 1
86#define EXT2_FT_DIR 2
87#define EXT2_FT_CHRDEV 3
88#define EXT2_FT_BLKDEV 4
89#define EXT2_FT_FIFO 5
90#define EXT2_FT_SOCK 6
91#define EXT2_FT_SYMLINK 7
92
93/*
94 * Behaviour when detecting errors
95 */
96#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
97#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
98#define EXT2_ERRORS_PANIC 3 /* Panic */
99#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
100
102{
103 uint32_t inode;
104 uint16_t rec_len;
105 uint8_t name_len;
106 uint8_t file_type;
107 char name[255];
108};
109
121
123{
124 uint16_t i_mode; /* File mode */
125 uint16_t i_uid; /* Owner Uid */
126 uint32_t i_size; /* Size in bytes */
127 uint32_t i_atime; /* Access time */
128 uint32_t i_ctime; /* Creation time */
129 uint32_t i_mtime; /* Modification time */
130 uint32_t i_dtime; /* Deletion Time */
131 uint16_t i_gid; /* Group Id */
132 uint16_t i_links_count; /* Links count */
133 uint32_t i_blocks; /* Blocks count */
134 uint32_t i_flags; /* File flags */
135 union {
136 struct {
139 struct {
142 struct {
145 } osd1; /* OS dependent 1 */
146 uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
147 uint32_t i_generation; /* File version (for NFS) */
148 uint32_t i_file_acl; /* File ACL */
149 uint32_t i_dir_acl; /* Directory ACL */
150 uint32_t i_faddr; /* Fragment address */
151 union {
152 struct {
153 uint8_t l_i_frag; /* Fragment number */
154 uint8_t l_i_fsize; /* Fragment size */
155 uint16_t i_pad1;
156 uint32_t l_i_reserved2[2];
158 struct {
159 uint8_t h_i_frag; /* Fragment number */
160 uint8_t h_i_fsize; /* Fragment size */
162 uint16_t h_i_uid_high;
163 uint16_t h_i_gid_high;
164 uint32_t h_i_author;
166 struct {
167 uint8_t m_i_frag; /* Fragment number */
168 uint8_t m_i_fsize; /* Fragment size */
169 uint16_t m_pad1;
170 uint32_t m_i_reserved2[2];
172 } osd2; /* OS dependent 2 */
173};
174
175#define i_size_high i_dir_acl
176
177struct __attribute__ ((packed)) ext2_super_block
178{
179 uint32_t s_inodes_count; /* Inodes count */
180 uint32_t s_blocks_count; /* Blocks count */
181 uint32_t s_r_blocks_count; /* Reserved blocks count */
182 uint32_t s_free_blocks_count; /* Free blocks count */
183 uint32_t s_free_inodes_count; /* Free inodes count */
184 uint32_t s_first_data_block; /* First Data Block */
185 uint32_t s_log_block_size; /* Block size */
186 int32_t s_log_frag_size; /* Fragment size */
187 uint32_t s_blocks_per_group; /* # Blocks per group */
188 uint32_t s_frags_per_group; /* # Fragments per group */
189 uint32_t s_inodes_per_group; /* # Inodes per group */
190 uint32_t s_mtime; /* Mount time */
191 uint32_t s_wtime; /* Write time */
192 uint16_t s_mnt_count; /* Mount count */
193 int16_t s_max_mnt_count; /* Maximal mount count */
194 uint16_t s_magic; /* Magic signature */
195 uint16_t s_state; /* File system state */
196 uint16_t s_errors; /* Behaviour when detecting errors */
197 uint16_t s_minor_rev_level; /* minor revision level */
198 uint32_t s_lastcheck; /* time of last check */
199 uint32_t s_checkinterval; /* max. time between checks */
200 uint32_t s_creator_os; /* OS */
201 uint32_t s_rev_level; /* Revision level */
202 uint16_t s_def_resuid; /* Default uid for reserved blocks */
203 uint16_t s_def_resgid; /* Default gid for reserved blocks */
204 /*
205 * These fields are for EXT2_DYNAMIC_REV superblocks only.
206 *
207 * Note: the difference between the compatible feature set and
208 * the incompatible feature set is that if there is a bit set
209 * in the incompatible feature set that the kernel doesn't
210 * know about, it should refuse to mount the file system.
211 *
212 * e2fsck's requirements are more strict; if it doesn't know
213 * about a feature in either the compatible or incompatible
214 * feature set, it must abort and not try to meddle with
215 * things it doesn't understand...
216 */
217 uint32_t s_first_ino; /* First non-reserved inode */
218 uint16_t s_inode_size; /* size of inode structure */
219 uint16_t s_block_group_nr; /* block group # of this superblock */
220 uint32_t s_feature_compat; /* compatible feature set */
221 uint32_t s_feature_incompat; /* incompatible feature set */
222 uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
223 uint8_t s_uuid[16]; /* 128-bit uuid for volume */
224 char s_volume_name[16]; /* volume name */
225 char s_last_mounted[64]; /* directory where last mounted */
226 uint32_t s_algorithm_usage_bitmap; /* For compression */
227 /*
228 * Performance hints. Directory preallocation should only
229 * happen if the EXT2_COMPAT_PREALLOC flag is on.
230 */
231 uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
232 uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
233 uint16_t s_padding1;
234 /*
235 * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
236 */
237 uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
238 uint32_t s_journal_inum; /* inode number of journal file */
239 uint32_t s_journal_dev; /* device number of journal file */
240 uint32_t s_last_orphan; /* start of list of inodes to delete */
241
242 uint32_t s_reserved[197]; /* Padding to the end of the block */
243};
244
245#define EXT2_DIRENT_INODE(dir_ent) (PED_LE32_TO_CPU((dir_ent).inode))
246#define EXT2_DIRENT_REC_LEN(dir_ent) (PED_LE16_TO_CPU((dir_ent).rec_len))
247#define EXT2_DIRENT_NAME_LEN(dir_ent) ((dir_ent).name_len)
248#define EXT2_DIRENT_FILE_TYPE(dir_ent) ((dir_ent).file_type)
249
250#define EXT2_GROUP_BLOCK_BITMAP(gd) (PED_LE32_TO_CPU((gd).bg_block_bitmap))
251#define EXT2_GROUP_INODE_BITMAP(gd) (PED_LE32_TO_CPU((gd).bg_inode_bitmap))
252#define EXT2_GROUP_INODE_TABLE(gd) (PED_LE32_TO_CPU((gd).bg_inode_table))
253#define EXT2_GROUP_FREE_BLOCKS_COUNT(gd) \
254 (PED_LE16_TO_CPU((gd).bg_free_blocks_count))
255#define EXT2_GROUP_FREE_INODES_COUNT(gd) \
256 (PED_LE16_TO_CPU((gd).bg_free_inodes_count))
257#define EXT2_GROUP_USED_DIRS_COUNT(gd) \
258 (PED_LE16_TO_CPU((gd).bg_used_dirs_count))
259
260#define EXT2_INODE_MODE(inode) (PED_LE16_TO_CPU((inode).i_mode))
261#define EXT2_INODE_UID(inode) (PED_LE16_TO_CPU((inode).i_uid))
262#define EXT2_INODE_SIZE(inode) \
263 ((uint64_t) PED_LE32_TO_CPU((inode).i_size) \
264 + ((uint64_t) PED_LE32_TO_CPU((inode).i_size_high) << 32))
265#define EXT2_INODE_ATIME(inode) (PED_LE32_TO_CPU((inode).i_atime))
266#define EXT2_INODE_CTIME(inode) (PED_LE32_TO_CPU((inode).i_ctime))
267#define EXT2_INODE_MTIME(inode) (PED_LE32_TO_CPU((inode).i_mtime))
268#define EXT2_INODE_DTIME(inode) (PED_LE32_TO_CPU((inode).i_dtime))
269#define EXT2_INODE_GID(inode) (PED_LE16_TO_CPU((inode).i_gid))
270#define EXT2_INODE_LINKS_COUNT(inode) (PED_LE16_TO_CPU((inode).i_links_count))
271#define EXT2_INODE_BLOCKS(inode) (PED_LE32_TO_CPU((inode).i_blocks))
272#define EXT2_INODE_FLAGS(inode) (PED_LE32_TO_CPU((inode).i_flags))
273#define EXT2_INODE_TRANSLATOR(inode) (PED_LE32_TO_CPU((inode).osd1.hurd1.h_i_translator))
274#define EXT2_INODE_BLOCK(inode, blk) (PED_LE32_TO_CPU((inode).i_block[blk]))
275
276#define EXT2_SUPER_INODES_COUNT(sb) (PED_LE32_TO_CPU((sb).s_inodes_count))
277#define EXT2_SUPER_BLOCKS_COUNT(sb) (PED_LE32_TO_CPU((sb).s_blocks_count))
278#define EXT2_SUPER_R_BLOCKS_COUNT(sb) (PED_LE32_TO_CPU((sb).s_r_blocks_count))
279#define EXT2_SUPER_FREE_BLOCKS_COUNT(sb) \
280 (PED_LE32_TO_CPU((sb).s_free_blocks_count))
281#define EXT2_SUPER_FREE_INODES_COUNT(sb) \
282 (PED_LE32_TO_CPU((sb).s_free_inodes_count))
283#define EXT2_SUPER_FIRST_DATA_BLOCK(sb) \
284 (PED_LE32_TO_CPU((sb).s_first_data_block))
285#define EXT2_SUPER_LOG_BLOCK_SIZE(sb) (PED_LE32_TO_CPU((sb).s_log_block_size))
286#define EXT2_SUPER_LOG_FRAG_SIZE(sb) \
287 ((int32_t) PED_LE32_TO_CPU((sb).s_log_frag_size))
288#define EXT2_SUPER_BLOCKS_PER_GROUP(sb) \
289 (PED_LE32_TO_CPU((sb).s_blocks_per_group))
290#define EXT2_SUPER_FRAGS_PER_GROUP(sb) \
291 (PED_LE32_TO_CPU((sb).s_frags_per_group))
292#define EXT2_SUPER_INODES_PER_GROUP(sb) \
293 (PED_LE32_TO_CPU((sb).s_inodes_per_group))
294#define EXT2_SUPER_MTIME(sb) (PED_LE32_TO_CPU((sb).s_mtime))
295#define EXT2_SUPER_WTIME(sb) (PED_LE32_TO_CPU((sb).s_wtime))
296#define EXT2_SUPER_MNT_COUNT(sb) (PED_LE16_TO_CPU((sb).s_mnt_count))
297#define EXT2_SUPER_MAX_MNT_COUNT(sb) \
298 ((int16_t) PED_LE16_TO_CPU((sb).s_max_mnt_count))
299#define EXT2_SUPER_MAGIC(sb) (PED_LE16_TO_CPU((sb).s_magic))
300#define EXT2_SUPER_STATE(sb) (PED_LE16_TO_CPU((sb).s_state))
301#define EXT2_SUPER_ERRORS(sb) (PED_LE16_TO_CPU((sb).s_errors))
302#define EXT2_SUPER_MINOR_REV_LEVEL(sb) \
303 (PED_LE16_TO_CPU((sb).s_minor_rev_level))
304#define EXT2_SUPER_LASTCHECK(sb) (PED_LE32_TO_CPU((sb).s_lastcheck))
305#define EXT2_SUPER_CHECKINTERVAL(sb) (PED_LE32_TO_CPU((sb).s_checkinterval))
306#define EXT2_SUPER_CREATOR_OS(sb) (PED_LE32_TO_CPU((sb).s_creator_os))
307#define EXT2_SUPER_REV_LEVEL(sb) (PED_LE32_TO_CPU((sb).s_rev_level))
308#define EXT2_SUPER_DEF_RESUID(sb) (PED_LE16_TO_CPU((sb).s_def_resuid))
309#define EXT2_SUPER_DEF_RESGID(sb) (PED_LE16_TO_CPU((sb).s_def_resgid))
310
311#define EXT2_SUPER_FIRST_INO(sb) (PED_LE32_TO_CPU((sb).s_first_ino))
312#define EXT2_SUPER_INODE_SIZE(sb) (PED_LE16_TO_CPU((sb).s_inode_size))
313#define EXT2_SUPER_BLOCK_GROUP_NR(sb) (PED_LE16_TO_CPU((sb).s_block_group_nr))
314#define EXT2_SUPER_FEATURE_COMPAT(sb) (PED_LE32_TO_CPU((sb).s_feature_compat))
315#define EXT2_SUPER_FEATURE_INCOMPAT(sb) \
316 (PED_LE32_TO_CPU((sb).s_feature_incompat))
317#define EXT2_SUPER_FEATURE_RO_COMPAT(sb) \
318 (PED_LE32_TO_CPU((sb).s_feature_ro_compat))
319#define EXT2_SUPER_UUID(sb) ((sb).s_uuid)
320#define EXT2_SUPER_VOLUME_NAME(sb) ((sb).s_volume_name)
321#define EXT2_SUPER_LAST_MOUNTED(sb) ((sb).s_last_mounted)
322#define EXT2_SUPER_ALGORITHM_USAGE_BITMAP(sb) \
323 (PED_LE32_TO_CPU((sb).s_algorithm_usage_bitmap))
324
325#define EXT2_SUPER_JOURNAL_UUID(sb) ((sb).s_journal_uuid)
326#define EXT2_SUPER_JOURNAL_INUM(sb) (PED_LE32_TO_CPU((sb).s_journal_inum))
327#define EXT2_SUPER_JOURNAL_DEV(sb) (PED_LE32_TO_CPU((sb).s_journal_dev))
328#define EXT2_SUPER_LAST_ORPHAN(sb) (PED_LE32_TO_CPU((sb).s_last_orphan))
329
330#endif
#define EXT2_N_BLOCKS
Definition ext2_fs.h:38
Definition ext2_fs.h:102
uint32_t inode
Definition ext2_fs.h:103
uint16_t rec_len
Definition ext2_fs.h:104
uint8_t file_type
Definition ext2_fs.h:106
char name[255]
Definition ext2_fs.h:107
uint8_t name_len
Definition ext2_fs.h:105
Definition ext2_fs.h:111
uint16_t bg_free_inodes_count
Definition ext2_fs.h:116
uint32_t bg_block_bitmap
Definition ext2_fs.h:112
uint32_t bg_inode_bitmap
Definition ext2_fs.h:113
uint32_t bg_inode_table
Definition ext2_fs.h:114
uint16_t bg_pad
Definition ext2_fs.h:118
uint16_t bg_used_dirs_count
Definition ext2_fs.h:117
uint16_t bg_free_blocks_count
Definition ext2_fs.h:115
uint32_t bg_reserved[3]
Definition ext2_fs.h:119
Definition ext2_fs.h:123
uint16_t i_uid
Definition ext2_fs.h:125
uint8_t l_i_frag
Definition ext2_fs.h:153
uint32_t i_dir_acl
Definition ext2_fs.h:149
uint32_t h_i_author
Definition ext2_fs.h:164
uint32_t i_flags
Definition ext2_fs.h:134
uint32_t i_dtime
Definition ext2_fs.h:130
uint32_t i_size
Definition ext2_fs.h:126
uint16_t h_i_uid_high
Definition ext2_fs.h:162
uint32_t i_faddr
Definition ext2_fs.h:150
uint32_t i_block[EXT2_N_BLOCKS]
Definition ext2_fs.h:146
uint32_t l_i_reserved1
Definition ext2_fs.h:137
uint32_t i_generation
Definition ext2_fs.h:147
uint16_t h_i_mode_high
Definition ext2_fs.h:161
uint8_t l_i_fsize
Definition ext2_fs.h:154
uint32_t i_blocks
Definition ext2_fs.h:133
struct ext2_inode::@220062305220170273315143251052204364270216127043::@236101277111032320007103002347244072147040042244 hurd2
uint32_t m_i_reserved2[2]
Definition ext2_fs.h:170
struct ext2_inode::@220062305220170273315143251052204364270216127043::@017042060031054147047003012213057226362035151063 linux2
uint32_t i_ctime
Definition ext2_fs.h:128
uint32_t i_mtime
Definition ext2_fs.h:129
uint16_t m_pad1
Definition ext2_fs.h:169
union ext2_inode::@220062305220170273315143251052204364270216127043 osd2
uint16_t h_i_gid_high
Definition ext2_fs.h:163
uint8_t h_i_frag
Definition ext2_fs.h:159
uint8_t h_i_fsize
Definition ext2_fs.h:160
uint16_t i_links_count
Definition ext2_fs.h:132
uint32_t h_i_translator
Definition ext2_fs.h:140
uint16_t i_mode
Definition ext2_fs.h:124
uint32_t l_i_reserved2[2]
Definition ext2_fs.h:156
uint32_t m_i_reserved1
Definition ext2_fs.h:143
uint8_t m_i_frag
Definition ext2_fs.h:167
union ext2_inode::@234012356112351332120251202003243201055171257245 osd1
uint8_t m_i_fsize
Definition ext2_fs.h:168
uint16_t i_pad1
Definition ext2_fs.h:155
struct ext2_inode::@234012356112351332120251202003243201055171257245::@221061101235257330306060263273300263000002363222 hurd1
uint32_t i_atime
Definition ext2_fs.h:127
struct ext2_inode::@220062305220170273315143251052204364270216127043::@371305303062020031051316330325342066200321220252 masix2
uint32_t i_file_acl
Definition ext2_fs.h:148
uint16_t i_gid
Definition ext2_fs.h:131
struct ext2_inode::@234012356112351332120251202003243201055171257245::@334201052275204065210272120044063103014042054372 linux1
struct ext2_inode::@234012356112351332120251202003243201055171257245::@023315334040115072041000055222157045063221210004 masix1