source: MondoRescue/branches/stable/mindi-busybox/e2fsprogs/e2fs_defs.h@ 1770

Last change on this file since 1770 was 1770, checked in by Bruno Cornec, 16 years ago
  • Better output for mindi-busybox revision
  • Remove dummy file created on NFS - report from Arnaud Tiger <arnaud.tiger_at_hp.com>
  • strace useful for debug
  • fix new versions for pb (2.0.0 for mindi and 1.7.2 for mindi-busybox)
  • fix build process for mindi-busybox + options used in that version (dd for label-partitions-as-necessary)
  • fix typo in label-partitions-as-necessary which doesn't seem to work
  • Update to busybox 1.7.2
  • perl is now required at restore time to support uuid swap partitions (and will be used for many other thigs

in the future for sure)

  • next mindi version will be 2.0.0 due to all the changes made in it (udev may break working distros)
  • small optimization in mindi on keyboard handling (one single find instead of multiple)
  • better interaction for USB device when launching mindi manually
  • attempt to automatically guess block disk size for ramdisk
  • fix typos in bkphw
  • Fix the remaining problem with UUID support for swap partitions
  • Updates mondoarchive man page for USB support
  • Adds preliminary Hardware support to mindi (Proliant SSSTK)
  • Tries to add udev support also for rhel4
  • Fix UUID support which was still broken.
  • Be conservative in test for the start-nfs script
  • Update config file for mindi-busybox for 1.7.2 migration
  • Try to run around a busybox bug (1.2.2 pb on inexistant links)
  • Add build content for mindi-busybox in pb
  • Remove distributions content for mindi-busybox
  • Fix a warning on inexistant raidtab
  • Solve problem on tmpfs in restore init (Problem of inexistant symlink and busybox)
  • Create MONDO_CACHE and use it everywhere + creation at start
  • Really never try to eject a USB device
  • Fix a issue with &> usage (replaced with 1> and 2>)
  • Adds magic file to depllist in order to have file working + ldd which helps for debugging issues
  • tty modes correct to avoid sh error messages
  • Use ext3 normally and not ext2 instead
  • USB device should be corrected after reading (take 1st part)
  • Adds a mount_USB_here function derived from mount_CDROM_here
  • usb detection place before /dev detection in device name at restore time
  • Fix when restoring from USB: media is asked in interactive mode
  • Adds USB support for mondorestore
  • mount_cdrom => mount_media
  • elilo.efi is now searched throughout /boot/efi and not in a fixed place as there is no standard
  • untar-and-softlink => untar (+ interface change)
  • suppress useless softlinks creation/removal in boot process
  • avoids udevd messages on groups
  • Increase # of disks to 99 as in mindi at restore time (should be a conf file parameter)
  • skip existing big file creation
  • seems to work correctly for USB mindi boot
  • Adds group and tty link to udev conf
  • Always load usb-torage (even 2.6) to initiate USB bus discovery
  • Better printing of messages
  • Attempt to fix a bug in supporting OpenSusE 10.3 kernel for initramfs (mindi may now use multiple regex for kernel initrd detection)
  • Links were not correctly done as non relative for modules in mindi
  • exclusion of modules denied now works
  • Also create modules in their ordinary place, so that classical modprobe works + copy modules.dep
  • Fix bugs for DENY_MODS handling
  • Add device /dev/console for udev
  • ide-generic should now really be excluded
  • Fix a bug in major number for tty
  • If udev then adds modprobe/insmod to rootfs
  • tty0 is also cretaed with udev
  • ide-generic put rather in DENY_MODS
  • udevd remove from deplist s handled in mindi directly
  • better default for mindi when using --usb
  • Handles dynamically linked busybox (in case we want to use it soon ;-)
  • Adds fixed devices to create for udev
  • ide-generic should not be part of the initrd when using libata v2
  • support a dynamically linked udev (case on Ubuntu 7.10 and Mandriva 2008.0 so should be quite generic) This will give incitation to move to dyn. linked binaries in the initrd which will help for other tasks (ia6 4)
  • Improvement in udev support (do not use cl options not available in busybox)
  • Udev in mindi
    • auto creation of the right links at boot time with udev-links.conf(from Mandriva 2008.0)
    • rework startup of udev as current makes kernel crash (from Mandriva 2008.0)
    • add support for 64 bits udev
  • Try to render MyInsmod silent at boot time
  • Adds udev support (mandatory for newest distributions to avoid remapping of devices in a different way as on the original system)
  • We also need vaft format support for USB boot
  • Adds libusual support (Ubuntu 7.10 needs it for USB)
  • Improve Ubuntu/Debian keyboard detection and support
  • pbinit adapted to new pb (0.8.10). Filtering of docs done in it
  • Suppress some mondo warnings and errors on USB again
  • Tries to fix lack of files in deb mindi package
  • Verify should now work for USB devices
  • More log/mesages improvement for USB support
  • - Supress g_erase_tmpdir_and_scratchdir
  • Improve some log messages for USB support
  • Try to improve install in mindi to avoid issues with isolinux.cfg not installed vene if in the pkg :-(
  • Improve mindi-busybox build
  • In conformity with pb 0.8.9
  • Add support for Ubuntu 7.10 in build process
  • Add USB Key button to Menu UI (CD streamer removed)
  • Attempt to fix error messages on tmp/scratch files at the end by removing those dir at the latest possible.
  • Fix a bug linked to the size of the -E param which could be used (Arnaud Tiger/René Ribaud).
  • Integrate ~/.pbrc content into mondorescue.pb (required project-builder >= 0.8.7)
  • Put mondorescue in conformity with new pb filtering rules
  • Add USB support at restore time (no test done yet). New start-usb script PB varibale added where useful
  • Unmounting USB device before removal of temporary scratchdir
  • Stil refining USB copy back to mondo (one command was not executed)
  • No need to have the image subdor in the csratchdir when USB.
  • umount the USB partition before attempting to use it
  • Remove useless copy from mindi to mondo at end of USB handling

(risky merge, we are raising the limits of 2 diverging branches. The status of stable is not completely sure as such. Will need lots of tests, but it's not yet done :-()
(merge -r1692:1769 $SVN_M/branches/2.2.5)

  • Property svn:eol-style set to native
File size: 18.1 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * linux/include/linux/ext2_fs.h
4 *
5 * Copyright (C) 1992, 1993, 1994, 1995
6 * Remy Card (card@masi.ibp.fr)
7 * Laboratoire MASI - Institut Blaise Pascal
8 * Universite Pierre et Marie Curie (Paris VI)
9 *
10 * Copyright (C) 1991, 1992 Linus Torvalds
11 */
12
13#ifndef _LINUX_EXT2_FS_H
14#define _LINUX_EXT2_FS_H
15
16/*
17 * Special inode numbers
18 */
19#define EXT2_BAD_INO 1 /* Bad blocks inode */
20#define EXT2_ROOT_INO 2 /* Root inode */
21#define EXT2_ACL_IDX_INO 3 /* ACL inode */
22#define EXT2_ACL_DATA_INO 4 /* ACL inode */
23#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
24#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
25#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */
26#define EXT2_JOURNAL_INO 8 /* Journal inode */
27
28/* First non-reserved inode for old ext2 filesystems */
29#define EXT2_GOOD_OLD_FIRST_INO 11
30
31/*
32 * The second extended file system magic number
33 */
34#define EXT2_SUPER_MAGIC 0xEF53
35
36/* Assume that user mode programs are passing in an ext2fs superblock, not
37 * a kernel struct super_block. This will allow us to call the feature-test
38 * macros from user land. */
39#define EXT2_SB(sb) (sb)
40
41/*
42 * Maximal count of links to a file
43 */
44#define EXT2_LINK_MAX 32000
45
46/*
47 * Macro-instructions used to manage several block sizes
48 */
49#define EXT2_MIN_BLOCK_LOG_SIZE 10 /* 1024 */
50#define EXT2_MAX_BLOCK_LOG_SIZE 16 /* 65536 */
51#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)
52#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)
53#define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
54#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
55#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
56 EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
57#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
58 EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
59#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(uint32_t))
60
61/*
62 * Macro-instructions used to manage fragments
63 */
64#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE
65#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE
66#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
67#define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
68#define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
69
70/*
71 * ACL structures
72 */
73struct ext2_acl_header { /* Header of Access Control Lists */
74 uint32_t aclh_size;
75 uint32_t aclh_file_count;
76 uint32_t aclh_acle_count;
77 uint32_t aclh_first_acle;
78};
79
80struct ext2_acl_entry { /* Access Control List Entry */
81 uint32_t acle_size;
82 uint16_t acle_perms; /* Access permissions */
83 uint16_t acle_type; /* Type of entry */
84 uint16_t acle_tag; /* User or group identity */
85 uint16_t acle_pad1;
86 uint32_t acle_next; /* Pointer on next entry for the */
87 /* same inode or on next free entry */
88};
89
90/*
91 * Structure of a blocks group descriptor
92 */
93struct ext2_group_desc {
94 uint32_t bg_block_bitmap; /* Blocks bitmap block */
95 uint32_t bg_inode_bitmap; /* Inodes bitmap block */
96 uint32_t bg_inode_table; /* Inodes table block */
97 uint16_t bg_free_blocks_count; /* Free blocks count */
98 uint16_t bg_free_inodes_count; /* Free inodes count */
99 uint16_t bg_used_dirs_count; /* Directories count */
100 uint16_t bg_pad;
101 uint32_t bg_reserved[3];
102};
103
104/*
105 * Data structures used by the directory indexing feature
106 *
107 * Note: all of the multibyte integer fields are little endian.
108 */
109
110/*
111 * Note: dx_root_info is laid out so that if it should somehow get
112 * overlaid by a dirent the two low bits of the hash version will be
113 * zero. Therefore, the hash version mod 4 should never be 0.
114 * Sincerely, the paranoia department.
115 */
116struct ext2_dx_root_info {
117 uint32_t reserved_zero;
118 uint8_t hash_version; /* 0 now, 1 at release */
119 uint8_t info_length; /* 8 */
120 uint8_t indirect_levels;
121 uint8_t unused_flags;
122};
123
124#define EXT2_HASH_LEGACY 0
125#define EXT2_HASH_HALF_MD4 1
126#define EXT2_HASH_TEA 2
127
128#define EXT2_HASH_FLAG_INCOMPAT 0x1
129
130struct ext2_dx_entry {
131 uint32_t hash;
132 uint32_t block;
133};
134
135struct ext2_dx_countlimit {
136 uint16_t limit;
137 uint16_t count;
138};
139
140
141/*
142 * Macro-instructions used to manage group descriptors
143 */
144#define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group)
145#define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group)
146#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
147/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
148#define EXT2_MAX_BLOCKS_PER_GROUP(s) ((1 << 16) - 8)
149#define EXT2_MAX_INODES_PER_GROUP(s) ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
150#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
151
152/*
153 * Constants relative to the data blocks
154 */
155#define EXT2_NDIR_BLOCKS 12
156#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
157#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
158#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
159#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
160
161/*
162 * Inode flags
163 */
164#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */
165#define EXT2_UNRM_FL 0x00000002 /* Undelete */
166#define EXT2_COMPR_FL 0x00000004 /* Compress file */
167#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */
168#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */
169#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */
170#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */
171#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */
172/* Reserved for compression usage... */
173#define EXT2_DIRTY_FL 0x00000100
174#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
175#define EXT2_NOCOMPR_FL 0x00000400 /* Access raw compressed data */
176#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */
177/* End compression flags --- maybe not all used */
178#define EXT2_BTREE_FL 0x00001000 /* btree format dir */
179#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */
180#define EXT2_IMAGIC_FL 0x00002000
181#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
182#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */
183#define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */
184#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
185#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */
186#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
187
188#define EXT2_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
189#define EXT2_FL_USER_MODIFIABLE 0x000080FF /* User modifiable flags */
190
191/*
192 * ioctl commands
193 */
194#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
195#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
196#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
197#define EXT2_IOC_SETVERSION _IOW('v', 2, long)
198
199/*
200 * Structure of an inode on the disk
201 */
202struct ext2_inode {
203 uint16_t i_mode; /* File mode */
204 uint16_t i_uid; /* Low 16 bits of Owner Uid */
205 uint32_t i_size; /* Size in bytes */
206 uint32_t i_atime; /* Access time */
207 uint32_t i_ctime; /* Creation time */
208 uint32_t i_mtime; /* Modification time */
209 uint32_t i_dtime; /* Deletion Time */
210 uint16_t i_gid; /* Low 16 bits of Group Id */
211 uint16_t i_links_count; /* Links count */
212 uint32_t i_blocks; /* Blocks count */
213 uint32_t i_flags; /* File flags */
214 union {
215 struct {
216 uint32_t l_i_reserved1;
217 } linux1;
218 struct {
219 uint32_t h_i_translator;
220 } hurd1;
221 struct {
222 uint32_t m_i_reserved1;
223 } masix1;
224 } osd1; /* OS dependent 1 */
225 uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
226 uint32_t i_generation; /* File version (for NFS) */
227 uint32_t i_file_acl; /* File ACL */
228 uint32_t i_dir_acl; /* Directory ACL */
229 uint32_t i_faddr; /* Fragment address */
230 union {
231 struct {
232 uint8_t l_i_frag; /* Fragment number */
233 uint8_t l_i_fsize; /* Fragment size */
234 uint16_t i_pad1;
235 uint16_t l_i_uid_high; /* these 2 fields */
236 uint16_t l_i_gid_high; /* were reserved2[0] */
237 uint32_t l_i_reserved2;
238 } linux2;
239 struct {
240 uint8_t h_i_frag; /* Fragment number */
241 uint8_t h_i_fsize; /* Fragment size */
242 uint16_t h_i_mode_high;
243 uint16_t h_i_uid_high;
244 uint16_t h_i_gid_high;
245 uint32_t h_i_author;
246 } hurd2;
247 struct {
248 uint8_t m_i_frag; /* Fragment number */
249 uint8_t m_i_fsize; /* Fragment size */
250 uint16_t m_pad1;
251 uint32_t m_i_reserved2[2];
252 } masix2;
253 } osd2; /* OS dependent 2 */
254};
255
256/*
257 * Permanent part of an large inode on the disk
258 */
259struct ext2_inode_large {
260 uint16_t i_mode; /* File mode */
261 uint16_t i_uid; /* Low 16 bits of Owner Uid */
262 uint32_t i_size; /* Size in bytes */
263 uint32_t i_atime; /* Access time */
264 uint32_t i_ctime; /* Creation time */
265 uint32_t i_mtime; /* Modification time */
266 uint32_t i_dtime; /* Deletion Time */
267 uint16_t i_gid; /* Low 16 bits of Group Id */
268 uint16_t i_links_count; /* Links count */
269 uint32_t i_blocks; /* Blocks count */
270 uint32_t i_flags; /* File flags */
271 union {
272 struct {
273 uint32_t l_i_reserved1;
274 } linux1;
275 struct {
276 uint32_t h_i_translator;
277 } hurd1;
278 struct {
279 uint32_t m_i_reserved1;
280 } masix1;
281 } osd1; /* OS dependent 1 */
282 uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
283 uint32_t i_generation; /* File version (for NFS) */
284 uint32_t i_file_acl; /* File ACL */
285 uint32_t i_dir_acl; /* Directory ACL */
286 uint32_t i_faddr; /* Fragment address */
287 union {
288 struct {
289 uint8_t l_i_frag; /* Fragment number */
290 uint8_t l_i_fsize; /* Fragment size */
291 uint16_t i_pad1;
292 uint16_t l_i_uid_high; /* these 2 fields */
293 uint16_t l_i_gid_high; /* were reserved2[0] */
294 uint32_t l_i_reserved2;
295 } linux2;
296 struct {
297 uint8_t h_i_frag; /* Fragment number */
298 uint8_t h_i_fsize; /* Fragment size */
299 uint16_t h_i_mode_high;
300 uint16_t h_i_uid_high;
301 uint16_t h_i_gid_high;
302 uint32_t h_i_author;
303 } hurd2;
304 struct {
305 uint8_t m_i_frag; /* Fragment number */
306 uint8_t m_i_fsize; /* Fragment size */
307 uint16_t m_pad1;
308 uint32_t m_i_reserved2[2];
309 } masix2;
310 } osd2; /* OS dependent 2 */
311 uint16_t i_extra_isize;
312 uint16_t i_pad1;
313};
314
315#define i_size_high i_dir_acl
316
317/*
318 * File system states
319 */
320#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
321#define EXT2_ERROR_FS 0x0002 /* Errors detected */
322
323/*
324 * Mount flags
325 */
326#define EXT2_MOUNT_CHECK 0x0001 /* Do mount-time checks */
327#define EXT2_MOUNT_GRPID 0x0004 /* Create files with directory's group */
328#define EXT2_MOUNT_DEBUG 0x0008 /* Some debugging messages */
329#define EXT2_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
330#define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
331#define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
332#define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */
333#define EXT2_MOUNT_NO_UID32 0x0200 /* Disable 32-bit UIDs */
334
335#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
336#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
337#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
338 EXT2_MOUNT_##opt)
339/*
340 * Maximal mount counts between two filesystem checks
341 */
342#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
343#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
344
345/*
346 * Behaviour when detecting errors
347 */
348#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
349#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
350#define EXT2_ERRORS_PANIC 3 /* Panic */
351#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
352
353/*
354 * Structure of the super block
355 */
356struct ext2_super_block {
357 uint32_t s_inodes_count; /* Inodes count */
358 uint32_t s_blocks_count; /* Blocks count */
359 uint32_t s_r_blocks_count; /* Reserved blocks count */
360 uint32_t s_free_blocks_count; /* Free blocks count */
361 uint32_t s_free_inodes_count; /* Free inodes count */
362 uint32_t s_first_data_block; /* First Data Block */
363 uint32_t s_log_block_size; /* Block size */
364 int32_t s_log_frag_size; /* Fragment size */
365 uint32_t s_blocks_per_group; /* # Blocks per group */
366 uint32_t s_frags_per_group; /* # Fragments per group */
367 uint32_t s_inodes_per_group; /* # Inodes per group */
368 uint32_t s_mtime; /* Mount time */
369 uint32_t s_wtime; /* Write time */
370 uint16_t s_mnt_count; /* Mount count */
371 int16_t s_max_mnt_count; /* Maximal mount count */
372 uint16_t s_magic; /* Magic signature */
373 uint16_t s_state; /* File system state */
374 uint16_t s_errors; /* Behaviour when detecting errors */
375 uint16_t s_minor_rev_level; /* minor revision level */
376 uint32_t s_lastcheck; /* time of last check */
377 uint32_t s_checkinterval; /* max. time between checks */
378 uint32_t s_creator_os; /* OS */
379 uint32_t s_rev_level; /* Revision level */
380 uint16_t s_def_resuid; /* Default uid for reserved blocks */
381 uint16_t s_def_resgid; /* Default gid for reserved blocks */
382 /*
383 * These fields are for EXT2_DYNAMIC_REV superblocks only.
384 *
385 * Note: the difference between the compatible feature set and
386 * the incompatible feature set is that if there is a bit set
387 * in the incompatible feature set that the kernel doesn't
388 * know about, it should refuse to mount the filesystem.
389 *
390 * e2fsck's requirements are more strict; if it doesn't know
391 * about a feature in either the compatible or incompatible
392 * feature set, it must abort and not try to meddle with
393 * things it doesn't understand...
394 */
395 uint32_t s_first_ino; /* First non-reserved inode */
396 uint16_t s_inode_size; /* size of inode structure */
397 uint16_t s_block_group_nr; /* block group # of this superblock */
398 uint32_t s_feature_compat; /* compatible feature set */
399 uint32_t s_feature_incompat; /* incompatible feature set */
400 uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
401 uint8_t s_uuid[16]; /* 128-bit uuid for volume */
402 char s_volume_name[16]; /* volume name */
403 char s_last_mounted[64]; /* directory where last mounted */
404 uint32_t s_algorithm_usage_bitmap; /* For compression */
405 /*
406 * Performance hints. Directory preallocation should only
407 * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
408 */
409 uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
410 uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
411 uint16_t s_reserved_gdt_blocks; /* Per group table for online growth */
412 /*
413 * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
414 */
415 uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
416 uint32_t s_journal_inum; /* inode number of journal file */
417 uint32_t s_journal_dev; /* device number of journal file */
418 uint32_t s_last_orphan; /* start of list of inodes to delete */
419 uint32_t s_hash_seed[4]; /* HTREE hash seed */
420 uint8_t s_def_hash_version; /* Default hash version to use */
421 uint8_t s_jnl_backup_type; /* Default type of journal backup */
422 uint16_t s_reserved_word_pad;
423 uint32_t s_default_mount_opts;
424 uint32_t s_first_meta_bg; /* First metablock group */
425 uint32_t s_mkfs_time; /* When the filesystem was created */
426 uint32_t s_jnl_blocks[17]; /* Backup of the journal inode */
427 uint32_t s_reserved[172]; /* Padding to the end of the block */
428};
429
430/*
431 * Codes for operating systems
432 */
433#define EXT2_OS_LINUX 0
434#define EXT2_OS_HURD 1
435#define EXT2_OS_MASIX 2
436#define EXT2_OS_FREEBSD 3
437#define EXT2_OS_LITES 4
438
439/*
440 * Revision levels
441 */
442#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
443#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
444
445#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
446#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
447
448#define EXT2_GOOD_OLD_INODE_SIZE 128
449
450/*
451 * Journal inode backup types
452 */
453#define EXT3_JNL_BACKUP_BLOCKS 1
454
455/*
456 * Feature set definitions
457 */
458
459#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
460 ( EXT2_SB(sb)->s_feature_compat & (mask) )
461#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
462 ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
463#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
464 ( EXT2_SB(sb)->s_feature_incompat & (mask) )
465
466#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
467#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
468#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
469#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
470#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
471#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
472
473#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
474#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
475/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */
476
477#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
478#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
479#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
480#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
481#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
482#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040
483
484
485#define EXT2_FEATURE_COMPAT_SUPP 0
486#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE)
487#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
488 EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
489 EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
490
491/*
492 * Default values for user and/or group using reserved blocks
493 */
494#define EXT2_DEF_RESUID 0
495#define EXT2_DEF_RESGID 0
496
497/*
498 * Default mount options
499 */
500#define EXT2_DEFM_DEBUG 0x0001
501#define EXT2_DEFM_BSDGROUPS 0x0002
502#define EXT2_DEFM_XATTR_USER 0x0004
503#define EXT2_DEFM_ACL 0x0008
504#define EXT2_DEFM_UID16 0x0010
505#define EXT3_DEFM_JMODE 0x0060
506#define EXT3_DEFM_JMODE_DATA 0x0020
507#define EXT3_DEFM_JMODE_ORDERED 0x0040
508#define EXT3_DEFM_JMODE_WBACK 0x0060
509
510/*
511 * Structure of a directory entry
512 */
513#define EXT2_NAME_LEN 255
514
515struct ext2_dir_entry {
516 uint32_t inode; /* Inode number */
517 uint16_t rec_len; /* Directory entry length */
518 uint16_t name_len; /* Name length */
519 char name[EXT2_NAME_LEN]; /* File name */
520};
521
522/*
523 * The new version of the directory entry. Since EXT2 structures are
524 * stored in intel byte order, and the name_len field could never be
525 * bigger than 255 chars, it's safe to reclaim the extra byte for the
526 * file_type field.
527 */
528struct ext2_dir_entry_2 {
529 uint32_t inode; /* Inode number */
530 uint16_t rec_len; /* Directory entry length */
531 uint8_t name_len; /* Name length */
532 uint8_t file_type;
533 char name[EXT2_NAME_LEN]; /* File name */
534};
535
536/*
537 * Ext2 directory file types. Only the low 3 bits are used. The
538 * other bits are reserved for now.
539 */
540#define EXT2_FT_UNKNOWN 0
541#define EXT2_FT_REG_FILE 1
542#define EXT2_FT_DIR 2
543#define EXT2_FT_CHRDEV 3
544#define EXT2_FT_BLKDEV 4
545#define EXT2_FT_FIFO 5
546#define EXT2_FT_SOCK 6
547#define EXT2_FT_SYMLINK 7
548
549#define EXT2_FT_MAX 8
550
551/*
552 * EXT2_DIR_PAD defines the directory entries boundaries
553 *
554 * NOTE: It must be a multiple of 4
555 */
556#define EXT2_DIR_PAD 4
557#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
558#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
559 ~EXT2_DIR_ROUND)
560
561#endif /* _LINUX_EXT2_FS_H */
Note: See TracBrowser for help on using the repository browser.